Mercurial > hg > MPIWGThesaurus
changeset 5:2773140337ad
Mangement der People f?r Tagging: verbessert.
Im Triplestore eingetragenen Personen mit Vor- und Nachnamen werden jetzt nach Nachnamen sortiert.
Personen verschwinden aus der Tagging-?bersicht, wenn keine Projekte mehr dazugeh?ren.
author | dwinter |
---|---|
date | Wed, 12 Oct 2011 16:01:05 +0200 |
parents | fa8d698958f7 |
children | fcab446bca79 |
files | .pydevproject MPIWGThesaurus.py zpt/manageMPIWGThesaurus.zpt |
diffstat | 3 files changed, 108 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/.pydevproject Tue Oct 11 19:57:22 2011 +0200 +++ b/.pydevproject Wed Oct 12 16:01:05 2011 +0200 @@ -2,7 +2,7 @@ <?eclipse-pydev version="1.0"?> <pydev_project> -<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4 - zope</pydev_property> +<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python2.4</pydev_property> <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.4</pydev_property> <pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH"> <path>/MPIWGThesaurus</path>
--- a/MPIWGThesaurus.py Tue Oct 11 19:57:22 2011 +0200 +++ b/MPIWGThesaurus.py Wed Oct 12 16:01:05 2011 +0200 @@ -84,7 +84,9 @@ historicalPlaces2Projects=OOBTree() suggestedTags2Projects=OOBTree() personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu - personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname) + personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname) + personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert! + suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. tagList=[] @@ -198,51 +200,70 @@ #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich #in den Projekten benutzt werden + + + def addPersonAndFirstNameFromTripleStore(self, personID): + mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore + personNames = [] + for project in self.persons2Projects.get(personID): #hole die personen aus dem projekte + logging.debug("Found:project:" + project) + namesInProject = self.projectPersons.get(project) + for nameInProjectTuple in namesInProject: + logging.debug(repr(nameInProjectTuple)) + nameInProject = nameInProjectTuple[1] + logging.debug(nameInProjectTuple[0] + "??" + personID) + if nameInProjectTuple[0] == personID: + logging.debug("changing") + if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) + mainName = nameInProject #nimm dann aber den ersten aus den projekten + if nameInProject != mainName: + personNames.append(nameInProject) + + logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames)) + self.personIDtoNames.update({personID:(mainName, personNames)}) + self.personsIDForSortFull.append((personID, sortName)) + + + + def generateSortingOrderForPersonIDs(self): + def sort(x,y): + logging.debug("sort:") + logging.debug((x[1][0],y[1][0])) + return cmp(x[1][0],y[1][0]) + + self.personsIDForSortFull.sort(cmp=sort) + + self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] + + self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p + security.declareProtected('View management screens','collectPersonNamesToIds') def collectPersonNamesToIds(self): """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" + #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde. self.personIDtoNames=OOBTree() # loesche alle self.personsIDForSort=[] - personsIDForSortTmp=[] + self.personsIDForSortFull=[] for personID in self.persons2Projects: - mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore - - personNames=[] - for project in self.persons2Projects.get(personID): - #hole die personen aus dem projekte - logging.debug("Found:project:"+project) - namesInProject = self.projectPersons.get(project) - - for nameInProjectTuple in namesInProject: - logging.debug(repr(nameInProjectTuple)) - nameInProject=nameInProjectTuple[1] - logging.debug(nameInProjectTuple[0]+"??"+personID) - if nameInProjectTuple[0]==personID: - logging.debug("changing") - if mainName=="": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) - mainName=nameInProject #nimm dann aber den ersten aus den projekten - if nameInProject!=mainName: - personNames.append(nameInProject) - - logging.debug(str(mainName)+"- foundalso :"+",".join(personNames)) - self.personIDtoNames.update({personID:(mainName,personNames)}) - personsIDForSortTmp.append((personID,sortName)) + self.addPersonAndFirstNameFromTripleStore(personID,self.personsIDForSortFull) #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname - def sort(x,y): - logging.debug("sort:") - logging.debug((x[1][0],y[1][0])) - return cmp(x[1][0],y[1][0]) - - personsIDForSortTmp.sort(cmp=sort) - - self.personsIDForSort=[x[0] for x in personsIDForSortTmp] - - self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p - + + self.generateSortingOrderForPersonIDs(); +# def sort(x,y): +# logging.debug("sort:") +# logging.debug((x[1][0],y[1][0])) +# return cmp(x[1][0],y[1][0]) +# +# self.personsIDForSortFull.sort(cmp=sort) +# +# self.personsIDForSort=[x[0] for x in self.personsIDForSortFull] +# +# self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p +# #Hole die Namen, die einer personID zugeordnet sind. def getNamesFromID(self,personID): retStr="" @@ -559,13 +580,18 @@ def getPersonsFromProject(self,projectID): + #hole alle personenID die zu einem Projekt gehoeren. + #zurueckgegeben wird ein OOSet() return self.getFromProject(self.projectPersons,projectID); - def getFromProject(self,objects,projectID): - if objects.has_key(projectID): + def getFromProject(self,objects,projectID): + #holt die zu projectID gehoerigen objekte aus dem objects-set. + #oder legt einen neuen leeren Satz zu dieser ProjektID an. + #zuruecgegeben wird ein OOSet() + if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gieb es zurueck logging.debug("key exists:"+projectID) persons=objects.get(projectID); - else: + else: # andernfalls lege einen neuen Satz an. persons=OOSet() objects.update({projectID:persons}) logging.debug("key does not exists:"+projectID) @@ -648,18 +674,29 @@ security.declareProtected('View management screens','removePersonFromProject') def removePersonFromProject(self,projectID,value): - """remove""" + """remove a person from the projeckt""" logging.debug("remove:"+projectID+":"+value); - persons = self.getPersonsFromProject(projectID) + persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind. for person in persons.keys(): logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__") - if person[0]==value: + if person[0]==value:#person ist die zuloeschende, dann raus damit + logging.debug("---removed!") persons.remove(person) - - self.projectPersons.update({projectID:persons}) + + #now also delete the project from the person. + projectsOfPerson=self.persons2Projects.get(person[0]) + logging.debug(projectsOfPerson) + if projectID in list(projectsOfPerson): + projectsOfPerson.remove(projectID) + #self.persons2Projects.update({person:projectsList}) + if (len(projectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. + del self.persons2Projects[person[0]] + + + #self.projectPersons.update({projectID:persons}) retstring = self.getPersonsFromProjectAsHTML(projectID) logging.debug(retstring) return retstring @@ -695,9 +732,11 @@ projects = self.persons2Projects.get(person,None) - if projects==None: + if projects==None: #person hatte noch keine projekte projects=OOSet(); - + self.addPersonAndFirstNameFromTripleStore(person) + self.generateSortingOrderForPersonIDs(); + projects.insert(projectID ) logging.debug("update:"+person) self.persons2Projects.update({person:projects}) @@ -708,8 +747,8 @@ transaction.commit() return retstring - - def getPersonsWithProjectIDs(self): + security.declareProtected('View management screens','getPersonsWithProjectIDs') + def getPersonsWithProjectIDs(self,check=False): """holt die getaggted Personen mit Projekten""" persons = self.persons2Projects; ret={} @@ -735,11 +774,26 @@ for person in personsList: logging.debug("Check:"+person) #TODO: person muss duch den namen von provider geholt werden - list=[] - for projectID in persons.get(person): - list.append(self.getProjectDetails(projectID)) + retlist=[] + projectsList=persons.get(person) - ret[person]=list[0:] + for projectID in list(projectsList): #list notwendig da projectList in der folgenden iteration veraendert wird. + if check: #teste ob im Projekt noch ein Verweis auf den Namen steht + #sollte eigentlich nicht sein. + personsProjects=self.getPersonsFromProject(projectID) + logging.debug("persons check mode") + personsProjectsCheck=[x[0] for x in personsProjects] + if not person in personsProjectsCheck: #falls es so ist korrigiere die Projektliste der Person + #loesche die person von projectListe + projectsList.remove(projectID) + persons.update({person:projectsList}) + + retlist.append(self.getProjectDetails(projectID)) + + if check and (len(projectsList)==0): #loesche person aus der liste wenn keine Projekte dazu existieren. + del persons[person] + + ret[person]=retlist[0:] logging.debug("AFTERSORT-ret***") logging.debug(ret.keys())
--- a/zpt/manageMPIWGThesaurus.zpt Tue Oct 11 19:57:22 2011 +0200 +++ b/zpt/manageMPIWGThesaurus.zpt Wed Oct 12 16:01:05 2011 +0200 @@ -3,6 +3,8 @@ <h2>Manage the thesaurus</h2> <ul> <li><a href="listAllSuggestedTags">Zeige alle vorgeschlagenen Tags</a></li> +<li><a href="collectPersonNamesToIds">Hole/Update die Namenseintraege aus dem Triplestore, z.B. falls im Triplestore Namem geaendert worden</a></li> +<li><a href="getPersonsWithProjectIDs?check=bool:True">Hole all Personen mit ProjectIDs, raeumt zu gleich den Cache Persone-->ProjectID auf</a></li> </ul> </body> </html> \ No newline at end of file