oauth2fast-fastapi 0.2.4__tar.gz → 0.2.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. {oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi.egg-info → oauth2fast_fastapi-0.2.6}/PKG-INFO +5 -5
  2. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/pyproject.toml +10 -7
  3. oauth2fast_fastapi-0.2.6/src/oauth2fast_fastapi/__version__.py +1 -0
  4. oauth2fast_fastapi-0.2.6/src/oauth2fast_fastapi/models/bases.py +23 -0
  5. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/schemas/user_schema.py +1 -1
  6. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6/src/oauth2fast_fastapi.egg-info}/PKG-INFO +5 -5
  7. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi.egg-info/SOURCES.txt +0 -2
  8. oauth2fast_fastapi-0.2.6/src/oauth2fast_fastapi.egg-info/requires.txt +8 -0
  9. oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi/__version__.py +0 -1
  10. oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi/models/bases.py +0 -18
  11. oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi/models/mixins.py +0 -53
  12. oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi/schemas/mixins.py +0 -8
  13. oauth2fast_fastapi-0.2.4/src/oauth2fast_fastapi.egg-info/requires.txt +0 -8
  14. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/LICENSE +0 -0
  15. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/MANIFEST.in +0 -0
  16. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/README.md +0 -0
  17. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/docs/env.example +0 -0
  18. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/docs/usage.md +0 -0
  19. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/examples/basic_usage.py +0 -0
  20. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/examples/complete_flow.py +0 -0
  21. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/examples/custom_user.py +0 -0
  22. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/setup.cfg +0 -0
  23. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/__init__.py +0 -0
  24. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/database.py +0 -0
  25. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/dependencies.py +0 -0
  26. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/mail/__init__.py +0 -0
  27. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/mail/service.py +0 -0
  28. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/mail/templates/verification.html +0 -0
  29. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/mail/templates/welcome.html +0 -0
  30. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/models/__init__.py +0 -0
  31. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/models/user_model.py +0 -0
  32. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/routers/__init__.py +0 -0
  33. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/routers/base_router.py +0 -0
  34. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/routers/users_router.py +0 -0
  35. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/schemas/__init__.py +0 -0
  36. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/schemas/token_schema.py +0 -0
  37. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/schemas/verification_schema.py +0 -0
  38. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/settings.py +0 -0
  39. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/utils/__init__.py +0 -0
  40. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/utils/password_utils.py +0 -0
  41. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/utils/token_utils.py +0 -0
  42. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi/utils/verification_utils.py +0 -0
  43. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi.egg-info/dependency_links.txt +0 -0
  44. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/src/oauth2fast_fastapi.egg-info/top_level.txt +0 -0
  45. {oauth2fast_fastapi-0.2.4 → oauth2fast_fastapi-0.2.6}/tests/test_integration.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oauth2fast-fastapi
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Fast and secure OAuth2 authentication module for FastAPI with email verification
5
5
  Author-email: Angel Daniel Sanchez Castillo <angeldaniel.sanchezcastillo@gmail.com>
6
6
  License: MIT License
@@ -43,14 +43,14 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
43
  Requires-Python: >=3.10
44
44
  Description-Content-Type: text/markdown
45
45
  License-File: LICENSE
46
- Requires-Dist: pgsqlasync2fast-fastapi>=0.1.0
47
- Requires-Dist: mailing2fast-fastapi>=0.2.0
46
+ Requires-Dist: pgsqlasync2fast-fastapi>=0.1.2
47
+ Requires-Dist: mailing2fast-fastapi>=0.2.1
48
+ Requires-Dist: log2fast-fastapi>=0.1.2
49
+ Requires-Dist: tools2fast-fastapi>=0.1.0
48
50
  Requires-Dist: python-jose[cryptography]>=3.3.0
49
51
  Requires-Dist: passlib[argon2]>=1.7.4
50
52
  Requires-Dist: argon2-cffi>=25.0.0
51
53
  Requires-Dist: python-multipart>=0.0.6
52
- Requires-Dist: log2fast-fastapi>=0.1.0
53
- Requires-Dist: sqlmodel>=0.0.16
54
54
  Dynamic: license-file
55
55
 
