MCPcopy Create free account
hub / github.com/RT-Thread/env-windows / save_global

Method save_global

tools/python-3.11.9-amd64/Lib/pickle.py:1056–1120  ·  view source on GitHub ↗
(self, obj, name=None)

Source from the content-addressed store, hash-verified

1054 dispatch[frozenset] = save_frozenset
1055
1056 def save_global(self, obj, name=None):
1057 write = self.write
1058 memo = self.memo
1059
1060 if name is None:
1061 name = getattr(obj, '__qualname__', None)
1062 if name is None:
1063 name = obj.__name__
1064
1065 module_name = whichmodule(obj, name)
1066 try:
1067 __import__(module_name, level=0)
1068 module = sys.modules[module_name]
1069 obj2, parent = _getattribute(module, name)
1070 except (ImportError, KeyError, AttributeError):
1071 raise PicklingError(
1072 "Can't pickle %r: it's not found as %s.%s" %
1073 (obj, module_name, name)) from None
1074 else:
1075 if obj2 is not obj:
1076 raise PicklingError(
1077 "Can't pickle %r: it's not the same object as %s.%s" %
1078 (obj, module_name, name))
1079
1080 if self.proto >= 2:
1081 code = _extension_registry.get((module_name, name))
1082 if code:
1083 assert code > 0
1084 if code <= 0xff:
1085 write(EXT1 + pack("<B", code))
1086 elif code <= 0xffff:
1087 write(EXT2 + pack("<H", code))
1088 else:
1089 write(EXT4 + pack("<i", code))
1090 return
1091 lastname = name.rpartition('.')[2]
1092 if parent is module:
1093 name = lastname
1094 # Non-ASCII identifiers are supported only with protocols >= 3.
1095 if self.proto >= 4:
1096 self.save(module_name)
1097 self.save(name)
1098 write(STACK_GLOBAL)
1099 elif parent is not module:
1100 self.save_reduce(getattr, (parent, lastname))
1101 elif self.proto >= 3:
1102 write(GLOBAL + bytes(module_name, "utf-8") + b'\n' +
1103 bytes(name, "utf-8") + b'\n')
1104 else:
1105 if self.fix_imports:
1106 r_name_mapping = _compat_pickle.REVERSE_NAME_MAPPING
1107 r_import_mapping = _compat_pickle.REVERSE_IMPORT_MAPPING
1108 if (module_name, name) in r_name_mapping:
1109 module_name, name = r_name_mapping[(module_name, name)]
1110 elif module_name in r_import_mapping:
1111 module_name = r_import_mapping[module_name]
1112 try:
1113 write(GLOBAL + bytes(module_name, "ascii") + b'\n' +

Callers 2

saveMethod · 0.95
save_typeMethod · 0.95

Calls 11

saveMethod · 0.95
save_reduceMethod · 0.95
memoizeMethod · 0.95
whichmoduleFunction · 0.85
__import__Function · 0.85
_getattributeFunction · 0.85
PicklingErrorClass · 0.85
packFunction · 0.85
rpartitionMethod · 0.80
writeFunction · 0.70
getMethod · 0.45

Tested by

no test coverage detected