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]

Reply via email to