56
56
  # oauth2fast-fastapi
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "oauth2fast-fastapi"
7
- version = "0.2.4"
7
+ version = "0.2.6"
8
8
  description = "Fast and secure OAuth2 authentication module for FastAPI with email verification"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -28,18 +28,20 @@ classifiers = [
28
28
 
29
29
  dependencies = [
30
30
  # External modules (include their own dependencies)
31
- "pgsqlasync2fast-fastapi>=0.1.0",
32
- "mailing2fast-fastapi>=0.2.0",
31
+ # Databases
32
+ "pgsqlasync2fast-fastapi>=0.1.2",
33
+ # Mailing
34
+ "mailing2fast-fastapi>=0.2.1",
35
+ # Logging
36
+ "log2fast-fastapi>=0.1.2",
37
+ # Tools
38
+ "tools2fast-fastapi>=0.1.0",
33
39
  # JWT and authentication
34
40
  "python-jose[cryptography]>=3.3.0",
35
41
  "passlib[argon2]>=1.7.4",
36
42
  "argon2-cffi>=25.0.0", # Required for Argon2 password hashing
37
43
  # Form data handling
38
44
  "python-multipart>=0.0.6",
39
- # Logging
40
- "log2fast-fastapi>=0.1.0",
41
- # ORM
42
- "sqlmodel>=0.0.16",
43
45
  ]
44
46
 
45
47
  [dependency-groups]
@@ -77,6 +79,7 @@ python_files = ["test_*.py"]
77
79
  python_classes = ["Test*"]
78
80
  python_functions = ["test_*"]
79
81
  asyncio_mode = "auto"
82
+ asyncio_default_fixture_loop_scope = "function"
80
83
 
81
84
  [tool.mypy]
82
85
  python_version = "3.10"
@@ -0,0 +1 @@
1
+ __version__ = "0.2.6"
@@ -0,0 +1,23 @@
1
+ from sqlmodel import MetaData, SQLModel
2
+
3
+ from tools2fast_fastapi import IdMixin, TimestampMixin
4
+
5
+ metadata = MetaData()
6
+
7
+ class BasicModel(SQLModel):
8
+ __abstract__ = True
9
+ metadata = metadata
10
+
11
+ class BasicAuthModel(TimestampMixin, BasicModel):
12
+ """Base model without predefined primary key, but with timestamps."""
13
+
14
+ __abstract__ = True
15
+
16
+ class IdAuthModel(IdMixin, BasicModel):
17
+ """Base model with BigInteger primary key."""
18
+ __abstract__ = True
19
+
20
+ class AuthModel(TimestampMixin, IdAuthModel):
21
+ """Default base model with BigInteger primary key and timestamps."""
22
+
23
+ __abstract__ = True
@@ -1,6 +1,6 @@
1
1
  from sqlmodel import SQLModel
2
2
 
3
- from .mixins import TimestampMixin
3
+ from tools2fast_fastapi import TimestampMixin
4
4
 
5
5
 
6
6
  class UserBase(SQLModel):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: oauth2fast-fastapi
3
- Version: 0.2.4
3
+ Version: 0.2.6
4
4
  Summary: Fast and secure OAuth2 authentication module for FastAPI with email verification
5
5
  Author-email: Angel Daniel Sanchez Castillo <angeldaniel.sanchezcastillo@gmail.com>
6
6
  License: MIT License
@@ -43,14 +43,14 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
43
43
  Requires-Python: >=3.10
44
44
  Description-Content-Type: text/markdown
45
45
  License-File: LICENSE
46
- Requires-Dist: pgsqlasync2fast-fastapi>=0.1.0
47
- Requires-Dist: mailing2fast-fastapi>=0.2.0
46
+ Requires-Dist: pgsqlasync2fast-fastapi>=0.1.2
47
+ Requires-Dist: mailing2fast-fastapi>=0.2.1
48
+ Requires-Dist: log2fast-fastapi>=0.1.2
49
+ Requires-Dist: tools2fast-fastapi>=0.1.0
48
50
  Requires-Dist: python-jose[cryptography]>=3.3.0
49
51
  Requires-Dist: passlib[argon2]>=1.7.4
50
52
  Requires-Dist: argon2-cffi>=25.0.0
51
53
  Requires-Dist: python-multipart>=0.0.6
52
- Requires-Dist: log2fast-fastapi>=0.1.0
53
- Requires-Dist: sqlmodel>=0.0.16
54
54
  Dynamic: license-file
55
55
 
56
56
  # oauth2fast-fastapi
@@ -23,13 +23,11 @@ src/oauth2fast_fastapi/mail/templates/verification.html
23
23
  src/oauth2fast_fastapi/mail/templates/welcome.html
24
24
  src/oauth2fast_fastapi/models/__init__.py
25
25
  src/oauth2fast_fastapi/models/bases.py
26
- src/oauth2fast_fastapi/models/mixins.py
27
26
  src/oauth2fast_fastapi/models/user_model.py
28
27
  src/oauth2fast_fastapi/routers/__init__.py
29
28
  src/oauth2fast_fastapi/routers/base_router.py
30
29
  src/oauth2fast_fastapi/routers/users_router.py
31
30
  src/oauth2fast_fastapi/schemas/__init__.py
32
- src/oauth2fast_fastapi/schemas/mixins.py
33
31
  src/oauth2fast_fastapi/schemas/token_schema.py
34
32
  src/oauth2fast_fastapi/schemas/user_schema.py
35
33
  src/oauth2fast_fastapi/schemas/verification_schema.py
@@ -0,0 +1,8 @@
1
+ pgsqlasync2fast-fastapi>=0.1.2
2
+ mailing2fast-fastapi>=0.2.1
3
+ log2fast-fastapi>=0.1.2
4
+ tools2fast-fastapi>=0.1.0
5
+ python-jose[cryptography]>=3.3.0
6
+ passlib[argon2]>=1.7.4
7
+ argon2-cffi>=25.0.0
8
+ python-multipart>=0.0.6
@@ -1 +0,0 @@
1
- __version__ = "0.2.4"
@@ -1,18 +0,0 @@
1
- from sqlmodel import MetaData, SQLModel
2
-
3
- from .mixins import IdMixin, TimestampMixin
4
-
5
- metadata = MetaData()
6
-
7
-
8
- class BasicAuthModel(TimestampMixin, SQLModel):
9
- """Base model without predefined primary key, but with timestamps."""
10
-
11
- __abstract__ = True
12
- metadata = metadata
13
-
14
-
15
- class AuthModel(IdMixin, BasicAuthModel):
16
- """Default base model with BigInteger primary key and timestamps."""
17
-
18
- __abstract__ = True
@@ -1,53 +0,0 @@
1
- from datetime import UTC, datetime
2
-
3
- from sqlalchemy import DateTime, func
4
- from sqlmodel import BigInteger, Field
5
-
6
-
7
- class IdMixin:
8
- """Mixin para proveer clave primaria autoincremental tipo BigInteger."""
9
-
10
- id: int | None = Field(default=None, primary_key=True, index=True, sa_type=BigInteger)
11
-
12
-
13
- class TimestampMixin:
14
- """Mixin reutilizable para marcas de tiempo en UTC."""
15
-
16
- created_at: datetime = Field(
17
- default_factory=lambda: datetime.now(UTC),
18
- nullable=False,
19
- sa_type=DateTime(timezone=True),
20
- )
21
- updated_at: datetime = Field(
22
- default_factory=lambda: datetime.now(UTC),
23
- nullable=False,
24
- sa_type=DateTime(timezone=True),
25
- sa_column_kwargs={"onupdate": func.now()},
26
- )
27
-
28
-
29
- class AuditMixin:
30
- """Mixin para rastrear el usuario que crea y actualiza un registro."""
31
-
32
- created_by: int | None = Field(
33
- default=None,
34
- description="ID of the user who created this record.",
35
- sa_type=BigInteger,
36
- )
37
- updated_by: int | None = Field(
38
- default=None,
39
- description="ID of the user who last updated this record.",
40
- sa_type=BigInteger,
41
- )
42
-
43
-
44
- # class Example(TimestampMixin, SQLModel, table=True):
45
- # """Ejemplo de modelo con timestamps automáticos."""
46
- # id: int | None = Field(default=None, primary_key=True)
47
- # name: str
48
-
49
-
50
- # Opcional: asegurar que updated_at se actualice también del lado de Python
51
- # @event.listens_for(Example, "before_update", propagate=True)
52
- # def receive_before_update(mapper, connection, target):
53
- # target.updated_at = datetime.now(timezone.utc)
@@ -1,8 +0,0 @@
1
- from datetime import datetime
2
-
3
- from sqlmodel import SQLModel
4
-
5
-
6
- class TimestampMixin(SQLModel):
7
- created_at: datetime
8
- updated_at: datetime
@@ -1,8 +0,0 @@
1
- pgsqlasync2fast-fastapi>=0.1.0
2
- mailing2fast-fastapi>=0.2.0
3
- python-jose[cryptography]>=3.3.0
4
- passlib[argon2]>=1.7.4
5
- argon2-cffi>=25.0.0
6
- python-multipart>=0.0.6
7
- log2fast-fastapi>=0.1.0
8
- sqlmodel>=0.0.16