ajack       2004/01/06 13:35:46

  Modified:    python/gump/syndication rss.pyc syndicator.pyc rss.py
                        syndicator.py
               python/gump/utils launcher.py
               python/gump/test syndicator.py
               python/gump/document forrest.py
  Added:       python/gump/syndication atom.py
  Log:
  1) Removed some stray print statements
  2) Noted when a project isn't built by gump (in project docs)
  3) Some tinkering around Atom.
  
  Revision  Changes    Path
  1.5       +13 -19    jakarta-gump/python/gump/syndication/rss.pyc
  
        <<Binary file>>
  
  
  1.4       +13 -6     jakarta-gump/python/gump/syndication/syndicator.pyc
  
        <<Binary file>>
  
  
  1.11      +6 -22     jakarta-gump/python/gump/syndication/rss.py
  
  Index: rss.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/syndication/rss.py,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- rss.py    14 Dec 2003 17:57:39 -0000      1.10
  +++ rss.py    6 Jan 2004 21:35:45 -0000       1.11
  @@ -287,7 +287,7 @@
               self.syndicateModule(module,self.rss)
               
           self.rss.serialize()
  -        
  +    
       def syndicateModule(self,module,mainRSS):
           
           rssFile=self.run.getOptions().getResolver().getFile(module,'index','.rss')
  @@ -299,8 +299,7 @@
                       moduleUrl,       \
                       escape(module.getDescription()), \
                       self.gumpImage))
  -                      
  -        s=module.getStats()
  +                    
           datestr=time.strftime('%Y-%m-%d')
           timestr=time.strftime('%H:%M:%S')
            
  @@ -319,18 +318,11 @@
                     ('%sT%s%s') % (datestr,timestr,TZ))
           
           # Generate changes, only if the module had changed
  -        if module.isUpdated():
  -            if not s.currentState == STATE_NONE and  \
  -                not s.currentState == STATE_UNSET:   
  +        if module.isUpdated() and not module.getState().isUnset():
                   moduleRSS.addItem(item)  
               
           # State changes that are newsworthy...
  -        if   s.sequenceInState == 1  \
  -            and not s.currentState == STATE_PREREQ_FAILED \
  -            and not s.currentState == STATE_UNSET \
  -            and not s.currentState == STATE_NONE \
  -            and not s.currentState == STATE_COMPLETE  \
  -            and not module.isPackaged() :       
  +        if   self.moduleOughtBeWidelySyndicated(module):       
               mainRSS.addItem(item)
               
           for project in module.getProjects():  
  @@ -350,7 +342,6 @@
                       escape(project.getDescription()), \
                       self.gumpImage))
                       
  -        s=project.getStats()
           datestr=time.strftime('%Y-%m-%d')
           timestr=time.strftime('%H:%M:%S')
            
  @@ -368,19 +359,12 @@
                     ('%sT%s%s') % (datestr,timestr,TZ))
   
           # Generate changes, only if the module changed
  -        if project.getModule().isUpdated():
  -            if not s.currentState == STATE_NONE and  \
  -                not s.currentState == STATE_UNSET:           
  +        if project.getModule().isUpdated() and not project.getState().isUnset():    
       
                   projectRSS.addItem(item)
                   moduleRSS.addItem(item)  
   
           # State changes that are newsworthy...
  -        if   s.sequenceInState == 1  \
  -            and not s.currentState == STATE_PREREQ_FAILED \
  -            and not s.currentState == STATE_UNSET \
  -            and not s.currentState == STATE_NONE \
  -            and not s.currentState == STATE_COMPLETE         \
  -            and not project.isPackaged() :       
  +        if self.projectOughtBeWidelySyndicated(project) :    
               mainRSS.addItem(item)
                                                           
           projectRSS.serialize()
  
  
  
  1.8       +34 -7     jakarta-gump/python/gump/syndication/syndicator.py
  
  Index: syndicator.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/syndication/syndicator.py,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- syndicator.py     9 Dec 2003 00:48:36 -0000       1.7
  +++ syndicator.py     6 Jan 2004 21:35:45 -0000       1.8
  @@ -185,13 +185,40 @@
           
           return content
   
  +    def moduleOughtBeWidelySyndicated(self, module):
           
  +        stats=module.getStats()
  +        
  +        return stats.sequenceInState == 1    \
  +            and not stats.currentState == STATE_PREREQ_FAILED \
  +            and not stats.currentState == STATE_UNSET \
  +            and not stats.currentState == STATE_NONE \
  +            and not stats.currentState == STATE_COMPLETE  \
  +            and not module.isPackaged()       
  +              
  +    def projectOughtBeWidelySyndicated(self, project):
  +        
  +        stats=project.getStats()
  +        
  +        return stats.sequenceInState == 1    \
  +            and not stats.currentState == STATE_PREREQ_FAILED \
  +            and not stats.currentState == STATE_UNSET \
  +            and not stats.currentState == STATE_NONE \
  +            and not stats.currentState == STATE_COMPLETE     \
  +            and not project.isPackaged()    
                 
   def syndicate(run):
  -    
  -    from gump.syndication.rss import RSSSyndicator
  -    simple=RSSSyndicator()
  -    simple.syndicate(run)
  -    
  -    #atom=AtomSyndicator()
  -    #atom.syndicate(run)
  \ No newline at end of file
  +
  +    try:    
  +        from gump.syndication.rss import RSSSyndicator
  +        simple=RSSSyndicator()
  +        simple.syndicate(run)    
  +    except:
  +        pass
  +        
  +    try:
  +        from gump.syndication.atom import AtomSyndicator
  +        atom=AtomSyndicator()
  +        atom.syndicate(run)
  +    except:
  +        pass
  \ No newline at end of file
  
  
  
  1.1                  jakarta-gump/python/gump/syndication/atom.py
  
  Index: atom.py
  ===================================================================
  #!/usr/bin/env python
  
  # $Header: /home/cvs/jakarta-gump/python/gump/rss.py,v 1.7 2003/09/11 21:11:42 ajack 
