comparison MPIWGThesaurus.py @ 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
comparison
equal deleted inserted replaced
4:fa8d698958f7 5:2773140337ad
82 persons2Projects= OOBTree() 82 persons2Projects= OOBTree()
83 objects2Projects=OOBTree() 83 objects2Projects=OOBTree()
84 historicalPlaces2Projects=OOBTree() 84 historicalPlaces2Projects=OOBTree()
85 suggestedTags2Projects=OOBTree() 85 suggestedTags2Projects=OOBTree()
86 personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu 86 personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu
87 personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname) 87 personsIDForSort=[] # liste personenID sortiert nach dem tupel (nachname,vorname)
88 personsIDForSortFull=[] # liste (personenID,(nachname,vorname)) nicht sortiert!
89
88 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. 90 suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen.
89 91
90 tagList=[] 92 tagList=[]
91 93
92 #default liste fuer tags, wird ueber das Managementinterface ueberschrieben 94 #default liste fuer tags, wird ueber das Managementinterface ueberschrieben
196 redirect(RESPONSE,'manage_main') 198 redirect(RESPONSE,'manage_main')
197 199
198 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich 200 #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich
199 #in den Projekten benutzt werden 201 #in den Projekten benutzt werden
200 202
201 security.declareProtected('View management screens','collectPersonNamesToIds') 203
202 def collectPersonNamesToIds(self): 204
203 """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" 205 def addPersonAndFirstNameFromTripleStore(self, personID):
204 self.personIDtoNames=OOBTree() # loesche alle 206 mainName, sortName = self.getMainNameFromTripleStore(personID) # hole die hauptbezeichnung aus dem triplestore
205 self.personsIDForSort=[] 207 personNames = []
206 personsIDForSortTmp=[] 208 for project in self.persons2Projects.get(personID): #hole die personen aus dem projekte
207 for personID in self.persons2Projects: 209 logging.debug("Found:project:" + project)
208 mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore 210 namesInProject = self.projectPersons.get(project)
209 211 for nameInProjectTuple in namesInProject:
210 personNames=[] 212 logging.debug(repr(nameInProjectTuple))
211 for project in self.persons2Projects.get(personID): 213 nameInProject = nameInProjectTuple[1]
212 #hole die personen aus dem projekte 214 logging.debug(nameInProjectTuple[0] + "??" + personID)
213 logging.debug("Found:project:"+project) 215 if nameInProjectTuple[0] == personID:
214 namesInProject = self.projectPersons.get(project) 216 logging.debug("changing")
215 217 if mainName == "": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort)
216 for nameInProjectTuple in namesInProject: 218 mainName = nameInProject #nimm dann aber den ersten aus den projekten
217 logging.debug(repr(nameInProjectTuple)) 219 if nameInProject != mainName:
218 nameInProject=nameInProjectTuple[1] 220 personNames.append(nameInProject)
219 logging.debug(nameInProjectTuple[0]+"??"+personID) 221
220 if nameInProjectTuple[0]==personID: 222 logging.debug(str(mainName) + "- foundalso :" + ",".join(personNames))
221 logging.debug("changing") 223 self.personIDtoNames.update({personID:(mainName, personNames)})
222 if mainName=="": # es gibt keinen Eintrag im Triplestore fuer name (sollte eigentlich nicht sein, ist dann ein Fehler dort) 224 self.personsIDForSortFull.append((personID, sortName))
223 mainName=nameInProject #nimm dann aber den ersten aus den projekten 225
224 if nameInProject!=mainName: 226
225 personNames.append(nameInProject) 227
226 228 def generateSortingOrderForPersonIDs(self):
227 logging.debug(str(mainName)+"- foundalso :"+",".join(personNames))
228 self.personIDtoNames.update({personID:(mainName,personNames)})
229 personsIDForSortTmp.append((personID,sortName))
230
231
232
233
234 #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname
235 def sort(x,y): 229 def sort(x,y):
236 logging.debug("sort:") 230 logging.debug("sort:")
237 logging.debug((x[1][0],y[1][0])) 231 logging.debug((x[1][0],y[1][0]))
238 return cmp(x[1][0],y[1][0]) 232 return cmp(x[1][0],y[1][0])
239 233
240 personsIDForSortTmp.sort(cmp=sort) 234 self.personsIDForSortFull.sort(cmp=sort)
241 235
242 self.personsIDForSort=[x[0] for x in personsIDForSortTmp] 236 self.personsIDForSort=[x[0] for x in self.personsIDForSortFull]
243 237
244 self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p 238 self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
245 239
240 security.declareProtected('View management screens','collectPersonNamesToIds')
241 def collectPersonNamesToIds(self):
242 """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu."""
243 #sollte z.B. gemacht werden, wenn im Triplestore editiert wurde.
244 self.personIDtoNames=OOBTree() # loesche alle
245 self.personsIDForSort=[]
246 self.personsIDForSortFull=[]
247 for personID in self.persons2Projects:
248 self.addPersonAndFirstNameFromTripleStore(personID,self.personsIDForSortFull)
249
250
251
252
253 #sortiere personIDs nach erstmal nach Nachnamene TODO: sortiere nach name,vorname
254
255 self.generateSortingOrderForPersonIDs();
256 # def sort(x,y):
257 # logging.debug("sort:")
258 # logging.debug((x[1][0],y[1][0]))
259 # return cmp(x[1][0],y[1][0])
260 #
261 # self.personsIDForSortFull.sort(cmp=sort)
262 #
263 # self.personsIDForSort=[x[0] for x in self.personsIDForSortFull]
264 #
265 # self.personIDtoNames=self.personIDtoNames # make clear that it has changed #TODO: change this to variablen with names _p
266 #
246 #Hole die Namen, die einer personID zugeordnet sind. 267 #Hole die Namen, die einer personID zugeordnet sind.
247 def getNamesFromID(self,personID): 268 def getNamesFromID(self,personID):
248 retStr="" 269 retStr=""
249 retStr+=self.personIDtoNames.get(personID)[0] # hole die Hauptbezeichnung 270 retStr+=self.personIDtoNames.get(personID)[0] # hole die Hauptbezeichnung
250 additionalNames = self.personIDtoNames.get(personID)[1] 271 additionalNames = self.personIDtoNames.get(personID)[1]
557 def getSuggestedTagsFromProject(self,projectID): 578 def getSuggestedTagsFromProject(self,projectID):
558 return self.getFromProject(self.projectSuggestedTags,projectID); 579 return self.getFromProject(self.projectSuggestedTags,projectID);
559 580
560 581
561 def getPersonsFromProject(self,projectID): 582 def getPersonsFromProject(self,projectID):
583 #hole alle personenID die zu einem Projekt gehoeren.
584 #zurueckgegeben wird ein OOSet()
562 return self.getFromProject(self.projectPersons,projectID); 585 return self.getFromProject(self.projectPersons,projectID);
563 586
564 def getFromProject(self,objects,projectID): 587 def getFromProject(self,objects,projectID):
565 if objects.has_key(projectID): 588 #holt die zu projectID gehoerigen objekte aus dem objects-set.
589 #oder legt einen neuen leeren Satz zu dieser ProjektID an.
590 #zuruecgegeben wird ein OOSet()
591 if objects.has_key(projectID): #wenn zu der ProjektID schon etwas abgespeichter ist, gieb es zurueck
566 logging.debug("key exists:"+projectID) 592 logging.debug("key exists:"+projectID)
567 persons=objects.get(projectID); 593 persons=objects.get(projectID);
568 else: 594 else: # andernfalls lege einen neuen Satz an.
569 persons=OOSet() 595 persons=OOSet()
570 objects.update({projectID:persons}) 596 objects.update({projectID:persons})
571 logging.debug("key does not exists:"+projectID) 597 logging.debug("key does not exists:"+projectID)
572 598
573 599
646 logging.debug(retstring) 672 logging.debug(retstring)
647 return retstring 673 return retstring
648 674
649 security.declareProtected('View management screens','removePersonFromProject') 675 security.declareProtected('View management screens','removePersonFromProject')
650 def removePersonFromProject(self,projectID,value): 676 def removePersonFromProject(self,projectID,value):
651 """remove""" 677 """remove a person from the projeckt"""
652 logging.debug("remove:"+projectID+":"+value); 678 logging.debug("remove:"+projectID+":"+value);
653 679
654 persons = self.getPersonsFromProject(projectID) 680 persons = self.getPersonsFromProject(projectID) # hole alle personen die mit dem Projekt verbunden sind.
655 for person in persons.keys(): 681 for person in persons.keys():
656 682
657 logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__") 683 logging.debug("trying:"+repr(person[0])+"::"+repr(value)+"__")
658 if person[0]==value: 684 if person[0]==value:#person ist die zuloeschende, dann raus damit
685
659 logging.debug("---removed!") 686 logging.debug("---removed!")
660 persons.remove(person) 687 persons.remove(person)
661 688
662 self.projectPersons.update({projectID:persons}) 689 #now also delete the project from the person.
690 projectsOfPerson=self.persons2Projects.get(person[0])
691 logging.debug(projectsOfPerson)
692 if projectID in list(projectsOfPerson):
693 projectsOfPerson.remove(projectID)
694 #self.persons2Projects.update({person:projectsList})
695 if (len(projectsOfPerson)==0): #loesche person aus der liste wenn keine Projekte dazu existieren.
696 del self.persons2Projects[person[0]]
697
698
699 #self.projectPersons.update({projectID:persons})
663 retstring = self.getPersonsFromProjectAsHTML(projectID) 700 retstring = self.getPersonsFromProjectAsHTML(projectID)
664 logging.debug(retstring) 701 logging.debug(retstring)
665 return retstring 702 return retstring
666 703
667 #fuegt die neue Person zur personIDtoNames hinzu, für die spätere Anzeige in der Personenliste 704 #fuegt die neue Person zur personIDtoNames hinzu, für die spätere Anzeige in der Personenliste
693 if getattr(self,"persons2Projects",None)==None: 730 if getattr(self,"persons2Projects",None)==None:
694 setattr(self,"persons2Projects",OOBTree()) 731 setattr(self,"persons2Projects",OOBTree())
695 732
696 projects = self.persons2Projects.get(person,None) 733 projects = self.persons2Projects.get(person,None)
697 734
698 if projects==None: 735 if projects==None: #person hatte noch keine projekte
699 projects=OOSet(); 736 projects=OOSet();
700 737 self.addPersonAndFirstNameFromTripleStore(person)
738 self.generateSortingOrderForPersonIDs();
739
701 projects.insert(projectID ) 740 projects.insert(projectID )
702 logging.debug("update:"+person) 741 logging.debug("update:"+person)
703 self.persons2Projects.update({person:projects}) 742 self.persons2Projects.update({person:projects})
704 743
705 self.addNameTOPersonIDNames(value,label) 744 self.addNameTOPersonIDNames(value,label)
706 retstring = self.getPersonsFromProjectAsHTML(projectID) 745 retstring = self.getPersonsFromProjectAsHTML(projectID)
707 logging.debug(retstring) 746 logging.debug(retstring)
708 transaction.commit() 747 transaction.commit()
709 return retstring 748 return retstring
710 749
711 750 security.declareProtected('View management screens','getPersonsWithProjectIDs')
712 def getPersonsWithProjectIDs(self): 751 def getPersonsWithProjectIDs(self,check=False):
713 """holt die getaggted Personen mit Projekten""" 752 """holt die getaggted Personen mit Projekten"""
714 persons = self.persons2Projects; 753 persons = self.persons2Projects;
715 ret={} 754 ret={}
716 755
717 logging.debug("Check Person:"+repr(persons.keys())) 756 logging.debug("Check Person:"+repr(persons.keys()))
733 logging.debug("AFTERSORT***") 772 logging.debug("AFTERSORT***")
734 logging.debug(personsList) 773 logging.debug(personsList)
735 for person in personsList: 774 for person in personsList:
736 logging.debug("Check:"+person) 775 logging.debug("Check:"+person)
737 #TODO: person muss duch den namen von provider geholt werden 776 #TODO: person muss duch den namen von provider geholt werden
738 list=[] 777 retlist=[]
739 for projectID in persons.get(person): 778 projectsList=persons.get(person)
740 list.append(self.getProjectDetails(projectID)) 779
741 780 for projectID in list(projectsList): #list notwendig da projectList in der folgenden iteration veraendert wird.
742 ret[person]=list[0:] 781 if check: #teste ob im Projekt noch ein Verweis auf den Namen steht
782 #sollte eigentlich nicht sein.
783 personsProjects=self.getPersonsFromProject(projectID)
784 logging.debug("persons check mode")
785 personsProjectsCheck=[x[0] for x in personsProjects]
786 if not person in personsProjectsCheck: #falls es so ist korrigiere die Projektliste der Person
787 #loesche die person von projectListe
788 projectsList.remove(projectID)
789 persons.update({person:projectsList})
790
791 retlist.append(self.getProjectDetails(projectID))
792
793 if check and (len(projectsList)==0): #loesche person aus der liste wenn keine Projekte dazu existieren.
794 del persons[person]
795
796 ret[person]=retlist[0:]
743 797
744 logging.debug("AFTERSORT-ret***") 798 logging.debug("AFTERSORT-ret***")
745 logging.debug(ret.keys()) 799 logging.debug(ret.keys())
746 return ret,personsList 800 return ret,personsList
747 801