/django/generatedssuper.py

https://github.com/botondus/generateds
Python | 210 lines | 187 code | 15 blank | 8 comment | 16 complexity | 4d84c733bf2ef4673c5f375e480119d8 MD5 | raw file
  1. import sys
  2. from generateds_definedsimpletypes import Defined_simple_type_table
  3. #
  4. # Globals
  5. #
  6. # Tables of builtin types
  7. Simple_type_table = {
  8. 'string': None,
  9. 'normalizedString': None,
  10. 'token': None,
  11. 'base64Binary': None,
  12. 'hexBinary': None,
  13. 'integer': None,
  14. 'positiveInteger': None,
  15. 'negativeInteger': None,
  16. 'nonNegativeInteger': None,
  17. 'nonPositiveInteger': None,
  18. 'long': None,
  19. 'unsignedLong': None,
  20. 'int': None,
  21. 'unsignedInt': None,
  22. 'short': None,
  23. 'unsignedShort': None,
  24. 'byte': None,
  25. 'unsignedByte': None,
  26. 'decimal': None,
  27. 'float': None,
  28. 'double': None,
  29. 'boolean': None,
  30. 'duration': None,
  31. 'dateTime': None,
  32. 'date': None,
  33. 'time': None,
  34. 'gYear': None,
  35. 'gYearMonth': None,
  36. 'gMonth': None,
  37. 'gMonthDay': None,
  38. 'gDay': None,
  39. 'Name': None,
  40. 'QName': None,
  41. 'NCName': None,
  42. 'anyURI': None,
  43. 'language': None,
  44. 'ID': None,
  45. 'IDREF': None,
  46. 'IDREFS': None,
  47. 'ENTITY': None,
  48. 'ENTITIES': None,
  49. 'NOTATION': None,
  50. 'NMTOKEN': None,
  51. 'NMTOKENS': None,
  52. }
  53. Integer_type_table = {
  54. 'integer': None,
  55. 'positiveInteger': None,
  56. 'negativeInteger': None,
  57. 'nonNegativeInteger': None,
  58. 'nonPositiveInteger': None,
  59. 'long': None,
  60. 'unsignedLong': None,
  61. 'int': None,
  62. 'unsignedInt': None,
  63. 'short': None,
  64. 'unsignedShort': None,
  65. }
  66. Float_type_table = {
  67. 'decimal': None,
  68. 'float': None,
  69. 'double': None,
  70. }
  71. String_type_table = {
  72. 'string': None,
  73. 'normalizedString': None,
  74. 'token': None,
  75. 'NCName': None,
  76. 'ID': None,
  77. 'IDREF': None,
  78. 'IDREFS': None,
  79. 'ENTITY': None,
  80. 'ENTITIES': None,
  81. 'NOTATION': None,
  82. 'NMTOKEN': None,
  83. 'NMTOKENS': None,
  84. 'QName': None,
  85. }
  86. Date_type_table = {
  87. 'date': None,
  88. }
  89. DateTime_type_table = {
  90. 'dateTime': None,
  91. }
  92. Boolean_type_table = {
  93. 'boolean': None,
  94. }
  95. #
  96. # Classes
  97. class GeneratedsSuper(object):
  98. def gds_format_string(self, input_data, input_name=''):
  99. return input_data
  100. def gds_format_integer(self, input_data, input_name=''):
  101. return '%d' % input_data
  102. def gds_format_float(self, input_data, input_name=''):
  103. return '%f' % input_data
  104. def gds_format_double(self, input_data, input_name=''):
  105. return '%e' % input_data
  106. def gds_format_boolean(self, input_data, input_name=''):
  107. return '%s' % input_data
  108. def gds_str_lower(self, instring):
  109. return instring.lower()
  110. @classmethod
  111. def get_prefix_name(cls, tag):
  112. prefix = ''
  113. name = ''
  114. items = tag.split(':')
  115. if len(items) == 2:
  116. prefix = items[0]
  117. name = items[1]
  118. elif len(items) == 1:
  119. name = items[0]
  120. return prefix, name
  121. @classmethod
  122. def generate_model_(cls, wrtmodels, wrtforms):
  123. class_name = cls.__name__
  124. wrtmodels('\nclass %s_model(models.Model):\n' % (class_name, ))
  125. wrtforms('\nclass %sForm(forms.Form):\n' % (class_name, ))
  126. if cls.superclass is not None:
  127. wrtmodels(' %s = models.ForeignKey("%s_model")\n' % (
  128. cls.superclass.__name__, cls.superclass.__name__, ))
  129. for spec in cls.member_data_items_:
  130. name = spec.get_name()
  131. prefix, name = cls.get_prefix_name(name)
  132. data_type = spec.get_data_type()
  133. prefix, data_type = cls.get_prefix_name(data_type)
  134. if data_type in Defined_simple_type_table:
  135. data_type = Defined_simple_type_table[data_type]
  136. prefix, data_type = cls.get_prefix_name(data_type.type_name)
  137. name = cleanupName(name)
  138. if name == 'id':
  139. name += 'x'
  140. elif name.endswith('_'):
  141. name += 'x'
  142. data_type = cleanupName(data_type)
  143. if data_type in Simple_type_table:
  144. options = 'blank=True'
  145. if data_type in Integer_type_table:
  146. wrtmodels(' %s = models.IntegerField(%s)\n' % (
  147. name, options, ))
  148. wrtforms(' %s = forms.IntegerField(%s)\n' % (
  149. name, options, ))
  150. elif data_type in Float_type_table:
  151. wrtmodels(' %s = models.FloatField(%s)\n' % (
  152. name, options, ))
  153. wrtforms(' %s = forms.FloatField(%s)\n' % (
  154. name, options, ))
  155. elif data_type in Date_type_table:
  156. wrtmodels(' %s = models.DateField(%s)\n' % (
  157. name, options, ))
  158. wrtforms(' %s = forms.DateField(%s)\n' % (
  159. name, options, ))
  160. elif data_type in DateTime_type_table:
  161. wrtmodels(' %s = models.DateTimeField(%s)\n' % (
  162. name, options, ))
  163. wrtforms(' %s = forms.DateTimeField(%s)\n' % (
  164. name, options, ))
  165. elif data_type in Boolean_type_table:
  166. wrtmodels(' %s = models.BooleanField(%s)\n' % (
  167. name, options, ))
  168. wrtforms(' %s = forms.BooleanField(%s)\n' % (
  169. name, options, ))
  170. elif data_type in String_type_table:
  171. wrtmodels(
  172. ' %s = models.CharField(max_length=1000, %s)\n' % (
  173. name, options, ))
  174. wrtforms(
  175. ' %s = forms.CharField(max_length=1000, %s)\n' % (
  176. name, options, ))
  177. else:
  178. sys.stderr.write('Unhandled simple type: %s %s\n' % (
  179. name, data_type, ))
  180. else:
  181. wrtmodels(
  182. ' %s = models.ForeignKey("%s_model")\n' % (
  183. name, data_type, ))
  184. wrtforms(
  185. ' %s = forms.ModelChoiceField(%sModel.objects.all())\n' % (
  186. name, data_type, ))
  187. wrtmodels(' def __unicode__(self):\n')
  188. wrtmodels(' return "id: %s" % (self.id, )\n')
  189. #
  190. # Local functions
  191. def cleanupName(oldName):
  192. newName = oldName.replace(':', '_')
  193. newName = newName.replace('-', '_')
  194. newName = newName.replace('.', '_')
  195. return newName