Mercurial > hg > MPIWGWeb
changeset 216:3b517b412f77
fixed problem updating users with new IDs
author | casties |
---|---|
date | Wed, 02 Oct 2013 14:40:50 +0200 |
parents | c0dcb747cc41 |
children | 2598210ada7a |
files | MPIWGRoot.py MPIWGStaff.py SrvTxtUtils.py zpt/updatePersonalwww_check.zpt |
diffstat | 4 files changed, 145 insertions(+), 100 deletions(-) [+] |
line wrap: on
line diff
--- a/MPIWGRoot.py Thu Aug 29 09:10:01 2013 +0200 +++ b/MPIWGRoot.py Wed Oct 02 14:40:50 2013 +0200 @@ -282,7 +282,7 @@ def generateNewPersonEntry(self,data): """generate a new person entry for data, neue personen werden zunaechst nur in der datenbank angelegt """ - + logging.debug("generateNewPersonEntry(%s)"%repr(data)) #memberFolder=getattr(self,'members') #create the object @@ -341,7 +341,6 @@ """do the update""" args=self.REQUEST.form - resultSet=self.REQUEST.SESSION['personal_www']['resultSet'] news=self.REQUEST.SESSION['personal_www']['news'] conflicts=self.REQUEST.SESSION['personal_www']['conflicts'] @@ -355,6 +354,7 @@ ret+="<ul>" for new in news: + logging.debug("updatePersonalwww_doIt: adding %s"%repr(new)) if args.has_key(new.encode('utf-8')): # entry was selected result,msg=self.generateNewPersonEntry(resultSet[new]) if not result: @@ -364,7 +364,9 @@ ret+="<li>OK: %s"%(new.encode('utf-8')) if news and (len(news)>0): + ret+="</ul>" ret+="<p>New entries will be visible on the webpage when an email address has been assigned.</p>" + else: ret+="</ul>" # update @@ -373,7 +375,7 @@ ret+="<h2>Accepted changes to user entries</h2>" ret+="<p>Change Filemaker-db when necessary.</p>" - # konflicte + # conflicts for conflict in conflicts.keys(): ignoreEntries=[] displayIgnored=[] @@ -396,13 +398,13 @@ cl=list(conflicts.keys()) if len(resultSet.keys()) > 0: - ret += "<h2>Updating user entries</h2>" + ret += "<h2>Updated user entries</h2>" ret += "<ul>" for key in resultSet.keys(): if key not in cl: self.updatePersonEntry(resultSet[key]) - ret+="<li>%s</li>"%(key.encode('utf-8')) + ret+="<li>%s %s (%s)</li>"%(resultSet[key].get('first_name','').encode('utf-8'), resultSet[key].get('last_name','').encode('utf-8'), key.encode('utf-8')) if len(resultSet.keys()) > 0: ret += "</ul>" @@ -411,10 +413,8 @@ return ret+"</body></html>" - def updatePersonalwww_html(self): - """update form for the homepages web form""" - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','updatePersonalwww.zpt')).__of__(self) - return pt() + """update form for the homepages web form""" + updatePersonalwww_html = PageTemplateFile('zpt/updatePersonalwww', globals()) def updatePersonalwww(self,uploadfile): @@ -424,17 +424,27 @@ dsn=self.getConnectionObj().connection_string #dsn="dbname=personalwww" resultSetTmp=updatePersonalWWW.importFMPXML(uploadfile) - resultSet={} for key in resultSetTmp.keys(): - resultSet[key.replace("MPIWG:","")]=resultSetTmp[key]; + # TODO: properly fix MPIWG: id problem + if key.startswith('MPIWG:'): + # strip MPIWG: from key + newkey = key.replace('MPIWG:','') + # replace key in data + resultSetTmp[key]['key'] = newkey + # replace key in resultSet + resultSet[newkey]=resultSetTmp[key]; + + else: + # copy entry + resultSet[key] = resultSetTmp[key] news,conflicts=updatePersonalWWW.checkImport(dsn, resultSet) self.REQUEST.SESSION['personal_www'] = {'resultSet': resultSet, 'news': news, 'conflicts': conflicts} - pt=PageTemplateFile(os.path.join(package_home(globals()),'zpt','updatePersonalwww_check.zpt')).__of__(self) + pt=PageTemplateFile('zpt/updatePersonalwww_check', globals()).__of__(self) return pt()
--- a/MPIWGStaff.py Thu Aug 29 09:10:01 2013 +0200 +++ b/MPIWGStaff.py Wed Oct 02 14:40:50 2013 +0200 @@ -403,15 +403,6 @@ return l - - def execute(self,mode,REQUEST=None): - method = getattr(self,mode,None) - if method is not None: - return method(REQUEST); - else: - return "NOT FOUND" - - getUrl = MPIWGHelper.getUrl def getTalks(self, published=True, sortBy='priority'): @@ -459,7 +450,6 @@ def downloadCV(self,REQUEST): """download the cv""" - fname="%s_cv.pdf"%self.getUsername().encode('utf-8') logging.debug(fname) ob=self.folder._getOb("downloadableFiles")._getOb(fname) @@ -468,8 +458,6 @@ def downloadPublications(self,REQUEST): """donwload the publication list""" - - ob=self.folder._getOb("downloadableFiles")._getOb("%s_publications.pdf"%self.getUsername().encode('utf-8')) REQUEST.RESPONSE.redirect(ob.absolute_url()) @@ -481,7 +469,6 @@ def getPathStyle(self, path, selected, style=""): """returns a string with the given style + 'sel' if path == selected.""" - if path == selected: return style + 'sel' else:
--- a/SrvTxtUtils.py Thu Aug 29 09:10:01 2013 +0200 +++ b/SrvTxtUtils.py Wed Oct 02 14:40:50 2013 +0200 @@ -7,14 +7,21 @@ import os import stat import urllib -import urllib2 import logging import time import re +import datetime +try: + import httplib2 + httplib = 'httplib2' +except: + logging.warn("Unable to import httplib2! Falling back to urllib2!") + import urllib2 + httplib = 'urllib2' import xml.etree.ElementTree as ET -srvTxtUtilsVersion = "1.10.0" +srvTxtUtilsVersion = "1.12.0" map_months = {'en': [u"", u"January", @@ -153,7 +160,25 @@ return ds -def getHttpData(url, data=None, num_tries=3, timeout=10, noExceptions=False): +def getDate(date): + """return date object from date or datetime date.""" + if isinstance(date, datetime.datetime): + # strip time + return date.date() + + return date + + +def getDatetime(date): + """return datetime object from date or datetime date.""" + if isinstance(date, datetime.date): + # add time 0:00 + return datetime.datetime.combine(date, datetime.time()) + + return date + + +def getHttpData(url, data=None, num_tries=3, timeout=10, username=None, password=None, cache=None, insecure=False, noExceptions=False): """returns result from url+data HTTP request""" # we do GET (by appending data to url) if isinstance(data, str) or isinstance(data, unicode): @@ -162,37 +187,55 @@ elif isinstance(data, dict) or isinstance(data, list) or isinstance(data, tuple): # urlencode url = "%s?%s"%(url,urllib.urlencode(data)) - - response = None + errmsg = None - for cnt in range(num_tries): - try: - logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url)) - if sys.version_info < (2, 6): - # set timeout on socket -- ugly :-( - import socket - socket.setdefaulttimeout(float(timeout)) - response = urllib2.urlopen(url) - else: - # timeout as parameter - response = urllib2.urlopen(url,timeout=float(timeout)) - # check result? - break - except urllib2.HTTPError, e: - logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e)) - errmsg = str(e) - # stop trying - break - except urllib2.URLError, e: - logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e)) - errmsg = str(e) - # stop trying - #break + if httplib == 'httplib2': + # use httplib2 + for cnt in range(num_tries): + try: + logging.debug("getHttp(lib2)Data(#%s %ss) url=%s"%(cnt+1,timeout,url)) + h = httplib2.Http(cache=cache, timeout=float(timeout), disable_ssl_certificate_validation=insecure) + if username: + h.add_credentials(username, password) + + resp, data = h.request(url) + return data + + except httplib2.HttpLib2Error, e: + logging.error("getHttp(lib2)Data: HTTP error(%s): %s"%(e.code,e)) + errmsg = str(e) + # stop trying + break + + else: + # use urllib2 + response = None + for cnt in range(num_tries): + try: + logging.debug("getHttpData(#%s %ss) url=%s"%(cnt+1,timeout,url)) + if sys.version_info < (2, 6): + # set timeout on socket -- ugly :-( + import socket + socket.setdefaulttimeout(float(timeout)) + response = urllib2.urlopen(url) + else: + # timeout as parameter + response = urllib2.urlopen(url,timeout=float(timeout)) + # check result? + data = response.read() + response.close() + return data - if response is not None: - data = response.read() - response.close() - return data + except urllib2.HTTPError, e: + logging.error("getHttpData: HTTP error(%s): %s"%(e.code,e)) + errmsg = str(e) + # stop trying + break + except urllib2.URLError, e: + logging.error("getHttpData: URLLIB error(%s): %s"%(e.reason,e)) + errmsg = str(e) + # stop trying + #break if noExceptions: return None
--- a/zpt/updatePersonalwww_check.zpt Thu Aug 29 09:10:01 2013 +0200 +++ b/zpt/updatePersonalwww_check.zpt Wed Oct 02 14:40:50 2013 +0200 @@ -5,50 +5,55 @@ <body> <h1>Check upload</h1> <form method="post" action="updatePersonalwww_doIt"> - <h2>New</h2> - <table> - <tr tal:repeat="new news"> - <td><span tal:replace="python:resultSet[new]['first_name']">first</span> - <span tal:replace="python:resultSet[new]['last_name']">last</span> - </td> - <td> - <input type="checkbox" tal:attributes="name python:new.encode('utf-8')" checked="True" value="new"/> - </td> - </tr> - </table> + <tal:block tal:condition="news"> + <h2>New</h2> + <table> + <tr tal:repeat="new news"> + <td><span tal:replace="python:resultSet[new]['first_name']">first</span> + <span tal:replace="python:resultSet[new]['last_name']">last</span> + </td> + <td> + <input type="checkbox" tal:attributes="name python:new.encode('utf-8')" checked="True" value="new"/> + </td> + </tr> + </table> + </tal:block> - <h2>Conflicts</h2> - <table border="1"> - <tr tal:repeat="conflict python:conflicts.keys()"> - <td valign="top"><span tal:replace="python:resultSet[conflict]['first_name']">first</span> - <span tal:replace="python:resultSet[conflict]['last_name']">last</span> - </td> - <td> - <tal:x repeat="cf python:conflicts[conflict]"> - <table border="1"> - <tr> - <td bgcolor="green" colspan="3"><span tal:replace="python:cf[0]">feld</span></td> - </tr> - <tr> - <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="stored" grant all privilege checked="True"></td> - <td valign="top">stored:</td> - <td><span tal:replace="python:cf[1]">stored value</span></td> - </tr> - <tr> - <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="xml" ></td> - <td valign="top">xml-file:</td> - <td><span tal:replace="python:cf[2]">value from xml-file</span></td> - </tr> - <!-- <tr> - <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="reject"></td> - <td valign="top">reject</td> - <td> </td> - </tr>--> - </table> - </tal:x> - </td> - </tr> - </table> + <tal:block tal:condition="conflicts"> + <h2>Conflicts</h2> + <table border="1"> + <tr tal:repeat="conflict python:conflicts.keys()"> + <td valign="top"><span tal:replace="python:resultSet[conflict]['first_name']">first</span> + <span tal:replace="python:resultSet[conflict]['last_name']">last</span> + </td> + <td> + <tal:x repeat="cf python:conflicts[conflict]"> + <table border="1"> + <tr> + <td bgcolor="green" colspan="3"><span tal:replace="python:cf[0]">feld</span></td> + </tr> + <tr> + <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="stored" grant all privilege checked="True"></td> + <td valign="top">stored:</td> + <td><span tal:replace="python:cf[1]">stored value</span></td> + </tr> + <tr> + <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="xml" ></td> + <td valign="top">xml-file:</td> + <td><span tal:replace="python:cf[2]">value from xml-file</span></td> + </tr> + <!-- <tr> + <td valign="top"><input type="radio" tal:attributes="name python:conflict+'_'+cf[0]" value="reject"></td> + <td valign="top">reject</td> + <td> </td> + </tr>--> + </table> + </tal:x> + </td> + </tr> + </table> + </tal:block> + <p><span tal:content="python:len(resultSet)"/> total entries to change.</p> <input type="submit"> </form> </body>