Admin basket: update/fix file import, download, delete

remove useless AdminBasketFile model definition
cleanups, typings
This commit is contained in:
phil 2024-04-20 10:58:12 +05:30
parent 6139f49aae
commit c613fd35d9
5 changed files with 123 additions and 136 deletions

View file

@ -1,7 +1,8 @@
from pathlib import Path
import re
from datetime import datetime, date
from pydantic import BaseModel
from pydantic import BaseModel, computed_field
from sqlmodel import Field, Relationship
import pandas as pd
@ -47,33 +48,27 @@ class FileImport(Model, table=True):
__table_args__ = gisaf_admin.table_args
id: int | None = Field(default=None, primary_key=True)
url: str
url: str | None = None
## TODO: Deprecate FileImport.path, in favour of dir + name
path: str
#path: str
dir: str
name: str
md5: str
time: datetime
comment: str
status: str
store: str
time: datetime | None = None
comment: str | None = None
status: str | None = None
store: str | None = None
basket: str
project_id: int = Field(foreign_key=gisaf_admin.table('project.id'))
project_id: int | None = Field(foreign_key=gisaf_admin.table('project.id'))
project: Project = Relationship()
# ALTER TABLE gisaf_admin.file_import add column project_id INT REFERENCES gisaf_admin.project;
surveyor_id: int = Field(foreign_key=gisaf_survey.table('surveyor.id'))
surveyor_id: int | None = Field(foreign_key=gisaf_survey.table('surveyor.id'))
surveyor: Surveyor = Relationship()
# ALTER TABLE gisaf_admin.file_import add column surveyor_id INT REFERENCES gisaf_survey.surveyor;
equipment_id: int = Field(foreign_key=gisaf_survey.table('equipment.id'))
equipment_id: int | None = Field(foreign_key=gisaf_survey.table('equipment.id'))
equipment: Equipment = Relationship()
# ALTER TABLE gisaf_admin.file_import add column equipment_id INT REFERENCES gisaf_survey.equipment;
def __str__(self):
return f'{self.path:s} for project id {self.project_id}'
def __repr__(self):
return f'<gisaf.misc.FileImport (gisaf_admin.file_import) {self.path}>'
@classmethod
def selectinload(cls):
return [cls.project, cls.surveyor, cls.equipment]
@ -93,6 +88,10 @@ class FileImport(Model, table=True):
df['date'] = pd.to_datetime(dates[0], format='%Y-%m-%d')
return df
@computed_field
@property
def path(self) -> Path:
return Path(self.dir) / self.name
#def get_parent_dir(self):
# split_path = self.path.split(os_path.sep)
@ -158,23 +157,9 @@ class Basket(BasketNameOnly):
class BasketImportResult(BaseModel):
time: datetime = Field(default_factory=datetime.now)
message: str
message: str | None = None
details: dict[str, str | int | float | bool] | None = None
class AdminBasketFile(BaseModel):
id: int
dir: str
name: str
url: str
md5: str
time: datetime
comment: str
status: str
store: str
project: str
surveyor: str
equipment: str
import_result: str
fileImport: FileImport | None = None
class AdminBasket(BaseModel):