fastcodedog 3.2.4__tar.gz → 3.2.6__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 (185) hide show
  1. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/PKG-INFO +4 -2
  2. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/README.md +5 -5
  3. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/README_zh.md +5 -5
  4. {fastcodedog-3.2.4/fastcodedog/common → fastcodedog-3.2.6/fastcodedog}/__init__.py +1 -1
  5. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/cli.py +53 -53
  6. {fastcodedog-3.2.4/fastcodedog/context → fastcodedog-3.2.6/fastcodedog/common}/__init__.py +1 -1
  7. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/common/clean_expired.py +61 -61
  8. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/common/source_file_path.py +21 -21
  9. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/common/write_file.py +63 -63
  10. {fastcodedog-3.2.4/fastcodedog/context/api → fastcodedog-3.2.6/fastcodedog/context}/__init__.py +1 -1
  11. {fastcodedog-3.2.4/fastcodedog → fastcodedog-3.2.6/fastcodedog/context/api}/__init__.py +1 -1
  12. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/api/api.py +18 -18
  13. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/api/endpoint.py +22 -22
  14. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/api/oauth2.py +12 -12
  15. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/api/param.py +15 -15
  16. fastcodedog-3.2.6/fastcodedog/context/common/__init__.py +1 -0
  17. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/common/get_context_object.py +10 -10
  18. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/common/get_relationship.py +26 -26
  19. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/context.py +101 -101
  20. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/contextbase.py +100 -100
  21. fastcodedog-3.2.6/fastcodedog/context/crud/__init__.py +1 -0
  22. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/crud/column.py +14 -14
  23. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/crud/crud.py +41 -41
  24. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/crud/default_value.py +12 -12
  25. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/crud/join_relationship.py +15 -15
  26. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/crud/query.py +43 -40
  27. fastcodedog-3.2.6/fastcodedog/context/model/__init__.py +1 -0
  28. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/additional_method.py +21 -21
  29. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/case.py +15 -15
  30. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/column.py +22 -22
  31. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/computed_property.py +18 -18
  32. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/copy_method.py +25 -25
  33. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/model.py +36 -36
  34. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/parameter.py +17 -17
  35. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/model/relationship.py +26 -26
  36. fastcodedog-3.2.6/fastcodedog/context/schema/__init__.py +1 -0
  37. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/schema/alias_generator.py +10 -10
  38. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/schema/field.py +17 -17
  39. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/schema/response_schema.py +21 -21
  40. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/schema/schema.py +25 -25
  41. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/schema/sub_object.py +13 -13
  42. fastcodedog-3.2.6/fastcodedog/context/setting/__init__.py +1 -0
  43. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/config.py +27 -27
  44. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/extend_app.py +10 -10
  45. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/listen.py +10 -10
  46. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/project.py +11 -11
  47. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/source_directory.py +13 -13
  48. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/context/setting/tenant.py +13 -13
  49. fastcodedog-3.2.6/fastcodedog/generation/__init__.py +1 -0
  50. fastcodedog-3.2.6/fastcodedog/generation/api/__init__.py +1 -0
  51. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/api.py +97 -97
  52. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/api_function.py +205 -203
  53. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/config.py +140 -140
  54. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/db.py +91 -91
  55. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/generation.py +21 -21
  56. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/main.py +136 -133
  57. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/api/oauth2.py +231 -231
  58. fastcodedog-3.2.6/fastcodedog/generation/base/__init__.py +1 -0
  59. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/block.py +52 -52
  60. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/call.py +27 -27
  61. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/class_type.py +33 -33
  62. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/file.py +34 -34
  63. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/function.py +76 -76
  64. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/head_comment.py +50 -50
  65. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/line_break.py +15 -15
  66. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/location_finder.py +60 -60
  67. fastcodedog-3.2.6/fastcodedog/generation/base/required_import.py +128 -0
  68. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/text.py +23 -23
  69. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/base/variable.py +57 -57
  70. fastcodedog-3.2.6/fastcodedog/generation/commonfiles/__init__.py +1 -0
  71. fastcodedog-3.2.6/fastcodedog/generation/commonfiles/configfiles/__init__.py +1 -0
  72. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/commonfiles/generation.py +10 -10
  73. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/commonfiles/main.py +1 -1
  74. fastcodedog-3.2.6/fastcodedog/generation/commonfiles/oauthfiles/__init__.py +1 -0
  75. fastcodedog-3.2.6/fastcodedog/generation/commonfiles/toolfiles/__init__.py +1 -0
  76. fastcodedog-3.2.6/fastcodedog/generation/commonfiles/utilfiles/__init__.py +1 -0
  77. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/commonfiles/utilfiles/api_logging.py +41 -41
  78. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/commonfiles/utilfiles/case_converter.py +39 -39
  79. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/commonfiles/utilfiles/log.py +69 -69
  80. fastcodedog-3.2.6/fastcodedog/generation/crud/__init__.py +1 -0
  81. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/crud/crud.py +22 -22
  82. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/crud/crud_functions.py +298 -298
  83. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/crud/generation.py +18 -18
  84. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/crud/query_functions.py +236 -230
  85. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/crud/selectinload.py +49 -49
  86. fastcodedog-3.2.6/fastcodedog/generation/model/__init__.py +1 -0
  87. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/additional_method.py +23 -23
  88. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/base.py +23 -23
  89. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/case.py +42 -42
  90. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/column.py +60 -60
  91. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/computed_property.py +14 -14
  92. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/copy_method.py +122 -122
  93. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/generation.py +33 -33
  94. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/init.py +26 -24
  95. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/model.py +38 -38
  96. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/relation_object.py +41 -41
  97. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/relationship.py +56 -56
  98. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/model/table_args.py +32 -32
  99. fastcodedog-3.2.6/fastcodedog/generation/schema/__init__.py +1 -0
  100. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/schema/field.py +42 -42
  101. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/schema/generation.py +39 -39
  102. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/schema/response_schema.py +60 -60
  103. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/schema/schema.py +68 -68
  104. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/generation/schema/sub_object.py +22 -22
  105. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/inc/middleware/api_logging.file.in +283 -283
  106. fastcodedog-3.2.6/fastcodedog/prepare/__init__.py +1 -0
  107. fastcodedog-3.2.6/fastcodedog/prepare/model_and_schema_to_crud/__init__.py +1 -0
  108. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_and_schema_to_crud/default_values.py +36 -36
  109. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_and_schema_to_crud/prepare.py +89 -89
  110. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_and_schema_to_crud/queries.py +28 -28
  111. fastcodedog-3.2.6/fastcodedog/prepare/model_to_schema/__init__.py +1 -0
  112. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/alias_generator.py +17 -17
  113. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/no_input_fields.py +20 -20
  114. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/no_response_fields.py +20 -20
  115. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/prepare.py +90 -90
  116. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/response_schemas.py +60 -60
  117. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/model_to_schema/specified_field_types.py +23 -23
  118. fastcodedog-3.2.6/fastcodedog/prepare/pdm_to_model/__init__.py +1 -0
  119. fastcodedog-3.2.6/fastcodedog/prepare/pdm_to_model/after/__init__.py +1 -0
  120. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/additional_methods.py +18 -18
  121. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/additional_relationships.py +24 -24
  122. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/case.py +29 -29
  123. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/computed_properties.py +18 -18
  124. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/copy_methods.py +18 -18
  125. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/disable_relationships.py +41 -41
  126. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/specified_class_names.py +39 -39
  127. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/after/specified_relationship_orderby.py +22 -22
  128. fastcodedog-3.2.6/fastcodedog/prepare/pdm_to_model/before/__init__.py +1 -0
  129. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/before/additional_foreign_keys.py +12 -12
  130. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/before/fill_tenant_id.py +43 -43
  131. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/before/specified_column_types.py +8 -8
  132. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/before/specified_relationship_names.py +6 -6
  133. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/column.py +104 -104
  134. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/pdm.py +126 -126
  135. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/prepare.py +42 -42
  136. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/table.py +372 -372
  137. fastcodedog-3.2.6/fastcodedog/prepare/schema_and_crud_to_api/__init__.py +1 -0
  138. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/schema_and_crud_to_api/endpoint.py +74 -74
  139. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/schema_and_crud_to_api/prepare.py +38 -38
  140. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/schema_and_crud_to_api/schemas.py +4 -4
  141. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/schema_and_crud_to_api/validate_reponse_models.py +6 -6
  142. fastcodedog-3.2.6/fastcodedog/util/__init__.py +1 -0
  143. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/case_converter.py +32 -32
  144. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/deep_update.py +35 -35
  145. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/extractor.py +37 -37
  146. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/find_file.py +19 -15
  147. fastcodedog-3.2.6/fastcodedog/util/import_group.py +75 -0
  148. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/indent.py +34 -34
  149. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/inflect_wrapper.py +22 -22
  150. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/make_dirs.py +27 -27
  151. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/read_inc.py +9 -9
  152. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/singleton.py +15 -15
  153. fastcodedog-3.2.6/fastcodedog/util/stable_sort.py +6 -0
  154. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/type_converter.py +133 -133
  155. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/valid_name.py +19 -19
  156. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/util/wrap_str_with_quotation.py +13 -13
  157. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/pyproject.toml +27 -27
  158. fastcodedog-3.2.4/fastcodedog/context/common/__init__.py +0 -1
  159. fastcodedog-3.2.4/fastcodedog/context/crud/__init__.py +0 -1
  160. fastcodedog-3.2.4/fastcodedog/context/model/__init__.py +0 -1
  161. fastcodedog-3.2.4/fastcodedog/context/schema/__init__.py +0 -1
  162. fastcodedog-3.2.4/fastcodedog/context/setting/__init__.py +0 -1
  163. fastcodedog-3.2.4/fastcodedog/generation/__init__.py +0 -1
  164. fastcodedog-3.2.4/fastcodedog/generation/api/__init__.py +0 -1
  165. fastcodedog-3.2.4/fastcodedog/generation/base/__init__.py +0 -1
  166. fastcodedog-3.2.4/fastcodedog/generation/base/required_import.py +0 -95
  167. fastcodedog-3.2.4/fastcodedog/generation/commonfiles/__init__.py +0 -1
  168. fastcodedog-3.2.4/fastcodedog/generation/commonfiles/configfiles/__init__.py +0 -1
  169. fastcodedog-3.2.4/fastcodedog/generation/commonfiles/oauthfiles/__init__.py +0 -1
  170. fastcodedog-3.2.4/fastcodedog/generation/commonfiles/toolfiles/__init__.py +0 -1
  171. fastcodedog-3.2.4/fastcodedog/generation/commonfiles/utilfiles/__init__.py +0 -1
  172. fastcodedog-3.2.4/fastcodedog/generation/crud/__init__.py +0 -1
  173. fastcodedog-3.2.4/fastcodedog/generation/model/__init__.py +0 -1
  174. fastcodedog-3.2.4/fastcodedog/generation/schema/__init__.py +0 -1
  175. fastcodedog-3.2.4/fastcodedog/prepare/__init__.py +0 -1
  176. fastcodedog-3.2.4/fastcodedog/prepare/model_and_schema_to_crud/__init__.py +0 -1
  177. fastcodedog-3.2.4/fastcodedog/prepare/model_to_schema/__init__.py +0 -1
  178. fastcodedog-3.2.4/fastcodedog/prepare/pdm_to_model/__init__.py +0 -1
  179. fastcodedog-3.2.4/fastcodedog/prepare/pdm_to_model/after/__init__.py +0 -1
  180. fastcodedog-3.2.4/fastcodedog/prepare/pdm_to_model/before/__init__.py +0 -1
  181. fastcodedog-3.2.4/fastcodedog/prepare/schema_and_crud_to_api/__init__.py +0 -1
  182. fastcodedog-3.2.4/fastcodedog/util/__init__.py +0 -1
  183. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/README.MD +0 -0
  184. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/reference.xml +0 -0
  185. {fastcodedog-3.2.4 → fastcodedog-3.2.6}/fastcodedog/prepare/pdm_to_model/table.xml +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: fastcodedog
