You are viewing a plain text version of this content. The canonical link for it is here.
Posted to general@gump.apache.org by "Adam R. B. Jack" <aj...@trysybase.com> on 2004/04/08 20:15:17 UTC

HEADUP - Breaking RSS|Atom URLs. Fw: cvs commit: gump/python/gump/test utils.py

Headsup...
regards
Adam
----- Original Message ----- 
From: <aj...@apache.org>
To: <gu...@apache.org>
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: general-unsubscribe@gump.apache.org
> For additional commands, e-mail: general-help@gump.apache.org
>


---------------------------------------------------------------------
To unsubscribe, e-mail: general-unsubscribe@gump.apache.org
For additional commands, e-mail: general-help@gump.apache.org