Skip to content

Commit

Permalink
#13 fix deprecated typing List
Browse files Browse the repository at this point in the history
  • Loading branch information
Valbou committed Oct 3, 2023
1 parent 89eccb2 commit 0fa3547
Show file tree
Hide file tree
Showing 23 changed files with 81 additions and 84 deletions.
7 changes: 3 additions & 4 deletions tests/base_test.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from typing import List
from unittest import TestCase

from faker import Faker
Expand All @@ -14,7 +13,7 @@

class FlaskTemplateCapture:
def __init__(self, app: Flask) -> None:
self.recorded_templates: List[str] = []
self.recorded_templates: list[str] = []
self.app = app

def __enter__(self):
Expand All @@ -41,7 +40,7 @@ def setUp(self) -> None:
self.client = self.app.test_client()
self.cli = self.app.test_cli_runner()

def assertTemplateUsed(self, template_name: str, recorded_templates: List[str]):
def assertTemplateUsed(self, template_name: str, recorded_templates: list[str]):
self.assertIn(template_name, recorded_templates)

def assertTableExists(self, table_name: str):
Expand All @@ -51,7 +50,7 @@ def assertTableExists(self, table_name: str):
result = session.execute(stmt, params=params).scalar_one_or_none()
self.assertTrue(result, f"Table {table_name} doesn't exists")

