Headsup... regards Adam ----- Original Message ----- From: <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Thursday, April 08, 2004 12:11 PM Subject: cvs commit: gump/python/gump/test utils.py
> ajack 2004/04/08 11:11:43 > > Modified: python/gump/syndication rss.py atom.py > python/gump/document forrest.py resolver.py > python/gump/utils __init__.py > python/gump/test utils.py > Log: > 1) add a getBeanAttributes to introspect/get all getX|isX values > 2) use above to document RunOptions > 3) a unit test for above (since it wasn't working) > > 4) Moved {module}/{project}.html to {module}/{project}/index.html, > along with associated files (RSS|Atom|Files|Work). > This ought fix on Jira entry, and ease synchronization (dynamic xdocs). > > 5) changed RSS|Atom to rss.xml and atom.xml, since weve broken > them anyway (they've move) we might as well make the names a > bit nicer (w/ arbitrary extensions). > > Revision Changes Path > 1.19 +9 -9 gump/python/gump/syndication/rss.py > > Index: rss.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/syndication/rss.py,v > retrieving revision 1.18 > retrieving revision 1.19 > diff -u -r1.18 -r1.19 > --- rss.py 29 Feb 2004 19:16:19 -0000 1.18 > +++ rss.py 8 Apr 2004 18:11:43 -0000 1.19 > @@ -272,8 +272,8 @@ > # Main syndication document > self.run = run > self.workspace=run.getWorkspace() > - self.rssFile=self.run.getOptions().getResolver().getFile(self.workspace,'ind ex','.rss') > - self.rssUrl=self.run.getOptions().getResolver().getUrl(self.workspace,'index ','.rss') > + self.rssFile=self.run.getOptions().getResolver().getFile(self.workspace,'rss ','.xml',1) > + self.rssUrl=self.run.getOptions().getResolver().getUrl(self.workspace,'rss', '.xml') > > self.rss=RSS(self.rssUrl,self.rssFile, \ > Channel('Jakarta Gump', \ > @@ -289,8 +289,8 @@ > > def syndicateModule(self,module,mainRSS): > > - rssFile=self.run.getOptions().getResolver().getFile(module,'index','.rss') > - rssUrl=self.run.getOptions().getResolver().getUrl(module,'index','.rss') > + rssFile=self.run.getOptions().getResolver().getFile(module,'rss','.xml',1) > + rssUrl=self.run.getOptions().getResolver().getUrl(module,'rss','.xml') > moduleUrl=self.run.getOptions().getResolver().getUrl(module) > > moduleRSS=RSS(rssUrl,rssFile, \ > @@ -333,8 +333,8 @@ > > def syndicateProject(self,project,moduleRSS,mainRSS): > > - rssFile=self.run.getOptions().getResolver().getFile(project,project.getName( ),'.rss') > - rssUrl=self.run.getOptions().getResolver().getUrl(project,project.getName(), '.rss') > + rssFile=self.run.getOptions().getResolver().getFile(project,'rss','.xml',1) > + rssUrl=self.run.getOptions().getResolver().getUrl(project,'rss','.xml') > projectUrl=self.run.getOptions().getResolver().getUrl(project) > > projectRSS=RSS(rssUrl, rssFile, \ > > > > 1.12 +9 -9 gump/python/gump/syndication/atom.py > > Index: atom.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/syndication/atom.py,v > retrieving revision 1.11 > retrieving revision 1.12 > diff -u -r1.11 -r1.12 > --- atom.py 20 Jan 2004 21:55:23 -0000 1.11 > +++ atom.py 8 Apr 2004 18:11:43 -0000 1.12 > @@ -175,8 +175,8 @@ > self.run = run > self.workspace=run.getWorkspace() > > - feedFile=self.run.getOptions().getResolver().getFile(self.workspace,'index', '.atom') > - feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(self.workspace,'i ndex','.atom') > + feedFile=self.run.getOptions().getResolver().getFile(self.workspace,'atom',' .xml',1) > + feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(self.workspace,'a tom','.xml') > > self.feed=AtomFeed(feedUrl,feedFile, \ > 'workspace', \ > @@ -193,8 +193,8 @@ > > def syndicateModule(self,module,mainFeed): > > - feedFile=self.run.getOptions().getResolver().getFile(module,'index','.atom') > - feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(module,'index','. atom') > + feedFile=self.run.getOptions().getResolver().getFile(module,'atom','.xml',1) > + feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(module,'atom','.x ml') > moduleUrl=self.run.getOptions().getResolver().getUrl(module) > > moduleFeed=AtomFeed(feedUrl,feedFile, > @@ -235,8 +235,8 @@ > > def syndicateProject(self,project,moduleFeed,mainFeed): > > - feedFile=self.run.getOptions().getResolver().getFile(project,project.getName (),'.atom') > - feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(project,'index',' .atom') > + feedFile=self.run.getOptions().getResolver().getFile(project,'atom','.xml',1 ) > + feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(project,'atom','. xml') > projectUrl=self.run.getOptions().getResolver().getUrl(project) > > projectFeed=AtomFeed(feedUrl, feedFile, \ > > > > 1.136 +4 -13 gump/python/gump/document/forrest.py > > Index: forrest.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/document/forrest.py,v > retrieving revision 1.135 > retrieving revision 1.136 > diff -u -r1.135 -r1.136 > --- forrest.py 6 Apr 2004 17:57:35 -0000 1.135 > +++ forrest.py 8 Apr 2004 18:11:43 -0000 1.136 > @@ -283,17 +283,8 @@ > optTable=optSection.createTable(['Name','Value']) > opts=0 > # iterate over this suites properties > - for name in options.__dict__: > - if name.startswith('__') and name.endswith('__'): continue > - method=getattr(options,name) > - # avoid nulls, metadata, and methods other than (is|get)* > - if not method: continue > - if isinstance(method,types.TypeType): continue > - if not isinstance(method,types.MethodType): continue > - if not callable(method): continue > - if not (name.startswith('get') or name.startswith('is')) : continue > - > - optTable.createEntry(str(name),str(method())) > + for (name,value) in getBeanAttributes(options).items(): > + optTable.createEntry(str(name),str(value)) > opts+=1 > > if not opts: optTable.createEntry('None') > @@ -348,10 +339,10 @@ > > rssSyndRow=definitionTable.createRow() > rssSyndRow.createData('Syndication') > - rssSyndRow.createData().createFork('index.rss','RSS') > + rssSyndRow.createData().createFork('rss.xml','RSS') > atomSyndRow=definitionTable.createRow() > atomSyndRow.createData('Syndication') > - atomSyndRow.createData().createFork('index.atom','Atom') > + atomSyndRow.createData().createFork('atom.xml','Atom') > > textRow=definitionTable.createRow() > textRow.createData('Workspace Documentation') > > > > 1.21 +6 -5 gump/python/gump/document/resolver.py > > Index: resolver.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/document/resolver.py,v > retrieving revision 1.20 > retrieving revision 1.21 > diff -u -r1.20 -r1.21 > --- resolver.py 5 Apr 2004 13:38:00 -0000 1.20 > +++ resolver.py 8 Apr 2004 18:11:43 -0000 1.21 > @@ -117,7 +117,7 @@ > elif isinstance(object, Module): > path=getPathForObject(object.getWorkspace()).getPostfixed(object.getName()) > elif isinstance(object, Project): > - path=getPathForObject(object.getModule()) > + path=getPathForObject(object.getModule()).getPostfixed(object.getName()) > elif isinstance(object, WorkItem): > path=getPathForObject(object.getOwner()).getPostfixed('gump_work') > elif isinstance(object, FileReference): > @@ -198,17 +198,18 @@ > if not visited:visited=[] > visited.append(object) > > - if isinstance(object, Workspace) or isinstance(object, Module) \ > + if isinstance(object, Workspace) \ > + or isinstance(object, Module) \ > + or isinstance(object, Project) \ > or isinstance(object,StatisticsGuru) \ > or isinstance(object,XRefGuru) : > document="index"+extn > elif isinstance(object, GumpEnvironment): > document="environment"+extn > - elif isinstance(object, Project) \ > - or isinstance(object, Server) \ > + elif isinstance(object, Server) \ > or isinstance(object, Tracker) \ > or isinstance(object, Repository) \ > - or isinstance(object, FileReference) \ > + or isinstance(object, FileReference) \ > or isinstance(object, WorkItem): > document=gumpSafeName(object.getName()) + extn > elif isinstance(object, Ownable) : > > > > 1.27 +27 -0 gump/python/gump/utils/__init__.py > > Index: __init__.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/utils/__init__.py,v > retrieving revision 1.26 > retrieving revision 1.27 > diff -u -r1.26 -r1.27 > --- __init__.py 15 Mar 2004 22:07:06 -0000 1.26 > +++ __init__.py 8 Apr 2004 18:11:43 -0000 1.27 > @@ -321,6 +321,33 @@ > if s[-1] == "\n": > s = s[:-1] > return s > + > +def getBeanAttributes(bean): > + attributes={} > + for name in bean.__class__.__dict__: > + if name.startswith('__') and name.endswith('__'): continue > + accessor=getattr(bean,name) > + # avoid nulls, metadata, and methods other than (is|get)* > + if not accessor: continue > + if isinstance(accessor,types.TypeType): continue > + # Ignore non-methods > + if not isinstance(accessor,types.MethodType): continue > + # Ignore non-callable methods (????) > + if not callable(accessor): continue > + > + # Ignore methods not isX or getX > + # :TODO: Ought check that the X is upper case... > + if name.startswith('get'): > + attrName=name[3:] > + elif name.startswith('is'): > + attrName=name[2:] > + else: > + continue > + > + # Get value and stash it > + attributes[attrName]=accessor() > + > + return attributes > > def logResourceUtilization(message=None): pass > > > > > 1.7 +11 -1 gump/python/gump/test/utils.py > > Index: utils.py > =================================================================== > RCS file: /home/cvs/gump/python/gump/test/utils.py,v > retrieving revision 1.6 > retrieving revision 1.7 > diff -u -r1.6 -r1.7 > --- utils.py 2 Apr 2004 16:48:06 -0000 1.6 > +++ utils.py 8 Apr 2004 18:11:43 -0000 1.7 > @@ -21,6 +21,12 @@ > from gump.utils.launcher import Parameters > from gump.test.pyunit import UnitTestSuite > > +class TestBean: > + #def __init__(self): pass > + def getX(self): return 1 > + def isY(self): return 0 > + def getYadaYada(self): return 'Yowzer' > + > class UtilsTestSuite(UnitTestSuite): > def __init__(self): > UnitTestSuite.__init__(self) > @@ -93,4 +99,8 @@ > #print wrapLine(line) > line='1234567890123456789012345678901234567890123456789012345678901234567890 1234567890123456789012345678901234567890123456789012345678901234567890123456 78901234567890123456789012345678901234567890123456789012345678901234567890' > #print wrapLine(line) > - > \ No newline at end of file > + > + def testBeanAttributes(self): > + attrs=getBeanAttributes(TestBean()) > + self.assertNotEmpty('Ought be some', attrs) > + self.assertNotNone('Ought be one called X', attrs['X']) > \ No newline at end of file > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]