/django_excel_templates/helpers.py

http://django-excel-templates.googlecode.com/ · Python · 95 lines · 77 code · 12 blank · 6 comment · 23 complexity · ae6b967072fc0e9ba92d24648634f426 MD5 · raw file

  1. def Break():
  2. try:
  3. import dbgp.client
  4. dbgp.client.brk(port=9000)
  5. except: pass
  6. """ Place to hold helper crud """
  7. import ExcelReports
  8. import exceptions
  9. from django.db.models import related
  10. from django.db.models.fields import AutoField
  11. def get_items(list):
  12. items = []
  13. if list.find(',') > 0:
  14. items = striplist(list.strip(',').split(','))
  15. else:
  16. items.append(list.strip())
  17. return items
  18. def striplist(l):
  19. list = []
  20. for x in l:
  21. list.append(x.strip())
  22. return list
  23. def isodd(num):
  24. return num & 1 and True or False
  25. def abstract():
  26. ''' simple trick to make an abstract base method '''
  27. import inspect
  28. caller = inspect.getouterframes(inspect.currentframe())[1][3]
  29. raise NotImplementedError(caller + ' must be implemented in subclass')
  30. def get_relation_list(model,FK=False):
  31. """
  32. Iterates through model to find ManyToMany Fields or ForeignKey Fields.
  33. Returns dictionary of field names mapped to values.
  34. """
  35. results = {}
  36. for field_list in [model._meta.fields, model._meta.many_to_many]:
  37. for field in field_list:
  38. related_model_name = None
  39. related_model_app_name = None
  40. if (not field.name[-4:] == '_ptr') and (not field.__class__ == AutoField):
  41. if issubclass(field.__class__, related.RelatedField):
  42. if not FK:
  43. if not field.__class__ == related.ForeignKey:
  44. related_model_app_name = field.rel.to.__module__.split('.')[0]
  45. if not related_model_app_name == 'django':
  46. related_model_name = field.rel.to.__name__
  47. full_related_model_name = '.'.join([field.rel.to.__module__, related_model_name])
  48. try:
  49. get_values = 'val = model.%s.all()' % field.name
  50. exec get_values
  51. except exceptions.AttributeError:
  52. get_values = 'val = [model.%s,]' % field.name
  53. exec get_values
  54. results[field.name] = val
  55. else:
  56. continue
  57. else:
  58. if not field.__class__ == related.ManyToManyField:
  59. related_model_app_name = field.rel.to.__module__.split('.')[0]
  60. if not related_model_app_name == 'django':
  61. related_model_name = field.rel.to.__name__
  62. full_related_model_name = '.'.join([field.rel.to.__module__, related_model_name])
  63. get_value = 'val = model.%s' % field.name
  64. exec get_value
  65. results[field.name] = val
  66. else:
  67. continue
  68. return results
  69. def convert_to_letter(num):
  70. alpha = 'abcdefghijklmnopqrstuvwxyz'.upper()
  71. if num < 26:
  72. return alpha[num]
  73. i = 0
  74. letters = ''
  75. first_letter = ''
  76. second_letter =''
  77. while num > 25:
  78. first_letter = alpha[i]
  79. num -= 26
  80. i += 1
  81. second_letter = alpha[num]
  82. letters = first_letter + second_letter
  83. return letters