def assertColumnsExists(self, table_name: str, columns_name: List[str]):
def assertColumnsExists(self, table_name: str, columns_name: list[str]):
with self.app.sql.get_session() as session:
for column_name in columns_name:
params = {
Expand Down
6 changes: 3 additions & 3 deletions vtaskr/libs/babel/translations.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import os
from gettext import GNUTranslations, translation
from typing import List, Union
from typing import Union

from babel import Locale

Expand Down Expand Up @@ -82,12 +82,12 @@ def get_translation(
def jinja_install_translation(self, jinja_env, translation: GNUTranslations):
jinja_env.install_gettext_translations(translation)

def add_languages(self, languages: Union[List[str], str]):
def add_languages(self, languages: Union[list[str], str]):
if isinstance(languages, str):
languages = [languages]
self.languages.extend(languages)

def add_domains(self, domains: Union[List[str], str]):
def add_domains(self, domains: Union[list[str], str]):
if isinstance(domains, str):
domains = [domains]
self.domains.extend(domains)
8 changes: 4 additions & 4 deletions vtaskr/libs/flask/querystring.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dataclasses import dataclass, fields, is_dataclass
from datetime import date, datetime, time, timedelta
from enum import Enum
from typing import Any, List, Optional, _GenericAlias
from typing import Any, Optional, _GenericAlias
from urllib.parse import parse_qs


Expand Down Expand Up @@ -40,7 +40,7 @@ def __str__(self) -> str:
class QueryStringFilter:
_filters: list = []
_dto_data: Optional[dict] = None
_dto_fields: Optional[List[str]] = None
_dto_fields: Optional[list[str]] = None

def __init__(self, query_string: str, dto: Optional[Any] = None):
"""
Expand Down Expand Up @@ -97,7 +97,7 @@ def _cast_filter_value(self, filter: Filter, field_type: Any):
for t in field_type.__args__:
self._cast_filter_value(filter, t)

def _separate_values(self, values: List[str]) -> List[str]:
def _separate_values(self, values: list[str]) -> list[str]:
"""Split grouped values in many"""
new_values = []
for value in values:
Expand Down Expand Up @@ -147,7 +147,7 @@ def _parse_key(self, key: str, value: str):

return None, None

def get_filters(self) -> List[Filter]:
def get_filters(self) -> list[Filter]:
return self._filters

def __str__(self) -> str:
Expand Down
6 changes: 3 additions & 3 deletions vtaskr/libs/notifications/emails/base_email.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
from abc import ABC
from typing import List, Optional
from typing import Optional

from vtaskr.libs.notifications.message import AbstractMessage


class AbstractBaseEmailContent(AbstractMessage, ABC):
from_email: Optional[str] = None
to: List[str] = []
to: list[str] = []
subject: str = ""
text: str = ""
html: str = ""
cc: Optional[List[str]] = None
cc: Optional[list[str]] = None
8 changes: 4 additions & 4 deletions vtaskr/libs/notifications/emails/smtpemail.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import ssl
from email.message import EmailMessage
from smtplib import SMTP_SSL
from typing import List, Optional, Union
from typing import Optional, Union

from .base_email import AbstractBaseEmailContent

Expand Down Expand Up @@ -32,12 +32,12 @@ class SMTPEmail:
def __init__(
self,
from_email: str,
to_emails: Union[List[str], str],
to_emails: Union[list[str], str],
subject: str,
text: str = "",
html: str = "",
cc_emails: Optional[List[str]] = None,
bcc_emails: Optional[List[str]] = None,
cc_emails: Optional[list[str]] = None,
bcc_emails: Optional[list[str]] = None,
) -> None:
if not text and not html:
raise NoEmailContentError("Error: Email as no content !")
Expand Down
4 changes: 2 additions & 2 deletions vtaskr/libs/secutity/validators.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from gettext import gettext as _
from string import ascii_lowercase, ascii_uppercase, digits, punctuation
from typing import List, Optional
from typing import Optional

from email_validator import validate_email

Expand All @@ -17,7 +17,7 @@ class PasswordComplexityError(Exception):


class PasswordChecker:
errors: List[str] = []
errors: list[str] = []

def check_complexity(self, password: str) -> bool:
self.errors = []
Expand Down
14 changes: 7 additions & 7 deletions vtaskr/libs/sqlalchemy/queryset.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import List, TypeVar
from typing import TypeVar

from sqlalchemy import delete, not_, select, update

Expand Down Expand Up @@ -47,7 +47,7 @@ def id(self, id: str):
self._query = self._query.where(self.qs_class.id == id)
return self

def ids(self, ids: List[str]):
def ids(self, ids: list[str]):
self._query = self._query.where(self.qs_class.id.in_(ids))
return self

Expand All @@ -57,7 +57,7 @@ def page(self, page_number: int, per_page: int = 100) -> TQueryset:
self._query = self._query.offset(offset).limit(per_page)
return self

def from_filters(self, filters: List[Filter]) -> TQueryset:
def from_filters(self, filters: list[Filter]) -> TQueryset:
"""
Build a query statement from query string filters
"""
Expand All @@ -66,7 +66,7 @@ def from_filters(self, filters: List[Filter]) -> TQueryset:
self._add_page(filters)
return self

def _add_where(self, filters: List[Filter]) -> None:
def _add_where(self, filters: list[Filter]) -> None:
"""Apply a where clause according to filters"""
[
self._add_simple_where_clause(f)
Expand Down Expand Up @@ -118,7 +118,7 @@ def _add_simple_where_clause(self, f: Filter):
not_(getattr(self.qs_class, f.field).endswith(f.value))
)

def _add_composed_where_clause(self, fs: List[Filter], operation: Operations):
def _add_composed_where_clause(self, fs: list[Filter], operation: Operations):
fields = {f.field for f in fs}
for field in fields:
values = [f.value for f in fs if f.field == field]
Expand All @@ -131,7 +131,7 @@ def _add_composed_where_clause(self, fs: List[Filter], operation: Operations):
getattr(self.qs_class, field).notin_(values)
)

def _add_order_by(self, filters: List[Filter]) -> None:
def _add_order_by(self, filters: list[Filter]) -> None:
"""Apply order by clauses found in filters"""

order_by_filters = [
Expand All @@ -147,7 +147,7 @@ def _add_order_by(self, filters: List[Filter]) -> None:
getattr(self.qs_class, order.field).asc()
)

def _add_page(self, filters: List[Filter]) -> None:
def _add_page(self, filters: list[Filter]) -> None:
"""
Apply pagination constraints
offset and page cannot be used together
Expand Down
6 changes: 3 additions & 3 deletions vtaskr/tasks/hmi/dto/tag.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from dataclasses import asdict, dataclass
from typing import List, Optional
from typing import Optional

from vtaskr.libs.openapi.base import openapi
from vtaskr.tasks.models import Color, Tag
Expand Down Expand Up @@ -41,7 +41,7 @@ def model_to_dto(cls, tag: Tag) -> TagDTO:
)

@classmethod
def list_models_to_list_dto(cls, tags: List[Tag]) -> List[TagDTO]:
def list_models_to_list_dto(cls, tags: list[Tag]) -> list[TagDTO]:
return [TagMapperDTO.model_to_dto(t) for t in tags]

@classmethod
Expand All @@ -61,5 +61,5 @@ def dto_to_dict(cls, tag_dto: TagDTO) -> dict:
return asdict(tag_dto)

@classmethod
def list_dto_to_dict(cls, tags_dto: List[TagDTO]) -> List[dict]:
def list_dto_to_dict(cls, tags_dto: list[TagDTO]) -> list[dict]:
return [asdict(tag_dto) for tag_dto in tags_dto]
6 changes: 3 additions & 3 deletions vtaskr/tasks/hmi/dto/task.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclasses import asdict, dataclass
from datetime import datetime, timedelta
from typing import List, Optional
from typing import Optional

from vtaskr.libs.openapi.base import openapi
from vtaskr.tasks.models import Task
Expand Down Expand Up @@ -50,7 +50,7 @@ def model_to_dto(cls, task: Task) -> TaskDTO:
)

