fastcodedog 2.0.4__tar.gz → 2.0.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 (138) hide show
  1. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/PKG-INFO +1 -1
  2. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/api/endpoint.py +1 -0
  3. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/crud/query.py +3 -0
  4. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/api_function.py +11 -5
  5. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/generation.py +2 -0
  6. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/main.py +3 -1
  7. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/crud_functions.py +5 -2
  8. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/query_functions.py +16 -1
  9. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/schema_and_crud_to_api/endpoint.py +1 -0
  10. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/pyproject.toml +1 -1
  11. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/README.md +0 -0
  12. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/README_zh.md +0 -0
  13. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/__init__.py +0 -0
  14. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/cli.py +0 -0
  15. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/common/__init__.py +0 -0
  16. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/common/source_file_path.py +0 -0
  17. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/common/write_file.py +0 -0
  18. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/__init__.py +0 -0
  19. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/api/__init__.py +0 -0
  20. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/api/api.py +0 -0
  21. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/api/oauth2.py +0 -0
  22. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/api/param.py +0 -0
  23. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/common/__init__.py +0 -0
  24. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/common/get_context_object.py +0 -0
  25. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/common/get_relationship.py +0 -0
  26. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/common/import_.py +0 -0
  27. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/context.py +0 -0
  28. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/contextbase.py +0 -0
  29. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/crud/__init__.py +0 -0
  30. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/crud/column.py +0 -0
  31. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/crud/crud.py +0 -0
  32. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/crud/join_relationship.py +0 -0
  33. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/model/__init__.py +0 -0
  34. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/model/column.py +0 -0
  35. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/model/computed_property.py +0 -0
  36. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/model/model.py +0 -0
  37. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/model/relationship.py +0 -0
  38. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/__init__.py +0 -0
  39. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/alias_generator.py +0 -0
  40. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/field.py +0 -0
  41. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/response_schema.py +0 -0
  42. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/schema.py +0 -0
  43. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/schema/sub_object.py +0 -0
  44. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/setting/__init__.py +0 -0
  45. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/setting/config.py +0 -0
  46. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/setting/extend_app.py +0 -0
  47. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/setting/project.py +0 -0
  48. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/context/setting/source_directory.py +0 -0
  49. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/__init__.py +0 -0
  50. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/__init__.py +0 -0
  51. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/api.py +0 -0
  52. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/config.py +0 -0
  53. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/db.py +0 -0
  54. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/api/oauth2.py +0 -0
  55. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/__init__.py +0 -0
  56. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/block.py +0 -0
  57. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/call.py +0 -0
  58. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/class_type.py +0 -0
  59. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/file.py +0 -0
  60. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/function.py +0 -0
  61. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/head_comment.py +0 -0
  62. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/line_break.py +0 -0
  63. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/location_finder.py +0 -0
  64. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/required_import.py +0 -0
  65. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/text.py +0 -0
  66. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/base/variable.py +0 -0
  67. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/__init__.py +0 -0
  68. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/configfiles/__init__.py +0 -0
  69. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/db.py +0 -0
  70. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/generation.py +0 -0
  71. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/main.py +0 -0
  72. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/oauthfiles/__init__.py +0 -0
  73. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/toolfiles/__init__.py +0 -0
  74. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/utilfiles/__init__.py +0 -0
  75. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/commonfiles/utilfiles/case_converter.py +0 -0
  76. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/__init__.py +0 -0
  77. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/crud.py +0 -0
  78. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/generation.py +0 -0
  79. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/crud/selectinload.py +0 -0
  80. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/__init__.py +0 -0
  81. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/base.py +0 -0
  82. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/column.py +0 -0
  83. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/computed_property.py +0 -0
  84. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/generation.py +0 -0
  85. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/init.py +0 -0
  86. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/model.py +0 -0
  87. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/relation_object.py +0 -0
  88. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/relationship.py +0 -0
  89. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/model/table_args.py +0 -0
  90. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/__init__.py +0 -0
  91. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/field.py +0 -0
  92. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/generation.py +0 -0
  93. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/response_schema.py +0 -0
  94. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/schema.py +0 -0
  95. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/generation/schema/sub_object.py +0 -0
  96. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/__init__.py +0 -0
  97. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_and_schema_to_crud/__init__.py +0 -0
  98. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_and_schema_to_crud/prepare.py +0 -0
  99. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_and_schema_to_crud/queries.py +0 -0
  100. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/__init__.py +0 -0
  101. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/alias_generator.py +0 -0
  102. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/no_input_fields.py +0 -0
  103. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/no_response_fields.py +0 -0
  104. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/prepare.py +0 -0
  105. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/response_schemas.py +0 -0
  106. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/model_to_schema/specified_field_types.py +0 -0
  107. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/README.MD +0 -0
  108. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/__init__.py +0 -0
  109. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/after/__init__.py +0 -0
  110. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/after/computed_properties.py +0 -0
  111. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/after/disable_relationships.py +0 -0
  112. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/after/specified_class_names.py +0 -0
  113. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/before/__init__.py +0 -0
  114. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/before/additional_foreign_keys.py +0 -0
  115. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/before/specified_column_types.py +0 -0
  116. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/before/specified_relationship_names.py +0 -0
  117. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/column.py +0 -0
  118. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/pdm.py +0 -0
  119. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/prepare.py +0 -0
  120. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/reference.xml +0 -0
  121. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/table.py +0 -0
  122. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/pdm_to_model/table.xml +0 -0
  123. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/schema_and_crud_to_api/__init__.py +0 -0
  124. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/schema_and_crud_to_api/prepare.py +0 -0
  125. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/schema_and_crud_to_api/schemas.py +0 -0
  126. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/prepare/schema_and_crud_to_api/validate_reponse_models.py +0 -0
  127. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/__init__.py +0 -0
  128. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/case_converter.py +0 -0
  129. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/deep_update.py +0 -0
  130. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/extractor.py +0 -0
  131. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/find_file.py +0 -0
  132. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/indent.py +0 -0
  133. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/inflect_wrapper.py +0 -0
  134. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/make_dirs.py +0 -0
  135. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/singleton.py +0 -0
  136. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/type_converter.py +0 -0
  137. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/valid_name.py +0 -0
  138. {fastcodedog-2.0.4 → fastcodedog-2.0.6}/fastcodedog/util/wrap_str_with_quotation.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastcodedog
