south.utils: 38 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/south/utils/__init__.py

Stats: 0 executed, 38 missed, 0 excluded, 35 ignored

  1. """
  2. Generally helpful utility functions.
  3. """
  4. def _ask_for_it_by_name(name):
  5. "Returns an object referenced by absolute path."
  6. bits = name.split(".")
  7. ## what if there is no absolute reference?
  8. if len(bits)>1:
  9. modulename = ".".join(bits[:-1])
  10. else:
  11. modulename=bits[0]
  12. module = __import__(modulename, {}, {}, bits[-1])
  13. if len(bits) == 1:
  14. return module
  15. else:
  16. return getattr(module, bits[-1])
  17. def ask_for_it_by_name(name):
  18. "Returns an object referenced by absolute path. (Memoised outer wrapper)"
  19. if name not in ask_for_it_by_name.cache:
  20. ask_for_it_by_name.cache[name] = _ask_for_it_by_name(name)
  21. return ask_for_it_by_name.cache[name]
  22. ask_for_it_by_name.cache = {}
  23. def get_attribute(item, attribute):
  24. """
  25. Like getattr, but recursive (i.e. you can ask for 'foo.bar.yay'.)
  26. """
  27. value = item
  28. for part in attribute.split("."):
  29. value = getattr(value, part)
  30. return value
  31. def auto_through(field):
  32. "Returns if the M2M class passed in has an autogenerated through table or not."
  33. return (
  34. # Django 1.0/1.1
  35. (not field.rel.through)
  36. or
  37. # Django 1.2+
  38. getattr(getattr(field.rel.through, "_meta", None), "auto_created", False)
  39. )
  40. def auto_model(model):
  41. "Returns if the given model was automatically generated."
  42. return getattr(model._meta, "auto_created", False)
  43. def memoize(function):
  44. "Standard memoization decorator."
  45. name = function.__name__
  46. _name = '_' + name
  47. def method(self):
  48. if not hasattr(self, _name):
  49. value = function(self)
  50. setattr(self, _name, value)
  51. return getattr(self, _name)
  52. def invalidate():
  53. if hasattr(method, _name):
  54. delattr(method, _name)
  55. method.__name__ = function.__name__
  56. method.__doc__ = function.__doc__
  57. method._invalidate = invalidate
  58. return method