@classmethod
def list_models_to_list_dto(cls, tasks: List[Task]) -> List[TaskDTO]:
def list_models_to_list_dto(cls, tasks: list[Task]) -> list[TaskDTO]:
return [TaskMapperDTO.model_to_dto(t) for t in tasks]

@classmethod
Expand Down Expand Up @@ -87,5 +87,5 @@ def dto_to_dict(cls, task_dto: TaskDTO) -> dict:
return asdict(task_dto)

@classmethod
def list_dto_to_dict(cls, tasks_dto: List[TaskDTO]) -> List[dict]:
def list_dto_to_dict(cls, tasks_dto: list[TaskDTO]) -> list[dict]:
return [asdict(task_dto) for task_dto in tasks_dto]
6 changes: 3 additions & 3 deletions vtaskr/tasks/hmi/ports/tag_port.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
from abc import ABC, abstractmethod
from typing import List, Optional
from typing import Optional

from vtaskr.tasks.models import Tag


class AbstractTagPort(ABC):
@abstractmethod
def get_user_tags(self, user_id: str) -> List[dict]:
def get_user_tags(self, user_id: str) -> list[dict]:
raise NotImplementedError()

@abstractmethod
def get_user_tag(self, user_id: str, tag_id: str) -> Optional[Tag]:
raise NotImplementedError()

@abstractmethod
def get_user_task_tags(self, user_id: str, task_id: str) -> List[Tag]:
def get_user_task_tags(self, user_id: str, task_id: str) -> list[Tag]:
raise NotImplementedError()

@abstractmethod
Expand Down
6 changes: 3 additions & 3 deletions vtaskr/tasks/hmi/ports/task_port.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
from abc import ABC, abstractmethod
from typing import List, Optional
from typing import Optional

from vtaskr.tasks.models import Task


class AbstractTaskPort(ABC):
@abstractmethod
def get_user_tasks(self, user_id: str) -> List[dict]:
def get_user_tasks(self, user_id: str) -> list[dict]:
raise NotImplementedError()

def get_user_task(self, user_id: str, task_id: str) -> Optional[Task]:
raise NotImplementedError()

def get_user_tag_tasks(self, user_id: str, tag_id: str) -> List[Task]:
def get_user_tag_tasks(self, user_id: str, tag_id: str) -> list[Task]:
raise NotImplementedError()

def update_user_task(self, user_id: str, task: Task):
Expand Down
6 changes: 3 additions & 3 deletions vtaskr/tasks/hmi/tags_service.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import List, Optional
from typing import Optional

from sqlalchemy.orm import Session

Expand All @@ -14,14 +14,14 @@ def __init__(self, session: Session) -> None:
self.tag_db = TagDB()
self.control = PermissionControl()

def get_user_tags(self, user_id: str) -> List[dict]:
def get_user_tags(self, user_id: str) -> list[dict]:
return self.tag_db.user_tags(self.session, user_id)

def get_user_tag(self, user_id: str, tag_id: str) -> Optional[Tag]:
tag = self.tag_db.load(self.session, tag_id)
return tag if self.control.is_owner(user_id, tag.user_id) else None

def get_user_task_tags(self, user_id: str, task_id: str) -> List[Tag]:
def get_user_task_tags(self, user_id: str, task_id: str) -> list[Tag]:
return self.tag_db.user_task_tags(self.session, user_id, task_id)

def update_user_tag(self, user_id: str, tag: Tag):
Expand Down
12 changes: 6 additions & 6 deletions vtaskr/tasks/hmi/tasks_service.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import List, Optional
from typing import Optional

from sqlalchemy.orm import Session

Expand All @@ -16,20 +16,20 @@ def __init__(self, session: Session) -> None:
self.control = PermissionControl()

def get_user_tasks(
self, user_id: str, qs_filters: Optional[List[Filter]] = None
) -> List[dict]:
self, user_id: str, qs_filters: Optional[list[Filter]] = None
) -> list[dict]:
return self.task_db.user_tasks(self.session, user_id, qs_filters)

def get_user_task(self, user_id: str, task_id: str) -> Optional[Task]:
task = self.task_db.load(self.session, task_id)
return task if self.control.is_owner(user_id, task.user_id) else None

def get_user_tag_tasks(
self, user_id: str, tag_id: str, qs_filters: Optional[List[Filter]] = None
) -> List[Task]:
self, user_id: str, tag_id: str, qs_filters: Optional[list[Filter]] = None
) -> list[Task]:
return self.task_db.user_tag_tasks(self.session, user_id, tag_id, qs_filters)

def set_task_tags(self, user_id: str, task: Task, tags_id: List[str]):
def set_task_tags(self, user_id: str, task: Task, tags_id: list[str]):
if self.control.is_owner(user_id, task.user_id):
self.task_db.user_add_tags(self.session, user_id, task, tags_id)

Expand Down
8 changes: 4 additions & 4 deletions vtaskr/tasks/models/tag.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from dataclasses import dataclass
from datetime import datetime
from re import fullmatch
from typing import Any, List, Optional, TypeVar
from typing import Any, Optional, TypeVar

from pytz import utc

Expand Down Expand Up @@ -48,7 +48,7 @@ class Tag:
user_id: str = ""
title: str = ""
color: Optional[Color] = None
tasks: Optional[List[Any]] = None
tasks: Optional[list[Any]] = None

def __init__(
self,
Expand All @@ -57,7 +57,7 @@ def __init__(
color: Optional[Color] = None,
id: Optional[str] = None,
created_at: Optional[datetime] = None,
tasks: Optional[List[Any]] = None,
tasks: Optional[list[Any]] = None,
) -> None:
self.id = id or get_id()
self.created_at = created_at or datetime.now(utc)
Expand All @@ -69,7 +69,7 @@ def __init__(
def add_tasks(self, tasks: list):
self.tasks.extend(tasks)

def remove_tasks(self, tasks_id: List[str]):
def remove_tasks(self, tasks_id: list[str]):
self.tasks = [t for t in self.tasks if t.id not in tasks_id]

def __str__(self) -> str:
Expand Down
Loading

0 comments on commit 0fa3547

Please sign in to comment.