Diff for /MPIWGWeb/Attic/MPIWGRoot.py between versions 1.1.2.28 and 1.1.2.42

version 1.1.2.28, 2010/07/15 10:20:17 version 1.1.2.42, 2012/12/07 10:12:56
Line 21  from bibliography import * Line 21  from bibliography import *
 import time  import time
 import xml.dom.minidom  import xml.dom.minidom
 import sys  import sys
 from Ft.Xml.XPath import Evaluate  import transaction
 from Ft.Xml.XPath.Context import Context  
 from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print  #from Ft.Xml.XPath import Evaluate
 from Ft.Xml import EMPTY_NAMESPACE  #from Ft.Xml.XPath.Context import Context
   #from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print
   #from Ft.Xml import EMPTY_NAMESPACE
 import copy  import copy
 import updatePersonalWWW  import updatePersonalWWW
 import MPIWGStaff  import MPIWGStaff
 from MPIWGHelper import *  from MPIWGHelper import *
   from BeautifulSoup import BeautifulSoup, Comment
   from ZODB import FileStorage, DB
   from ZEO import ClientStorage
   
 def sortWeight(x,y):  def sortWeight(x,y):
     x1=int(getattr(x[1],'weight','0'))      x1=int(getattr(x[1],'weight','0'))
Line 40  def sortWeight(x,y): Line 44  def sortWeight(x,y):
 class MPIWGRoot(ZSQLExtendFolder):  class MPIWGRoot(ZSQLExtendFolder):
     """Stammordner fuer den Web-Server"""      """Stammordner fuer den Web-Server"""
   
       _v_harvestCache=None
     meta_type='MPIWGRoot'      meta_type='MPIWGRoot'
   
     fieldLabels={'WEB_title':'WEB_Title',      fieldLabels={'WEB_title':'WEB_Title',
Line 67  class MPIWGRoot(ZSQLExtendFolder): Line 72  class MPIWGRoot(ZSQLExtendFolder):
     # types of objects that show up in navigation      # types of objects that show up in navigation
     nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder']      nav_meta_types = ['MPIWGTemplate','MPIWGLink','MPIWGFolder']
   
       manage_options = Folder.manage_options+(
           {'label':'Update personal homepages','action':'updatePersonalwww_html'},
           {'label':'Reindex catalogs','action':'reindexCatalogs'},
           {'label':'Main config','action':'changeMPIWGRootForm'},
           {'label':'add e-mails','action':'showNewDBEntries'},
           #{'label':'update the institutsbibliography','action':'updateInstitutsbiliography'},
           #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'},
           #{'label':'Store Historical Persons','action':'storeHistoricalPersons'},
           )
       
   
       def getHarvestCachePort(self):
           return getattr(self,"harvestPort",29999)
       
       def getHarvestCacheServer(self):
           return getattr(self,"harvestServer","localhost")
      
       
       def getHarvestCache(self):
           logging.debug("CACHE:"+repr(self._v_harvestCache))
           if self._v_harvestCache==None:
                #storage = FileStorage.FileStorage('/tmp/'+self.getId()+'test-filestorage.fs')
                addr = self.getHarvestCacheServer(), self.getHarvestCachePort()
                storage = ClientStorage.ClientStorage(addr)
                db = DB(storage)
                self._v_harvestDV=db
                self._v_harvestDV=db
                conn = db.open()
                dbroot = conn.root()
                if not dbroot.has_key('templates'):
                    from BTrees.OOBTree import OOBTree
                    dbroot['templates'] = OOBTree()
                    
                self._v_harvestCache = dbroot['templates']
           logging.debug("CACHE2:"+repr(self._v_harvestCache))            
           return self._v_harvestCache
       
       
       
       def __del__(self):
            if self._v_harvestCache!=None:
                self._v_harvestDV.close();
                
     def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True):      def getGetNeighbourhood(self,obj, wordStr, length=100,tagging=True):
         """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte          """finde umgebung um die worte in wordStr, zurueckgegeben wird eine Array mit den Umgebungen von Fundstellen der Worte
         alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden           alle Tags werden entfernt, die Fundstellen werden mit <span class="found">XX</span> getaggt, die Umgebungen werden 
Line 108  class MPIWGRoot(ZSQLExtendFolder): Line 156  class MPIWGRoot(ZSQLExtendFolder):
         #if not words is ListType:          #if not words is ListType:
         #   words=[words]          #   words=[words]
                           
         txt=obj.harvest_page()          
           txtCache = self.en.getHarvestCache();
           txt=  txtCache.get(obj.absolute_url(),None)
          
           if txt==None:
               
               logging.debug("NO CACHE for: "+obj.absolute_url())
               txt=obj.harvest_page(mode="slim")
           
           
         if not txt:          if not txt:
             return ret              return ret
         txt=re.sub("<.*?>", "", txt) # loesche alle Tags          
           soup = BeautifulSoup(txt)
           
           comments = soup.findAll(text=lambda text:isinstance(text, Comment))
           [comment.extract() for comment in comments]
           
           txt = ''.join(soup.findAll(text=True))
           
           
           #txt=re.sub("<.*?>", "", txt) # loesche alle Tags
         for word in words:          for word in words:
             word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "              word=re.sub("_"," ",word) # ersetze zurueck "_" durch " "
             pos=0              pos=0
Line 133  class MPIWGRoot(ZSQLExtendFolder): Line 199  class MPIWGRoot(ZSQLExtendFolder):
                         y=max(ranges[nr][1],y)                          y=max(ranges[nr][1],y)
                               
                     str=txt[x:y]                      str=txt[x:y]
                       if x!=0: #add dots if in the middle of text
                           str="..."+str
                       
                       if y!=len(txt): #add dots if in the middle of text
                           str=str+"..."
                           
                           
                                   
                     if nr >=0: # word ist in einer schon gefunden Umgebung                      if nr >=0: # word ist in einer schon gefunden Umgebung
                         ranges[nr]=(x,y) # neue Position der Umgebung                          ranges[nr]=(x,y) # neue Position der Umgebung
Line 323  class MPIWGRoot(ZSQLExtendFolder): Line 396  class MPIWGRoot(ZSQLExtendFolder):
         return base          return base
           
     def isNewCapital(self,text=None,reset=None):      def isNewCapital(self,text=None,reset=None):
           
           if text:
               text=text.upper()
         if reset:          if reset:
             self.REQUEST['capital']="A"              self.REQUEST['capital']="A"
             return True              return True
Line 589  class MPIWGRoot(ZSQLExtendFolder): Line 665  class MPIWGRoot(ZSQLExtendFolder):
         pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)          pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','changeMPIWGRootForm')).__of__(self)
         return pt()          return pt()
   
     def changeMPIWGRoot(self,title,disciplineList,themesList,connection_id,lang=None,RESPONSE=None):      def changeMPIWGRoot(self,title,connection_id,coneServiceURL,harvestPort,harvestServer,lang=None,autocommit=None,RESPONSE=None):
         """change"""          """change"""
         self.title=title          self.title=title
         self.connection_id=connection_id          self.connection_id=connection_id
         self.disciplineList=disciplineList          #self.disciplineList=disciplineList
         self.themesList=themesList          #self.themesList=themesList
           self.coneServiceURL=coneServiceURL
           self.harvestServer=harvestServer
           try:
               self.harvestPort=int(harvestPort)
           except:
               logging.error("couldn't change port!: no number:"+harvestPort)
           
         if lang is not None:          if lang is not None:
             self.lang = lang              self.lang = lang
   
           self.autocommit = (autocommit == "on")
         if RESPONSE is not None:          if RESPONSE is not None:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
