diff options
author | Tarek Ziade <tarek@ziade.org> | 2011-05-20 10:14:01 +0200 |
---|---|---|
committer | Tarek Ziade <tarek@ziade.org> | 2011-05-20 10:14:01 +0200 |
commit | d76ad0a7d55448992833c36ecbc1899ae0e17683 (patch) | |
tree | 3b673332e84c9edb9066a7c531c7560ac0ed2597 | |
parent | 606015e88f41070ffb182dfcc57926a858dd3358 (diff) | |
download | external_python_setuptools-d76ad0a7d55448992833c36ecbc1899ae0e17683.tar.gz external_python_setuptools-d76ad0a7d55448992833c36ecbc1899ae0e17683.tar.bz2 external_python_setuptools-d76ad0a7d55448992833c36ecbc1899ae0e17683.zip |
save the working set state
--HG--
branch : distribute
extra : rebase_source : 001d8f0f0c467b664751fffc42b1b1c344654e93
-rw-r--r-- | pkg_resources.py | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/pkg_resources.py b/pkg_resources.py index 5eb19df3..d704aad5 100644 --- a/pkg_resources.py +++ b/pkg_resources.py @@ -52,9 +52,41 @@ def _bypass_ensure_directory(name, mode=0777): mkdir(dirname, mode) +_state_vars = {} +def _declare_state(vartype, **kw): + g = globals() + for name, val in kw.iteritems(): + g[name] = val + _state_vars[name] = vartype + +def __getstate__(): + state = {} + g = globals() + for k, v in _state_vars.iteritems(): + state[k] = g['_sget_'+v](g[k]) + return state + +def __setstate__(state): + g = globals() + for k, v in state.iteritems(): + g['_sset_'+_state_vars[k]](k, g[k], v) + return state + +def _sget_dict(val): + return val.copy() + +def _sset_dict(key, ob, state): + ob.clear() + ob.update(state) + +def _sget_object(val): + return val.__getstate__() +def _sset_object(key, ob, state): + ob.__setstate__(state) +_sget_none = _sset_none = lambda *args: None @@ -672,12 +704,14 @@ class WorkingSet(object): for callback in self.callbacks: callback(dist) + def __getstate__(self): + return (self.entries[:], self.entry_keys.copy(), self.by_key.copy(), + self.callbacks[:]) - - - - - + def __setstate__(self, (entries, keys, by_key, callbacks)): + self.entries = entries[:] + self.by_key = by_key.copy() + self.callbacks = callbacks[:] @@ -1638,7 +1672,7 @@ else: -_distribution_finders = {} +_declare_state('dict', _distribution_finders = {}) def register_finder(importer_type, distribution_finder): """Register `distribution_finder` to find distributions in sys.path items @@ -1720,8 +1754,9 @@ def find_on_path(importer, path_item, only=False): break register_finder(ImpWrapper,find_on_path) -_namespace_handlers = {} -_namespace_packages = {} +_declare_state('dict', _namespace_handlers={}) +_declare_state('dict', _namespace_packages={}) + def register_namespace_handler(importer_type, namespace_handler): """Register `namespace_handler` to declare namespace packages @@ -2651,7 +2686,7 @@ def _mkstemp(*args,**kw): os.open = old_open # and then put it back -# Set up global resource manager +# Set up global resource manager (deliberately not state-saved) _manager = ResourceManager() def _initialize(g): for name in dir(_manager): @@ -2660,7 +2695,8 @@ def _initialize(g): _initialize(globals()) # Prepare the master working set and make the ``require()`` API available -working_set = WorkingSet() +_declare_state('object', working_set = WorkingSet()) + try: # Does the main program list any requirements? from __main__ import __requires__ |