From 26c4aaeb815881f79e4128f207f29c0b02f5553a Mon Sep 17 00:00:00 2001 From: Kazuhiko Shiozaki <kazuhiko@nexedi.com> Date: Thu, 14 Mar 2013 14:42:38 +0100 Subject: [PATCH] use ZODB.utils.get_pickle_metadata instead of pickle.Unpickler. * it is faster. * it does not require Products. --- erp5/util/zodbanalyze/__init__.py | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/erp5/util/zodbanalyze/__init__.py b/erp5/util/zodbanalyze/__init__.py index a3e4706909..112a11fe3f 100644 --- a/erp5/util/zodbanalyze/__init__.py +++ b/erp5/util/zodbanalyze/__init__.py @@ -2,22 +2,9 @@ # Based on a transaction analyzer by Matt Kromer. -import pickle -import re import sys -import types from ZODB.FileStorage import FileStorage -from cStringIO import StringIO - -class FakeError(Exception): - def __init__(self, module, name): - Exception.__init__(self) - self.module = module - self.name = name - -class FakeUnpickler(pickle.Unpickler): - def find_class(self, module, name): - raise FakeError(module, name) +from ZODB.utils import get_pickle_metadata class Report: def __init__(self): @@ -97,18 +84,8 @@ def analyze_trans(report, txn): analyze_rec(report, rec) def get_type(record): - try: - unpickled = FakeUnpickler(StringIO(record.data)).load() - except FakeError, err: - return "%s.%s" % (err.module, err.name) - except: - raise - classinfo = unpickled[0] - if isinstance(classinfo, types.TupleType): - mod, klass = classinfo - return "%s.%s" % (mod, klass) - else: - return str(classinfo) + mod, klass = get_pickle_metadata(record.data) + return "%s.%s" % (mod, klass) def analyze_rec(report, record): oid = record.oid -- 2.30.9