ohmyapi 0.1.23__tar.gz → 0.1.24__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 (27) hide show
  1. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/PKG-INFO +11 -14
  2. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/README.md +10 -13
  3. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/pyproject.toml +1 -1
  4. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/auth/routes.py +2 -4
  5. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/demo/models.py +8 -8
  6. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/demo/routes.py +21 -18
  7. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/project/pyproject.toml.j2 +1 -12
  8. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/__init__.py +0 -0
  9. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/__main__.py +0 -0
  10. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/auth/__init__.py +0 -0
  11. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/auth/models.py +0 -0
  12. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/auth/permissions.py +0 -0
  13. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/builtin/demo/__init__.py +0 -0
  14. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/cli.py +0 -0
  15. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/__init__.py +0 -0
  16. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/runtime.py +0 -0
  17. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/scaffolding.py +0 -0
  18. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/app/__init__.py.j2 +0 -0
  19. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/app/models.py.j2 +0 -0
  20. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/app/routes.py.j2 +0 -0
  21. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/project/README.md.j2 +0 -0
  22. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/core/templates/project/settings.py.j2 +0 -0
  23. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/db/__init__.py +0 -0
  24. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/db/exceptions.py +0 -0
  25. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/db/model/__init__.py +0 -0
  26. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/db/model/model.py +0 -0
  27. {ohmyapi-0.1.23 → ohmyapi-0.1.24}/src/ohmyapi/router.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ohmyapi
3
- Version: 0.1.23
3
+ Version: 0.1.24
4
4
  Summary: A Django-like but async web-framework based on FastAPI and TortoiseORM.
5
5
  License-Expression: MIT
6
6
  Keywords: fastapi,tortoise,orm,async,web-framework
@@ -34,29 +34,26 @@ Description-Content-Type: text/markdown
34
34
 
35
35
  > Think: Django RestFramework, but less clunky and 100% async.
36
36
 
37
- OhMyAPI is a Django-flavored web-application scaffolding framework and management layer.
38
- Built around FastAPI and TortoiseORM, it is 100% async.
37
+ OhMyAPI is a Django-flavored web-application scaffolding framework and management layer,
38
+ built around FastAPI and TortoiseORM and is thus 100% async.
39
39
 
40
- It is ***blazingly fast***, ***fun to use*** and comes with ***batteries included***!
40
+ It is ***blazingly fast***, extremely ***fun to use*** and comes with ***batteries included***!
41
41
 
42
42
  **Features**
43
43
 
44
- - Django-like project-layout and -structure
45
- - Django-like project-level settings.py
46
- - Django-like models via TortoiseORM
47
- - Django-like `Model.Meta` class for model configuration
48
- - Easily convert your query results to `pydantic` models via `Model.Schema`
49
- - Django-like migrations (`makemigrations` & `migrate`) via Aerich
44
+ - Django-like project structure and application directories
45
+ - Django-like per-app migrations (`makemigrations` & `migrate`) via Aerich
50
46
  - Django-like CLI tooling (`startproject`, `startapp`, `shell`, `serve`, etc)
51
- - Various optional builtin apps you can hook into your project
47
+ - Customizable pydantic model serializer built-in
48
+ - Various optional built-in apps you can hook into your project
52
49
  - Highly configurable and customizable
53
50
  - 100% async
54
51
 
55
52
  **Goals**
56
53
 
57
- - combine FastAPI, TortoiseORM and Aerich migrations into a high-productivity web-application framework
58
- - tie everything neatly together into a concise API
59
- - while ***AVOIDING*** any additional abstractions ontop of Tortoise's model-system or FastAPI's routing system
54
+ - combine `FastAPI`, `TortoiseORM`, `Aerich` migrations and `Pydantic` into a high-productivity web-application framework
55
+ - tie everything neatly together into a concise and straight-forward API
56
+ - ***AVOID*** adding any abstractions on top, unless they make things extremely convenient
60
57
 
61
58
  ---
62
59
 
@@ -2,29 +2,26 @@
2
2
 
3
3
  > Think: Django RestFramework, but less clunky and 100% async.
4
4
 
5
- OhMyAPI is a Django-flavored web-application scaffolding framework and management layer.
6
- Built around FastAPI and TortoiseORM, it is 100% async.
5
+ OhMyAPI is a Django-flavored web-application scaffolding framework and management layer,
6
+ built around FastAPI and TortoiseORM and is thus 100% async.
7
7
 
