Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
erp5 erp5
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Labels
    • Labels
  • Merge requests 140
    • Merge requests 140
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Jobs
  • Commits
Collapse sidebar
  • nexedi
  • erp5erp5
  • Merge requests
  • !1652

Open
Created Jul 13, 2022 by Jérome Perrin@jeromeOwner
  • Report abuse
Report abuse

WIP: ERP5Type: deduplicate roles in pickles

  • Overview 1
  • Commits 1
  • Changes 2

This is "Proof of concept" following up discussion from !1560 (comment 153071)

  security.declareProtected(Permissions.AccessContentsInformation,
                            'debug')
  def debug(self):
    ""
    from zodbpickle.pickle_2 import Unpickler
    from ZODB.serialize import ObjectWriter
    from ZODB.ExportImport import persistent_id
    from io import BytesIO
    from StringIO import StringIO
    from zodbpickle.pickletools_2 import dis
    from Acquisition import aq_base

    ow = ObjectWriter(aq_base(self.getPortalObject()))
    ow._p.dump(aq_base(self).__getstate__())
    pkl = ow._file.getvalue()

    disf = StringIO()
    dis(pkl, disf)
    msg = "pickle size: %s\n %s" % (len(pkl), disf.getvalue())
    print(msg)
    return msg

** Before **