Line 639  class MPIWGRoot(ZSQLExtendFolder): Line 723  class MPIWGRoot(ZSQLExtendFolder):
         return ret          return ret
   
           
       def getAllProjectsAndTagsAsCSV(self,archived=1,RESPONSE=None):
           """alle projekte auch die nicht getaggten"""
           retList=[]
           headers=['projectId','sortingNumber','projectName','scholars','startedAt','completedAt','lastChangeThesaurusAt','lastChangeProjectAt','projectCreatedAt','persons','places','objects']
           headers.extend(list(self.thesaurus.tags.keys()))
           retList.append("\t".join(headers))
           if not hasattr(self,'thesaurus'):
               return "NON thesaurus (there have to be a MPIWGthesaurus object, with object ID thesaurus)"
           
           projectTags = self.thesaurus.getProjectsAndTags()
           for project in self.getProjectFields('WEB_title_or_short'):
               proj = project[0]
               p_name = project[1]
               retProj=[]
               #if (not proj.isArchivedProject() and archived==1) or (proj.isArchivedProject() and archived==2):
               retProj.append(self.utf8ify(proj.getId()))
               retProj.append(self.utf8ify(proj.getContent('xdata_05')))
               retProj.append(self.utf8ify(p_name))  
               retProj.append(self.utf8ify(proj.getContent('xdata_01')))
               retProj.append(self.utf8ify(proj.getStartedAt()))
               retProj.append(self.utf8ify(proj.getCompletedAt()))
               changeDate=self.thesaurus.lastChangeInThesaurus.get(proj.getId(),'') 
               n = re.sub("[:\- ]","",str(changeDate))
               retProj.append(n)
               retProj.append(self.utf8ify(getattr(proj,'creationTime','20050101000000')))  
               retProj.append("")#TODO: project created at   
               retProj.append(";".join([person[1] for person in self.thesaurus.getPersonsFromProject(proj.getId())]))
               retProj.append(";".join([person[1] for person in self.thesaurus.getHistoricalPlacesFromProject(proj.getId())]))
               retProj.append(";".join([person[1] for person in self.thesaurus.getObjectsFromProject(proj.getId())]))
               retProj+=self.thesaurus.getTags(proj.getId(),projectTags)
               retList.append("\t".join(retProj))
           
           if RESPONSE:
               
               RESPONSE.setHeader('Content-Disposition','attachment; filename="ProjectsAndTags.tsv"')
               RESPONSE.setHeader('Content-Type', "application/octet-stream")
         
           return "\n".join(retList);
       
       
       
     
     def getProjectFields(self,fieldName,date=None,folder=None,sort=None):      def getProjectFields(self,fieldName,date=None,folder=None,sort=None):
         """getListofFieldNames"""          """getListofFieldNames"""
         ret=[]          ret=[]
