我们从Python开源项目中,提取了以下18个代码示例,用于说明如何使用copyreg.dispatch_table()。
def __getitem__(self, item): if item in all.CLASSES: return lambda obj: (all.CLASSES[item].from_builtin, (all.CLASSES[item].to_builtin(obj),), None, None, None) return copyreg.dispatch_table[item] # pragma: no cover
def __setitem__(self, key, value): # pragma: no cover copyreg.dispatch_table[key] = value
def __delitem__(self, key): # pragma: no cover del copyreg.dispatch_table[key]
def __iter__(self): # pragma: no cover return copyreg.dispatch_table.__iter__()
def __len__(self): # pragma: no cover return copyreg.dispatch_table.__len__()
def __init__(self, *args): super().__init__(*args) self.dispatch_table = self._copyreg_dispatch_table.copy() self.dispatch_table.update(self._extra_reducers)
def start(self): """Change pickle function for datetime to handle mocked datetime.""" super(DatetimePatcher, self).start() copyreg.dispatch_table[_real_datetime] = pickle_fake_datetime copyreg.dispatch_table[_real_date] = pickle_fake_date
def stop(self): """Return pickle behavior to normal.""" copyreg.dispatch_table.pop(_real_datetime) copyreg.dispatch_table.pop(_real_date) super(DatetimePatcher, self).stop()
def represent_object(self, data): # We use __reduce__ API to save the data. data.__reduce__ returns # a tuple of length 2-5: # (function, args, state, listitems, dictitems) # For reconstructing, we calls function(*args), then set its state, # listitems, and dictitems if they are not None. # A special case is when function.__name__ == '__newobj__'. In this # case we create the object with args[0].__new__(*args). # Another special case is when __reduce__ returns a string - we don't # support it. # We produce a !!python/object, !!python/object/new or # !!python/object/apply node. cls = type(data) if cls in copyreg.dispatch_table: reduce = copyreg.dispatch_table[cls](data) elif hasattr(data, '__reduce_ex__'): reduce = data.__reduce_ex__(2) elif hasattr(data, '__reduce__'): reduce = data.__reduce__() else: raise RepresenterError("cannot represent object: %r" % data) reduce = (list(reduce)+[None]*5)[:5] function, args, state, listitems, dictitems = reduce args = list(args) if state is None: state = {} if listitems is not None: listitems = list(listitems) if dictitems is not None: dictitems = dict(dictitems) if function.__name__ == '__newobj__': function = args[0] args = args[1:] tag = 'tag:yaml.org,2002:python/object/new:' newobj = True else: tag = 'tag:yaml.org,2002:python/object/apply:' newobj = False function_name = '%s.%s' % (function.__module__, function.__name__) if not args and not listitems and not dictitems \ and isinstance(state, dict) and newobj: return self.represent_mapping( 'tag:yaml.org,2002:python/object:'+function_name, state) if not listitems and not dictitems \ and isinstance(state, dict) and not state: return self.represent_sequence(tag+function_name, args) value = {} if args: value['args'] = args if state or not isinstance(state, dict): value['state'] = state if listitems: value['listitems'] = listitems if dictitems: value['dictitems'] = dictitems return self.represent_mapping(tag+function_name, value)