Compare commits

...

5 Commits

Author SHA1 Message Date
5b74ed5620 fix: added name for primary key constraint 2025-07-24 23:10:46 +02:00
bb3a52295d feat: added LowerCaseString field 2025-07-24 22:53:26 +02:00
renovate[bot]
d471b86a25 feat(deps): update dependency stripe to v12.3.0 (#55)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-08 09:46:11 +02:00
creyD
aa99fc6226 Adjusted files for isort & autopep 2025-06-26 12:50:57 +00:00
vikynoah
30a5e417eb feat: User Password change ticket (#54) 2025-06-26 14:49:56 +02:00
5 changed files with 43 additions and 2 deletions

View File

@@ -1,3 +1,4 @@
from .fields import * # noqa
from .groups import * # noqa from .groups import * # noqa
from .i18n import * # noqa from .i18n import * # noqa
from .stripe import * # noqa from .stripe import * # noqa

17
creyPY/const/fields.py Normal file
View File

@@ -0,0 +1,17 @@
from sqlalchemy import types
class LowerCaseString(types.TypeDecorator):
"""Converts strings to lower case on the way in."""
impl = types.String
cache_ok = True
def process_bind_param(self, value, dialect):
if value is None:
return value
return value.lower()
@property
def python_type(self):
return str

View File

@@ -1,7 +1,7 @@
import uuid import uuid
from datetime import datetime from datetime import datetime
from sqlalchemy import Column, DateTime, String from sqlalchemy import Column, DateTime, PrimaryKeyConstraint, String
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy.orm import as_declarative from sqlalchemy.orm import as_declarative
@@ -23,6 +23,11 @@ class Base(AutoAnnotateMixin, AutoInitMixin):
# TODO: Add automated foreign key resolution # TODO: Add automated foreign key resolution
# Add name to primary key constraint to ensure alembic can pick it up later
@declared_attr
def __table_args__(cls):
return (PrimaryKeyConstraint("id", name=f"pk_{cls.__tablename__}"),)
# Generate __tablename__ automatically # Generate __tablename__ automatically
@declared_attr @declared_attr
def __tablename__(cls) -> str: def __tablename__(cls) -> str:

View File

@@ -145,3 +145,21 @@ def password_change_mail(email: str) -> bool:
if re.status_code != 200: if re.status_code != 200:
raise HTTPException(re.status_code, re.json()) raise HTTPException(re.status_code, re.json())
return True return True
def user_password_change_ticket(user_id: str) -> str:
re = requests.post(
f"https://{AUTH0_DOMAIN}/api/v2/tickets/password-change",
headers={"Authorization": f"Bearer {get_management_token()}"},
json={
"user_id": user_id,
"client_id": AUTH0_CLIENT_ID,
"ttl_sec": 0,
"mark_email_as_verified": False,
"includeEmailInRedirect": False,
},
timeout=5,
)
if re.status_code != 201:
raise HTTPException(re.status_code, re.json())
return re.json()["ticket"]

View File

@@ -1 +1 @@
stripe==12.2.0 # Stripe stripe==12.3.0 # Stripe