Exp $
  # $Revision: 1.7 $
  # $Date: 2003/09/11 21:11:42 $
  #
  # ====================================================================
  #
  # The Apache Software License, Version 1.1
  #
  # Copyright (c) 2003 The Apache Software Foundation.  All rights
  # reserved.
  #
  # Redistribution and use in source and binary forms, with or without
  # modification, are permitted provided that the following conditions
  # are met:
  #
  # 1. Redistributions of source code must retain the above copyright
  #    notice, this list of conditions and the following disclaimer.
  #
  # 2. Redistributions in binary form must reproduce the above copyright
  #    notice, this list of conditions and the following disclaimer in
  #    the documentation and/or other materials provided with the
  #    distribution.
  #
  # 3. The end-user documentation included with the redistribution, if
  #    any, must include the following acknowlegement:
  #       "This product includes software developed by the
  #        Apache Software Foundation (http://www.apache.org/)."
  #    Alternately, this acknowlegement may appear in the software itself,
  #    if and wherever such third-party acknowlegements normally appear.
  #
  # 4. The names "The Jakarta Project", "Alexandria", and "Apache Software
  #    Foundation" must not be used to endorse or promote products derived
  #    from this software without prior written permission. For written
  #    permission, please contact [EMAIL PROTECTED]
  #
  # 5. Products derived from this software may not be called "Apache"
  #    nor may "Apache" appear in their names without prior written
  #    permission of the Apache Group.
  #
  # THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  # DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  # ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  # OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  # SUCH DAMAGE.
  # ====================================================================
  #
  # This software consists of voluntary contributions made by many
  # individuals on behalf of the Apache Software Foundation.  For more
  # information on the Apache Software Foundation, please see
  # <http://www.apache.org/>.
  
  """
    Highly experimental Atom feeds.
  """
  
  import os
  import time
  
  from xml.sax.saxutils import escape
  
  from gump import log
  from gump.model.state import *
  from gump.model.project import ProjectStatistics
  
  from gump.config import setting
  
  from gump.syndication.syndicator import Syndicator
  
  ###############################################################################
  
  
  # Local time zone, in offset from GMT
  TZ='%+.2d:00' % (-time.timezone/3600)
  
  ###############################################################################
  
  class Entry:
  
      """
      An entry (news item) in an Atom Feed. 
      Note: Can be added to more than one feed at once.
      """    
      def __init__(self,title,link,description,content=None):
          self.title=title
          self.link=link
          self.description=description        
          self.content=content
       
      def serializeToStream(self, stream, modified):
          
          # Write the header part...
          stream.write("""              <entry>
          <title>%s</title>
          <link rel="alternate" type="text/html" href="%s"/>
          <modified>%s</modified>        
          """   \
          % (self.description, self.link, modified) )
  
          if self.content:
              stream.write("""<content>%s</content>"""  \
              % (escape(self.content)) )
              
          # Write the trailer part...
          stream.write("""              </entry>\n""")
          
  class AtomFeed:
      
      def __init__(self,url,file,title,link,description):
          self.url=url
          self.file=file
          self.title=title
          self.link=link
          self.description=description
          
          self.entries=[]
          
      def addEntry(self,entry):
          self.entries += entry
          
      def serializeToStream(self, stream, modified):
          
          # Write the header part...
          stream.write("""<?xml version="1.0" encoding="utf-8"?>
  <feed version="0.3" xmlns="http://purl.org/atom/ns#";>
          <title>%s</title>
          <link rel="alternate" type="text/html" href="%s"/>
          <modified>%s</modified>        
  """   % (self.description, self.link, modified) )
          
          for entry in self.entries:
              entry.serializeToStream(stream, modified)
          
          # Write the trailer part...
          stream.write("""
  </feed>
  """)
                  
      def serialize(self):
          log.info("Atom Feed to : " + self.file);         
          
          stream = open(self.file,'w')
          
          modified='known2bBogus'
          
          try:
              self.serializeToStream(stream,modified)
          except:
              pass
              
          # Close the file.
          stream.close()  
          
  class AtomSyndicator(Syndicator):
      def __init__(self):
          Syndicator.__init__(self)
          
      def syndicate(self,run):
          
          # Main syndication document
          self.run = run
          self.workspace=run.getWorkspace()   
          
          
