appengine-python-standard icon indicating copy to clipboard operation
appengine-python-standard copied to clipboard

NDB_PY2_UNPICKLE_COMPAT?

Open pnico opened this issue 2 years ago • 0 comments

There is an env var being checked in a couple places that I don't see mentioned outside the code:

class PickleProperty(BlobProperty):
...
  def _from_base_type(self, value):
    try:
      return pickle.loads(value)
    except UnicodeDecodeError:
      if int(os.environ.get('NDB_PY2_UNPICKLE_COMPAT', '0')):
        return pickle.loads(value, encoding='bytes')
      raise
class Key(object):
...
  def __new__(cls, *_args, **kwargs):
  ...
    if int(os.environ.get('NDB_PY2_UNPICKLE_COMPAT', '0')):
      kwargs = {six.ensure_str(k): v for (k, v) in kwargs.items()}

Should we set this, is it set for us, should we avoid it? I'm running into some assorted pickle-related issues which had me looking at this (not-so-)recent change, and it's a bit tricky to figure out if it's better to try more "global" sorts of fixes or just site-specific workarounds to avoid dealing with messier problems.

pnico avatar Sep 14 '23 19:09 pnico