From 906370577f6195002295375a91bf73d49ecfed17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bartek=20G=C3=B3rny?= <bartek@gorny.edu.pl> Date: Wed, 24 Jan 2007 17:26:41 +0000 Subject: [PATCH] fixed default params in two functions; fixed processing order in stage 1 (should be reverse); added API method convertToBase; marked a problem of user_login in stage 2; git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@12349 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/ERP5/Document/Document.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/product/ERP5/Document/Document.py b/product/ERP5/Document/Document.py index dd0a6e242e0..db9365823fc 100644 --- a/product/ERP5/Document/Document.py +++ b/product/ERP5/Document/Document.py @@ -716,7 +716,7 @@ class Document(XMLObject): # handle the weird cases in which needed properties change with the type of document # and the usual cases in which accessing content changes with the meta type security.declareProtected(Permissions.ModifyPortalContent,'getPropertyDictFromUserLogin') - def getPropertyDictFromUserLogin(self, user_login): + def getPropertyDictFromUserLogin(self, user_login=None): """ Based on the user_login, find out as many properties as needed. returns properties which should be set on the document @@ -768,7 +768,7 @@ class Document(XMLObject): ### Metadata disovery and ingestion methods security.declareProtected(Permissions.ModifyPortalContent, 'discoverMetadata') - def discoverMetadata(self, file_name=None, user_login=None): + def discoverMetadata(self, file_name, user_login=None): """ This is the main metadata discovery function - controls the process of discovering data from various sources. The discovery itself is @@ -789,10 +789,11 @@ class Document(XMLObject): # Start with everything until content content_index = order_list.index('content') - # XXX should be done in the reverse order # Start with everything until content - build a dictionnary according to the order kw = {} - for order_id in order_list[0:content_index-1]: + first_list = order_list[0:content_index-1] + first_list.reverse() + for order_id in first_list: if order_id not in VALID_ORDER_KEY_LIST: # Prevent security attack or bad preferences raise AttributeError, "%s is not in valid order key list" % order_id @@ -801,7 +802,7 @@ class Document(XMLObject): if order_id == 'file_name': result = method(file_name) elif order_id == 'user_login': - result = method(file_name) + result = method(user_login) else: result = method() if result is not None: @@ -824,8 +825,7 @@ class Document(XMLObject): for later. It converts what needs conversion to base, and does things that can be done only after it is converted). """ - if getattr(self, 'convertToBase', _MARKER) is not _MARKER: - self.convertToBase() + self.convertToBase() # Get the order from preferences # Preference is made of a sequence of 'user_login', 'content', 'file_name', 'input' method = self._getTypeBasedMethod('getPreferredDocumentMetadataDiscoveryOrderList', @@ -844,9 +844,14 @@ class Document(XMLObject): method_id = 'getPropertyDictFrom%s' % convertToUpperCase(order_id) method = getattr(self, method_id) if order_id == 'file_name': - result = method(file_name) + result = method(self.getSourceReference()) + # XXX a problem - if user_login was explicitly supplied + # we don't have it here (volatile attr would have been lost by now) + # so we can't have user_login after content + #elif order_id == 'user_login': + #result = method(user_login) elif order_id == 'user_login': - result = method(file_name) + raise AttributeError, "user_login can not be done in second stage" else: result = method() if result is not None: @@ -869,4 +874,11 @@ class Document(XMLObject): return self._getTypeBasedMethod('finishIngestion', fallback_script_id='Document_finishIngestion') + def convertToBase(self): + """ + API method - some subclasses store data in a certain 'base' format + (e.g. OOoDocument uses ODF) + """ + pass + # vim: filetype=python syntax=python shiftwidth=2 -- 2.30.9