# HG changeset patch # User dwinter # Date 1318355842 -7200 # Node ID fa8d698958f7b66f2505356c7b15e25026fa7d31 # Parent 6f4b30846fed7193ffad18146189c5fef7a9f362 sorting by lastname Gerade nur f?r die Namen aus der Personenontologie nicht f?r die Tempor?ren Namen diff -r 6f4b30846fed -r fa8d698958f7 .pydevproject --- a/.pydevproject Thu Jun 30 11:18:29 2011 +0200 +++ b/.pydevproject Tue Oct 11 19:57:22 2011 +0200 @@ -2,7 +2,7 @@ -python2.4 +python2.4 - zope python 2.4 /MPIWGThesaurus diff -r 6f4b30846fed -r fa8d698958f7 MPIWGThesaurus.py --- a/MPIWGThesaurus.py Thu Jun 30 11:18:29 2011 +0200 +++ b/MPIWGThesaurus.py Tue Oct 11 19:57:22 2011 +0200 @@ -83,7 +83,8 @@ objects2Projects=OOBTree() historicalPlaces2Projects=OOBTree() suggestedTags2Projects=OOBTree() - personIDtoNames=OOBTree() + personIDtoNames=OOBTree() # weist den personenIDs Klartextnamen aus dem Triplestore zu + personsIDForSort=[] # liste (personenID,(nachname,vorname) sortiert nach dem tupel (nachname,vorname) suggestedPersons= OOBTree(); #TODO: das sollte die ueberfluessig werde und nur im triple store stehen. tagList=[] @@ -197,13 +198,14 @@ #In der Anzeige soll der Name der zitierten Personen in Klartext angezeigt werden, ausserdem die Varianten, wie sie tatsaechlich #in den Projekten benutzt werden - security.declareProtected('View management screens','changeMPIWGThesaurus') + security.declareProtected('View management screens','collectPersonNamesToIds') def collectPersonNamesToIds(self): """Ordne Namen aus dem Triplestore bzw. die vergebenenden Label den Personen-Ids zu.""" - self.personIDtoNames=OOBTree() # loessche alle - + self.personIDtoNames=OOBTree() # loesche alle + self.personsIDForSort=[] + personsIDForSortTmp=[] for personID in self.persons2Projects: - mainName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore + mainName,sortName=self.getMainNameFromTripleStore(personID); # hole die hauptbezeichnung aus dem triplestore personNames=[] for project in self.persons2Projects.get(personID): @@ -224,7 +226,21 @@ logging.debug(str(mainName)+"- foundalso :"+",".join(personNames)) self.personIDtoNames.update({personID:(mainName,personNames)}) - + personsIDForSortTmp.append((personID,sortName)) + + + + + #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 #Hole die Namen, die einer personID zugeordnet sind. @@ -238,11 +254,26 @@ #Hole die Hauptnamemsansetzung aus dem Triplestore ),falls vorhanden, wenn nicht ist der String leer. + #ausserdem einen Namen zum sortieren, = Tupel(nachname, vorname) def getMainNameFromTripleStore(self,personID): cmdString ="""select * where { <%s> ?name}"""%personID + names= self.callSparql(cmdString) + + cmdString ="""select * where { <%s> ?name}"""%personID + + lastName= self.callSparql(cmdString) + + cmdString ="""select * where { <%s> ?name}"""%personID + + firstName= self.callSparql(cmdString) + + return names,(lastName,firstName) + + + def callSparql(self,cmdString): auth_handler = urllib2.HTTPBasicAuthHandler() auth_handler.add_password(realm='sparql', @@ -255,13 +286,17 @@ logging.debug(cmdString) try: - r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':None,'format':'text/csv'})) + logging.debug(self.virtuosoServer+"/sparql?" + urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':'','format':'text/csv'})) + #r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':self.virtuosoGraph,'named-graph-uri':'','format':'text/csv'})) + r= opener.open(self.virtuosoServer+"/sparql", urllib.urlencode({'query':cmdString,'default-graph-uri':'','named-graph-uri':'','format':'text/csv'})) namesTxt=r.read() except urllib2.URLError, e: logging.error(e.code) logging.error(e.read()) + + return - + logging.debug(namesTxt) names=namesTxt.split("\n") if len(names) < 2: #in der ersten Zeile stehen bei der Rückgabe die Spaltennamen, <2 heiss also es gibt keinen Eintrag return @@ -678,16 +713,37 @@ """holt die getaggted Personen mit Projekten""" persons = self.persons2Projects; ret={} + logging.debug("Check Person:"+repr(persons.keys())) - for person in persons.keys(): + personsList=[x for x in persons.keys()] + + def sort(x,y): + sortNrx=self.personsIDForSort.index(x) + sortNry=self.personsIDForSort.index(y) + #logging.debug("INSORT***") + #logging.debug((sortNrx,sortNry)) + return cmp(sortNrx,sortNry) + + logging.debug("SORT***") + logging.debug(self.personsIDForSort) + logging.debug("SORT.list") + logging.debug(personsList) + personsList.sort(cmp=sort) + #for person in persons.keys(): + logging.debug("AFTERSORT***") + logging.debug(personsList) + for person in personsList: logging.debug("Check:"+person) - #TODO: person muss duch den namen von provuder geholt werden + #TODO: person muss duch den namen von provider geholt werden list=[] for projectID in persons.get(person): list.append(self.getProjectDetails(projectID)) ret[person]=list[0:] - return ret + + logging.debug("AFTERSORT-ret***") + logging.debug(ret.keys()) + return ret,personsList def getHistoricalPlacesWithProjectIDs(self): """holt die getaggted Personen mit Projekten"""