3
- Version: 3.2.4
3
+ Version: 3.2.6
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: taohoo
@@ -11,6 +11,8 @@ 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
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
14
16
  Requires-Dist: autopep8 (>=2.2.0)
15
17
  Requires-Dist: inflect (>=7.2.1)
16
18
  Requires-Dist: json5 (>=0.9.25)
@@ -1,5 +1,5 @@
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.
4
- The database engine should be installed manually based on actual requirements.
5
- Version 3 and above temporarily reverts to multithreading and does not support coroutines.
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.
4
+ The database engine should be installed manually based on actual requirements.
5
+ Version 3 and above temporarily reverts to multithreading and does not support coroutines.
@@ -1,6 +1,6 @@
1
- # 概述
2
- 基于pdm文件(sap powerdesigner),自动生成fastapi工程。
3
- 包括sqlalchemy的model,crud。
4
- fastapi的schema,api。
5
- 数据库引擎根据实际需要安装。
1
+ # 概述
2
+ 基于pdm文件(sap powerdesigner),自动生成fastapi工程。
3
+ 包括sqlalchemy的model,crud。
4
+ fastapi的schema,api。
5
+ 数据库引擎根据实际需要安装。
6
6
  3以上版本暂时退回到多线程,不支持协程。
@@ -1 +1 @@
1
- # -*- coding: utf-8 -*-
1
+ # -*- coding: utf-8 -*-
@@ -1,53 +1,53 @@
1
- # -*- coding: utf-8 -*-
2
- import sys
3
-
4
- import json5
5
- from datetime import datetime
6
-
7
- from fastcodedog.common.clean_expired import clean_expired_files_and_dirs
8
- from fastcodedog.context.context import ctx_instance
9
- from fastcodedog.generation.api.generation import generate_api
10
- from fastcodedog.generation.commonfiles.generation import generate_common_files
11
- from fastcodedog.generation.crud.generation import generate_crud
12
- from fastcodedog.generation.model.generation import generate_model
13
- from fastcodedog.generation.schema.generation import genenrate_schema
14
- from fastcodedog.prepare.model_and_schema_to_crud.prepare import prepare_crud
15
- from fastcodedog.prepare.model_to_schema.prepare import prepare_schema
16
- from fastcodedog.prepare.pdm_to_model.prepare import prepare_model
17
- from fastcodedog.prepare.schema_and_crud_to_api.prepare import prepare_api
18
- from fastcodedog.util.deep_update import deep_update
19
- from fastcodedog.util.find_file import find
20
-
21
-
22
- def main():
23
- if len(sys.argv) == 1:
24
- raise ValueError('缺少参数,请传入json5配置文件')
25
- ctx_instance.load(sys.argv[1])
26
- pre_process_scripts = {}
27
- for file in find('.', ctx_instance.source_directory.pre_process_scripts_file):
28
- pre_process_scripts = deep_update(pre_process_scripts, json5.load(open(file, 'r', encoding='utf-8')))
29
- prepare_model(pre_process_scripts)
30
- ctx_instance.load_models(ctx_instance.source_directory.model)
31
- prepare_schema(pre_process_scripts)
32
- ctx_instance.load_schemas(ctx_instance.source_directory.schema)
33
- prepare_crud(pre_process_scripts)
34
- ctx_instance.load_cruds(ctx_instance.source_directory.crud)
35
- prepare_api(pre_process_scripts)
36
- ctx_instance.load_apis(ctx_instance.source_directory.api)
37
-
38
- last_generate_time = datetime.now()
39
- generate_common_files()
40
- generate_model()
41
- genenrate_schema()
42
- generate_crud()
43
- generate_api()
44
- clean_expired_files_and_dirs(ctx_instance.project.directory, last_generate_time)
45
-
46
-
47
-
48
- if __name__ == '__main__':
49
- """
50
- $env:PYTHONPATH = "."
51
- python fastcodedog/cli.py fastcodegen/test/fastframe.diagram.json5 fastcodegen/test/fastframe.model.json5
52
- """
53
- main()
1
+ # -*- coding: utf-8 -*-
2
+ import sys
3
+
4
+ import json5
5
+ from datetime import datetime
6
+
7
+ from fastcodedog.common.clean_expired import clean_expired_files_and_dirs
8
+ from fastcodedog.context.context import ctx_instance
9
+ from fastcodedog.generation.api.generation import generate_api
10
+ from fastcodedog.generation.commonfiles.generation import generate_common_files
11
+ from fastcodedog.generation.crud.generation import generate_crud
12
+ from fastcodedog.generation.model.generation import generate_model
13
+ from fastcodedog.generation.schema.generation import genenrate_schema
14
+ from fastcodedog.prepare.model_and_schema_to_crud.prepare import prepare_crud
15
+ from fastcodedog.prepare.model_to_schema.prepare import prepare_schema
16
+ from fastcodedog.prepare.pdm_to_model.prepare import prepare_model
17
+ from fastcodedog.prepare.schema_and_crud_to_api.prepare import prepare_api
18
+ from fastcodedog.util.deep_update import deep_update
19
+ from fastcodedog.util.find_file import find
20
+
21
+
22
+ def main():
23
+ if len(sys.argv) == 1:
24
+ raise ValueError('缺少参数,请传入json5配置文件')
25
+ ctx_instance.load(sys.argv[1])
26
+ pre_process_scripts = {}
27
+ for file in find('.', ctx_instance.source_directory.pre_process_scripts_file):
28
+ pre_process_scripts = deep_update(pre_process_scripts, json5.load(open(file, 'r', encoding='utf-8')))
29
+ prepare_model(pre_process_scripts)
30
+ ctx_instance.load_models(ctx_instance.source_directory.model)
31
+ prepare_schema(pre_process_scripts)
32
+ ctx_instance.load_schemas(ctx_instance.source_directory.schema)
33
+ prepare_crud(pre_process_scripts)
34
+ ctx_instance.load_cruds(ctx_instance.source_directory.crud)
35
+ prepare_api(pre_process_scripts)
36
+ ctx_instance.load_apis(ctx_instance.source_directory.api)
37
+
38
+ last_generate_time = datetime.now()
39
+ generate_common_files()
40
+ generate_model()
41
+ genenrate_schema()
42
+ generate_crud()
43
+ generate_api()
44
+ clean_expired_files_and_dirs(ctx_instance.project.directory, last_generate_time)
45
+
46
+
47
+
48
+ if __name__ == '__main__':
49
+ """
50
+ $env:PYTHONPATH = "."
51
+ python fastcodedog/cli.py fastcodegen/test/fastframe.diagram.json5 fastcodegen/test/fastframe.model.json5
52
+ """
53
+ main()
@@ -1 +1 @@
1
- # -*- coding: utf-8 -*-
1
+ # -*- coding: utf-8 -*-
@@ -1,61 +1,61 @@
1
- import os
2
- import os.path
3
- from datetime import datetime
4
-
5
-
6
- def clean_expired_files_and_dirs(current_dir, last_generate_time):
7
- """
8
- 清理目录的方法,按照指定规则处理目录及其子目录
9
-
10
- 参数:
11
- current_dir: 当前要处理的目录路径
12
- last_generate_time: 最后生成时间,datetime类型
13
- """
14
- # 1. 优先处理子目录(递归)
15
- for item in os.listdir(current_dir):
16
- item_path = os.path.join(current_dir, item)
17
- if os.path.isdir(item_path) and not os.path.islink(item_path):
18
- clean_expired_files_and_dirs(item_path, last_generate_time)
19
-
20
- # 2. 处理当前目录下的py文件
21
- for item in os.listdir(current_dir):
22
- item_path = os.path.join(current_dir, item)
23
- if os.path.isfile(item_path) and item.endswith('.py'):
24
- # 检查文件修改时间
25
- file_mtime = datetime.fromtimestamp(os.path.getmtime(item_path))
26
- if file_mtime < last_generate_time:
27
- # 检查是否包含指定关键字
28
- try:
29
- content = open(item_path, 'r', encoding='utf-8').read()
30
- if '@author: fastcodedog' in content:
31
- os.remove(item_path)
32
- print(f"已删除文件: {item_path}")
33
- except Exception as e:
34
- print(f"处理文件 {item_path} 时出错: {e}")
35
-
36
- # 3. 检查并处理空的__init__.py
37
- init_file = os.path.join(current_dir, '__init__.py')
38
- if os.path.exists(init_file) and os.path.isfile(init_file):
39
- # 检查目录是否还有其他文件或子目录
40
- has_other_items = False
41
- for item in os.listdir(current_dir):
42
- if item != '__init__.py' or not os.path.isfile(os.path.join(current_dir, item)):
43
- has_other_items = True
44
- break
45
-
46
- if not has_other_items:
47
- # 检查__init__.py是否为空
48
- try:
49
- if os.path.getsize(init_file) == 0:
50
- os.remove(init_file)
51
- print(f"已删除空的__init__.py: {init_file}")
52
- except Exception as e:
53
- print(f"处理__init__.py {init_file} 时出错: {e}")
54
-
55
- # 4. 如果目录为空则删除
56
- try:
57
- if not os.listdir(current_dir): # 检查目录是否为空
58
- os.rmdir(current_dir)
59
- print(f"已删除空目录: {current_dir}")
60
- except Exception as e:
61
- print(f"删除目录 {current_dir} 时出错: {e}")
1
+ import os
2
+ import os.path
3
+ from datetime import datetime
4
+
5
+
6
+ def clean_expired_files_and_dirs(current_dir, last_generate_time):
7
+ """
8
+ 清理目录的方法,按照指定规则处理目录及其子目录
9
+
10
+ 参数:
11
+ current_dir: 当前要处理的目录路径
12
+ last_generate_time: 最后生成时间,datetime类型
13
+ """
14
+ # 1. 优先处理子目录(递归)
15
+ for item in os.listdir(current_dir):
16
+ item_path = os.path.join(current_dir, item)
17
+ if os.path.isdir(item_path) and not os.path.islink(item_path):
18
+ clean_expired_files_and_dirs(item_path, last_generate_time)
19
+
20
+ # 2. 处理当前目录下的py文件
21
+ for item in os.listdir(current_dir):
22
+ item_path = os.path.join(current_dir, item)
23
+ if os.path.isfile(item_path) and item.endswith('.py'):
24
+ # 检查文件修改时间
25
+ file_mtime = datetime.fromtimestamp(os.path.getmtime(item_path))
26
+ if file_mtime < last_generate_time:
27
+ # 检查是否包含指定关键字
28
+ try:
29
+ content = open(item_path, 'r', encoding='utf-8').read()
30
+ if '@author: fastcodedog' in content:
31
+ os.remove(item_path)
32
+ print(f"已删除文件: {item_path}")
33
+ except Exception as e:
34
+ print(f"处理文件 {item_path} 时出错: {e}")
35
+
36
+ # 3. 检查并处理空的__init__.py
37
+ init_file = os.path.join(current_dir, '__init__.py')
38
+ if os.path.exists(init_file) and os.path.isfile(init_file):
39
+ # 检查目录是否还有其他文件或子目录
40
+ has_other_items = False
41
+ for item in os.listdir(current_dir):
42
+ if item != '__init__.py' or not os.path.isfile(os.path.join(current_dir, item)):
43
+ has_other_items = True
44
+ break
45
+
46
+ if not has_other_items:
47
+ # 检查__init__.py是否为空
48
+ try:
49
+ if os.path.getsize(init_file) == 0:
50
+ os.remove(init_file)
51
+ print(f"已删除空的__init__.py: {init_file}")
52
+ except Exception as e:
53
+ print(f"处理__init__.py {init_file} 时出错: {e}")
54
+
55
+ # 4. 如果目录为空则删除
56
+ try:
57
+ if not os.listdir(current_dir): # 检查目录是否为空
58
+ os.rmdir(current_dir)
59
+ print(f"已删除空目录: {current_dir}")
60
+ except Exception as e:
61
+ print(f"删除目录 {current_dir} 时出错: {e}")
@@ -1,21 +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')
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')
@@ -1,63 +1,63 @@
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, repalce_async=True):
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
- # 临时版本,把异步支持去掉,把文件中的 `async def` 替换为 `def`
30
- with open(path, 'r+', encoding='utf-8') as f:
31
- content = f.read()
32
- if repalce_async:
33
- content = content.replace('async def ', 'def ')
34
- f.seek(0)
35
- f.write(content)
36
- f.truncate()
37
- print(f'writed {path}') # 先临时放这里,后续再改
38
- # # 调用flake8格式化文件
39
- # subprocess.run(['flake8', path], check=True)
40
-
41
-
42
- def _make_pathon_package(directory):
43
- if not os.path.exists(directory):
44
- parent_directory = os.path.dirname(directory)
45
- _make_pathon_package(parent_directory)
46
- os.makedirs(directory)
47
- if directory.startswith(ctx_instance.project.directory):
48
- init_file = os.path.join(directory, '__init__.py')
49
- open(init_file, 'a').close()
50
-
51
-
52
- def write_json_file(path, data):
53
- """
54
- 写入json文件
55
- :param path:
56
- :param data:
57
- :return:
58
- """
59
- directory = os.path.dirname(path)
60
- if os.path.exists(directory) is False:
61
- os.makedirs(directory)
62
- with open(path, 'w', encoding='utf-8') as f:
63
- json5.dump(data, f, ensure_ascii=False, indent=4)
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, repalce_async=True):
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
+ # 临时版本,把异步支持去掉,把文件中的 `async def` 替换为 `def`
30
+ with open(path, 'r+', encoding='utf-8') as f:
31
+ content = f.read()
32
+ if repalce_async:
33
+ content = content.replace('async def ', 'def ')
34
+ f.seek(0)
35
+ f.write(content)
36
+ f.truncate()
37
+ print(f'writed {path}') # 先临时放这里,后续再改
38
+ # # 调用flake8格式化文件
39
+ # subprocess.run(['flake8', path], check=True)
40
+
41
+
42
+ def _make_pathon_package(directory):
43
+ if not os.path.exists(directory):
44
+ parent_directory = os.path.dirname(directory)
45
+ _make_pathon_package(parent_directory)
46
+ os.makedirs(directory)
47
+ if directory.startswith(ctx_instance.project.directory):
48
+ init_file = os.path.join(directory, '__init__.py')
49
+ open(init_file, 'a').close()
50
+
51
+
52
+ def write_json_file(path, data):
53
+ """
54
+ 写入json文件
55
+ :param path:
56
+ :param data:
57
+ :return:
58
+ """
59
+ directory = os.path.dirname(path)
60
+ if os.path.exists(directory) is False:
61
+ os.makedirs(directory)
62
+ with open(path, 'w', encoding='utf-8') as f:
63
+ json5.dump(data, f, ensure_ascii=False, indent=4)
@@ -1 +1 @@
1
- # -*- coding: utf-8 -*-
1
+ # -*- coding: utf-8 -*-
@@ -1 +1 @@
1
- # -*- coding: utf-8 -*-
1
+ # -*- coding: utf-8 -*-
@@ -1,18 +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
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
@@ -1,22 +1,22 @@
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.have_select_models = False
11
- self.summary = ''
12
- self.comment = ''
13
- self.action = ''
14
- self.return_list = False
15
- self.url = ''
16
- self.max_size = None
17
- self._types['max_size'] = int
18
- self.tags = []
19
- self._types['tags'] = str
20
- self.params = {}
21
- self._types['params'] = Param
22
- self.oauth2_required = True
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.have_select_models = False
11
+ self.summary = ''
12
+ self.comment = ''
13
+ self.action = ''
14
+ self.return_list = False
15
+ self.url = ''
16
+ self.max_size = None
17
+ self._types['max_size'] = int
18
+ self.tags = []
19
+ self._types['tags'] = str
20
+ self.params = {}
21
+ self._types['params'] = Param
22
+ self.oauth2_required = True
@@ -1,12 +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'
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'
@@ -1,15 +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 = ''
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 @@
1
+ # -*- coding: utf-8 -*-
@@ -1,10 +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]
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]