Applied the new type parameter syntax to the generic classes for Python 3.12.
This commit is contained in:
parent
1cf83adf87
commit
25d9904180
@ -1,7 +1,7 @@
|
|||||||
# The Mia! Accounting Project.
|
# The Mia! Accounting Project.
|
||||||
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/2/18
|
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/2/18
|
||||||
|
|
||||||
# Copyright (c) 2023 imacat.
|
# Copyright (c) 2023-2024 imacat.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@ -19,7 +19,7 @@
|
|||||||
"""
|
"""
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import TypeVar, Generic, Type
|
from typing import Type
|
||||||
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from flask_babel import LazyString
|
from flask_babel import LazyString
|
||||||
@ -308,11 +308,7 @@ class JournalEntryForm(FlaskForm):
|
|||||||
return db.session.scalar(select)
|
return db.session.scalar(select)
|
||||||
|
|
||||||
|
|
||||||
T = TypeVar("T", bound=JournalEntryForm)
|
class LineItemCollector[T: JournalEntryForm](ABC):
|
||||||
"""A journal entry form variant."""
|
|
||||||
|
|
||||||
|
|
||||||
class LineItemCollector(Generic[T], ABC):
|
|
||||||
"""The line item collector."""
|
"""The line item collector."""
|
||||||
|
|
||||||
def __init__(self, form: T, obj: JournalEntry):
|
def __init__(self, form: T, obj: JournalEntry):
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# The Mia! Accounting Project.
|
# The Mia! Accounting Project.
|
||||||
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/1/25
|
# Author: imacat@mail.imacat.idv.tw (imacat), 2023/1/25
|
||||||
|
|
||||||
# Copyright (c) 2023 imacat.
|
# Copyright (c) 2023-2024 imacat.
|
||||||
#
|
#
|
||||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
# you may not use this file except in compliance with the License.
|
# you may not use this file except in compliance with the License.
|
||||||
@ -19,7 +19,6 @@
|
|||||||
This module should not import any other module from the application.
|
This module should not import any other module from the application.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from typing import TypeVar, Generic
|
|
||||||
from urllib.parse import urlparse, parse_qsl, urlencode, urlunparse, \
|
from urllib.parse import urlparse, parse_qsl, urlencode, urlunparse, \
|
||||||
ParseResult
|
ParseResult
|
||||||
|
|
||||||
@ -62,11 +61,8 @@ class Redirection(RequestRedirect):
|
|||||||
DEFAULT_PAGE_SIZE: int = 10
|
DEFAULT_PAGE_SIZE: int = 10
|
||||||
"""The default page size."""
|
"""The default page size."""
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
"""The pagination item type."""
|
|
||||||
|
|
||||||
|
class Pagination[T]:
|
||||||
class Pagination(Generic[T]):
|
|
||||||
"""The pagination utility."""
|
"""The pagination utility."""
|
||||||
|
|
||||||
def __init__(self, items: list[T], is_reversed: bool = False):
|
def __init__(self, items: list[T], is_reversed: bool = False):
|
||||||
@ -92,7 +88,7 @@ class Pagination(Generic[T]):
|
|||||||
"""The options to the number of items in a page."""
|
"""The options to the number of items in a page."""
|
||||||
|
|
||||||
|
|
||||||
class AbstractPagination(Generic[T]):
|
class AbstractPagination[T]:
|
||||||
"""An abstract pagination."""
|
"""An abstract pagination."""
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@ -109,12 +105,12 @@ class AbstractPagination(Generic[T]):
|
|||||||
"""The options to the number of items in a page."""
|
"""The options to the number of items in a page."""
|
||||||
|
|
||||||
|
|
||||||
class EmptyPagination(AbstractPagination[T]):
|
class EmptyPagination[T](AbstractPagination[T]):
|
||||||
"""The pagination from empty data."""
|
"""The pagination from empty data."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NonEmptyPagination(AbstractPagination[T]):
|
class NonEmptyPagination[T](AbstractPagination[T]):
|
||||||
"""The pagination with real data."""
|
"""The pagination with real data."""
|
||||||
PAGE_SIZE_OPTION_VALUES: list[int] = [10, 100, 200]
|
PAGE_SIZE_OPTION_VALUES: list[int] = [10, 100, 200]
|
||||||
"""The page size options."""
|
"""The page size options."""
|
||||||
|
@ -20,17 +20,14 @@ This module should not import any other module from the application.
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import TypeVar, Generic, Type
|
from typing import Type
|
||||||
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from flask import g, Response
|
from flask import g, Response
|
||||||
from flask_sqlalchemy.model import Model
|
from flask_sqlalchemy.model import Model
|
||||||
|
|
||||||
T = TypeVar("T", bound=Model)
|
|
||||||
"""The user data model data type."""
|
|
||||||
|
|
||||||
|
class UserUtilityInterface[T: Model](ABC):
|
||||||
class UserUtilityInterface(Generic[T], ABC):
|
|
||||||
"""The interface for the user utilities."""
|
"""The interface for the user utilities."""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
Loading…
Reference in New Issue
Block a user