Mercurial > hg > MPIWGThesaurus
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 |