Line 683  class MPIWGRoot(ZSQLExtendFolder): Line 809  class MPIWGRoot(ZSQLExtendFolder):
         return projects          return projects
           
                   
     manage_options = Folder.manage_options+(  
         {'label':'Update personal homepages','action':'updatePersonalwww_html'},  
         {'label':'Reindex catalogs','action':'reindexCatalogs'},  
         {'label':'Main config','action':'changeMPIWGRootForm'},  
         {'label':'add e-mails','action':'showNewDBEntries'},  
         {'label':'update the institutsbibliography','action':'updateInstitutsbiliography'},  
         #{'label':'Edit Historical Persons','action':'editHistoricalPersonsForm'},  
         #{'label':'Store Historical Persons','action':'storeHistoricalPersons'},  
         )  
       
   
     def updatePublicationDB(self,personId=None):      def updatePublicationDB(self,personId=None):
         """updates the publication db, i.e. copy year and type into the main table"""          """updates the publication db, i.e. copy year and type into the main table"""
                   
Line 791  class MPIWGRoot(ZSQLExtendFolder): Line 906  class MPIWGRoot(ZSQLExtendFolder):
         if ignoreEntries is None:          if ignoreEntries is None:
             ignoreEntries = []              ignoreEntries = []
                           
         ignoreEntries.append('current_work') # TODO:updatecurrent work          #ignoreEntries.append('current_work') # TODO:updatecurrent work
         logging.debug("updatePersonEntry: data=%s ignoreEntries=%s"%(repr(data),repr(ignoreEntries)))          logging.debug("updatePersonEntry: data=%s ignoreEntries=%s"%(repr(data),repr(ignoreEntries)))
                   
         if data['date_to']=="": # wenn date_to leer          if data['date_to']=="": # wenn date_to leer
