1. 13 Mar, 2023 4 commits
    • Kazuhiko Shiozaki's avatar
      WIP: Revert "XMLExportImport: don't support bytes for now" · ff3e5cab
      Kazuhiko Shiozaki authored
      This reverts commit 3145b32f.
      
      Otherwise, ERP5 site setup fails while importing erp5_core/ToolTemplateItem/portal_transforms.xml.
      
      /SR/parts/erp5/product/ERP5/Document/BusinessTemplate.py(930)_importFile()
          928         # FIXME: Why not use the importXML function directly? Are there any BT5s
          929         # with actual .zexp files on the wild?
      --> 930         obj = connection.importFile(file_obj, customImporters=customImporters)
          931       self._objects[obj_key] = obj
          932
      
      ipdb> file_obj
      <_io.BufferedReader name='/SR/parts/erp5/product/ERP5/bootstrap/erp5_core/ToolTemplateItem/portal_transforms.xml'>
      ...
      > /SR/develop-eggs/zodbpickle-2.0.0+slapospatched001-py3.8-linux-x86_64.egg/zodbpickle/pickle_3.py(995)decode_string()
          993                 return value
          994         else:
      --> 995             return value.decode(self.encoding, self.errors)
          996
          997     def load_string(self):
      
      ipdb> p value
      b'\x00\x00\x00\x00\x00\x00\x00\x80'
      ff3e5cab
    • Kazuhiko Shiozaki's avatar
      lazy_class: remove Broken from the base classes of ERP5BaseBroken. · 96fc5e58
      Kazuhiko Shiozaki authored
      otherwise we will have an Exception in Python 3 while importing a Business Template,
      if a new portal type and its documents exist in the same Business Template.
      
      while importing a content file, like *.js...
      
      (BusinessTemplate.py)
        try:
          setattr(obj, property_name, data)
        except BrokenModified:
          obj.__Broken_state__[property_name] = data # <-- !!!
          obj._p_changed = 1
      
      obj.__Broken_state__ access here also raises BrokenModified.
      
      while importing an XML file...
      
      (ZODB/broken.py)
        def __new__(class_, *args):
          result = object.__new__(class_) # <-- !!!
          result.__dict__['__Broken_newargs__'] = args
          return result
      
      we get an exception 'TypeError: object.__new__(Portal Type) is not safe, use Base.__new__()'
      96fc5e58
    • Kazuhiko Shiozaki's avatar
    • Kazuhiko Shiozaki's avatar
  2. 10 Mar, 2023 36 commits