Changed tweets, added eca
This commit is contained in:
39
eca/util.py
Normal file
39
eca/util.py
Normal file
@@ -0,0 +1,39 @@
|
||||
import os.path
|
||||
|
||||
|
||||
class NamespaceError(KeyError):
|
||||
"""Exception raised for errors in the NamespaceDict."""
|
||||
pass
|
||||
|
||||
|
||||
class NamespaceDict(dict):
|
||||
"""
|
||||
A dictionary that also allows access through attributes.
|
||||
|
||||
See http://docs.python.org/3.3/reference/datamodel.html#customizing-attribute-access
|
||||
"""
|
||||
|
||||
def __getattr__(self, name):
|
||||
if name not in self:
|
||||
raise NamespaceError(name)
|
||||
return self[name]
|
||||
|
||||
def __setattr__(self, name, value):
|
||||
self[name] = value
|
||||
|
||||
def __delattr__(self, name):
|
||||
del self[name]
|
||||
|
||||
|
||||
def describe_function(fn):
|
||||
"""
|
||||
Generates a human readable reference to the given function.
|
||||
|
||||
This function is most useful when used on function defined in actual files.
|
||||
"""
|
||||
parts = []
|
||||
parts.append(fn.__name__)
|
||||
|
||||
parts.append(" ({}:{})".format(os.path.relpath(fn.__code__.co_filename), fn.__code__.co_firstlineno))
|
||||
|
||||
return ''.join(parts)
|
||||
Reference in New Issue
Block a user