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