--- MPIWGWeb/MPIWGProjects.py 2005/10/12 19:35:38 1.47.2.28 +++ MPIWGWeb/MPIWGProjects.py 2005/10/13 18:00:36 1.47.2.29 @@ -3,6 +3,7 @@ for organizing and maintaining the diffe """ #TODO: mechanismus fur links to personen ueberarbeiten, da jetzt alle e_mails als members auftauchen unabhaengig vom status publish_the_data +#TODO: was passiert wenn aenderungen von jochen im filemaker nicht mit den aenderungen im sql uebereinstimmen from Products.PageTemplates.PageTemplateFile import PageTemplateFile from Products.PageTemplates.PageTemplate import PageTemplate @@ -27,6 +28,10 @@ from bibliography import * import time import xml.dom.minidom import sys +from Ft.Xml.XPath import Evaluate +from Ft.Xml.XPath.Context import Context +from Ft.Xml.Domlette import NonvalidatingReader,PrettyPrint, Print +from Ft.Xml import EMPTY_NAMESPACE definedFields=['WEB_title','xdata_01','xdata_02','xdata_03','xdata_04','xdata_05','xdata_06','xdata_07','xdata_08','xdata_09','xdata_10','xdata_11','xdata_12','xdata_13','WEB_project_header','WEB_project_description','WEB_related_pub'] @@ -756,40 +761,47 @@ class MPIWGRoot(ZSQLExtendFolder): """ update""" RESPONSE.write("\n") url="http://itgroup.mpiwg-berlin.mpg.de:8050/FMPro?-db=personal-www&-format=-dso_xml&-lay=sql_export&-max=10000&-findall" - fh=urllib.urlopen(url) - dom=xml.dom.minidom.parse(fh) + dom = NonvalidatingReader.parseUri(url) + #fh=urllib.urlopen(url) + #dom=xml.dom.minidom.parse(fh) + memberFolder=getattr(self,'members') members=memberFolder.ZopeFind(memberFolder,obj_metatypes=["MPIWGStaff"]) memberList=[x[0] for x in members] - - for row in dom.getElementsByTagName('ROW'): - username=getTextFromNode(row.getElementsByTagName('username')[0]) - id=getTextFromNode(row.getElementsByTagName('ID')[0]) - name=getTextFromNode(row.getElementsByTagName('Name')[0]) - vorname=getTextFromNode(row.getElementsByTagName('Vorname')[0]) - title=getTextFromNode(row.getElementsByTagName('Title')[0]) - e_mail=getTextFromNode(row.getElementsByTagName('e_mail')[0]) - e_mail_p=getTextFromNode(row.getElementsByTagName('e_mail_p')[0]) - date_from=getTextFromNode(row.getElementsByTagName('Date_from')[0]) - date_to=getTextFromNode(row.getElementsByTagName('Date_to')[0]) - abteilung=getTextFromNode(row.getElementsByTagName('Abteilung')[0]) - heimat_inst=getTextFromNode(row.getElementsByTagName('heimat_inst')[0]) - funded_by=getTextFromNode(row.getElementsByTagName('funded_by')[0]) - e_mail2=getTextFromNode(row.getElementsByTagName('e_mail2')[0]) - publish_the_data=getTextFromNode(row.getElementsByTagName('publish_the_data')[0]) + #print dom + #ctx=Context(dom,processorNss={EMPTY_NAMESPACE:'http://www.filemaker.com/fmpdsoresult'}) + # Evaluate(u".//dn:ROW",contextNode=dom,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + #print dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + for row in dom.xpath(u'.//dn:ROW',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}): + + username=getTextFromNode(row.xpath('./dn:username',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + id=getTextFromNode(row.xpath('./dn:ID',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + name=getTextFromNode(row.xpath('./dn:Name',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + vorname=getTextFromNode(row.xpath('./dn:Vorname',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + title=getTextFromNode(row.xpath('./dn:Title',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail=getTextFromNode(row.xpath('./dn:e_mail',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail_p=getTextFromNode(row.xpath('./dn:e_mail_p',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_from=getTextFromNode(row.xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + date_to=getTextFromNode(row.xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + abteilung=getTextFromNode(row.xpath('./dn:Abteilung',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + heimat_inst=getTextFromNode(row.xpath('./dn:heimat_inst',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + funded_by=getTextFromNode(row.xpath('./dn:funded_by',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + e_mail2=getTextFromNode(row.xpath('./dn:e_mail2',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) + publish_the_data=getTextFromNode(row.xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) - cwNode=row.getElementsByTagName('current_work.current')[0] - cw=cwNode.getElementsByTagName('DATA') + #cwNode=row.xpath('./dn:current_work.current',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) if cw: txt=getTextFromNode(cw[0]) else: txt="" - cwNode=row.getElementsByTagName('current_work.publish')[0] - cw=cwNode.getElementsByTagName('DATA') + #cwNode=row.xpath('.//dn:current_work.publish',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0] + cw=row.xpath('./dn:current_work/dn:DATA',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if cw: txt_p=getTextFromNode(cw[0]) else: @@ -803,21 +815,38 @@ class MPIWGRoot(ZSQLExtendFolder): memberFolder._setObject(str(username),newObj) RESPONSE.write("

new:%s

\n"%username.encode('utf-8')) obj=getattr(memberFolder,username) - obj.createNewDBEntry(publish_the_data,id,name, - vorname,title,e_mail, + ret=obj.createNewDBEntry(publish_the_data,id,name, + vorname,username,title,e_mail, e_mail_p,date_from,date_to, abteilung,heimat_inst,funded_by, e_mail2,txt,txt_p) + RESPONSE.write("""

%s

"""%ret[1]) except: RESPONSE.write("

ERROR:%s %s %s

\n"%(username.encode('utf-8'),name.encode('utf-8'),vorname.encode('utf-8'))) RESPONSE.write("

: %s %s"%sys.exc_info()[:2]) else: RESPONSE.write("

update:%s

\n"%username.encode('utf-8')) - self.ZSQLChange(_table="personal_www",_identify="id=%s"%id,publish_the_data=publish_the_data, + + xquery=".//dn:ROW[dn:username='%s']"%username + results=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(results)>1: + RESPONSE.write("

WARNING (update): username %s not unique

\n"%username.encode('utf-8')) + xquery=".//dn:ROW[dn:publish_the_data='yes' and dn:username='%s']"%username + rd=dom.xpath(xquery,explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'}) + if len(rd)>1:#mehrere published + RESPONSE.write("

ERROR (update): username %s not unique and more then one date set to be published

\n"%username.encode('utf-8')) +# elif len(rd)==1:#nur einer published, kein published dann mache nichts +# publish_the_data=getTextFromNode(rd[0].xpath('./dn:publish_the_data',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_from=getTextFromNode(rd[0].xpath('./dn:Date_from',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# date_to=getTextFromNode(rd[0].xpath('./dn:Date_to',explicitNss={'dn':'http://www.filemaker.com/fmpdsoresult'})[0]) +# + + obj=getattr(memberFolder,username) + + obj.updateDBEntry(DBid=id,publish_the_data=publish_the_data, date_from=date_from, date_to=date_to) - - + return True