Commit 90637057 authored by Bartek Górny's avatar Bartek Górny

fixed default params in two functions; fixed processing order in stage 1...

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
parent dc4683a1
...@@ -716,7 +716,7 @@ class Document(XMLObject): ...@@ -716,7 +716,7 @@ class Document(XMLObject):
# handle the weird cases in which needed properties change with the type of document # 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 # and the usual cases in which accessing content changes with the meta type
security.declareProtected(Permissions.ModifyPortalContent,'getPropertyDictFromUserLogin') 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. Based on the user_login, find out as many properties as needed.
returns properties which should be set on the document returns properties which should be set on the document
...@@ -768,7 +768,7 @@ class Document(XMLObject): ...@@ -768,7 +768,7 @@ class Document(XMLObject):
### Metadata disovery and ingestion methods ### Metadata disovery and ingestion methods
security.declareProtected(Permissions.ModifyPortalContent, 'discoverMetadata') 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 This is the main metadata discovery function - controls the process
of discovering data from various sources. The discovery itself is of discovering data from various sources. The discovery itself is
...@@ -789,10 +789,11 @@ class Document(XMLObject): ...@@ -789,10 +789,11 @@ class Document(XMLObject):
# Start with everything until content # Start with everything until content
content_index = order_list.index('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 # Start with everything until content - build a dictionnary according to the order
kw = {} 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: if order_id not in VALID_ORDER_KEY_LIST:
# Prevent security attack or bad preferences # Prevent security attack or bad preferences
raise AttributeError, "%s is not in valid order key list" % order_id raise AttributeError, "%s is not in valid order key list" % order_id
...@@ -801,7 +802,7 @@ class Document(XMLObject): ...@@ -801,7 +802,7 @@ class Document(XMLObject):
if order_id == 'file_name': if order_id == 'file_name':
result = method(file_name) result = method(file_name)
elif order_id == 'user_login': elif order_id == 'user_login':
result = method(file_name) result = method(user_login)
else: else:
result = method() result = method()
if result is not None: if result is not None:
...@@ -824,8 +825,7 @@ class Document(XMLObject): ...@@ -824,8 +825,7 @@ class Document(XMLObject):
for later. It converts what needs conversion to base, and for later. It converts what needs conversion to base, and
does things that can be done only after it is converted). 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 # Get the order from preferences
# Preference is made of a sequence of 'user_login', 'content', 'file_name', 'input' # Preference is made of a sequence of 'user_login', 'content', 'file_name', 'input'
method = self._getTypeBasedMethod('getPreferredDocumentMetadataDiscoveryOrderList', method = self._getTypeBasedMethod('getPreferredDocumentMetadataDiscoveryOrderList',
...@@ -844,9 +844,14 @@ class Document(XMLObject): ...@@ -844,9 +844,14 @@ class Document(XMLObject):
method_id = 'getPropertyDictFrom%s' % convertToUpperCase(order_id) method_id = 'getPropertyDictFrom%s' % convertToUpperCase(order_id)
method = getattr(self, method_id) method = getattr(self, method_id)
if order_id == 'file_name': 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': elif order_id == 'user_login':
result = method(file_name) raise AttributeError, "user_login can not be done in second stage"
else: else:
result = method() result = method()
if result is not None: if result is not None:
...@@ -869,4 +874,11 @@ class Document(XMLObject): ...@@ -869,4 +874,11 @@ class Document(XMLObject):
return self._getTypeBasedMethod('finishIngestion', return self._getTypeBasedMethod('finishIngestion',
fallback_script_id='Document_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 # vim: filetype=python syntax=python shiftwidth=2
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment