# flake8: noqa: E741
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
from datetime import datetime
class translation_status_enum(str, Enum):
V = "V" # valid translations
T = "T" # need translation (source more recent than translation)
E = "E" # translation with errors
W = "W" # translation with warnings
P = "P" # translation being processed
Q = "Q" # file queued for translation
[docs]
class import_status_enum(str, Enum):
I = "I" # imported
E = "E" # imported with error
W = "W" # imported with warnings no errors
N = "N" # not imported
U = "U" # translation updated need to reimport
[docs]
class KleioFile(BaseModel):
"""Represents the information about a kleio file and its translation and import status.
Attributes:
path (str): The path of the file.
name (str): The name of the file.
size (int): The size of the file in bytes.
directory (str): The directory containing the file.
modified (datetime): The last modified time of the file.
modified_iso (datetime): The last modified time of the file in ISO format.
modified_string (str): The last modified time of the file as a string.
qtime (datetime): The time the file was queued for translation.
qtime_string (str): The time the file was queued for translation as a string.
source_url (str): The URL of the source file.
status (translation_status_enum): The status of the file:
- V: valid translations
- T: need translation (source more recent than translation)
- E: translation with errors
- W: translation with warnings
- P: translation being processed
- Q: file queued for translation
translated (Optional[datetime]): The time the file was translated.
translated_string (Optional[str]): The time the file was translated as a string.
errors (Optional[int]): The number of errors encountered during translation.
warnings (Optional[int]): The number of warnings encountered during translation.
version (Optional[str]): The version of the kleio translator.
rpt_url (Optional[str]): The URL of the report file.
xml_url (Optional[str]): The URL of the XML file.
import_status (Optional[import_status_enum]): The status of the file import:
- I: imported
- E: imported with error
- W: imported with warnings no errors
- N: not imported
- U: translation updated need to reimport
import_errors (Optional[int]): The number of errors encountered during import.
import_warnings (Optional[int]): The number of warnings encountered during import.
import_error_rpt (Optional[str]): Error report from import.
import_warning_rpt (Optional[str]): Warning report from import.
imported (Optional[datetime]): Date of import of the file.
imported_string (Optional[str]): Date of import of the file as a string.
Methods:
needs_translation(): Return True if the file needs translation.
needs_import(): Return True if the file needs import. A file needs import if it has not been imported before or if it has been translated again since the last import.
"""
path: str = Field(..., description="The path of the file")
name: str = Field(..., description="The name of the file")
size: int = Field(..., description="The size of the file in bytes")
directory: str = Field(..., description="The directory containing the file")
modified: datetime = Field(..., description="The last modified time of the file")
modified_iso: datetime = Field(
..., description="The last modified time of the file in ISO format"
)
modified_string: str = Field(
..., description="The last modified time of the file as a string"
)
qtime: datetime = Field(
..., description="The time the file was queued for translation"
)
qtime_string: str = Field(
..., description="The time the file was queued for translation as a string"
)
source_url: str = Field(..., description="The URL of the source file")
"""The status of the file:
.. code-block:: python
V = "valid translations"
T = "need translation (source more recent than translation)"
E = "translation with errors"
W = "translation with warnings"
P = "translation being processed"
Q = "file queued for translation"
"""
status: translation_status_enum = Field(
...,
description="""The status of the file:
V = valid translations
T = need translation (source more recent than translation)
E = translation with errors
W = translation with warnings
P = translation being processed
Q = file queued for translation""",
)
translated: datetime | None = Field(
None, description="The time the file was translated"
)
translated_string: str | None = Field(
None, description="The time the file was translated as a string"
)
errors: int | None = Field(
None, description="The number of errors encountered during translation"
)
warnings: int | None = Field(
None, description="The number of warnings encountered during translation"
)
version: str | None = Field(
None, description="The version of the kleio translator"
)
rpt_url: str | None = Field(None, description="The URL of the report file")
xml_url: str | None = Field(None, description="The URL of the XML file")
import_status: import_status_enum | None = Field(
None,
description="""The status of the file import:
I = imported
E = imported with error
W = imported with warnings no errors
N = not imported
U = translation updated need to reimport""",
)
import_errors: int | None = Field(
None, description="The number of errors encountered during import"
)
import_warnings: int | None = Field(
None, description="The number of warnings encountered during import"
)
import_error_rpt: str | None = Field(
None, description="Error report from import"
)
import_warning_rpt: str | None = Field(
None, description="Warning report from import"
)
imported: datetime | None = Field(None, description="Date of import of the file")
imported_string: str | None = Field(
None, description="Date of import of the file as a string"
)
[docs]
def needs_translation(self):
"""Return True if the file needs translation"""
return self.status == translation_status_enum.T
[docs]
def needs_import(self):
"""Return True if the file needs import
A file needs import if it has not been imported before
or if it has been translated again since the last import
"""
if self.import_status is None:
raise ValueError(
"import_status is None. Call TimelinkDatabase.get_import_status() first."
)
return (
self.import_status == import_status_enum.N
or self.import_status == import_status_enum.U
)
class ApiPermissions(str, Enum):
"""Permissions for Kleio Server operations
"""
sources = "sources"
kleioset = "kleioset"
files = "files"
structures = "structures"
translations = "translations"
upload = "upload"
delete = "delete"
mkdir = "mkdir"
rmdir = "rmdir"
"""
info = {
"comment": "An user able to translate, upload and delete files, and also create and remove directories, in specific sub-directoris in kleio-home",
"api": [
"sources",
"kleioset",
"files",
"structures",
"translations",
"upload",
"delete",
"mkdir",
"rmdir"
],
"structures": "structures/reference_sources",
"sources": "sources/reference_sources"
}
"""
class TokenInfo(BaseModel):
comment: str = Field(..., description="Comment")
api: list[ApiPermissions] = Field(..., description="API permissions")
structures: str = Field(..., description="Structures")
sources: str = Field(..., description="Sources")