3
- Version: 2.0.4
3
+ Version: 2.0.6
4
4
  Summary:
5
5
  License: MIT
6
6
  Author: taohoo
@@ -7,6 +7,7 @@ class Endpoint(ContextBase):
7
7
  def __init__(self):
8
8
  super().__init__()
9
9
  self.name = ''
10
+ self.have_select_models = False
10
11
  self.summary = ''
11
12
  self.comment = ''
12
13
  self.action = ''
@@ -17,6 +17,9 @@ class Query(ContextBase):
17
17
  self.name = ''
18
18
  self.model = ''
19
19
  self.module = ''
20
+ self.select_models = []
21
+ self._types['select_models'] = str
22
+ # self.select_from = ''
20
23
  self.summary = ''
21
24
  self.description = ''
22
25
  self.max_size = None # 一个请求允许的最大返回值
@@ -112,15 +112,21 @@ return {{}}""", possible_imports=[self.crud_imoprt, 'from fastapi import HTTPExc
112
112
  params_class_name = 'CustomParams'
113
113
  if self.api.validate_response_model:
114
114
  self.blocks.append(Text(
115
- f"""return create_page([response_model.model_validate({self.api.snake_name}) for {self.api.snake_name} in query.offset(skip).limit(limit).all()],
115
+ f"""return create_page([response_model.model_validate({self.api.snake_name}) for {self.api.snake_name}{', *_' if self.context.have_select_models else ''} in query.offset(skip).limit(limit).all()],
116
116
  total=total, params={params_class_name}(page=page, size=size))""",
117
117
  possible_imports=['from fastapi_pagination import create_page',
118
118
  'from fastapi_pagination import Params']))
119
119
  else:
120
- self.blocks.append(Text(f"""return create_page(query.offset(skip).limit(limit).all(),
121
- total=total, params={params_class_name}(page=page, size=size))""",
122
- possible_imports=['from fastapi_pagination import create_page',
123
- 'from fastapi_pagination import Params']))
120
+ if self.context.have_select_models:
121
+ self.blocks.append(Text(f"""return create_page([for {self.api.snake_name}, *_ in query.offset(skip).limit(limit).all()],
122
+ total=total, params={params_class_name}(page=page, size=size))""",
123
+ possible_imports=['from fastapi_pagination import create_page',
124
+ 'from fastapi_pagination import Params']))
125
+ else:
126
+ self.blocks.append(Text(f"""return create_page(query.offset(skip).limit(limit).all(),
127
+ total=total, params={params_class_name}(page=page, size=size))""",
128
+ possible_imports=['from fastapi_pagination import create_page',
129
+ 'from fastapi_pagination import Params']))
124
130
 
125
131
  def _fill_option_none(self):
126
132
  if any([param.option_none for param in self.context.params.values()]):
@@ -15,5 +15,7 @@ def generate_api(specify_api=None):
15
15
  Oauth2().save()
16
16
  for module, apis in ctx_instance.apis.items():
17
17
  for api_context in apis.values():
18
+ if specify_api and api_context.name not in specify_api:
19
+ continue
18
20
  api_file = Api(api_context)
19
21
  api_file.save()