feedFile=self.run.getOptions().getResolver().getFile(self.workspace,'index','.atom')   
   
          
feedUrl=self.run.getOptions().getResolver().getUrl(self.workspace,'index','.atom')
      
          self.feed=AtomFeed(feedUrl,feedFile,  \
                         'Jakarta Gump',                \
                          self.workspace.logurl,        \
                          """Life is like a box of chocolates""")
                      
          # build information 
          for module in self.workspace.getModules():
              self.syndicateModule(module,self.feed)
              
          self.feed.serialize()
              
          
      def syndicateModule(self,module,mainFeed):
                  
          feedFile=self.run.getOptions().getResolver().getFile(module,'index','.atom')
          feedUrl=self.run.getOptions().getResolver().getUrl(module,'index','.atom')
          moduleUrl=self.run.getOptions().getResolver().getUrl(module)
          
          moduleFeed=AtomFeed(feedUrl,feedFile, 
                          'Gump : Module ' + escape(module.getName()),  \
                          moduleUrl,    \
                          escape(module.getDescription()))
                        
          datestr=time.strftime('%Y-%m-%d')
          timestr=time.strftime('%H:%M:%S')
           
          #           
          # Get a decent description
          #
          content=self.getModuleContent(module,self.run)
                          
          #
          #
          #
          entry=Entry(('%s %s %s') % 
(module.getName(),module.getStateDescription(),datestr), \
                    moduleUrl, \
                    module.getName(), \
                    content)
          
          # Generate changes, only if the module had changed
          if module.isUpdated():
              if not s.currentState == STATE_NONE and   \
                  not s.currentState == STATE_UNSET:   
                  moduleFeed.addEntry(entry)  
              
          # State changes that are newsworthy...
          if    self.moduleOughtBeWidelySyndicated(module):            
              mainFeed.addEntry(entry)
              
          # Syndicate each project
          for project in module.getProjects():  
              self.syndicateProject(project,moduleFeed,mainFeed)      
                    
          moduleFeed.serialize()        
      
      def syndicateProject(self,project,moduleFeed,mainFeed):
          
          
