Skip to content

Commit

Permalink
Add frozen import fixer.
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremydw committed Jun 29, 2017
1 parent 07a48d6 commit 436f68d
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 4 deletions.
60 changes: 56 additions & 4 deletions grow/common/extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,27 @@

from . import utils
import imp
import os
import sys

IS_PACKAGED_APP = utils.is_packaged_app()

MAC_SYS_PREFIX = '/System/Library/Frameworks/Python.framework/Versions/2.7'


class FrozenImportFixer():

def __enter__(self):
self._frozen_meta_path = sys.meta_path[:]
self._frozen_sys_path = sys.path[:]
if os.path.exists(MAC_SYS_PREFIX):
sys.path.insert(0, MAC_SYS_PREFIX + '/lib/python2.7')
sys.meta_path = sys.meta_path[2:]

def __exit__(self, type, value, traceback):
sys.meta_path = self._frozen_meta_path
sys.path = self._frozen_sys_path


def import_extension(name, paths):
"""Imports and returns a module, given its path (e.g.
Expand All @@ -55,11 +72,46 @@ def import_extension(name, paths):
fp, pathname, description = imp.find_module(part1, paths)
return import_extension(part2, [pathname])
if IS_PACKAGED_APP:
# global _patched_sys_path
# modified_sys_path_diff = []
original_sys_path = sys.path[:]
original_sys_prefix = sys.prefix
# original_meta_path = sys.meta_path[:]
# print 'before', sys.meta_path
# sys.meta_path = []
# sys.meta_path = sys.meta_path[2:]
# if _patched_sys_path is None:
if os.path.exists(MAC_SYS_PREFIX):
sys.prefix = MAC_SYS_PREFIX
import patched_site # Updates sys.path.
fp, pathname, description = imp.find_module(part1, paths)
module = imp.load_module(part1, fp, pathname, description)
result = getattr(module, part2)
if IS_PACKAGED_APP:
patched_site.main()
# reload(patched_site)
# print 'after patching', sys.path
# _patched_sys_path = sys.path[:]
# else:
# sys.path = _patched_sys_path[:]
# print 'after sys.path', sys.path
# print 'after', sys.meta_path

try:
fp, pathname, description = imp.find_module(part1, paths)
module = imp.load_module(part1, fp, pathname, description)
except ImportError:
with FrozenImportFixer():
fp, pathname, description = imp.find_module(part1, paths)
module = imp.load_module(part1, fp, pathname, description)

# If extension modifies sys.path, preserve the modification.
# modified_sys_path_diff = set(sys.path) - set(original_sys_path)
# sys.meta_path = original_meta_path[:]
sys.prefix = original_sys_prefix
sys.path = original_sys_path
# if modified_sys_path_diff:
# sys.path = list(modified_sys_path_diff) + sys.path

else:
fp, pathname, description = imp.find_module(part1, paths)
module = imp.load_module(part1, fp, pathname, description)

result = getattr(module, part2)
return result
3 changes: 3 additions & 0 deletions grow/testing/testdata/pod/extensions/dependency.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,6 @@
from exceptions import ReferenceError
import copy
import shelve
import rsa

_ = rsa.key.PrivateKey

0 comments on commit 436f68d

Please sign in to comment.