pickle size: 756
     0: }    EMPTY_DICT
    1: q    BINPUT     1
    3: (    MARK
    4: U        SHORT_BINSTRING 'default_reference'
   23: q        BINPUT     2
   25: U        SHORT_BINSTRING 'XXXX635'
   34: q        BINPUT     3
   36: U        SHORT_BINSTRING 'uid'
   41: q        BINPUT     4
   43: L        LONG       59161L
   51: U        SHORT_BINSTRING 'workflow_history'
   69: q        BINPUT     5
   71: (        MARK
   72: U            SHORT_BINSTRING '\x00\x00\x00\x00\x00\x07|,'
   82: q            BINPUT     6
   84: c            GLOBAL     'Persistence.mapping PersistentMapping'
  123: q            BINPUT     7
  125: t            TUPLE      (MARK at 71)
  126: Q        BINPERSID
  127: U        SHORT_BINSTRING '_Add_portal_content_Permission'
  159: q        BINPUT     8
  161: (        MARK
  162: U            SHORT_BINSTRING 'Assignee'
  172: q            BINPUT     9
  174: U            SHORT_BINSTRING 'Assignor'
  184: q            BINPUT     10
  186: U            SHORT_BINSTRING 'Manager'
  195: q            BINPUT     11
  197: U            SHORT_BINSTRING 'Owner'
  204: q            BINPUT     12
  206: t            TUPLE      (MARK at 161)
  207: q        BINPUT     13
  209: U        SHORT_BINSTRING '_owner'
  217: q        BINPUT     14
  219: (        MARK
  220: ]            EMPTY_LIST
  221: q            BINPUT     15
  223: U            SHORT_BINSTRING 'acl_users'
  234: q            BINPUT     16
  236: a            APPEND
  237: U            SHORT_BINSTRING 'ERP5TypeTestCase'
  255: q            BINPUT     17
  257: t            TUPLE      (MARK at 219)
  258: q        BINPUT     18
  260: U        SHORT_BINSTRING 'portal_type'
  273: q        BINPUT     19
  275: U        SHORT_BINSTRING 'Visa File'
  286: q        BINPUT     20
  288: U        SHORT_BINSTRING '_Modify_portal_content_Permission'
  323: q        BINPUT     21
  325: (        MARK
  326: U            SHORT_BINSTRING 'Assignee'
  336: q            BINPUT     22
  338: U            SHORT_BINSTRING 'Assignor'
  348: q            BINPUT     23
  350: U            SHORT_BINSTRING 'Manager'
  359: q            BINPUT     24
  361: U            SHORT_BINSTRING 'Owner'
  368: q            BINPUT     25
  370: t            TUPLE      (MARK at 325)
  371: q        BINPUT     26
  373: U        SHORT_BINSTRING '_Access_contents_information_Permission'
  414: q        BINPUT     27
  416: (        MARK
  417: U            SHORT_BINSTRING 'Assignee'
  427: q            BINPUT     28
  429: U            SHORT_BINSTRING 'Assignor'
  439: q            BINPUT     29
  441: U            SHORT_BINSTRING 'Auditor'
  450: q            BINPUT     30
  452: U            SHORT_BINSTRING 'Manager'
  461: q            BINPUT     31
  463: U            SHORT_BINSTRING 'Owner'
  470: q            BINPUT     32
  472: t            TUPLE      (MARK at 416)
  473: q        BINPUT     33
  475: U        SHORT_BINSTRING '__ac_local_roles__'
  495: q        BINPUT     34
  497: }        EMPTY_DICT
  498: q        BINPUT     35
  500: (        MARK
  501: h            BINGET     17
  503: ]            EMPTY_LIST
  504: q            BINPUT     36
  506: U            SHORT_BINSTRING 'Owner'
  513: q            BINPUT     37
  515: a            APPEND
  516: U            SHORT_BINSTRING 'IS-ERPAD*_XXXFR*'
  534: q            BINPUT     38
  536: ]            EMPTY_LIST
  537: q            BINPUT     39
  539: U            SHORT_BINSTRING 'Assignor'
  549: q            BINPUT     40
  551: a            APPEND
  552: U            SHORT_BINSTRING 'DSO*'
  558: q            BINPUT     41
  560: ]            EMPTY_LIST
  561: q            BINPUT     42
  563: U            SHORT_BINSTRING 'Auditor'
  572: q            BINPUT     43
  574: a            APPEND
  575: U            SHORT_BINSTRING 'XXXFR*'
  583: q            BINPUT     44
  585: ]            EMPTY_LIST
  586: q            BINPUT     45
  588: U            SHORT_BINSTRING 'Auditor'
  597: q            BINPUT     46
  599: a            APPEND
  600: U            SHORT_BINSTRING 'AF*_XXXFR*'
  612: q            BINPUT     47
  614: ]            EMPTY_LIST
  615: q            BINPUT     48
  617: U            SHORT_BINSTRING 'Auditor'
  626: q            BINPUT     49
  628: a            APPEND
  629: u            SETITEMS   (MARK at 500)
  630: U        SHORT_BINSTRING 'id'
  634: q        BINPUT     50
  636: U        SHORT_BINSTRING '20220624-57DF4'
  652: q        BINPUT     51
  654: U        SHORT_BINSTRING '_View_Permission'
  672: q        BINPUT     52
  674: (        MARK
  675: U            SHORT_BINSTRING 'Assignee'
  685: q            BINPUT     53
  687: U            SHORT_BINSTRING 'Assignor'
  697: q            BINPUT     54
  699: U            SHORT_BINSTRING 'Auditor'
  708: q            BINPUT     55
  710: U            SHORT_BINSTRING 'Manager'
  719: q            BINPUT     56
  721: U            SHORT_BINSTRING 'Owner'
  728: q            BINPUT     57
  730: t            TUPLE      (MARK at 674)
  731: q        BINPUT     58
  733: U        SHORT_BINSTRING 'quantity'
  743: q        BINPUT     59
  745: G        BINFLOAT   1.0
  754: u        SETITEMS   (MARK at 3)
  755: .    STOP

** After **

pickle size: 596
     0: }    EMPTY_DICT
    1: q    BINPUT     1
    3: (    MARK
    4: U        SHORT_BINSTRING 'default_reference'
   23: q        BINPUT     2
   25: U        SHORT_BINSTRING 'XXXX636'
   34: q        BINPUT     3
   36: U        SHORT_BINSTRING 'uid'
   41: q        BINPUT     4
   43: L        LONG       59700L
   51: U        SHORT_BINSTRING 'workflow_history'
   69: q        BINPUT     5
   71: (        MARK
   72: U            SHORT_BINSTRING '\x00\x00\x00\x00\x00\x07|.'
   82: q            BINPUT     6
   84: c            GLOBAL     'Persistence.mapping PersistentMapping'
  123: q            BINPUT     7
  125: t            TUPLE      (MARK at 71)
  126: Q        BINPERSID
  127: U        SHORT_BINSTRING '_Add_portal_content_Permission'
  159: q        BINPUT     8
  161: (        MARK
  162: U            SHORT_BINSTRING 'Assignee'
  172: q            BINPUT     9
  174: U            SHORT_BINSTRING 'Assignor'
  184: q            BINPUT     10
  186: U            SHORT_BINSTRING 'Manager'
  195: q            BINPUT     11
  197: U            SHORT_BINSTRING 'Owner'
  204: q            BINPUT     12
  206: t            TUPLE      (MARK at 161)
  207: q        BINPUT     13
  209: U        SHORT_BINSTRING '_owner'
  217: q        BINPUT     14
  219: (        MARK
  220: ]            EMPTY_LIST
  221: q            BINPUT     15
  223: U            SHORT_BINSTRING 'acl_users'
  234: q            BINPUT     16
  236: a            APPEND
  237: U            SHORT_BINSTRING 'ERP5TypeTestCase'
  255: q            BINPUT     17
  257: t            TUPLE      (MARK at 219)
  258: q        BINPUT     18
  260: U        SHORT_BINSTRING 'portal_type'
  273: q        BINPUT     19
  275: U        SHORT_BINSTRING 'Visa File'
  286: q        BINPUT     20
  288: U        SHORT_BINSTRING '_Modify_portal_content_Permission'
  323: q        BINPUT     21
  325: (        MARK
  326: h            BINGET     9
  328: h            BINGET     10
  330: h            BINGET     11
  332: h            BINGET     12
  334: t            TUPLE      (MARK at 325)
  335: q        BINPUT     22
  337: U        SHORT_BINSTRING '_Access_contents_information_Permission'
  378: q        BINPUT     23
  380: (        MARK
  381: h            BINGET     9
  383: h            BINGET     10
  385: U            SHORT_BINSTRING 'Auditor'
  394: q            BINPUT     24
  396: h            BINGET     11
  398: h            BINGET     12
  400: t            TUPLE      (MARK at 380)
  401: q        BINPUT     25
  403: U        SHORT_BINSTRING '__ac_local_roles__'
  423: q        BINPUT     26
  425: }        EMPTY_DICT
  426: q        BINPUT     27
  428: (        MARK
  429: h            BINGET     17
  431: ]            EMPTY_LIST
  432: q            BINPUT     28
  434: h            BINGET     12
  436: a            APPEND
  437: U            SHORT_BINSTRING 'IS-ERPAD*_XXXFR*'
  455: q            BINPUT     29
  457: ]            EMPTY_LIST
  458: q            BINPUT     30
  460: h            BINGET     10
  462: a            APPEND
  463: U            SHORT_BINSTRING 'DSO*'
  469: q            BINPUT     31
  471: ]            EMPTY_LIST
  472: q            BINPUT     32
  474: h            BINGET     24
  476: a            APPEND
  477: U            SHORT_BINSTRING 'XXXFR*'
  485: q            BINPUT     33
  487: ]            EMPTY_LIST
  488: q            BINPUT     34
  490: h            BINGET     24
  492: a            APPEND
  493: U            SHORT_BINSTRING 'AF*_XXXFR*'
  505: q            BINPUT     35
  507: ]            EMPTY_LIST
  508: q            BINPUT     36
  510: h            BINGET     24
  512: a            APPEND
  513: u            SETITEMS   (MARK at 428)
  514: U        SHORT_BINSTRING 'id'
  518: q        BINPUT     37
  520: U        SHORT_BINSTRING '20220624-1203CE'
  537: q        BINPUT     38
  539: U        SHORT_BINSTRING '_View_Permission'
  557: q        BINPUT     39
  559: (        MARK
  560: h            BINGET     9
  562: h            BINGET     10
  564: h            BINGET     24
  566: h            BINGET     11
  568: h            BINGET     12
  570: t            TUPLE      (MARK at 559)
  571: q        BINPUT     40
  573: U        SHORT_BINSTRING 'quantity'
  583: q        BINPUT     41
  585: G        BINFLOAT   1.0
  594: u        SETITEMS   (MARK at 3)
  595: .    STOP
highest protocol among opcodes = 1
Edited Jul 13, 2022 by Jérome Perrin
Assignee
Assign to
Reviewer
Request review from
None
Milestone
None
Assign milestone
Time tracking
Source branch: feat/dedup_roles_in_pickles
GitLab Nexedi Edition | About GitLab | About Nexedi | 沪ICP备2021021310号-2 | 沪ICP备2021021310号-7