fastcodedog 0.1.0__tar.gz → 2.0.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (273) hide show
  1. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/PKG-INFO +6 -4
  2. fastcodedog-2.0.2/README.md +3 -0
  3. fastcodedog-2.0.2/README_zh.md +4 -0
  4. fastcodedog-2.0.2/fastcodedog/cli.py +47 -0
  5. fastcodedog-2.0.2/fastcodedog/common/source_file_path.py +21 -0
  6. fastcodedog-2.0.2/fastcodedog/common/write_file.py +55 -0
  7. fastcodedog-2.0.2/fastcodedog/context/api/api.py +18 -0
  8. fastcodedog-2.0.2/fastcodedog/context/api/endpoint.py +20 -0
  9. fastcodedog-2.0.2/fastcodedog/context/api/oauth2.py +12 -0
  10. fastcodedog-2.0.2/fastcodedog/context/api/param.py +15 -0
  11. fastcodedog-2.0.2/fastcodedog/context/common/get_context_object.py +10 -0
  12. fastcodedog-2.0.2/fastcodedog/context/common/get_relationship.py +26 -0
  13. fastcodedog-2.0.2/fastcodedog/context/common/import_.py +10 -0
  14. fastcodedog-2.0.2/fastcodedog/context/context.py +85 -0
  15. fastcodedog-2.0.2/fastcodedog/context/contextbase.py +84 -0
  16. fastcodedog-2.0.2/fastcodedog/context/crud/column.py +13 -0
  17. fastcodedog-2.0.2/fastcodedog/context/crud/crud.py +38 -0
  18. fastcodedog-2.0.2/fastcodedog/context/crud/join_relationship.py +14 -0
  19. fastcodedog-2.0.2/fastcodedog/context/crud/query.py +35 -0
  20. fastcodedog-2.0.2/fastcodedog/context/model/column.py +22 -0
  21. fastcodedog-2.0.2/fastcodedog/context/model/computed_property.py +19 -0
  22. fastcodedog-2.0.2/fastcodedog/context/model/model.py +27 -0
  23. fastcodedog-2.0.2/fastcodedog/context/model/relationship.py +21 -0
  24. fastcodedog-2.0.2/fastcodedog/context/schema/alias_generator.py +11 -0
  25. fastcodedog-2.0.2/fastcodedog/context/schema/field.py +17 -0
  26. fastcodedog-2.0.2/fastcodedog/context/schema/response_schema.py +21 -0
  27. fastcodedog-2.0.2/fastcodedog/context/schema/schema.py +25 -0
  28. fastcodedog-2.0.2/fastcodedog/context/schema/sub_object.py +13 -0
  29. fastcodedog-2.0.2/fastcodedog/context/setting/config.py +23 -0
  30. fastcodedog-2.0.2/fastcodedog/context/setting/extend_app.py +10 -0
  31. fastcodedog-2.0.2/fastcodedog/context/setting/project.py +11 -0
  32. fastcodedog-2.0.2/fastcodedog/context/setting/source_directory.py +13 -0
  33. fastcodedog-2.0.2/fastcodedog/generation/api/api.py +97 -0
  34. fastcodedog-2.0.2/fastcodedog/generation/api/api_function.py +197 -0
  35. fastcodedog-2.0.2/fastcodedog/generation/api/config.py +73 -0
  36. fastcodedog-2.0.2/fastcodedog/generation/api/db.py +31 -0
  37. fastcodedog-2.0.2/fastcodedog/generation/api/generation.py +19 -0
  38. fastcodedog-2.0.2/fastcodedog/generation/api/main.py +96 -0
  39. fastcodedog-2.0.2/fastcodedog/generation/api/oauth2.py +144 -0
  40. fastcodedog-2.0.2/fastcodedog/generation/base/__init__.py +1 -0
  41. fastcodedog-2.0.2/fastcodedog/generation/base/block.py +43 -0
  42. fastcodedog-2.0.2/fastcodedog/generation/base/call.py +27 -0
  43. fastcodedog-2.0.2/fastcodedog/generation/base/class_type.py +33 -0
  44. fastcodedog-2.0.2/fastcodedog/generation/base/file.py +34 -0
  45. fastcodedog-2.0.2/fastcodedog/generation/base/function.py +71 -0
  46. fastcodedog-2.0.2/fastcodedog/generation/base/head_comment.py +50 -0
  47. fastcodedog-2.0.2/fastcodedog/generation/base/line_break.py +15 -0
  48. fastcodedog-2.0.2/fastcodedog/generation/base/location_finder.py +60 -0
  49. fastcodedog-2.0.2/fastcodedog/generation/base/required_import.py +98 -0
  50. fastcodedog-2.0.2/fastcodedog/generation/base/text.py +22 -0
  51. fastcodedog-2.0.2/fastcodedog/generation/base/variable.py +57 -0
  52. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/__init__.py +1 -0
  53. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/configfiles/__init__.py +1 -0
  54. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/db.py +1 -0
  55. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/generation.py +6 -0
  56. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/main.py +1 -0
  57. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/oauthfiles/__init__.py +1 -0
  58. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/toolfiles/__init__.py +1 -0
  59. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/utilfiles/__init__.py +1 -0
  60. fastcodedog-2.0.2/fastcodedog/generation/commonfiles/utilfiles/case_converter.py +39 -0
  61. fastcodedog-2.0.2/fastcodedog/generation/crud/__init__.py +1 -0
  62. fastcodedog-2.0.2/fastcodedog/generation/crud/crud.py +21 -0
  63. fastcodedog-2.0.2/fastcodedog/generation/crud/crud_functions.py +277 -0
  64. fastcodedog-2.0.2/fastcodedog/generation/crud/generation.py +18 -0
  65. fastcodedog-2.0.2/fastcodedog/generation/crud/query_functions.py +197 -0
  66. fastcodedog-2.0.2/fastcodedog/generation/crud/selectinload.py +49 -0
  67. fastcodedog-2.0.2/fastcodedog/generation/model/__init__.py +1 -0
  68. fastcodedog-2.0.2/fastcodedog/generation/model/base.py +23 -0
  69. fastcodedog-2.0.2/fastcodedog/generation/model/column.py +60 -0
  70. fastcodedog-2.0.2/fastcodedog/generation/model/computed_property.py +14 -0
  71. fastcodedog-2.0.2/fastcodedog/generation/model/generation.py +31 -0
  72. fastcodedog-2.0.2/fastcodedog/generation/model/init.py +21 -0
  73. fastcodedog-2.0.2/fastcodedog/generation/model/model.py +29 -0
  74. fastcodedog-2.0.2/fastcodedog/generation/model/relation_object.py +41 -0
  75. fastcodedog-2.0.2/fastcodedog/generation/model/relationship.py +42 -0
  76. fastcodedog-2.0.2/fastcodedog/generation/model/table_args.py +27 -0
  77. fastcodedog-2.0.2/fastcodedog/generation/schema/__init__.py +1 -0
  78. fastcodedog-2.0.2/fastcodedog/generation/schema/field.py +42 -0
  79. fastcodedog-2.0.2/fastcodedog/generation/schema/generation.py +39 -0
  80. fastcodedog-2.0.2/fastcodedog/generation/schema/response_schema.py +60 -0
  81. fastcodedog-2.0.2/fastcodedog/generation/schema/schema.py +68 -0
  82. fastcodedog-2.0.2/fastcodedog/generation/schema/sub_object.py +22 -0
  83. fastcodedog-2.0.2/fastcodedog/prepare/__init__.py +1 -0
  84. fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/__init__.py +1 -0
  85. fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/prepare.py +82 -0
  86. fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/queries.py +28 -0
  87. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/__init__.py +1 -0
  88. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/alias_generator.py +17 -0
  89. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/no_input_fields.py +20 -0
  90. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/no_response_fields.py +20 -0
  91. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/prepare.py +90 -0
  92. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/response_schemas.py +60 -0
  93. fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/specified_field_types.py +23 -0
  94. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/README.MD +1 -0
  95. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/__init__.py +1 -0
  96. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/__init__.py +1 -0
  97. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/computed_properties.py +18 -0
  98. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/disable_relationships.py +37 -0
  99. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/specified_class_names.py +39 -0
  100. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/__init__.py +1 -0
  101. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/additional_foreign_keys.py +12 -0
  102. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/specified_column_types.py +8 -0
  103. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/specified_relationship_names.py +6 -0
  104. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/column.py +104 -0
  105. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/pdm.py +126 -0
  106. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/prepare.py +28 -0
  107. fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/table.py +350 -0
  108. fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/__init__.py +1 -0
  109. fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/endpoint.py +72 -0
  110. fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/prepare.py +36 -0
  111. fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/schemas.py +4 -0
  112. fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/validate_reponse_models.py +6 -0
  113. fastcodedog-2.0.2/fastcodedog/util/__init__.py +1 -0
  114. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/case_converter.py +1 -1
  115. fastcodedog-2.0.2/fastcodedog/util/extractor.py +37 -0
  116. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/find_file.py +1 -1
  117. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/indent.py +5 -5
  118. fastcodedog-2.0.2/fastcodedog/util/type_converter.py +133 -0
  119. fastcodedog-2.0.2/fastcodedog/util/valid_name.py +19 -0
  120. fastcodedog-2.0.2/fastcodedog/util/wrap_str_with_quotation.py +13 -0
  121. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/pyproject.toml +5 -4
  122. fastcodedog-0.1.0/README.md +0 -3
  123. fastcodedog-0.1.0/fastcodedog/api/api.py +0 -177
  124. fastcodedog-0.1.0/fastcodedog/api/api_package.py +0 -49
  125. fastcodedog-0.1.0/fastcodedog/api/app_function.py +0 -22
  126. fastcodedog-0.1.0/fastcodedog/api/config.py +0 -68
  127. fastcodedog-0.1.0/fastcodedog/api/db.py +0 -31
  128. fastcodedog-0.1.0/fastcodedog/api/main.py +0 -60
  129. fastcodedog-0.1.0/fastcodedog/api/oauth.py +0 -120
  130. fastcodedog-0.1.0/fastcodedog/cli.py +0 -37
  131. fastcodedog-0.1.0/fastcodedog/context/base.py +0 -9
  132. fastcodedog-0.1.0/fastcodedog/context/context.py +0 -32
  133. fastcodedog-0.1.0/fastcodedog/context/context_instance.py +0 -52
  134. fastcodedog-0.1.0/fastcodedog/context/contextbase.py +0 -37
  135. fastcodedog-0.1.0/fastcodedog/context/modules.py +0 -12
  136. fastcodedog-0.1.0/fastcodedog/context/oauth2.py +0 -11
  137. fastcodedog-0.1.0/fastcodedog/context/query.py +0 -25
  138. fastcodedog-0.1.0/fastcodedog/context/schema.py +0 -32
  139. fastcodedog-0.1.0/fastcodedog/context/tenant.py +0 -11
  140. fastcodedog-0.1.0/fastcodedog/crud/_crud.py +0 -168
  141. fastcodedog-0.1.0/fastcodedog/crud/crud.py +0 -78
  142. fastcodedog-0.1.0/fastcodedog/crud/crud_package.py +0 -26
  143. fastcodedog-0.1.0/fastcodedog/crud/method_block.py +0 -14
  144. fastcodedog-0.1.0/fastcodedog/crud/param.py +0 -13
  145. fastcodedog-0.1.0/fastcodedog/diagram/README.MD +0 -3
  146. fastcodedog-0.1.0/fastcodedog/diagram/column.py +0 -64
  147. fastcodedog-0.1.0/fastcodedog/diagram/diagram.py +0 -188
  148. fastcodedog-0.1.0/fastcodedog/diagram/table.py +0 -169
  149. fastcodedog-0.1.0/fastcodedog/generation/classs_block.py +0 -36
  150. fastcodedog-0.1.0/fastcodedog/generation/file.py +0 -90
  151. fastcodedog-0.1.0/fastcodedog/generation/function_block.py +0 -23
  152. fastcodedog-0.1.0/fastcodedog/generation/generationbase.py +0 -4
  153. fastcodedog-0.1.0/fastcodedog/generation/import_stmt.py +0 -62
  154. fastcodedog-0.1.0/fastcodedog/generation/package.py +0 -18
  155. fastcodedog-0.1.0/fastcodedog/generation/param.py +0 -15
  156. fastcodedog-0.1.0/fastcodedog/generation/variable.py +0 -35
  157. fastcodedog-0.1.0/fastcodedog/model/_base.py +0 -12
  158. fastcodedog-0.1.0/fastcodedog/model/attribute.py +0 -34
  159. fastcodedog-0.1.0/fastcodedog/model/init.py +0 -19
  160. fastcodedog-0.1.0/fastcodedog/model/model.py +0 -76
  161. fastcodedog-0.1.0/fastcodedog/model/model_package.py +0 -52
  162. fastcodedog-0.1.0/fastcodedog/model/relation_object.py +0 -39
  163. fastcodedog-0.1.0/fastcodedog/model/sub_object.py +0 -100
  164. fastcodedog-0.1.0/fastcodedog/model/unique_stmt.py +0 -16
  165. fastcodedog-0.1.0/fastcodedog/schema/attribute.py +0 -29
  166. fastcodedog-0.1.0/fastcodedog/schema/schema.py +0 -119
  167. fastcodedog-0.1.0/fastcodedog/schema/schema_additional.py +0 -62
  168. fastcodedog-0.1.0/fastcodedog/schema/schema_additional_class_block.py +0 -92
  169. fastcodedog-0.1.0/fastcodedog/schema/schema_additional_package.py +0 -27
  170. fastcodedog-0.1.0/fastcodedog/schema/schema_class_block.py +0 -16
  171. fastcodedog-0.1.0/fastcodedog/schema/schema_package.py +0 -44
  172. fastcodedog-0.1.0/fastcodedog/test/codes/hello.py +0 -9
  173. fastcodedog-0.1.0/fastcodedog/test/codes/test_import.py +0 -13
  174. fastcodedog-0.1.0/fastcodedog/test/fakeapp/__init__.py +0 -0
  175. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/__init__.py +0 -0
  176. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/__init__.py +0 -0
  177. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/menu.py +0 -48
  178. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/organization.py +0 -48
  179. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/position.py +0 -58
  180. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/tenant.py +0 -38
  181. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/user.py +0 -102
  182. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/__init__.py +0 -0
  183. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute.py +0 -38
  184. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute_select_item.py +0 -52
  185. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute_verification.py +0 -38
  186. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/oauth/__init__.py +0 -0
  187. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/oauth/oauth.py +0 -53
  188. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/operation/__init__.py +0 -0
  189. fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/operation/api_log.py +0 -38
  190. fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/__init__.py +0 -0
  191. fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/config.ini +0 -5
  192. fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/config.py +0 -28
  193. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/__init__.py +0 -0
  194. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/__init__.py +0 -0
  195. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/menu.py +0 -60
  196. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/organization.py +0 -60
  197. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/position.py +0 -83
  198. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/tenant.py +0 -37
  199. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/user.py +0 -113
  200. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/__init__.py +0 -0
  201. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute.py +0 -37
  202. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute_select_item.py +0 -40
  203. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute_verification.py +0 -40
  204. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/operation/__init__.py +0 -0
  205. fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/operation/api_log.py +0 -37
  206. fastcodedog-0.1.0/fastcodedog/test/fakeapp/db.py +0 -21
  207. fastcodedog-0.1.0/fastcodedog/test/fakeapp/main.py +0 -49
  208. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/__init__.py +0 -20
  209. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/__init__.py +0 -0
  210. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/menu.py +0 -30
  211. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/organization.py +0 -29
  212. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/position.py +0 -25
  213. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/position_menu.py +0 -17
  214. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/tenant.py +0 -20
  215. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user.py +0 -29
  216. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user_organization.py +0 -17
  217. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user_position.py +0 -17
  218. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/base.py +0 -12
  219. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/__init__.py +0 -0
  220. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute.py +0 -31
  221. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute_select_item.py +0 -25
  222. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute_verification.py +0 -23
  223. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/operation/__init__.py +0 -0
  224. fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/operation/api_log.py +0 -28
  225. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/__init__.py +0 -0
  226. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/__init__.py +0 -0
  227. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/menu.py +0 -38
  228. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/organization.py +0 -37
  229. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/position.py +0 -35
  230. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/tenant.py +0 -40
  231. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/user.py +0 -40
  232. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/user_additional.py +0 -51
  233. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/callback/__init__.py +0 -0
  234. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/callback/get_dynamic_attributes.py +0 -15
  235. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/__init__.py +0 -0
  236. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute.py +0 -39
  237. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_select_item.py +0 -37
  238. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_select_item_additional.py +0 -14
  239. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_verification.py +0 -35
  240. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/operation/__init__.py +0 -0
  241. fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/operation/api_log.py +0 -45
  242. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.api.oauth.json5 +0 -21
  243. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.base.json5 +0 -11
  244. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.crud.user.json5 +0 -63
  245. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.diagram.json5 +0 -43
  246. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.model.json5 +0 -7
  247. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.json5 +0 -49
  248. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.select_item.json5 +0 -11
  249. fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.user.json5 +0 -50
  250. fastcodedog-0.1.0/fastcodedog/test/test_context.py +0 -8
  251. fastcodedog-0.1.0/fastcodedog/test/test_generate_all.py +0 -57
  252. fastcodedog-0.1.0/fastcodedog/test/test_generated_model.py +0 -99
  253. fastcodedog-0.1.0/fastcodedog/test/test_generated_model_with_tenant.py +0 -109
  254. fastcodedog-0.1.0/fastcodedog/todo.txt +0 -5
  255. fastcodedog-0.1.0/fastcodedog/util/type_converter.py +0 -59
  256. fastcodedog-0.1.0/fastcodedog/util/write_file.py +0 -26
  257. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/__init__.py +0 -0
  258. {fastcodedog-0.1.0/fastcodedog/api → fastcodedog-2.0.2/fastcodedog/common}/__init__.py +0 -0
  259. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/context/__init__.py +0 -0
  260. {fastcodedog-0.1.0/fastcodedog/crud → fastcodedog-2.0.2/fastcodedog/context/api}/__init__.py +0 -0
  261. {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/context/common}/__init__.py +0 -0
  262. {fastcodedog-0.1.0/fastcodedog/generation → fastcodedog-2.0.2/fastcodedog/context/crud}/__init__.py +0 -0
  263. {fastcodedog-0.1.0/fastcodedog → fastcodedog-2.0.2/fastcodedog/context}/model/__init__.py +0 -0
  264. {fastcodedog-0.1.0/fastcodedog → fastcodedog-2.0.2/fastcodedog/context}/schema/__init__.py +0 -0
  265. {fastcodedog-0.1.0/fastcodedog/test → fastcodedog-2.0.2/fastcodedog/context/setting}/__init__.py +0 -0
  266. {fastcodedog-0.1.0/fastcodedog/test/codes → fastcodedog-2.0.2/fastcodedog/generation}/__init__.py +0 -0
  267. {fastcodedog-0.1.0/fastcodedog/util → fastcodedog-2.0.2/fastcodedog/generation/api}/__init__.py +0 -0
  268. {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model}/reference.xml +0 -0
  269. {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model}/table.xml +0 -0
  270. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/deep_update.py +0 -0
  271. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/inflect_wrapper.py +0 -0
  272. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/make_dirs.py +0 -0
  273. {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/singleton.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastcodedog
3
- Version: 0.1.0
3
+ Version: 2.0.2
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: taohoo
@@ -11,8 +11,10 @@ Classifier: Programming Language :: Python :: 3
11
11
  Classifier: Programming Language :: Python :: 3.10
12
12
  Classifier: Programming Language :: Python :: 3.11
13
13
  Classifier: Programming Language :: Python :: 3.12
14
+ Requires-Dist: alembic (>=1.13.1)
14
15
  Requires-Dist: autopep8 (>=2.2.0)
15
16
  Requires-Dist: fastapi (>=0.100.0)
17
+ Requires-Dist: fastapi-pagination (>=0.12.25)
16
18
  Requires-Dist: fastoauth (>=0.1.0)
17
19
  Requires-Dist: inflect (>=7.2.1)
18
20
  Requires-Dist: json5 (>=0.9.25)
@@ -26,6 +28,6 @@ Requires-Dist: sqlalchemy (>=2.0.23)
26
28
  Requires-Dist: uvicorn (>=0.30.0)
27
29
  Description-Content-Type: text/markdown
28
30
 
29
- 基于pdm文件,自动生成fastapi工程。
30
- 包括sqlalchemy的model,crud。
31
- fastapi的schema,api。
31
+ Based on the pdm file(sap powerdesigner), automatically generate a FastAPI project.
32
+ Including SQLAlchemy models and CRUD operations.
33
+ FastAPI schemas and APIs.
@@ -0,0 +1,3 @@
1
+ Based on the pdm file(sap powerdesigner), automatically generate a FastAPI project.
2
+ Including SQLAlchemy models and CRUD operations.
3
+ FastAPI schemas and APIs.
@@ -0,0 +1,4 @@
1
+ # 概述
2
+ 基于pdm文件(sap powerdesigner),自动生成fastapi工程。
3
+ 包括sqlalchemy的model,crud。
4
+ fastapi的schema,api。
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ import sys
3
+
4
+ import json5
5
+
6
+ from fastcodedog.context.context import ctx_instance
7
+ from fastcodedog.generation.api.generation import generate_api
8
+ from fastcodedog.generation.commonfiles.generation import generate_common_files
9
+ from fastcodedog.generation.crud.generation import generate_crud
10
+ from fastcodedog.generation.model.generation import generate_model
11
+ from fastcodedog.generation.schema.generation import genenrate_schema
12
+ from fastcodedog.prepare.model_and_schema_to_crud.prepare import prepare_crud
13
+ from fastcodedog.prepare.model_to_schema.prepare import prepare_schema
14
+ from fastcodedog.prepare.pdm_to_model.prepare import prepare_model
15
+ from fastcodedog.prepare.schema_and_crud_to_api.prepare import prepare_api
16
+ from fastcodedog.util.deep_update import deep_update
17
+ from fastcodedog.util.find_file import find
18
+
19
+
20
+ def main():
21
+ if len(sys.argv) == 1:
22
+ raise ValueError('缺少参数,请传入json5配置文件')
23
+ ctx_instance.load(sys.argv[1])
24
+ pre_process_scripts = {}
25
+ for file in find('.', ctx_instance.source_directory.pre_process_scripts_file):
26
+ pre_process_scripts = deep_update(pre_process_scripts, json5.load(open(file, 'r', encoding='utf-8')))
27
+ prepare_model(pre_process_scripts)
28
+ ctx_instance.load_models(ctx_instance.source_directory.model)
29
+ prepare_schema(pre_process_scripts)
30
+ ctx_instance.load_schemas(ctx_instance.source_directory.schema)
31
+ prepare_crud(pre_process_scripts)
32
+ ctx_instance.load_cruds(ctx_instance.source_directory.crud)
33
+ prepare_api(pre_process_scripts)
34
+ ctx_instance.load_apis(ctx_instance.source_directory.api)
35
+ generate_common_files()
36
+ generate_model()
37
+ genenrate_schema()
38
+ generate_crud()
39
+ generate_api()
40
+
41
+
42
+ if __name__ == '__main__':
43
+ """
44
+ $env:PYTHONPATH = "."
45
+ python fastcodedog/cli.py fastcodegen/test/fastframe.diagram.json5 fastcodegen/test/fastframe.model.json5
46
+ """
47
+ main()
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ import os
3
+
4
+ from fastcodedog.context.context import ctx_instance
5
+ from fastcodedog.util.case_converter import camel_to_snake
6
+
7
+
8
+ def get_model_file_path(module, model_name):
9
+ return os.path.join(ctx_instance.source_directory.model, module, f'{camel_to_snake(model_name)}.json5')
10
+
11
+
12
+ def get_schema_file_path(module, schema_name):
13
+ return os.path.join(ctx_instance.source_directory.schema, module, f'{camel_to_snake(schema_name)}.json5')
14
+
15
+
16
+ def get_crud_file_path(module, crud_name):
17
+ return os.path.join(ctx_instance.source_directory.crud, module, f'{camel_to_snake(crud_name)}.json5')
18
+
19
+
20
+ def get_api_file_path(module, crud_name):
21
+ return os.path.join(ctx_instance.source_directory.api, module, f'{camel_to_snake(crud_name)}.json5')
@@ -0,0 +1,55 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ @author: hubo
4
+ @project: fastframe
5
+ @file: write_file
6
+ @time: 2024/5/30 15:39
7
+ @desc:
8
+ """
9
+ import json5
10
+ import os
11
+ import subprocess
12
+
13
+ from fastcodedog.context.context import ctx_instance
14
+
15
+
16
+ def write_python_file(path, content):
17
+ """
18
+ 写入python文件
19
+ :param path:
20
+ :param content:
21
+ :return:
22
+ """
23
+ _make_pathon_package(os.path.dirname(path))
24
+ with open(path, 'w', encoding='utf-8') as f:
25
+ f.write(content)
26
+ # 调用autopep8格式化文件
27
+ # subprocess.run(['autopep8', '--in-place', '--aggressive', '--max-line-length=120', path], check=True)
28
+ subprocess.run(['autopep8', '--in-place', '--max-line-length=120', path], check=True)
29
+ print(f'writed {path}') # 先临时放这里,后续再改
30
+ # # 调用flake8格式化文件
31
+ # subprocess.run(['flake8', path], check=True)
32
+
33
+
34
+ def _make_pathon_package(directory):
35
+ if not os.path.exists(directory):
36
+ parent_directory = os.path.dirname(directory)
37
+ _make_pathon_package(parent_directory)
38
+ os.makedirs(directory)
39
+ if directory.startswith(ctx_instance.project.directory):
40
+ init_file = os.path.join(directory, '__init__.py')
41
+ open(init_file, 'a').close()
42
+
43
+
44
+ def write_json_file(path, data):
45
+ """
46
+ 写入json文件
47
+ :param path:
48
+ :param data:
49
+ :return:
50
+ """
51
+ directory = os.path.dirname(path)
52
+ if os.path.exists(directory) is False:
53
+ os.makedirs(directory)
54
+ with open(path, 'w', encoding='utf-8') as f:
55
+ json5.dump(data, f, ensure_ascii=False, indent=4)
@@ -0,0 +1,18 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.api.endpoint import Endpoint
3
+ from fastcodedog.context.contextbase import ContextBase
4
+
5
+
6
+ class Api(ContextBase):
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.title = ''
10
+ self.comment = ''
11
+ self.module = ''
12
+ self.name = ''
13
+ self.primary_key_name = ''
14
+ self.oauth2_enabled = False
15
+ self.validate_response_models = []
16
+ self._types['validate_response_models'] = str
17
+ self.endpoints = {}
18
+ self._types['endpoints'] = Endpoint
@@ -0,0 +1,20 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.api.param import Param
3
+ from fastcodedog.context.contextbase import ContextBase
4
+
5
+
6
+ class Endpoint(ContextBase):
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.name = ''
10
+ self.summary = ''
11
+ self.comment = ''
12
+ self.action = ''
13
+ self.return_list = False
14
+ self.url = ''
15
+ self.max_size = None
16
+ self._types['max_size'] = int
17
+ self.tags = []
18
+ self._types['tags'] = str
19
+ self.params = {}
20
+ self._types['params'] = Param
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class OAuth2(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.enabled = False
9
+ self.model = 'User'
10
+ self.module = 'admin'
11
+ self.user_name_column = 'number'
12
+ self.password_column = 'password'
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class Param(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.name = ''
9
+ self.type = ''
10
+ self.option_none = False
11
+ self.description = ''
12
+ self.nullable = True
13
+ self.enum = []
14
+ self._types['enum'] = str
15
+ self.default_value = ''
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.context import ctx_instance
3
+
4
+
5
+ def get_model_context(module, model_name):
6
+ return ctx_instance.models[module][model_name]
7
+
8
+
9
+ def get_schema_context(module, schema_name):
10
+ return ctx_instance.schemas[module][schema_name]
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.context import ctx_instance
3
+
4
+
5
+ def get_class_type_by_model_and_relationship_name(model_name, relationship_name, module=None):
6
+ """
7
+ 根据模型名和关系名获取类名
8
+ :param model_name:
9
+ :param relationship_name:
10
+ :param module:
11
+ :return: class_name, module, is list(bool)。
12
+ """
13
+ for c_module, models in ctx_instance.models.items():
14
+ if module and module != c_module:
15
+ continue
16
+ if model_name not in models:
17
+ continue
18
+ model = models[model_name]
19
+ if not relationship_name in model.relationships:
20
+ raise ValueError(f'relationship {relationship_name} not in model {model_name}')
21
+ relationship = model.relationships[relationship_name]
22
+ if relationship.disabled:
23
+ raise ValueError(f'relationship {relationship_name} disabled')
24
+ return relationship.back_populates_module, relationship.back_populates_model, relationship.is_list
25
+
26
+ raise ValueError(f'model {model_name} not found')
@@ -0,0 +1,10 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class Import_(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.from_ = ''
9
+ self.import_ = ''
10
+ self.as_ = ''
@@ -0,0 +1,85 @@
1
+ # -*- coding: utf-8 -*-
2
+ import json5
3
+
4
+ from fastcodedog.context.api.api import Api
5
+ from fastcodedog.context.api.oauth2 import OAuth2
6
+ from fastcodedog.context.contextbase import ContextBase
7
+ from fastcodedog.context.crud.crud import Crud
8
+ from fastcodedog.context.model.model import Model
9
+ from fastcodedog.context.schema.schema import Schema
10
+ from fastcodedog.context.setting.config import Config
11
+ from fastcodedog.context.setting.extend_app import ExtendApp
12
+ from fastcodedog.context.setting.project import Project
13
+ from fastcodedog.context.setting.source_directory import SourceDirectory
14
+ from fastcodedog.util.find_file import find
15
+ from fastcodedog.util.singleton import Singleton
16
+
17
+
18
+ @Singleton
19
+ class Context(ContextBase):
20
+ def __init__(self):
21
+ super().__init__()
22
+ self.project = Project()
23
+ self.config = Config()
24
+ self.source_directory = SourceDirectory()
25
+ self.oauth2 = OAuth2()
26
+ self.extend_apps = {}
27
+ self.models = {}
28
+ self.schemas = {}
29
+ self.cruds = {}
30
+ self.apis = {}
31
+
32
+ def load(self, json_file, with_prepared_source=True):
33
+ data = json5.load(open(json_file, 'r', encoding='utf-8'))
34
+ self.project.load(data['project'])
35
+ self.config.load(data['config'])
36
+ self.source_directory.load(data['source_directory'])
37
+ self.oauth2.load(data['oauth2'])
38
+ for k, v in data['extend_apps'].items():
39
+ extend_app = ExtendApp()
40
+ extend_app.load(v)
41
+ self.extend_apps[k] = extend_app
42
+ if with_prepared_source:
43
+ self.load_models(self.source_directory.model)
44
+ self.load_schemas(self.source_directory.schema)
45
+ self.load_cruds(self.source_directory.crud)
46
+ self.load_apis(self.source_directory.api)
47
+
48
+ def load_models(self, model_directory):
49
+ files = find(model_directory, '*/*.json5')
50
+ for file in files:
51
+ model = Model()
52
+ model.load(json5.load(open(file, 'r', encoding='utf-8')))
53
+ if model.module not in self.models:
54
+ self.models[model.module] = {}
55
+ self.models[model.module][model.name] = model
56
+
57
+ def load_schemas(self, schema_directory):
58
+ files = find(schema_directory, '*/*.json5')
59
+ for file in files:
60
+ schema = Schema()
61
+ schema.load(json5.load(open(file, 'r', encoding='utf-8')))
62
+ if schema.module not in self.schemas:
63
+ self.schemas[schema.module] = {}
64
+ self.schemas[schema.module][schema.name] = schema
65
+
66
+ def load_cruds(self, crud_directory):
67
+ files = find(crud_directory, '*/*.json5')
68
+ for file in files:
69
+ crud = Crud()
70
+ crud.load(json5.load(open(file, 'r', encoding='utf-8')))
71
+ if crud.module not in self.cruds:
72
+ self.cruds[crud.module] = {}
73
+ self.cruds[crud.module][crud.name] = crud
74
+
75
+ def load_apis(self, api_directory):
76
+ files = find(api_directory, '*/*.json5')
77
+ for file in files:
78
+ api = Api()
79
+ api.load(json5.load(open(file, 'r', encoding='utf-8')))
80
+ if api.module not in self.apis:
81
+ self.apis[api.module] = {}
82
+ self.apis[api.module][api.name] = api
83
+
84
+
85
+ ctx_instance = Context()
@@ -0,0 +1,84 @@
1
+ # -*- coding: utf-8 -*-
2
+ from collections.abc import Iterable
3
+
4
+
5
+ class ContextBase:
6
+ def __init__(self):
7
+ self._types = {} # 模型类型映射,用于校验list,dict或者默认为None的数据的配置类型是否争取
8
+
9
+ def load(self, json):
10
+ if not isinstance(json, dict):
11
+ raise Exception(f'装载对象需要是一个字典。 {self.__class__}')
12
+ for k, v in json.items():
13
+ if v is None:
14
+ continue
15
+ if hasattr(self, k) and isinstance(getattr(self, k), ContextBase):
16
+ # 已经初始了Base类型的对象,直接使用对象进行装载
17
+ getattr(self, k).load(v)
18
+ elif hasattr(self, k) and isinstance(getattr(self, k), dict):
19
+ # 已经初始化了dict类型的对象,根据字典的类型定义进行装载
20
+ if not isinstance(v, dict):
21
+ raise Exception(f'{k} 需要是一个字典。 {self.__class__}')
22
+ for kk, vv in v.items():
23
+ instance = self.new_instance(k, vv) # 根据_types中预设,创建对应的value对象
24
+ if isinstance(instance, ContextBase):
25
+ # 如果是Base类型的对象,需要传入json进行装载
26
+ if not isinstance(vv, dict):
27
+ raise Exception(f'{k} 需要是一个字典。 {self.__class__}')
28
+ instance.load(vv) # 递归装载
29
+ getattr(self, k)[kk] = instance # 设置值
30
+ elif type(vv).__name__ == type(instance).__name__:
31
+ # 不是Base类型的对象,但是类型一致,直接赋型
32
+ getattr(self, k)[kk] = vv
33
+ else:
34
+ raise Exception(f'{v} 和需要的类型不一致。 {type(instance).__name__}')
35
+ elif hasattr(self, k) and isinstance(getattr(self, k), list):
36
+ if not isinstance(v, list):
37
+ raise Exception(f'{k} 需要是一个列表。 {self.__class__}')
38
+ for vv in v:
39
+ instance = self.new_instance(k, vv) # 根据_types中预设,创建对应的value对象
40
+ if isinstance(instance, ContextBase):
41
+ # 如果是Base类型的对象,需要传入json进行装载
42
+ instance.load(vv)
43
+ getattr(self, k).append(instance)
44
+ elif type(vv).__name__ == type(instance).__name__:
45
+ # 不是Base类型的对象,但是类型一致,直接赋型
46
+ getattr(self, k).append(vv)
47
+ else:
48
+ raise Exception(f'{v} 和需要的类型不一致。 {type(instance).__name__}')
49
+ elif hasattr(self, k) and getattr(self, k) is None:
50
+ instance = self.new_instance(k, v) # 根据_types中预设,创建对应的value对象
51
+ if isinstance(instance, ContextBase):
52
+ # 如果是Base类型的对象,需要传入json进行装载
53
+ instance.load(v)
54
+ setattr(self, k, instance)
55
+ elif type(v).__name__ == type(instance).__name__:
56
+ # 不是Base类型的对象,但是类型一致,直接赋型
57
+ setattr(self, k, v)
58
+ else:
59
+ raise Exception(f'{v} 和需要的类型不一致。 {type(instance).__name__}')
60
+ elif hasattr(self, k) and type(v).__name__ == type(getattr(self, k)).__name__:
61
+ setattr(self, k, v)
62
+ elif hasattr(self, k) and type(v).__name__ != type(getattr(self, k)).__name__:
63
+ raise Exception(f'{k} 和需要的类型不一致。 需要的类型{type(getattr(self, k)).__name__}')
64
+ else:
65
+ raise Exception(f'{k} 不是一个有效的配置项。 {self.__class__}')
66
+
67
+ def new_instance(self, config_name, value=None):
68
+ if config_name not in self._types.keys():
69
+ raise Exception(f'{config_name} 未指定类型。 {self.__class__}')
70
+ if isinstance(self._types[config_name], list):
71
+ for type_ in self._types[config_name]:
72
+ if type_ == type(value):
73
+ return type_()
74
+ if isinstance(value, dict): # 是ContextBase的类型,尝试是否匹配
75
+ ins = type_()
76
+ matched = True
77
+ for key in value.keys():
78
+ if not hasattr(ins, key):
79
+ matched = False
80
+ break
81
+ if matched:
82
+ return ins
83
+ raise Exception(f'{config_name}当前值{value}不是指定的类型{self._types[config_name]}。 {self.__class__}')
84
+ return self._types[config_name]()
@@ -0,0 +1,13 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class Column(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.name = ''
9
+ self.title = ''
10
+ self.type = ''
11
+ self.nullable = True
12
+ self.option_none = False # 是否需要处理输入的None。可以在地址中输入变量名而不输入变量值来传递None
13
+ self.description = ''
@@ -0,0 +1,38 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+ from fastcodedog.context.crud.column import Column
4
+ from fastcodedog.context.crud.join_relationship import JoinRelationship
5
+ from fastcodedog.context.crud.query import Query
6
+
7
+
8
+ class Crud(ContextBase):
9
+ def __init__(self):
10
+ super().__init__()
11
+ self.title = ''
12
+ self.comment = ''
13
+ self.module = ''
14
+ self.name = ''
15
+ self.primary_key = Column()
16
+ self.uuid_keys = {}
17
+ self._types['uuid_keys'] = Column
18
+ self.foreign_keys = {}
19
+ self._types['foreign_keys'] = Column
20
+ self.unique_constraints = []
21
+ self._types['unique_constraints'] = Column
22
+ self.join_relationships = {}
23
+ self._types['join_relationships'] = JoinRelationship
24
+ self.queries = {}
25
+ self._types['queries'] = Query
26
+
27
+ def load(self, json):
28
+ for k, v in json.items():
29
+ if k == 'unique_constraints':
30
+ for unique_constraint in v:
31
+ unique_columns = []
32
+ for c in unique_constraint:
33
+ column = Column()
34
+ column.load(c)
35
+ unique_columns.append(column)
36
+ self.unique_constraints.append(unique_columns)
37
+ else:
38
+ super().load({k: v})
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+ from fastcodedog.context.crud.column import Column
4
+
5
+
6
+ class JoinRelationship(ContextBase):
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.name = ''
10
+ self.original_name = ''
11
+ self.secondary_object_name = ''
12
+ self.back_populates_module = ''
13
+ self.back_populates_model = ''
14
+ self.back_populates_primary_key = Column()
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+ from fastcodedog.context.crud.column import Column
4
+
5
+
6
+ class Query(ContextBase):
7
+ class Filter(ContextBase):
8
+ def __init__(self):
9
+ super().__init__()
10
+ self.or_ = []
11
+ self._types['or_'] = [str, Query.Filter]
12
+ self.and_ = []
13
+ self._types['and_'] = [str, Query.Filter]
14
+
15
+ def __init__(self):
16
+ super().__init__()
17
+ self.name = ''
18
+ self.model = ''
19
+ self.module = ''
20
+ self.summary = ''
21
+ self.description = ''
22
+ self.max_size = None # 一个请求允许的最大返回值
23
+ self._types['max_size'] = int
24
+ self.parameters = {}
25
+ self._types['parameters'] = Column
26
+ self.filters = []
27
+ self._types['filters'] = [str, Query.Filter]
28
+ self.aliases = {}
29
+ self._types['aliases'] = str
30
+ self.joins = []
31
+ self._types['joins'] = str
32
+ self.outerjoins = []
33
+ self._types['outerjoins'] = str
34
+ self.orders = []
35
+ self._types['orders'] = str
@@ -0,0 +1,22 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class Column(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.title = ''
9
+ self.name = ''
10
+ self.specified_relationship_name = ''
11
+ self.comment = ''
12
+ self.sqlalchemy_type = ''
13
+ self.sqlalchemy_type_with_length = ''
14
+ self.type = ''
15
+ self.length = 0
16
+ self.nullable = True
17
+ self.primary_key = False
18
+ self.unique = False
19
+ self.domain = ''
20
+ self._types = {'unique': str}
21
+ self.autoincrement = False
22
+ self.foreign_key = ''
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.common.import_ import Import_
3
+ from fastcodedog.context.contextbase import ContextBase
4
+
5
+
6
+ class ComputedProperty(ContextBase):
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.title = ''
10
+ self.name = ''
11
+ self.type = ''
12
+ self.pydantic_type = ''
13
+ self.comment = ''
14
+ self.module = ''
15
+ self.model_name = ''
16
+ self.nullable = True
17
+ self.script = ''
18
+ self.import_ = None
19
+ self._types['import_'] = Import_
@@ -0,0 +1,27 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ 模型
4
+ """
5
+ from fastcodedog.context.contextbase import ContextBase
6
+ from fastcodedog.context.model.column import Column
7
+ from fastcodedog.context.model.computed_property import ComputedProperty
8
+ from fastcodedog.context.model.relationship import Relationship
9
+
10
+
11
+ class Model(ContextBase):
12
+ def __init__(self):
13
+ super().__init__()
14
+ self.module = ''
15
+ self.title = ''
16
+ self.name = ''
17
+ self.table_name = ''
18
+ self.is_relationship = False
19
+ self.comment = ''
20
+ self.columns = {}
21
+ self._types['columns'] = Column
22
+ self.unique_constraints = []
23
+ self._types['unique_constraints'] = list
24
+ self.relationships = {}
25
+ self._types['relationships'] = Relationship
26
+ self.computed_properties = {}
27
+ self._types['computed_properties'] = ComputedProperty
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.contextbase import ContextBase
3
+
4
+
5
+ class Relationship(ContextBase):
6
+ def __init__(self):
7
+ super().__init__()
8
+ self.name = '' # 关系名
9
+ self.original_name = '' # 原始关系名,为转为复数。有时候需要非复数原始版本
10
+ self.back_populates_module = '' # back_populates的模块
11
+ self.back_populates_model = '' # back_populates的model
12
+ self.foreign_keys = '' # 关联使用的外键
13
+ self.remote_side = ''
14
+ self.secondary = '' # 多对多关联时的关系表名
15
+ self.secondary_object_name = '' # 多对多关联时的secondary_object_name
16
+ self.cascade = ''
17
+ self.back_populates = '' # back_populates变量名
18
+ self.no_back_populates = False # 不生成back_populates
19
+ self.disabled = False # 禁用。和上面的no_backup是一对
20
+ self.from_join_table = False # 是否是join_table
21
+ self.is_list = False # 是否是列表
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+ from fastcodedog.context.common.import_ import Import_
3
+ from fastcodedog.context.contextbase import ContextBase
4
+
5
+
6
+ class AliasGenerator(ContextBase):
7
+ def __init__(self):
8
+ super().__init__()
9
+ self.import_ = None
10
+ self._types['import_'] = Import_
11
+ self.function = ''