Files
twitter-project/eca/util.py

40 lines
940 B
Python

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)