Vega strike Python Modules doc  0.5.1
Documentation of the " Modules " folder of Vega strike
 All Data Structures Namespaces Files Functions Variables
knee Namespace Reference

Functions

def import_hook
 
def determine_parent
 
def find_head_package
 
def load_tail
 
def ensure_fromlist
 
def import_module
 
def reload_hook
 

Variables

 original_import = __builtin__.__import__
 
 original_reload = __builtin__.reload
 

Detailed Description

An Python re-implementation of hierarchical module import.

This code is intended to be read, not executed.  However, it does work
-- all you need to do to enable it is "import knee".

(The name is a pun on the klunkier predecessor of this module, "ni".)

Function Documentation

def knee.determine_parent (   globals)

Definition at line 24 of file knee.py.

24 
25 def determine_parent(globals):
26  if not globals or not globals.has_key("__name__"):
27  return None
28  pname = globals['__name__']
29  if globals.has_key("__path__"):
30  parent = sys.modules[pname]
31  assert globals is parent.__dict__
32  return parent
33  if '.' in pname:
34  i = pname.rfind('.')
35  pname = pname[:i]
36  parent = sys.modules[pname]
37  assert parent.__name__ == pname
38  return parent
39  return None
def knee.ensure_fromlist (   m,
  fromlist,
  recursive = 0 
)

Definition at line 73 of file knee.py.

References import_module().

73 
74 def ensure_fromlist(m, fromlist, recursive=0):
75  for sub in fromlist:
76  if sub == "*":
77  if not recursive:
78  try:
79  all = m.__all__
80  except AttributeError:
81  pass
82  else:
83  ensure_fromlist(m, all, 1)
84  continue
85  if sub != "*" and not hasattr(m, sub):
86  subname = "%s.%s" % (m.__name__, sub)
87  submod = import_module(sub, subname, m)
88  if not submod:
89  raise ImportError, "No module named " + subname
def knee.find_head_package (   parent,
  name 
)

Definition at line 40 of file knee.py.

References import_module().

40 
41 def find_head_package(parent, name):
42  if '.' in name:
43  i = name.find('.')
44  head = name[:i]
45  tail = name[i+1:]
46  else:
47  head = name
48  tail = ""
49  if parent:
50  qname = "%s.%s" % (parent.__name__, head)
51  else:
52  qname = head
53  q = import_module(head, qname, parent)
54  if q: return q, tail
55  if parent:
56  qname = head
57  parent = None
58  q = import_module(head, qname, parent)
59  if q: return q, tail
60  raise ImportError, "No module named " + qname
def knee.import_hook (   name,
  globals = None,
  locals = None,
  fromlist = None 
)

Definition at line 14 of file knee.py.

References determine_parent(), ensure_fromlist(), find_head_package(), and load_tail().

14 
15 def import_hook(name, globals=None, locals=None, fromlist=None):
16  parent = determine_parent(globals)
17  q, tail = find_head_package(parent, name)
18  m = load_tail(q, tail)
19  if not fromlist:
20  return q
21  if hasattr(m, "__path__"):
22  ensure_fromlist(m, fromlist)
23  return m
def knee.import_module (   partname,
  fqname,
  parent 
)

Definition at line 90 of file knee.py.

90 
91 def import_module(partname, fqname, parent):
92  try:
93  return sys.modules[fqname]
94  except KeyError:
95  pass
96  try:
97  fp, pathname, stuff = imp.find_module(partname,
98  parent and parent.__path__)
99  except ImportError:
100  return None
101  try:
102  m = imp.load_module(fqname, fp, pathname, stuff)
103  finally:
104  if fp: fp.close()
105  if parent:
106  setattr(parent, partname, m)
107  return m
108 
109 
# Replacement for reload()
def knee.load_tail (   q,
  tail 
)

Definition at line 61 of file knee.py.

References import_module().

61 
62 def load_tail(q, tail):
63  m = q
64  while tail:
65  i = tail.find('.')
66  if i < 0: i = len(tail)
67  head, tail = tail[:i], tail[i+1:]
68  mname = "%s.%s" % (m.__name__, head)
69  m = import_module(head, mname, m)
70  if not m:
71  raise ImportError, "No module named " + mname
72  return m
def knee.reload_hook (   module)

Definition at line 110 of file knee.py.

References import_module().

111 def reload_hook(module):
112  name = module.__name__
113  if '.' not in name:
114  return import_module(name, name, None)
115  i = name.rfind('.')
116  pname = name[:i]
117  parent = sys.modules[pname]
118  return import_module(name[i+1:], name, parent)
119 
120 
# Save the original hooks

Variable Documentation

original_import = __builtin__.__import__

Definition at line 121 of file knee.py.

original_reload = __builtin__.reload

Definition at line 122 of file knee.py.