8
- It is ***blazingly fast***, ***fun to use*** and comes with ***batteries included***!
8
+ It is ***blazingly fast***, extremely ***fun to use*** and comes with ***batteries included***!
9
9
 
10
10
  **Features**
11
11
 
12
- - Django-like project-layout and -structure
13
- - Django-like project-level settings.py
14
- - Django-like models via TortoiseORM
15
- - Django-like `Model.Meta` class for model configuration
16
- - Easily convert your query results to `pydantic` models via `Model.Schema`
17
- - Django-like migrations (`makemigrations` & `migrate`) via Aerich
12
+ - Django-like project structure and application directories
13
+ - Django-like per-app migrations (`makemigrations` & `migrate`) via Aerich
18
14
  - Django-like CLI tooling (`startproject`, `startapp`, `shell`, `serve`, etc)
19
- - Various optional builtin apps you can hook into your project
15
+ - Customizable pydantic model serializer built-in
16
+ - Various optional built-in apps you can hook into your project
20
17
  - Highly configurable and customizable
21
18
  - 100% async
22
19
 
23
20
  **Goals**
24
21
 
25
- - combine FastAPI, TortoiseORM and Aerich migrations into a high-productivity web-application framework
26
- - tie everything neatly together into a concise API
27
- - while ***AVOIDING*** any additional abstractions ontop of Tortoise's model-system or FastAPI's routing system
22
+ - combine `FastAPI`, `TortoiseORM`, `Aerich` migrations and `Pydantic` into a high-productivity web-application framework
23
+ - tie everything neatly together into a concise and straight-forward API
24
+ - ***AVOID*** adding any abstractions on top, unless they make things extremely convenient
28
25
 
29
26
  ---
30
27
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "ohmyapi"
3
- version = "0.1.23"
3
+ version = "0.1.24"
4
4
  description = "A Django-like but async web-framework based on FastAPI and TortoiseORM."
5
5
  license = "MIT"
6
6
  keywords = ["fastapi", "tortoise", "orm", "async", "web-framework"]
@@ -64,9 +64,7 @@ class TokenType(str, Enum):
64
64
  refresh = "refresh"
65
65
 
66
66
 
