[Erp5-report] r26878 - /erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu May 7 14:44:11 CEST 2009
Author: vincent
Date: Thu May 7 14:44:11 2009
New Revision: 26878
URL: http://svn.erp5.org?rev=26878&view=rev
Log:
Replace DocumentSearch.py extension by Base_parseSearchString restricted script using catalog API to access expression parser.
Removed:
erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py
Removed: erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py
URL: http://svn.erp5.org/erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py?rev=26877&view=auto
==============================================================================
--- erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py [utf8] (original)
+++ erp5/trunk/bt5/erp5_dms/ExtensionTemplateItem/DocumentSearch.py (removed)
@@ -1,121 +1,0 @@
-##############################################################################
-#
-# Copyright (c) 2006-2007 Nexedi SA and Contributors. All Rights Reserved.
-#
-# WARNING: This program as such is intended to be used by professional
-# programmers who take the whole responsability of assessing all potential
-# consequences resulting from its eventual inadequacies and bugs
-# End users who are looking for a ready-to-use solution with commercial
-# garantees and support are strongly adviced to contract a Free Software
-# Service Company
-#
-# This program is Free Software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-##############################################################################
-
-"""
-RULES
-
-Single arguments:
- - arg:value translates into arg='value' in query
- - quotes are cleared
- - if value contains spaces, punctuation or anything else it has to be put in quotes
- - file is source_reference (original file name)
- - language, version, reference
-
-Multiple arguments:
- - arg:xxx works the same way
- - arg:(xxx,yyy) ORs both
- - arg:all translates into empty tuple, which implies all available values
- - state (simulation_state), type (portal_type)
-
-Everything else is treated as searchabletext
-"""
-
-# XXX score:
-# pythonicity: high
-# obfuscation level: brain-twisting
-
-# how to customize:
-# (1) think for two hours
-# (2) type for 20 seconds
-
-import re
-import sys
-sys.path.append('/usr/lib/zope/lib/python/')
-from DateTime import DateTime
-
-def dateRangeProc(s):
- """
- process date range (can be given in months or years)
- """
- m=re.match('(\d)([wmy]).*',s)
- try:
- dif=0
- gr=m.groups()
- if gr[1]=='w':dif=int(gr[0])*7
- if gr[1]=='m':dif=int(gr[0])*30
- if gr[1]=='y':dif=int(gr[0])*365
- return ('creation_from',DateTime()-dif)
- except AttributeError, IndexError:
- return ()
-
-# parsing defined here
-r=re.compile('(\w+:"[^"]+"|\w+:\([^)]+\)|\w+:[\(\),\w/\-.]+)')
-filetyper=lambda s:('source_reference','%%.%s' % s)
-filestripper=lambda s: ('source_reference',s.replace('"',''))
-state=lambda s:('simulation_state',parsestates(s))
-type=lambda s:('portal_type',parsestates(s))
-paramsmap=dict(file=filestripper,type=type,reference='reference',filetype=filetyper,state=state,\
- language='language',version='version',created=dateRangeProc)
-
-def parsestates(s):
- if s=='all':
- return ()
- if s[0]=='(' and s[-1]==')':
- return [i.replace('"','').replace("'","") for i in s[1:-1].split(',') if i!='']
- return s.replace('"','').replace("'","")
-
-def analyze(params):
- params['searchabletext']=''
- def cutter(s):
- ss=s.split(':')
- if len(ss)==1:
- params['searchabletext']+=ss[0]
- if len(ss)==2:
- try:
- ps=paramsmap.get(ss[0])(ss[1])
- params[ps[0]]=ps[1]
- except TypeError:
- if paramsmap.has_key(ss[0]):
- params[paramsmap.get(ss[0])]=ss[1]
- else:
- params[ss[0]]=ss[1]
- except IndexError:
- return
- return cutter
-
-def parseSearchString(searchstring):
- params={}
- l=r.split(searchstring)
- map(analyze(params),l)
- params['searchabletext']=params['searchabletext'].strip()
- return params
-
-if __name__=='__main__':
- #searchstring='byle cisnie zego file:"ble ble.doc" filetype:doc type:Text poza tym reference:abc-def'
- #searchstring='byle "cisnie zego" state:draft file:"ble ble.doc" type:("Site","Text") poza tym reference:abc-def dupa:kwas/zbita'
- searchstring='byleco created:3mth'
- print parseSearchString(searchstring)
More information about the Erp5-report
mailing list