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,'index','.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,'index','.atom')
+
feedFile=self.run.getOptions().getResolver().getFile(self.workspace,'atom','.xml',1)
+
feedUrl=self.run.getOptions().getResolver().getAbsoluteUrl(self.workspace,'atom','.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','.xml')
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='1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890'
#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]