Line 883  class MPIWGRoot(ZSQLExtendFolder): Line 998  class MPIWGRoot(ZSQLExtendFolder):
                 ret+="<table border='1'>"                  ret+="<table border='1'>"
                 for iE in displayIgnored:                  for iE in displayIgnored:
                     ret+="<tr><td>%s</td><td>%s</td><td>%s</td>"%(iE[0].encode('utf-8'),iE[1].encode('utf-8'),iE[2].encode('utf-8'))                      ret+="<tr><td>%s</td><td>%s</td><td>%s</td>"%(iE[0].encode('utf-8'),iE[1].encode('utf-8'),iE[2].encode('utf-8'))
                 ret+="</tabel>"                  ret+="</table>"
                                   
             self.updatePersonEntry(resultSet[conflict],ignoreEntries=ignoreEntries)              self.updatePersonEntry(resultSet[conflict],ignoreEntries=ignoreEntries)
                     
Line 958  class MPIWGRoot(ZSQLExtendFolder): Line 1073  class MPIWGRoot(ZSQLExtendFolder):
           
                   
                         
           
         if RESPONSE:          if RESPONSE:
             RESPONSE.redirect('manage_main')              RESPONSE.redirect('manage_main')
   
Line 968  class MPIWGRoot(ZSQLExtendFolder): Line 1084  class MPIWGRoot(ZSQLExtendFolder):
         #ret=[]          #ret=[]
                   
         def sorter(x,y):          def sorter(x,y):
             return cmp(x[0],y[0])              return cmp(x[0].lower(),y[0].lower())
                                           
         results=self.MembersCatalog({'isPublished':True})          results=self.MembersCatalog({'isPublished':True})
                 
Line 1229  class MPIWGRoot(ZSQLExtendFolder): Line 1345  class MPIWGRoot(ZSQLExtendFolder):
         """give tuple member /projects"""          """give tuple member /projects"""
         ret=[]          ret=[]
         members=self.getAllMembers()          members=self.getAllMembers()
         logging.error("X %s"%repr(members))          logging.debug("X %s"%repr(members))
         #return str(members)          #return str(members)
         for x in members:          for x in members:
             logging.error("X %s"%repr(x))              #logging.debug("X %s"%repr(x))
             projects=self.getProjectsOfMember(key=x[1],date=date)              projects=self.getProjectsOfMember(key=x[1],date=date)
             if len(projects)>0:              if len(projects)>0:
                 ret.append((x[0],projects))                  ret.append((x[0],projects))
Line 1256  class MPIWGRoot(ZSQLExtendFolder): Line 1372  class MPIWGRoot(ZSQLExtendFolder):
                   
         ret=[]            ret=[]  
         if key:               if key:     
               logging.debug("MPIWGROOT (getProjectsOfMember):"+key)
             proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)})              proj=self.ProjectCatalog({'getPersonKeyList':utf8ify(key)})
         else:          else:
             return ret # key muss definiert sein              return ret # key muss definiert sein
                   
                #logging.debug("MPIWGROOT (getProjectsOfMember):"+repr(proj))
         if proj:          if proj:
             proj2=[]              proj2=[]
             for x in proj:              for x in proj:
Line 1501  class MPIWGRoot(ZSQLExtendFolder): Line 1618  class MPIWGRoot(ZSQLExtendFolder):
         return "done"          return "done"
           
   
       def sortResults(self,results):
           """search the catalog and give results back sorted by meta_type"""
           ret = {}
           logging.debug(results())
           for result in results():
               metaType = result.meta_type
               resultList= ret.get(metaType,[])
               resultList.append(result)
               ret[metaType]=resultList
           
           logging.debug(ret)
           return ret
           
                           
 def manage_addMPIWGRootForm(self):  def manage_addMPIWGRootForm(self):
     """form for adding the root"""      """form for adding the root"""

Removed from v.1.1.2.28  
changed lines
  Added in v.1.1.2.42


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>