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.
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/PKG-INFO +6 -4
- fastcodedog-2.0.2/README.md +3 -0
- fastcodedog-2.0.2/README_zh.md +4 -0
- fastcodedog-2.0.2/fastcodedog/cli.py +47 -0
- fastcodedog-2.0.2/fastcodedog/common/source_file_path.py +21 -0
- fastcodedog-2.0.2/fastcodedog/common/write_file.py +55 -0
- fastcodedog-2.0.2/fastcodedog/context/api/api.py +18 -0
- fastcodedog-2.0.2/fastcodedog/context/api/endpoint.py +20 -0
- fastcodedog-2.0.2/fastcodedog/context/api/oauth2.py +12 -0
- fastcodedog-2.0.2/fastcodedog/context/api/param.py +15 -0
- fastcodedog-2.0.2/fastcodedog/context/common/get_context_object.py +10 -0
- fastcodedog-2.0.2/fastcodedog/context/common/get_relationship.py +26 -0
- fastcodedog-2.0.2/fastcodedog/context/common/import_.py +10 -0
- fastcodedog-2.0.2/fastcodedog/context/context.py +85 -0
- fastcodedog-2.0.2/fastcodedog/context/contextbase.py +84 -0
- fastcodedog-2.0.2/fastcodedog/context/crud/column.py +13 -0
- fastcodedog-2.0.2/fastcodedog/context/crud/crud.py +38 -0
- fastcodedog-2.0.2/fastcodedog/context/crud/join_relationship.py +14 -0
- fastcodedog-2.0.2/fastcodedog/context/crud/query.py +35 -0
- fastcodedog-2.0.2/fastcodedog/context/model/column.py +22 -0
- fastcodedog-2.0.2/fastcodedog/context/model/computed_property.py +19 -0
- fastcodedog-2.0.2/fastcodedog/context/model/model.py +27 -0
- fastcodedog-2.0.2/fastcodedog/context/model/relationship.py +21 -0
- fastcodedog-2.0.2/fastcodedog/context/schema/alias_generator.py +11 -0
- fastcodedog-2.0.2/fastcodedog/context/schema/field.py +17 -0
- fastcodedog-2.0.2/fastcodedog/context/schema/response_schema.py +21 -0
- fastcodedog-2.0.2/fastcodedog/context/schema/schema.py +25 -0
- fastcodedog-2.0.2/fastcodedog/context/schema/sub_object.py +13 -0
- fastcodedog-2.0.2/fastcodedog/context/setting/config.py +23 -0
- fastcodedog-2.0.2/fastcodedog/context/setting/extend_app.py +10 -0
- fastcodedog-2.0.2/fastcodedog/context/setting/project.py +11 -0
- fastcodedog-2.0.2/fastcodedog/context/setting/source_directory.py +13 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/api.py +97 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/api_function.py +197 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/config.py +73 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/db.py +31 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/generation.py +19 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/main.py +96 -0
- fastcodedog-2.0.2/fastcodedog/generation/api/oauth2.py +144 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/block.py +43 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/call.py +27 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/class_type.py +33 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/file.py +34 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/function.py +71 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/head_comment.py +50 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/line_break.py +15 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/location_finder.py +60 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/required_import.py +98 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/text.py +22 -0
- fastcodedog-2.0.2/fastcodedog/generation/base/variable.py +57 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/configfiles/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/db.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/generation.py +6 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/main.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/oauthfiles/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/toolfiles/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/utilfiles/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/commonfiles/utilfiles/case_converter.py +39 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/crud.py +21 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/crud_functions.py +277 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/generation.py +18 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/query_functions.py +197 -0
- fastcodedog-2.0.2/fastcodedog/generation/crud/selectinload.py +49 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/base.py +23 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/column.py +60 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/computed_property.py +14 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/generation.py +31 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/init.py +21 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/model.py +29 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/relation_object.py +41 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/relationship.py +42 -0
- fastcodedog-2.0.2/fastcodedog/generation/model/table_args.py +27 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/field.py +42 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/generation.py +39 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/response_schema.py +60 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/schema.py +68 -0
- fastcodedog-2.0.2/fastcodedog/generation/schema/sub_object.py +22 -0
- fastcodedog-2.0.2/fastcodedog/prepare/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/prepare.py +82 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_and_schema_to_crud/queries.py +28 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/alias_generator.py +17 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/no_input_fields.py +20 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/no_response_fields.py +20 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/prepare.py +90 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/response_schemas.py +60 -0
- fastcodedog-2.0.2/fastcodedog/prepare/model_to_schema/specified_field_types.py +23 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/README.MD +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/computed_properties.py +18 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/disable_relationships.py +37 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/after/specified_class_names.py +39 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/additional_foreign_keys.py +12 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/specified_column_types.py +8 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/before/specified_relationship_names.py +6 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/column.py +104 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/pdm.py +126 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/prepare.py +28 -0
- fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model/table.py +350 -0
- fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/__init__.py +1 -0
- fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/endpoint.py +72 -0
- fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/prepare.py +36 -0
- fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/schemas.py +4 -0
- fastcodedog-2.0.2/fastcodedog/prepare/schema_and_crud_to_api/validate_reponse_models.py +6 -0
- fastcodedog-2.0.2/fastcodedog/util/__init__.py +1 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/case_converter.py +1 -1
- fastcodedog-2.0.2/fastcodedog/util/extractor.py +37 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/find_file.py +1 -1
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/indent.py +5 -5
- fastcodedog-2.0.2/fastcodedog/util/type_converter.py +133 -0
- fastcodedog-2.0.2/fastcodedog/util/valid_name.py +19 -0
- fastcodedog-2.0.2/fastcodedog/util/wrap_str_with_quotation.py +13 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/pyproject.toml +5 -4
- fastcodedog-0.1.0/README.md +0 -3
- fastcodedog-0.1.0/fastcodedog/api/api.py +0 -177
- fastcodedog-0.1.0/fastcodedog/api/api_package.py +0 -49
- fastcodedog-0.1.0/fastcodedog/api/app_function.py +0 -22
- fastcodedog-0.1.0/fastcodedog/api/config.py +0 -68
- fastcodedog-0.1.0/fastcodedog/api/db.py +0 -31
- fastcodedog-0.1.0/fastcodedog/api/main.py +0 -60
- fastcodedog-0.1.0/fastcodedog/api/oauth.py +0 -120
- fastcodedog-0.1.0/fastcodedog/cli.py +0 -37
- fastcodedog-0.1.0/fastcodedog/context/base.py +0 -9
- fastcodedog-0.1.0/fastcodedog/context/context.py +0 -32
- fastcodedog-0.1.0/fastcodedog/context/context_instance.py +0 -52
- fastcodedog-0.1.0/fastcodedog/context/contextbase.py +0 -37
- fastcodedog-0.1.0/fastcodedog/context/modules.py +0 -12
- fastcodedog-0.1.0/fastcodedog/context/oauth2.py +0 -11
- fastcodedog-0.1.0/fastcodedog/context/query.py +0 -25
- fastcodedog-0.1.0/fastcodedog/context/schema.py +0 -32
- fastcodedog-0.1.0/fastcodedog/context/tenant.py +0 -11
- fastcodedog-0.1.0/fastcodedog/crud/_crud.py +0 -168
- fastcodedog-0.1.0/fastcodedog/crud/crud.py +0 -78
- fastcodedog-0.1.0/fastcodedog/crud/crud_package.py +0 -26
- fastcodedog-0.1.0/fastcodedog/crud/method_block.py +0 -14
- fastcodedog-0.1.0/fastcodedog/crud/param.py +0 -13
- fastcodedog-0.1.0/fastcodedog/diagram/README.MD +0 -3
- fastcodedog-0.1.0/fastcodedog/diagram/column.py +0 -64
- fastcodedog-0.1.0/fastcodedog/diagram/diagram.py +0 -188
- fastcodedog-0.1.0/fastcodedog/diagram/table.py +0 -169
- fastcodedog-0.1.0/fastcodedog/generation/classs_block.py +0 -36
- fastcodedog-0.1.0/fastcodedog/generation/file.py +0 -90
- fastcodedog-0.1.0/fastcodedog/generation/function_block.py +0 -23
- fastcodedog-0.1.0/fastcodedog/generation/generationbase.py +0 -4
- fastcodedog-0.1.0/fastcodedog/generation/import_stmt.py +0 -62
- fastcodedog-0.1.0/fastcodedog/generation/package.py +0 -18
- fastcodedog-0.1.0/fastcodedog/generation/param.py +0 -15
- fastcodedog-0.1.0/fastcodedog/generation/variable.py +0 -35
- fastcodedog-0.1.0/fastcodedog/model/_base.py +0 -12
- fastcodedog-0.1.0/fastcodedog/model/attribute.py +0 -34
- fastcodedog-0.1.0/fastcodedog/model/init.py +0 -19
- fastcodedog-0.1.0/fastcodedog/model/model.py +0 -76
- fastcodedog-0.1.0/fastcodedog/model/model_package.py +0 -52
- fastcodedog-0.1.0/fastcodedog/model/relation_object.py +0 -39
- fastcodedog-0.1.0/fastcodedog/model/sub_object.py +0 -100
- fastcodedog-0.1.0/fastcodedog/model/unique_stmt.py +0 -16
- fastcodedog-0.1.0/fastcodedog/schema/attribute.py +0 -29
- fastcodedog-0.1.0/fastcodedog/schema/schema.py +0 -119
- fastcodedog-0.1.0/fastcodedog/schema/schema_additional.py +0 -62
- fastcodedog-0.1.0/fastcodedog/schema/schema_additional_class_block.py +0 -92
- fastcodedog-0.1.0/fastcodedog/schema/schema_additional_package.py +0 -27
- fastcodedog-0.1.0/fastcodedog/schema/schema_class_block.py +0 -16
- fastcodedog-0.1.0/fastcodedog/schema/schema_package.py +0 -44
- fastcodedog-0.1.0/fastcodedog/test/codes/hello.py +0 -9
- fastcodedog-0.1.0/fastcodedog/test/codes/test_import.py +0 -13
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/menu.py +0 -48
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/organization.py +0 -48
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/position.py +0 -58
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/tenant.py +0 -38
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/admin/user.py +0 -102
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute.py +0 -38
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute_select_item.py +0 -52
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/define/attribute_verification.py +0 -38
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/oauth/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/oauth/oauth.py +0 -53
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/operation/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/api/operation/api_log.py +0 -38
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/config.ini +0 -5
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/config/config.py +0 -28
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/menu.py +0 -60
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/organization.py +0 -60
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/position.py +0 -83
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/tenant.py +0 -37
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/admin/user.py +0 -113
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute.py +0 -37
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute_select_item.py +0 -40
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/define/attribute_verification.py +0 -40
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/operation/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/crud/operation/api_log.py +0 -37
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/db.py +0 -21
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/main.py +0 -49
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/__init__.py +0 -20
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/menu.py +0 -30
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/organization.py +0 -29
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/position.py +0 -25
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/position_menu.py +0 -17
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/tenant.py +0 -20
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user.py +0 -29
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user_organization.py +0 -17
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/admin/user_position.py +0 -17
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/base.py +0 -12
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute.py +0 -31
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute_select_item.py +0 -25
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/define/attribute_verification.py +0 -23
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/operation/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/model/operation/api_log.py +0 -28
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/menu.py +0 -38
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/organization.py +0 -37
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/position.py +0 -35
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/tenant.py +0 -40
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/user.py +0 -40
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/admin/user_additional.py +0 -51
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/callback/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/callback/get_dynamic_attributes.py +0 -15
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute.py +0 -39
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_select_item.py +0 -37
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_select_item_additional.py +0 -14
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/define/attribute_verification.py +0 -35
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/operation/__init__.py +0 -0
- fastcodedog-0.1.0/fastcodedog/test/fakeapp/schema/operation/api_log.py +0 -45
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.api.oauth.json5 +0 -21
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.base.json5 +0 -11
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.crud.user.json5 +0 -63
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.diagram.json5 +0 -43
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.model.json5 +0 -7
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.json5 +0 -49
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.select_item.json5 +0 -11
- fastcodedog-0.1.0/fastcodedog/test/fastcodedog.schema.user.json5 +0 -50
- fastcodedog-0.1.0/fastcodedog/test/test_context.py +0 -8
- fastcodedog-0.1.0/fastcodedog/test/test_generate_all.py +0 -57
- fastcodedog-0.1.0/fastcodedog/test/test_generated_model.py +0 -99
- fastcodedog-0.1.0/fastcodedog/test/test_generated_model_with_tenant.py +0 -109
- fastcodedog-0.1.0/fastcodedog/todo.txt +0 -5
- fastcodedog-0.1.0/fastcodedog/util/type_converter.py +0 -59
- fastcodedog-0.1.0/fastcodedog/util/write_file.py +0 -26
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/api → fastcodedog-2.0.2/fastcodedog/common}/__init__.py +0 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/context/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/crud → fastcodedog-2.0.2/fastcodedog/context/api}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/context/common}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/generation → fastcodedog-2.0.2/fastcodedog/context/crud}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog → fastcodedog-2.0.2/fastcodedog/context}/model/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog → fastcodedog-2.0.2/fastcodedog/context}/schema/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/test → fastcodedog-2.0.2/fastcodedog/context/setting}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/test/codes → fastcodedog-2.0.2/fastcodedog/generation}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/util → fastcodedog-2.0.2/fastcodedog/generation/api}/__init__.py +0 -0
- {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model}/reference.xml +0 -0
- {fastcodedog-0.1.0/fastcodedog/diagram → fastcodedog-2.0.2/fastcodedog/prepare/pdm_to_model}/table.xml +0 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/deep_update.py +0 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/inflect_wrapper.py +0 -0
- {fastcodedog-0.1.0 → fastcodedog-2.0.2}/fastcodedog/util/make_dirs.py +0 -0
- {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.
|
|
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
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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,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,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 = ''
|