|
|
| version 1.133, 2010/02/15 19:10:23 | version 1.143, 2012/02/15 08:08:42 |
|---|---|
| Line 5 import urllib | Line 5 import urllib |
| import re | import re |
| import string | import string |
| #from pyPgSQL import libpq | #from pyPgSQL import libpq |
| import psycopg2 | |
| from AccessControl import getSecurityManager,Unauthorized | from AccessControl import getSecurityManager,Unauthorized |
| from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate | from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate |
| from Products.PageTemplates.PageTemplateFile import PageTemplateFile | from Products.PageTemplates.PageTemplateFile import PageTemplateFile |
| from Products.ZSQLMethods.SQL import SQLConnectionIDs | from Products.ZSQLMethods.SQL import SQLConnectionIDs |
| from Shared.DC.ZRDB.Results import Results | |
| from xml.sax.saxutils import escape | from xml.sax.saxutils import escape |
| from types import * | from types import * |
| import Shared.DC.ZRDB.DA | import Shared.DC.ZRDB.DA |
| Line 369 class ZSQLExtendFolder(Folder,Persistent | Line 372 class ZSQLExtendFolder(Folder,Persistent |
| lc_names=True,keep_fields=False,ascii_db=False,replace=False,backup=False, | lc_names=True,keep_fields=False,ascii_db=False,replace=False,backup=False, |
| debug=False,log_to_response=False, | debug=False,log_to_response=False, |
| redirect_url=None,RESPONSE=None): | redirect_url=None,RESPONSE=None): |
| ''' | """ |
| Import FileMaker XML file (FMPXMLRESULT format) into the table. | Import FileMaker XML file (FMPXMLRESULT format) into the table. |
| @param dsn: database connection string | @param dsn: database connection string |
| @param table: name of the table the xml shall be imported into (may be comma-separated list) | @param table: name of the table the xml shall be imported into (may be comma-separated list) |
| Line 384 class ZSQLExtendFolder(Folder,Persistent | Line 387 class ZSQLExtendFolder(Folder,Persistent |
| @param backup: (optional) create backup of old table (breaks indices) | @param backup: (optional) create backup of old table (breaks indices) |
| @param RESPONSE: (optional) | @param RESPONSE: (optional) |
| @param redirect_url: (optional) url for redirecting after the upload is done | @param redirect_url: (optional) url for redirecting after the upload is done |
| ''' | """ |
| tfilehd,filename=tempfile.mkstemp() | tfilehd,filename=tempfile.mkstemp() |
| tfile=os.fdopen(tfilehd,'w') | tfile=os.fdopen(tfilehd,'w') |
| Line 432 class ZSQLExtendFolder(Folder,Persistent | Line 435 class ZSQLExtendFolder(Folder,Persistent |
| options.replace_table=replace | options.replace_table=replace |
| options.backup_table=backup | options.backup_table=backup |
| options.debug=debug | options.debug=debug |
| logging.debug(options) | |
| if RESPONSE and log_to_response: | if RESPONSE and log_to_response: |
| # set up logging to response as plain text | # set up logging to response as plain text |
| logging.debug("Setting up logging to RESPONSE") | logging.debug("Setting up logging to RESPONSE") |
| Line 448 class ZSQLExtendFolder(Folder,Persistent | Line 451 class ZSQLExtendFolder(Folder,Persistent |
| logger.addHandler(loghandler) | logger.addHandler(loghandler) |
| options.use_logger_instance = logger | options.use_logger_instance = logger |
| try: | |
| err = None | |
| importFMPXML(options) | importFMPXML(options) |
| logging.info("importXMLFileFMP: done") | logging.info("importXMLFileFMP: done") |
| except Exception, err: | |
| logging.error("Error importing: %s"%err) | |
| if RESPONSE and log_to_response: | if RESPONSE and log_to_response: |
| loghandler.flush() | loghandler.flush() |
| if err is not None: | |
| RESPONSE.write("\n\nERROR while importing: %s"%err) | |
| else: | |
| RESPONSE.write("\n\n DONE!") | RESPONSE.write("\n\n DONE!") |
| elif RESPONSE and redirect_url: | elif RESPONSE and redirect_url: |
| Line 499 class ZSQLExtendFolder(Folder,Persistent | Line 509 class ZSQLExtendFolder(Folder,Persistent |
| def URLquote(self,txt): | def URLquote(self,txt): |
| """urlquote" | """urlquote |
| @param txt: text der urlgequoted werden soll. | @param txt: text der urlgequoted werden soll. |
| """ | """ |
| return urllib.quote(txt) | return urllib.quote(txt) |
| Line 579 class ZSQLExtendFolder(Folder,Persistent | Line 589 class ZSQLExtendFolder(Folder,Persistent |
| return pt() | return pt() |
| def changeZSQLExtend(self,label,description,weight=0,connection_id=None,REQUEST=None,): | def changeZSQLExtend(self,label,description,weight=0,connection_id=None,autocommit=None,REQUEST=None,): |
| """change the Konfiguration""" | """change the Konfiguration""" |
| self.connection_id=connection_id | self.connection_id=connection_id |
| self.weight=weight | self.weight=weight |
| self.label=label | self.label=label |
| self.description=description | self.description=description |
| self.autocommit = (autocommit == "on") | |
| if REQUEST is not None: | if REQUEST is not None: |
| return self.manage_main(self, REQUEST) | return self.manage_main(self, REQUEST) |
| Line 923 class ZSQLExtendFolder(Folder,Persistent | Line 934 class ZSQLExtendFolder(Folder,Persistent |
| def ZSQLInlineSearch(self,storename=None,args=None,**argv): | def ZSQLInlineSearch(self,storename=None,args=None,**argv): |
| """inlinesearch""" | """inlinesearch""" |
| #logging.debug("ZSQLInlineSearch args=%s argv=%s"%(args,argv)) | |
| qs=[] | qs=[] |
| if storename: | if storename: |
| """store""" | """store""" |
| else: | else: |
| storename="foundCount" | storename="foundCount" |
| if args: | if args: |
| argTmp=args | argTmp=args |
| else: | else: |
| Line 945 class ZSQLExtendFolder(Folder,Persistent | Line 954 class ZSQLExtendFolder(Folder,Persistent |
| if type(argTmp[a]) is ListType: # ein parameter zweimal | if type(argTmp[a]) is ListType: # ein parameter zweimal |
| value="" | value="" |
| #TODO find a better solution, currently only the last non empty entry is used. | #TODO find a better solution, currently only the last non empty entry is used. |
| for x in argTmp[a]: | #for x in argTmp[a]: |
| if x: | # if x: |
| value=x | # value=x |
| # version: join with spaces (makes sense with checkbox and -op=all) | |
| value = " ".join(argTmp[a]) | |
| else: | else: |
| try: | |
| value=str(argTmp[a]) | value=str(argTmp[a]) |
| qs.append(aFiltered+"="+urllib.quote(value)) | except: |
| value=utf8ify(argTmp[a]) | |
| qs.append(aFiltered+"="+urllib.quote(value)) | |
| #logging.debug("InlineSearch:"+string.join(qs,",")) | |
| #return [] | #return [] |
| Line 977 class ZSQLExtendFolder(Folder,Persistent | Line 991 class ZSQLExtendFolder(Folder,Persistent |
| except: | except: |
| logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2]) | logger("ZSQLResetConnection",logging.ERROR, '%s %s'%sys.exc_info()[:2]) |
| def ZSQLSimpleSearch(self,query=None,max_rows=1000000): | def ZSQLSimpleSearch(self,query=None,max_rows=1000000): |
| """new simple search""" | |
| logging.debug("new ZSQLSimpleSearch %s"%query) | |
| # get Connection instance | |
| con = self.getConnectionObj() | |
| # call to get db object | |
| dbc = con() | |
| if getattr(self, 'autocommit', False): | |
| # force transaction isolation level (for psycopg2 0=autocommit) | |
| logging.debug(" old tilevel=%s"%dbc.tilevel) | |
| dbc.tilevel = 0 | |
| # modified code from ZPsycopgDA.db without _register: | |
| c = dbc.getcursor() | |
| desc = () | |
| r = [] | |
| try: | |
| try: | |
| c.execute(query) | |
| except psycopg2.OperationalError: | |
| #logging.exception("Operational error on connection, closing it.") | |
| try: | |
| # Only close our connection | |
| dbc.putconn(True) | |
| except: | |
| #logging.debug("Something went wrong when we tried to close the pool", exc_info=True) | |
| pass | |
| if c.description is not None: | |
| if max_rows: | |
| r = c.fetchmany(max_rows) | |
| else: | |
| r = c.fetchall() | |
| desc = c.description | |
| dbc.failures = 0 | |
| except StandardError, err: | |
| raise err | |
| res = (dbc.convert_description(desc), r) | |
| else: | |
| logging.debug(" no autocommit") | |
| # just use DA's query method | |
| res = dbc.query(query, max_rows=max_rows) | |
| # return result set as Result object with Brains | |
| return Results(res) | |
| def oldZSQLSimpleSearch(self,query=None,max_rows=1000000): | |
| """simple search""" | """simple search""" |
| logging.error("ZSQLSimpleSearch X %s"%query) | logging.error("ZSQLSimpleSearch X %s"%query) |
| #print query | #print query |
| Line 1206 class ZSQLExtendFolder(Folder,Persistent | Line 1271 class ZSQLExtendFolder(Folder,Persistent |
| """search in database""" | """search in database""" |
| def delEmpty(list): | def delEmpty(list): |
| """"loesche leere elemente aus der liste""" | """loesche leere elemente aus der liste""" |
| ret=[] | ret=[] |
| for x in list: | for x in list: |
| splitted=x.split("=") | splitted=x.split("=") |
| Line 1340 class ZSQLExtendFolder(Folder,Persistent | Line 1405 class ZSQLExtendFolder(Folder,Persistent |
| def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None): | def parseQueryString(self,qs,iCT,storemax="no",select=None,nostore=None,storename="foundCount",tableExt=None,NoQuery=None,NoLimit=None,restrictField=None,restrictConnect=None,filter=None): |
| """analysieren den QueryString""" | """analysieren den QueryString""" |
| logging.debug("parseQueryString qs=%s"%qs) | |
| #setzte generische werte | #setzte generische werte |
| Line 1496 class ZSQLExtendFolder(Folder,Persistent | Line 1561 class ZSQLExtendFolder(Folder,Persistent |
| op=opfields[name] | op=opfields[name] |
| else: | else: |
| op="ct" | op="ct" |
| namealt=name | namealt=name |
| name="LOWER("+punktsplit[1]+")" | name="LOWER("+punktsplit[1]+")" |
| value=value.lower() | value=value.lower() |
| Line 1852 class ZSQLExtendFolder(Folder,Persistent | Line 1918 class ZSQLExtendFolder(Folder,Persistent |
| return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html) | return "<a href='%s'>%s</a>"%(self.REQUEST['URL']+"?"+newquerystring,html) |
| def pydev_settrace(self): | |
| """do settrace to start debugging""" | |
| import pydevd | |
| pydevd.settrace() | |
| manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals()) | manage_addZSQLExtendFolderForm=DTMLFile('ZSQLExtendFolderAdd', globals()) |
| Line 2165 def manage_addZSQLBibliography(self, id, | Line 2235 def manage_addZSQLBibliography(self, id, |