FastAPI-fastkit 0.1.0__py3-none-any.whl
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.
- fastapi_fastkit/__init__.py +10 -0
- fastapi_fastkit/__main__.py +8 -0
- fastapi_fastkit/backend.py +112 -0
- fastapi_fastkit/cli.py +432 -0
- fastapi_fastkit/core/__init__.py +0 -0
- fastapi_fastkit/core/exceptions.py +27 -0
- fastapi_fastkit/core/settings.py +107 -0
- fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md +66 -0
- fastapi_fastkit/fastapi_project_template/README.md +20 -0
- fastapi_fastkit/fastapi_project_template/__init__.py +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/.env.test-tpl +3 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl +191 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl +17 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/main.py-tpl +21 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl +47 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/script/run-server.sh-tpl +2 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/script/run-test.sh-tpl +2 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl +13 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl +35 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/.DS_Store +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl +88 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/settings.py-tpl +96 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/_base.py-tpl +92 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/user.py-tpl +44 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/exceptions.py-tpl +94 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/global_data.py-tpl +33 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/logging.py-tpl +25 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/pagination.py-tpl +71 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_users.json-tpl +17 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/router/__init__.py-tpl +48 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/router/user.py-tpl +126 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl +48 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/user.py-tpl +81 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/templates/index.html-tpl +27 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/utils/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/src/utils/documents.py-tpl +20 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/test/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/test/conftest.py-tpl +22 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/test/routes/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-default/test/routes/test_user.py-tpl +112 -0
- fastapi_fastkit/fastapi_project_template/fastapi-dockerized/__init__.py-tpl +0 -0
- fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/__init__.py-tpl +0 -0
- fastapi_fastkit/py.typed +0 -0
- fastapi_fastkit/utils/__init__.py +0 -0
- fastapi_fastkit/utils/inspector.py +15 -0
- fastapi_fastkit/utils/logging.py +33 -0
- fastapi_fastkit/utils/transducer.py +70 -0
- fastapi_fastkit-0.1.0.dist-info/METADATA +46 -0
- fastapi_fastkit-0.1.0.dist-info/RECORD +56 -0
- fastapi_fastkit-0.1.0.dist-info/WHEEL +4 -0
- fastapi_fastkit-0.1.0.dist-info/entry_points.txt +5 -0
- fastapi_fastkit-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>FastAPI Test Project</title>
|
|
5
|
+
<style>
|
|
6
|
+
body {
|
|
7
|
+
font-family: Arial, sans-serif;
|
|
8
|
+
margin: 40px auto;
|
|
9
|
+
max-width: 800px;
|
|
10
|
+
padding: 0 20px;
|
|
11
|
+
}
|
|
12
|
+
h1 {
|
|
13
|
+
color: #333;
|
|
14
|
+
text-align: center;
|
|
15
|
+
}
|
|
16
|
+
.description {
|
|
17
|
+
color: #666;
|
|
18
|
+
text-align: center;
|
|
19
|
+
}
|
|
20
|
+
</style>
|
|
21
|
+
</head>
|
|
22
|
+
<body>
|
|
23
|
+
<h1>Welcome to FastAPI Test Project</h1>
|
|
24
|
+
<p class="description">This is a test project using FastAPI framework.</p>
|
|
25
|
+
<p class="description">API Documentation: <a href="/docs">Swagger UI</a> | <a href="/redoc">ReDoc</a></p>
|
|
26
|
+
</body>
|
|
27
|
+
</html>
|
|
File without changes
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# The module defines API docs content that OpenAPI generator can read.
|
|
3
|
+
# --------------------------------------------------------------------------
|
|
4
|
+
from fastapi import FastAPI
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def add_description_at_api_tags(app: FastAPI):
|
|
8
|
+
tag_descriptions = {
|
|
9
|
+
"user": "User API. Performs user login/logout/get informations/etc...",
|
|
10
|
+
# put routers' description here after create and connect them.
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
openapi_tags = [
|
|
14
|
+
{"name": tag, "description": desc} for tag, desc in tag_descriptions.items()
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
if app.openapi_tags:
|
|
18
|
+
app.openapi_tags.extend(openapi_tags)
|
|
19
|
+
else:
|
|
20
|
+
app.openapi_tags = openapi_tags
|
|
File without changes
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# The module configures pytest runtime options.
|
|
3
|
+
# --------------------------------------------------------------------------
|
|
4
|
+
import pytest_asyncio
|
|
5
|
+
|
|
6
|
+
from httpx import AsyncClient, ASGITransport
|
|
7
|
+
|
|
8
|
+
from src import create_app
|
|
9
|
+
from src.core.settings import AppSettings
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
app_settings = AppSettings(_env_file=".env.test")
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class BaseTestRouter:
|
|
16
|
+
@pytest_asyncio.fixture(scope="function")
|
|
17
|
+
async def client(self):
|
|
18
|
+
app = create_app(app_settings)
|
|
19
|
+
async with AsyncClient(
|
|
20
|
+
transport=ASGITransport(app=app), base_url="http://test"
|
|
21
|
+
) as c:
|
|
22
|
+
yield c
|
|
File without changes
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# User router testcases
|
|
3
|
+
# --------------------------------------------------------------------------
|
|
4
|
+
import pytest
|
|
5
|
+
import pytest_asyncio
|
|
6
|
+
|
|
7
|
+
from fastapi import status
|
|
8
|
+
from uuid import UUID
|
|
9
|
+
from httpx import AsyncClient
|
|
10
|
+
|
|
11
|
+
from test.conftest import BaseTestRouter
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@pytest.mark.asyncio
|
|
15
|
+
class TestUserAPI(BaseTestRouter):
|
|
16
|
+
|
|
17
|
+
@pytest_asyncio.fixture(autouse=True)
|
|
18
|
+
async def setup(self, client: AsyncClient):
|
|
19
|
+
self.MOCK_USER_ID = UUID("123e4567-e89b-12d3-a456-426614174000")
|
|
20
|
+
self.INVALID_USER_ID = UUID("123e4567-e89b-12d3-a456-426614174999")
|
|
21
|
+
self.base_url = "/user"
|
|
22
|
+
|
|
23
|
+
async def test_create_user(self, client: AsyncClient):
|
|
24
|
+
# given
|
|
25
|
+
user_data = {
|
|
26
|
+
"username": "testuser",
|
|
27
|
+
"email": "testuser@example.com",
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
# when
|
|
31
|
+
response = await client.post(f"{self.base_url}/", json=user_data)
|
|
32
|
+
|
|
33
|
+
# then
|
|
34
|
+
assert response.status_code == status.HTTP_201_CREATED
|
|
35
|
+
json_response = response.json()
|
|
36
|
+
assert json_response["message"]["username"] == "testuser"
|
|
37
|
+
assert json_response["message"]["email"] == "testuser@example.com"
|
|
38
|
+
|
|
39
|
+
async def test_get_user_valid(self, client: AsyncClient):
|
|
40
|
+
# given
|
|
41
|
+
user_id = self.MOCK_USER_ID
|
|
42
|
+
|
|
43
|
+
# when
|
|
44
|
+
response = await client.get(f"{self.base_url}/{user_id}")
|
|
45
|
+
|
|
46
|
+
# then
|
|
47
|
+
assert response.status_code == status.HTTP_200_OK
|
|
48
|
+
json_response = response.json()
|
|
49
|
+
assert json_response["status"] == 200
|
|
50
|
+
assert json_response["code"] == "HTTP-200"
|
|
51
|
+
assert json_response["message"]["id"] == str(user_id)
|
|
52
|
+
|
|
53
|
+
async def test_get_user_invalid(self, client: AsyncClient):
|
|
54
|
+
# given
|
|
55
|
+
invalid_user_id = self.INVALID_USER_ID
|
|
56
|
+
|
|
57
|
+
# when
|
|
58
|
+
response = await client.get(f"{self.base_url}/{invalid_user_id}")
|
|
59
|
+
|
|
60
|
+
# then
|
|
61
|
+
assert response.status_code == status.HTTP_404_NOT_FOUND
|
|
62
|
+
|
|
63
|
+
async def test_update_user_valid(self, client: AsyncClient):
|
|
64
|
+
# given
|
|
65
|
+
user_id = self.MOCK_USER_ID
|
|
66
|
+
update_data = {
|
|
67
|
+
"username": "updateduser",
|
|
68
|
+
"email": "updateduser@example.com",
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# when
|
|
72
|
+
response = await client.patch(f"{self.base_url}/{user_id}", json=update_data)
|
|
73
|
+
|
|
74
|
+
# then
|
|
75
|
+
assert response.status_code == status.HTTP_200_OK
|
|
76
|
+
json_response = response.json()
|
|
77
|
+
assert json_response["message"]["username"] == "updateduser"
|
|
78
|
+
assert json_response["message"]["email"] == "updateduser@example.com"
|
|
79
|
+
|
|
80
|
+
async def test_update_user_invalid(self, client: AsyncClient):
|
|
81
|
+
# given
|
|
82
|
+
invalid_user_id = self.INVALID_USER_ID
|
|
83
|
+
update_data = {
|
|
84
|
+
"username": "invaliduser",
|
|
85
|
+
"email": "invaliduser@example.com",
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
# when
|
|
89
|
+
response = await client.patch(f"{self.base_url}/{invalid_user_id}", json=update_data)
|
|
90
|
+
|
|
91
|
+
# then
|
|
92
|
+
assert response.status_code == status.HTTP_404_NOT_FOUND
|
|
93
|
+
|
|
94
|
+
async def test_delete_user_valid(self, client: AsyncClient):
|
|
95
|
+
# given
|
|
96
|
+
user_id = self.MOCK_USER_ID
|
|
97
|
+
|
|
98
|
+
# when
|
|
99
|
+
response = await client.delete(f"{self.base_url}/{user_id}")
|
|
100
|
+
|
|
101
|
+
# then
|
|
102
|
+
assert response.status_code == status.HTTP_204_NO_CONTENT
|
|
103
|
+
|
|
104
|
+
async def test_delete_user_invalid(self, client: AsyncClient):
|
|
105
|
+
# given
|
|
106
|
+
invalid_user_id = self.INVALID_USER_ID
|
|
107
|
+
|
|
108
|
+
# when
|
|
109
|
+
response = await client.delete(f"{self.base_url}/{invalid_user_id}")
|
|
110
|
+
|
|
111
|
+
# then
|
|
112
|
+
assert response.status_code == status.HTTP_404_NOT_FOUND
|
|
File without changes
|
|
File without changes
|
fastapi_fastkit/py.typed
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# TODO : add inspect operation target template is valid FastAPI application.
|
|
2
|
+
# --------------------------------------------------------------------------
|
|
3
|
+
# The Module inspect FastAPI template is appropriate
|
|
4
|
+
#
|
|
5
|
+
# This module will be read by Github Action when contributor
|
|
6
|
+
# makes a PR of adding new FastAPI template.
|
|
7
|
+
#
|
|
8
|
+
# @author bnbong
|
|
9
|
+
# --------------------------------------------------------------------------
|
|
10
|
+
import shutil
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def delete_project(project_dir: str) -> None:
|
|
14
|
+
# TODO : add checking step -> preventing 'template' folder deletion.
|
|
15
|
+
shutil.rmtree(project_dir)
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# The Module defines console logging operations.
|
|
3
|
+
#
|
|
4
|
+
# @author bnbong bbbong9@gmail.com
|
|
5
|
+
# --------------------------------------------------------------------------
|
|
6
|
+
import logging
|
|
7
|
+
from typing import Union
|
|
8
|
+
|
|
9
|
+
from rich.console import Console
|
|
10
|
+
from rich.logging import RichHandler
|
|
11
|
+
|
|
12
|
+
from fastapi_fastkit.core.settings import FastkitConfig
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def setup_logging(
|
|
16
|
+
settings: FastkitConfig, terminal_width: Union[int, None] = None
|
|
17
|
+
) -> None:
|
|
18
|
+
logger = logging.getLogger("fastapi-fastkit")
|
|
19
|
+
console = Console(width=terminal_width) if terminal_width else None
|
|
20
|
+
formatter = logging.Formatter("%(message)s")
|
|
21
|
+
|
|
22
|
+
rich_handler = RichHandler(
|
|
23
|
+
show_time=False,
|
|
24
|
+
rich_tracebacks=True,
|
|
25
|
+
tracebacks_show_locals=True,
|
|
26
|
+
markup=True,
|
|
27
|
+
show_path=False,
|
|
28
|
+
console=console,
|
|
29
|
+
)
|
|
30
|
+
rich_handler.setFormatter(formatter)
|
|
31
|
+
|
|
32
|
+
logger.setLevel(settings.LOGGING_LEVEL)
|
|
33
|
+
logger.propagate = False
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# --------------------------------------------------------------------------
|
|
2
|
+
# The Module transduces .*-tpl extension files to their respective file extensions
|
|
3
|
+
# and copies them to user's local directory.
|
|
4
|
+
#
|
|
5
|
+
# This will handle .py-tpl, .txt-tpl, .md-tpl, etc.
|
|
6
|
+
#
|
|
7
|
+
# @author bnbong
|
|
8
|
+
# --------------------------------------------------------------------------
|
|
9
|
+
import os
|
|
10
|
+
import shutil
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _convert_tpl_to_real_extension(file_path: str) -> str:
|
|
14
|
+
"""
|
|
15
|
+
Converts a file ending in `.*-tpl` to its respective file extension by removing the `-tpl` suffix.
|
|
16
|
+
|
|
17
|
+
:param file_path: The full path of the `.*-tpl` file.
|
|
18
|
+
:type file_path: str
|
|
19
|
+
:return: The new path of the file with the `-tpl` suffix removed.
|
|
20
|
+
"""
|
|
21
|
+
# Remove the '-tpl' suffix from any file extension
|
|
22
|
+
if file_path.endswith("-tpl"):
|
|
23
|
+
new_file_path = file_path.replace("-tpl", "")
|
|
24
|
+
os.rename(file_path, new_file_path)
|
|
25
|
+
return new_file_path
|
|
26
|
+
return file_path
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def copy_and_convert_template(
|
|
30
|
+
template_dir: str, target_dir: str, project_name: str = ""
|
|
31
|
+
) -> None:
|
|
32
|
+
"""
|
|
33
|
+
Copies all files from the template directory to the target directory,
|
|
34
|
+
converting any files ending in `.*-tpl` during the copy process.
|
|
35
|
+
|
|
36
|
+
:param project_name: name of new project user defined at CLI.
|
|
37
|
+
:param template_dir: The source directory containing the template files.
|
|
38
|
+
:type template_dir: str
|
|
39
|
+
:param target_dir: The destination directory where files will be copied.
|
|
40
|
+
:type target_dir: str
|
|
41
|
+
"""
|
|
42
|
+
template_name = os.path.basename(template_dir)
|
|
43
|
+
if project_name is None:
|
|
44
|
+
project_name = template_name
|
|
45
|
+
target_path = os.path.join(target_dir, project_name)
|
|
46
|
+
os.makedirs(target_path, exist_ok=True)
|
|
47
|
+
|
|
48
|
+
for root, dirs, files in os.walk(template_dir):
|
|
49
|
+
relative_path = os.path.relpath(root, template_dir)
|
|
50
|
+
destination_dir = os.path.join(target_path, relative_path)
|
|
51
|
+
|
|
52
|
+
if not os.path.exists(destination_dir):
|
|
53
|
+
os.makedirs(destination_dir)
|
|
54
|
+
|
|
55
|
+
for file in files:
|
|
56
|
+
src_file = os.path.join(root, file)
|
|
57
|
+
|
|
58
|
+
if file.endswith("-tpl"):
|
|
59
|
+
dst_file = os.path.join(destination_dir, file.replace("-tpl", ""))
|
|
60
|
+
shutil.copy2(src_file, dst_file)
|
|
61
|
+
_convert_tpl_to_real_extension(dst_file)
|
|
62
|
+
else:
|
|
63
|
+
dst_file = os.path.join(destination_dir, file)
|
|
64
|
+
shutil.copy2(src_file, dst_file)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _convert_real_extension_to_tpl() -> None:
|
|
68
|
+
# TODO : impl this for converting runnable FastAPI app code to template - debugging operation for contributors
|
|
69
|
+
# this will be used at inspector module, not package user's runtime.
|
|
70
|
+
pass
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: FastAPI-fastkit
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Fast, easy-to-use starter kit for new users of Python and FastAPI
|
|
5
|
+
Author-Email: bnbong <bbbong9@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: click>=8.1.7
|
|
9
|
+
Requires-Dist: rich>=13.9.2
|
|
10
|
+
Requires-Dist: fastapi-cli>=0.0.5
|
|
11
|
+
Provides-Extra: dev
|
|
12
|
+
Requires-Dist: pytest>=8.3.3; extra == "dev"
|
|
13
|
+
Requires-Dist: pytest-cov>=5.0.0; extra == "dev"
|
|
14
|
+
Requires-Dist: black>=24.10.0; extra == "dev"
|
|
15
|
+
Requires-Dist: pre-commit>=4.0.1; extra == "dev"
|
|
16
|
+
Requires-Dist: mypy>=1.12.0; extra == "dev"
|
|
17
|
+
Requires-Dist: isort>=5.13.2; extra == "dev"
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
|
|
20
|
+
<p align="center">
|
|
21
|
+
<img align="top" width="70%" src=".github/FastAPI-fastkit_logo/fastkit_general_logo.png" alt="FastAPI-fastkit"/>
|
|
22
|
+
</p>
|
|
23
|
+
<p align="center">
|
|
24
|
+
<em><b>FastAPI-fastkit</b>: Fast, easy-to-use starter kit for new users of Python and FastAPI</em>
|
|
25
|
+
</p>
|
|
26
|
+
<p align="center">
|
|
27
|
+
<a href="https://pypi.org/project/fastapi-fastkit" target="_blank">
|
|
28
|
+
<img src="https://img.shields.io/pypi/v/fastapi-fastkit" alt="PyPI - Version">
|
|
29
|
+
</a>
|
|
30
|
+
<a href="https://img.shields.io/github/v/release/bnbong/FastAPI-fastkit" target="_blank">
|
|
31
|
+
<img src="https://img.shields.io/github/v/release/bnbong/FastAPI-fastkit" alt="GitHub Release">
|
|
32
|
+
</a>
|
|
33
|
+
</p>
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
This project was created to speed up the configuration of the development environment needed to develop Python-based web apps for new users of Python and [FastAPI](https://github.com/fastapi/fastapi).
|
|
38
|
+
|
|
39
|
+
This project was inspired by the `SpringBoot initializer` of the JAVA ecosystem & Python Django's `django-admin` cli operation.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
(other content will be updated later)
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
@author bnbong bbbong9@gmail.com
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
fastapi_fastkit-0.1.0.dist-info/METADATA,sha256=KFan31hfTNl9iYZtKu1Su-KRxHVCO_0Pzq4sV4PX39k,1698
|
|
2
|
+
fastapi_fastkit-0.1.0.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
|
|
3
|
+
fastapi_fastkit-0.1.0.dist-info/entry_points.txt,sha256=IONmgb7zWPnJWsCOcpF3u1yP6AWnPjrgWIv49mr1DZE,76
|
|
4
|
+
fastapi_fastkit-0.1.0.dist-info/licenses/LICENSE,sha256=HeeLr8J4jIuyAxFxQ1HJpa1KX4iQkoyBIJDSg4o2w90,1087
|
|
5
|
+
fastapi_fastkit/__init__.py,sha256=FsOU1bIVzJvKtK5qTn6YyF8vdunLpRt27prRGcIXAZ4,175
|
|
6
|
+
fastapi_fastkit/__main__.py,sha256=-FS9yUe4IEgDbJjFC1xso-pFCxRzUJ447j6bYpsBTBM,271
|
|
7
|
+
fastapi_fastkit/backend.py,sha256=xKk3qwMoz96J-HRLg6jjO0hI0A3W1Igp49w_caVImgE,3682
|
|
8
|
+
fastapi_fastkit/cli.py,sha256=RG-R2-BZhZ-GIAG9Yru9AxSTdSnG3GDQYVU0odl4ntM,12546
|
|
9
|
+
fastapi_fastkit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
|
+
fastapi_fastkit/core/exceptions.py,sha256=v5dOaG4xMlUD-payXtPq-35HM4U8NzH-nz8NcKiKW8c,583
|
|
11
|
+
fastapi_fastkit/core/settings.py,sha256=q9tHSqCjdAFiGsw00bPS3rIhbz9AjqVNIlIio6ksQEk,4010
|
|
12
|
+
fastapi_fastkit/fastapi_project_template/PROJECT_README_TEMPLATE.md,sha256=5lT_ZY1QItTDbhKYNY6KlOoGlbSTBSrs9DJthcle3D4,1529
|
|
13
|
+
fastapi_fastkit/fastapi_project_template/README.md,sha256=bgJjzcVeTJQTSDN57lNId5ttbatrGfiI3Ba8XrXr9zg,952
|
|
14
|
+
fastapi_fastkit/fastapi_project_template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/.env.test-tpl,sha256=P4IIxRZWreWfqBjYA7pTukRoeq_tif8iZjN06L-O0is,109
|
|
16
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/.gitignore-tpl,sha256=II4jyvXxkvLovcVNfTBDgLTclePuoM3Zr1dXuSgN5OA,3489
|
|
17
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/README.md-tpl,sha256=5I_BRqfFbl4Uh5_eoIkFenZGRxUr5zPjuyMOEJQSxE8,403
|
|
18
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/main.py-tpl,sha256=W7Kf2ANtoxNtdvFX15XyjlI_mXrUsVgFNYALggN4ikk,557
|
|
19
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/requirements.txt-tpl,sha256=0TyxHR7q73r_wPxgfChCsMs9FhKFfRl3UTMSbazWAJ0,828
|
|
20
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/script/run-server.sh-tpl,sha256=D7B2IX-NL39OoNPKr7lLE7Gho8hKEVZ_NpL81lwXAkA,47
|
|
21
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/script/run-test.sh-tpl,sha256=TQOvrbVJdEz2GU_dGX8n5_s8HbsMs40avD6rxkoy10I,45
|
|
22
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/setup.cfg-tpl,sha256=LfQjDw1UNpgv54cq0KcNOhWpIbvWN9iAkvO5LGNbsMo,177
|
|
23
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/setup.py-tpl,sha256=7YIWZIB6s_LVRkhwAP-bvg2341INOEbz8I3KCG5yTkk,1035
|
|
24
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/.DS_Store,sha256=G56MfjcaPDrmO_-I9z_LWxjtEm3FtWPBc35laos4nM8,6148
|
|
25
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/__init__.py-tpl,sha256=m1UtpIv63_xyx4SaKuyRtQNCj72axv1W8_6oAa5_DQw,2741
|
|
26
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/core/settings.py-tpl,sha256=CaZa3gsggjbPanZOkP2o3zH3DozuDakbXtbmp7N-s88,3144
|
|
28
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/_base.py-tpl,sha256=2Hlu1N9Tc1Ia053Sr0Rc6wlyLdPsUFldpDXHdO_xGHA,2712
|
|
30
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/crud/user.py-tpl,sha256=u_oG2oN-z88wpblPWvWuSLJ5ssGnWxLWykv0r_lsclc,1428
|
|
31
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
32
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/exceptions.py-tpl,sha256=wu_6snWqKE0469xdXy1QBHX-KzmVkscqjwnhTdLi-FQ,3106
|
|
33
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/global_data.py-tpl,sha256=t0rdLrCBKL9fjRTbPbQVukQLRKReE46l_apVVyASEv4,1196
|
|
34
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/logging.py-tpl,sha256=tT0OGEfhQn3PyAv9DEin1SHc6tStROxdRePzpUiD1Cg,710
|
|
35
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/helper/pagination.py-tpl,sha256=vjiFe_3yM1QYYLOJ24vOlRWfMEEodLUYe9NtiYgbKSA,2473
|
|
36
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
37
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/mocks/mock_users.json-tpl,sha256=q6IGY4ty_FHgNZb6eCfAnBY192ju-_qdaLY6EuqKGP8,421
|
|
38
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/router/__init__.py-tpl,sha256=WlZEKdqA_RM2-7iD0mevyCdteAfcimKQqlvTdA2DPSg,1352
|
|
39
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/router/user.py-tpl,sha256=UQg7fm61PcItwOHzCs_5XnuFU7OJl0Jky_lH5EG37oo,3730
|
|
40
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/__init__.py-tpl,sha256=4NpcztEw_XQT08V5HAVHZFMMAkQ5quyp5napKcnSK5E,1580
|
|
41
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/schemas/user.py-tpl,sha256=bmHW1aveQQtvKDFZb26i1aUSKg182OmKWHCbliU05OQ,2931
|
|
42
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/templates/index.html-tpl,sha256=hLYHWwrW0GGBykjqkWbtr_IwEJeiJVJvWQp85gKDOTI,689
|
|
43
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/utils/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
44
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/src/utils/documents.py-tpl,sha256=nNR38MGarXRq9G3KkWiD3LovXCMIuqK3tsumIwtYYZY,719
|
|
45
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/test/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/test/conftest.py-tpl,sha256=rAMzO51CkLir3cPAbVYOzMWH5xEreATa0aWC1XwEWtw,666
|
|
47
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/test/routes/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
48
|
+
fastapi_fastkit/fastapi_project_template/fastapi-default/test/routes/test_user.py-tpl,sha256=-FQIOfmVG73L_rQLZKrQgrUnm9OCxtfkrld1caMtja8,3609
|
|
49
|
+
fastapi_fastkit/fastapi_project_template/fastapi-dockerized/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
fastapi_fastkit/fastapi_project_template/fastapi-psql-orm/__init__.py-tpl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
|
+
fastapi_fastkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
52
|
+
fastapi_fastkit/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
53
|
+
fastapi_fastkit/utils/inspector.py,sha256=ohR4O0IDapM3bpXKeoF7KvCH-IiQIeRwDwfYPwpd0u8,579
|
|
54
|
+
fastapi_fastkit/utils/logging.py,sha256=Pb7qd6H5O3o6VsBB2kK7lKTOFBV2ju1KqqTnS28eOEE,997
|
|
55
|
+
fastapi_fastkit/utils/transducer.py,sha256=83B_IxFmlTA0JDczZgzDthCXs9sXGuSvdkohg6OkeR8,2659
|
|
56
|
+
fastapi_fastkit-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 이준혁
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|