67
- def claims(
68
- token_type: TokenType, user: User, groups: List[Group] = []
69
- ) -> Claims:
67
+ def claims(token_type: TokenType, user: User, groups: List[Group] = []) -> Claims:
70
68
  return Claims(
71
69
  type=token_type,
72
70
  sub=str(user.id),
@@ -83,7 +81,7 @@ def claims(
83
81
 
84
82
  def create_token(claims: Claims, expires_in: int) -> str:
85
83
  to_encode = claims.model_dump()
86
- to_encode['exp'] = int(time.time()) + expires_in
84
+ to_encode["exp"] = int(time.time()) + expires_in
87
85
  token = jwt.encode(to_encode, JWT_SECRET, algorithm=JWT_ALGORITHM)
88
86
  if isinstance(token, bytes):
89
87
  token = token.decode("utf-8")
@@ -10,9 +10,9 @@ class Team(Model):
10
10
  id: UUID = field.data.UUIDField(primary_key=True)
11
11
  name: str = field.TextField()
12
12
  members: field.ManyToManyRelation[User] = field.ManyToManyField(
13
- 'ohmyapi_auth.User',
13
+ "ohmyapi_auth.User",
14
14
  related_name="tournament_teams",
15
- through='user_tournament_teams',
15
+ through="user_tournament_teams",
16
16
  )
17
17
 
18
18
  def __str__(self):
@@ -32,19 +32,19 @@ class Event(Model):
32
32
  id: UUID = field.data.UUIDField(primary_key=True)
33
33
  name: str = field.TextField()
34
34
  tournament: field.ForeignKeyRelation[Tournament] = field.ForeignKeyField(
35
- 'ohmyapi_demo.Tournament',
36
- related_name='events',
35
+ "ohmyapi_demo.Tournament",
36
+ related_name="events",
37
37
  )
38
38
  participants: field.ManyToManyRelation[Team] = field.ManyToManyField(
39
- 'ohmyapi_demo.Team',
40
- related_name='events',
41
- through='event_team',
39
+ "ohmyapi_demo.Team",
40
+ related_name="events",
41
+ through="event_team",
42
42
  )
43
43
  modified: datetime = field.DatetimeField(auto_now=True)
44
44
  prize: Decimal = field.DecimalField(max_digits=10, decimal_places=2, null=True)
45
45
 
46
46
  class Schema:
47
- exclude = ['tournament_id']
47
+ exclude = ["tournament_id"]
48
48
 
49
49
  def __str__(self):
50
50
  return self.name
@@ -11,37 +11,41 @@ from typing import List
11
11
  router = APIRouter(prefix="/tournemant")
12
12
 
13
13
 
14
- @router.get("/",
15
- tags=["tournament"],
16
- response_model=List[models.Tournament.Schema.model])
14
+ @router.get(
15
+ "/", tags=["tournament"], response_model=List[models.Tournament.Schema.model]
16
+ )
17
17
  async def list():
18
18
  """List all tournaments."""
19
- return await models.Tournament.Schema.model.from_queryset(Tournament.all())
19
+ return await models.Tournament.Schema.model.from_queryset(models.Tournament.all())
20
20
 
21
21
 
22
- @router.post("/",
23
- tags=["tournament"],
24
- status_code=HTTPStatus.CREATED)
22
+ @router.post("/", tags=["tournament"], status_code=HTTPStatus.CREATED)
25
23
  async def post(tournament: models.Tournament.Schema.readonly):
26
24
  """Create tournament."""
27
- return await models.Tournament.Schema.model.from_queryset(models.Tournament.create(**tournament.model_dump()))
25
+ return await models.Tournament.Schema.model.from_queryset(
26
+ models.Tournament.create(**tournament.model_dump())
27
+ )
28
28
 
29
29
 
30
- @router.get("/{id}",
31
- tags=["tournament"],
32
- response_model=models.Tournament.Schema.model)
30
+ @router.get("/{id}", tags=["tournament"], response_model=models.Tournament.Schema.model)
33
31
  async def get(id: str):
34
32
  """Get tournament by id."""
35
- return await models.Tournament.Schema.model.from_queryset(models.Tournament.get(id=id))
33
+ return await models.Tournament.Schema.model.from_queryset(
34
+ models.Tournament.get(id=id)
35
+ )
36
36
 
37
37
 
38
- @router.put("/{id}",
39
- tags=["tournament"],
40
- response_model=models.Tournament.Schema.model,
41
- status_code=HTTPStatus.ACCEPTED)
38
+ @router.put(
39
+ "/{id}",
40
+ tags=["tournament"],
41
+ response_model=models.Tournament.Schema.model,
42
+ status_code=HTTPStatus.ACCEPTED,
43
+ )
42
44
  async def put(tournament: models.Tournament.Schema.model):
43
45
  """Update tournament."""
44
- return await models.Tournament.Schema.model.from_queryset(models.Tournament.update(**tournament.model_dump()))
46
+ return await models.Tournament.Schema.model.from_queryset(
47
+ models.Tournament.update(**tournament.model_dump())
48
+ )
45
49
 
46
50
 
47
51
  @router.delete("/{id}", tags=["tournament"])
@@ -51,4 +55,3 @@ async def delete(id: str):
51
55
  return await tournament.delete()
52
56
  except DoesNotExist:
53
57
  raise HTTPException(status_code=HTTPStatus.NOT_FOUND, detail="not found")
54
-
@@ -10,18 +10,7 @@ readme = "README.md"
10
10
  license = { text = "MIT" }
11
11
 
12
12
  dependencies = [
13
- "typer >=0.19.1,<0.20.0",
14
- "jinja2 >=3.1.6,<4.0.0",
15
- "fastapi >=0.117.1,<0.118.0",
16
- "tortoise-orm >=0.25.1,<0.26.0",
17
- "aerich >=0.9.1,<0.10.0",
18
- "uvicorn >=0.36.0,<0.37.0",
19
- "ipython >=9.5.0,<10.0.0",
20
- "passlib >=1.7.4,<2.0.0",
21
- "pyjwt >=2.10.1,<3.0.0",
22
- "python-multipart >=0.0.20,<0.0.21",
23
- "crypto >=1.4.1,<2.0.0",
24
- "argon2-cffi >=25.1.0,<26.0.0",
13
+ "ohmyapi (>=0.1.0,<0.2.0)"
25
14
  ]
26
15
 
27
16
  [tool.poetry.group.dev.dependencies]
File without changes
File without changes