feedFile=self.run.getOptions().getResolver().getFile(project,project.getName(),'.atom')
          feedUrl=self.run.getOptions().getResolver().getUrl(project,'index','.atom')
          projectUrl=self.run.getOptions().getResolver().getUrl(project)
          
          projectFeed=AtomFeed(feedUrl, feedFile,       \
                      'Gump : Project ' + escape(project.getName()),    \
                      projectUrl,       \
                      escape(project.getDescription()))
                      
          datestr=time.strftime('%Y-%m-%d')
          timestr=time.strftime('%H:%M:%S')
           
          #           
          # Get a decent description
          #
          content=self.getProjectContent(project,self.run)
                          
          #
          #
          entry=Entry(('%s %s %s') % 
(project.getName(),project.getStateDescription(),datestr), \
                    projectUrl, \
                    project.getModule().getName() + ":" + project.getName(),    \
                    content )
  
          # Generate changes, only if the project changed
          if project.getModule().isUpdated():
              if not s.currentState == STATE_NONE and   \
                  not s.currentState == STATE_UNSET:           
                  projectFeed.addEntry(entry)
                  moduleFeed.addEntry(entry)  
  
          # State changes that are newsworthy...
          if    self.projectOughtBeWidelySyndicated(project) :
              mainFeed.addEntry(entry)
                                                          
          projectFeed.serialize()
  
  
  1.7       +0 -1      jakarta-gump/python/gump/utils/launcher.py
  
  Index: launcher.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/utils/launcher.py,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- launcher.py       16 Dec 2003 20:43:42 -0000      1.6
  +++ launcher.py       6 Jan 2004 21:35:46 -0000       1.7
  @@ -466,7 +466,6 @@
               result.exit_code=systemReturn
               
           log.debug('Command -> [' + str(systemReturn)+ '] [Sig:' + 
str(result.signal) + ' / Exit:' + str(result.exit_code) + '].')
  -        print 'Command -> [' + str(systemReturn)+ '] [Sig:' + str(result.signal) + 
' / Exit:' + str(result.exit_code) + '].'
           
           #
           # Assume timed out if signal terminated
  
  
  
  1.3       +4 -3      jakarta-gump/python/gump/test/syndicator.py
  
  Index: syndicator.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/test/syndicator.py,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- syndicator.py     4 Dec 2003 23:16:24 -0000       1.2
  +++ syndicator.py     6 Jan 2004 21:35:46 -0000       1.3
  @@ -70,6 +70,7 @@
   from gump.gumprun import GumpRun
   from gump.syndication import syndicate
   from gump.syndication.rss import RSSSyndicator
  +from gump.syndication.atom import AtomSyndicator
   from gump.test import getWorkedTestWorkspace
   from gump.test.pyunit import UnitTestSuite
   
  @@ -89,7 +90,7 @@
           simple=RSSSyndicator()
           simple.syndicate(self.run)
           
  -    #def testAtom(self):
  -    #    simple=AtomSyndicator()
  -    #    simple.syndicate(self.run)
  +    def testAtom(self):
  +        simple=AtomSyndicator()
  +        simple.syndicate(self.run)
           
  
  
  
  1.41      +6 -2      jakarta-gump/python/gump/document/forrest.py
  
  Index: forrest.py
  ===================================================================
  RCS file: /home/cvs/jakarta-gump/python/gump/document/forrest.py,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- forrest.py        19 Dec 2003 00:23:02 -0000      1.40
  +++ forrest.py        6 Jan 2004 21:35:46 -0000       1.41
  @@ -270,6 +270,7 @@
           syndRow=definitionTable.createRow()
           syndRow.createData('Syndication')
           syndRow.createData().createFork('index.rss','RSS')
  +        syndRow.createData().createFork('index.atom','Atom')
                   
           textRow=definitionTable.createRow()
           textRow.createData('Workspace Documentation')
  @@ -889,6 +890,9 @@
           
           if project.isPackaged():
               document.createNote('This is a packaged project, not Gumped.')
  +        elif not project.hasBuildCommand():
  +            document.createNote('This project is not built by Gump.')
  +        
               
           stateSection=document.createSection('State')
           
  @@ -947,11 +951,11 @@
       #    x.write('<p><strong>Project Config :</strong> <link 
href=\'%s\'>XML</link></p>' \
       #                % (getModuleProjectRelativeUrl(modulename,project.name)) )
               
  -        self.documentWorkList(document,project,'Project-level Work')
  +        self.documentWorkList(document,project,'Project-level Work')           
              
           miscSection=document.createSection('Miscellaneous')
  -        if project.hasBuildCommand():
               
  +        if project.hasBuildCommand():
               if project.hasAnt():                
                   self.documentProperties(miscSection, project.getAnt(), 'Ant 
Properties')
               
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to