@@ -70,6 +70,7 @@ logging.getLogger('sqlalchemy.engine').setLevel(get_config('logging', 'level', l
70
70
  @app.exception_handler(DataError)
71
71
  @app.exception_handler(ValidationError)
72
72
  async def fastapi_exception_handler_400(request, exc):
73
+ logging.warning(traceback.format_exc())
73
74
  if f"{exc}".find("duplicate key") != -1:
74
75
  p = r'(Key\s+.*already\s+exists)'
75
76
  detail = re.findall(p, f"{exc}")
@@ -85,6 +86,7 @@ async def fastapi_exception_handler_400(request, exc):
85
86
 
86
87
  @app.exception_handler(SQLAlchemyError)
87
88
  async def fastapi_exception_handler_500(request, exc):
89
+ logging.error(traceback.format_exc())
88
90
  raise HTTPException(
89
91
  status_code=HTTP_500_INTERNAL_SERVER_ERROR,
90
92
  detail=f"Database operation failed: {exc}",
@@ -93,4 +95,4 @@ async def fastapi_exception_handler_500(request, exc):
93
95
  'from pydantic import ValidationError',
94
96
  'from starlette.status import HTTP_400_BAD_REQUEST',
95
97
  'from starlette.status import HTTP_500_INTERNAL_SERVER_ERROR',
96
- 'import re']))
98
+ 'import re', 'import traceback']))
@@ -13,8 +13,8 @@ from fastcodedog.util.inflect_wrapper import plural
13
13
 
14
14
 
15
15
  class Crud(Function):
16
- POSSIBLE_IMPORTS = ['from datetime import datetime', 'from datetime import date', 'from datetime import time',
17
- 'from sqlalchemy import exists', 'from sqlalchemy import select',
16
+ POSSIBLE_IMPORTS = ['import datetime', 'from datetime import datetime', 'from datetime import date', 'from datetime import time',
17
+ 'from sqlalchemy import exists', 'from sqlalchemy import select', 'from sqlalchemy import join',
18
18
  'from sqlalchemy import or_', 'from sqlalchemy import and_']
19
19
 
20
20
  class Action(Enum):
@@ -51,6 +51,9 @@ class Crud(Function):
51
51
  for model in models.values():
52
52
  if model.name == model_name:
53
53
  return LocationFinder.get_package(model_name, 'model', model.module)
54
+ # 支持的系统模型
55
+ if model_name == 'datetime':
56
+ return None
54
57
  raise Exception(f'未找到模型:{model_name}')
55
58
 
56
59
 
@@ -150,6 +150,7 @@ class Query(Crud):
150
150
  super().__init__(f'get_{context.name}', context=context, comment=context.description)
151
151
  self.action = Crud.Action.READ
152
152
  self.return_list = True
153
+ self.have_select_models = bool(self.context.select_models)
153
154
  self.summary = context.summary
154
155
  self.params['session'] = Function.Parameter('session', nullable=False)
155
156
  for parameter in context.parameters.values():
@@ -171,7 +172,21 @@ class Query(Crud):
171
172
  self._init_blocks_and_possible_imports()
172
173
 
173
174
  def _init_blocks_and_possible_imports(self):
174
- self.blocks.append(Text(f'query = session.query({self.context.model})'))
175
+ # 添加session.query
176
+ if self.context.select_models:
177
+ # self.add_possible_imports(Import(self.context.select_models[0], self.get_package_by_model_name(self.context.select_models[0])))
178
+ self.blocks.append(Text(f'query = session.query({", ".join([self.context.model] + self.context.select_models)})'))
179
+ for select_model in self.context.select_models:
180
+ if select_model not in self.context.aliases.keys():
181
+ self.add_possible_imports(Import(select_model, self.get_package_by_model_name(select_model)))
182
+ else:
183
+ self.blocks.append(Text(f'query = session.query({self.context.model})'))
184
+ # # 添加select_from,一般需要先有select_models
185
+ # if self.context.select_from:
186
+ # self.blocks.append(Text(f'query = query.select_from({self.context.select_from})'))
187
+ # for select_from in extract_variables(self.context.select_from):
188
+ # if select_from not in ['join', 'outerjoin'] and select_from not in self.context.aliases.keys():
189
+ # ...
175
190
  for alias_name, alias_value in self.context.aliases.items():
176
191
  model_name = alias_value.split('.')[0]
177
192
  self.add_possible_imports(Import(model_name, self.get_package_by_model_name(model_name)))
@@ -18,6 +18,7 @@ class Endpoint:
18
18
  def to_json(self):
19
19
  return {
20
20
  'name': self.name,
21
+ 'have_select_models': False if not hasattr(self.block, 'have_select_models') else self.block.have_select_models,
21
22
  'summary': self.block.summary,
22
23
  'comment': self.block.comment,
23
24
  'action': self._get_action(),
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "fastcodedog"
3
- version = "2.0.4"
3
+ version = "2.0.6"
4
4
  description = ""
5
5
  authors = ["taohoo <taohoo@163.com>"]
6
6
  license = "MIT"
File without changes
File without changes