Compare commits

..

7 Commits

Author SHA1 Message Date
2ad7700f72 Merge pull request #30 from creyD/renovate/stripe-11.x
feat(deps): update dependency stripe to v11
2025-01-24 18:39:30 +01:00
1d7b767623 Merge pull request #31 from vikynoah/pagination_fix 2025-01-24 15:29:52 +01:00
vikynoah
f1f29e84c2 fix: Pagination Fix 2025-01-24 15:23:08 +01:00
dcb9afb8f2 fix: added btree_gist extension option 2025-01-24 11:01:48 +01:00
creyD
8c98e001f9 Adjusted files for isort & autopep 2025-01-24 07:49:05 +00:00
959a746e4f fix: fixed issue with new date format 2025-01-24 08:48:35 +01:00
renovate[bot]
10c1ea5411 feat(deps): update dependency stripe to v11 2025-01-21 21:13:13 +00:00
4 changed files with 28 additions and 26 deletions

View File

@@ -1,4 +1,5 @@
import uuid import uuid
from datetime import datetime
from sqlalchemy import Column, DateTime, String from sqlalchemy import Column, DateTime, String
from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.dialects.postgresql import UUID
@@ -13,11 +14,7 @@ class Base:
# Primary key as uuid # Primary key as uuid
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
created_at = Column(DateTime(timezone=True), server_default=func.now()) created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column( updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
DateTime(timezone=True),
server_default=func.now(),
onupdate=func.now(),
)
created_by_id = Column(String) created_by_id = Column(String)
__name__: str __name__: str

View File

@@ -1,27 +1,26 @@
from contextlib import suppress
from math import ceil from math import ceil
from typing import Any, Generic, Optional, Self, Sequence, TypeVar, Union, overload from typing import Any, Generic, Optional, Self, Sequence, TypeVar, Union, overload
from contextlib import suppress
from pydantic import BaseModel from fastapi import Query
from fastapi_pagination import Params from fastapi_pagination.api import apply_items_transformer, create_page
from fastapi_pagination.bases import AbstractPage, AbstractParams from fastapi_pagination.bases import AbstractPage, AbstractParams, RawParams
from fastapi_pagination.ext.sqlalchemy import create_paginate_query
from fastapi_pagination.types import ( from fastapi_pagination.types import (
AdditionalData,
AsyncItemsTransformer,
GreaterEqualOne, GreaterEqualOne,
GreaterEqualZero, GreaterEqualZero,
AdditionalData,
SyncItemsTransformer,
AsyncItemsTransformer,
ItemsTransformer, ItemsTransformer,
SyncItemsTransformer,
) )
from fastapi_pagination.api import create_page, apply_items_transformer
from fastapi_pagination.utils import verify_params from fastapi_pagination.utils import verify_params
from fastapi_pagination.ext.sqlalchemy import create_paginate_query from pydantic import BaseModel
from fastapi_pagination.bases import AbstractParams, RawParams
from pydantic.json_schema import SkipJsonSchema from pydantic.json_schema import SkipJsonSchema
from sqlalchemy.sql.selectable import Select from sqlalchemy import func, select
from sqlalchemy.orm.session import Session
from sqlalchemy import select, func
from sqlalchemy.ext.asyncio import AsyncSession, async_scoped_session from sqlalchemy.ext.asyncio import AsyncSession, async_scoped_session
from fastapi import Query from sqlalchemy.orm.session import Session
from sqlalchemy.sql.selectable import Select
from sqlalchemy.util import await_only, greenlet_spawn from sqlalchemy.util import await_only, greenlet_spawn
T = TypeVar("T") T = TypeVar("T")
@@ -29,7 +28,7 @@ T = TypeVar("T")
class PaginationParams(BaseModel, AbstractParams): class PaginationParams(BaseModel, AbstractParams):
page: int = Query(1, ge=1, description="Page number") page: int = Query(1, ge=1, description="Page number")
size: int = Query(50, ge=1, le=100, description="Page size") size: int = Query(50, ge=1, description="Page size")
pagination: bool = Query(True, description="Toggle pagination") pagination: bool = Query(True, description="Toggle pagination")
def to_raw_params(self) -> RawParams: def to_raw_params(self) -> RawParams:
@@ -62,7 +61,7 @@ class Page(AbstractPage[T], Generic[T]):
total: Optional[int] = None, total: Optional[int] = None,
**kwargs: Any, **kwargs: Any,
) -> Self: ) -> Self:
if not isinstance(params, Params): if not isinstance(params, PaginationParams):
raise TypeError("Page should be used with Params") raise TypeError("Page should be used with Params")
size = params.size or total or len(items) size = params.size or total or len(items)
@@ -170,9 +169,9 @@ def _paginate(
total = connection.scalar(count_query) total = connection.scalar(count_query)
if params.pagination is False and total > 0: if params.pagination is False and total > 0:
params = Params(page=1, size=total) params = PaginationParams(page=1, size=total)
else: else:
params = Params(page=params.page, size=params.size) params = PaginationParams(page=params.page, size=params.size)
query = create_paginate_query(query, params) query = create_paginate_query(query, params)
items = connection.execute(query).all() items = connection.execute(query).all()

View File

@@ -3,7 +3,7 @@ import unittest
from typing import Type from typing import Type
from httpx import ASGITransport, AsyncClient, Response from httpx import ASGITransport, AsyncClient, Response
from sqlalchemy import create_engine from sqlalchemy import create_engine, text
from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy_utils import create_database, database_exists, drop_database from sqlalchemy_utils import create_database, database_exists, drop_database
@@ -23,7 +23,9 @@ class AbstractTestAPI(unittest.IsolatedAsyncioTestCase):
print("setting up abstract") print("setting up abstract")
@classmethod @classmethod
def setup_database(cls, sync_db_url: str, async_db_url: str, base: Type[Base]): def setup_database(
cls, sync_db_url: str, async_db_url: str, base: Type[Base], btree_gist: bool = False
):
cls.engine_s = create_engine( cls.engine_s = create_engine(
sync_db_url, sync_db_url,
echo=False, echo=False,
@@ -34,6 +36,10 @@ class AbstractTestAPI(unittest.IsolatedAsyncioTestCase):
drop_database(cls.engine_s.url) drop_database(cls.engine_s.url)
create_database(cls.engine_s.url) create_database(cls.engine_s.url)
if btree_gist:
with cls.engine_s.begin() as conn:
conn.execute(text("CREATE EXTENSION IF NOT EXISTS btree_gist"))
# Migrate # Migrate
base.metadata.create_all(cls.engine_s) base.metadata.create_all(cls.engine_s)

View File

@@ -1 +1 @@
stripe==10.12.0 # Stripe stripe==11.4.1 # Stripe