Skip to content

Commit d713815

Browse files
Merge pull request #166 from ARGA-Genomes/conversionTimestamp
Conversion timestamp
2 parents c8f4c14 + e764882 commit d713815

File tree

3 files changed

+39
-12
lines changed

3 files changed

+39
-12
lines changed

src/lib/data/database.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ def update(self) -> bool:
176176
for step in (Step.DOWNLOAD, Step.PROCESSING, Step.CONVERSION):
177177
self.create(step, (True, True), True)
178178

179+
self.package()
180+
179181
def _verboseFlags(self, flags: list[Flag]) -> str:
180182
return " | ".join(f"{flag.value}={flag in flags}" for flag in Flag)
181183

src/lib/systemManagers/baseManager.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from datetime import datetime
55
import time
66
from enum import Enum
7+
from typing import Any
78

89
class Metadata(Enum):
910
OUTPUT = "output"
@@ -96,8 +97,13 @@ def updateTotalTime(self, totalTime: float) -> None:
9697
self.metadata[Metadata.TOTAL_TIME.value] = totalTime
9798
self._syncMetadata()
9899

99-
def getLastUpdate(self) -> datetime | None:
100+
def getMetadata(self, stepIndex: int, property: Metadata) -> None | Any:
100101
if not self.metadata:
101102
return None
102103

103-
return datetime.fromisoformat(self.metadata[self.taskName][0][Metadata.TIMESTAMP.value])
104+
return self.metadata[self.taskName][stepIndex][property.value]
105+
106+
def getLastUpdate(self) -> datetime | None:
107+
timestamp = self.getMetadata(0, Metadata.TIMESTAMP)
108+
if timestamp is not None:
109+
return datetime.fromisoformat(timestamp)

src/lib/systemManagers/conversion.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import pandas as pd
2-
import numpy as np
32
from pathlib import Path
43
import lib.common as cmn
54
from lib.bigFileWriter import BigFileWriter
@@ -10,7 +9,7 @@
109
import logging
1110
import gc
1211
import time
13-
from datetime import datetime
12+
from datetime import datetime, date
1413
import lib.zipping as zp
1514

1615
class ConversionManager(SystemManager):
@@ -20,12 +19,23 @@ def __init__(self, dataDir: Path, datasetID: str, location: str, database: str,
2019
super().__init__(dataDir.parent, self.stepName, "tasks")
2120

2221
self.conversionDir = dataDir / self.stepName
23-
self.location = location
22+
2423
self.datasetID = datasetID
24+
self.location = location
25+
self.database = database
26+
self.subsection = subsection
2527

26-
self.output = StackedFile(self.conversionDir / (f"{location}-{database}" + (f"-{subsection}" if subsection else "")))
28+
self.file = None
29+
30+
def _generateFileName(self, withTimestamp: bool) -> StackedFile:
31+
sourceName = f"{self.location}-{self.database}"
32+
if self.subsection:
33+
sourceName += f"-{self.subsection}"
34+
35+
if withTimestamp:
36+
sourceName += date.today().strftime("-%Y-%m-%d")
2737

28-
self.fileLoaded = False
38+
return StackedFile(self.conversionDir / sourceName)
2939

3040
def loadFile(self, file: File, properties: dict, mapDir: Path) -> None:
3141
self.file = file
@@ -40,13 +50,16 @@ def loadFile(self, file: File, properties: dict, mapDir: Path) -> None:
4050
self.skipRemap = properties.pop("skipRemap", [])
4151
self.preserveDwC = properties.pop("preserveDwC", False)
4252
self.prefixUnmapped = properties.pop("prefixUnmapped", True)
53+
54+
timestamp = properties.pop("timestamp", True)
55+
self.output = self._generateFileName(timestamp)
56+
4357
self.augments = [FunctionScript(self.baseDir, augProperties) for augProperties in properties.pop("augment", [])]
4458

4559
self.remapper = Remapper(mapDir, self.mapID, self.customMapID, self.customMapPath, self.location, self.preserveDwC, self.prefixUnmapped)
46-
self.fileLoaded = True
4760

4861
def convert(self, overwrite: bool = False, verbose: bool = True, ignoreRemapErrors: bool = True, forceRetrieve: bool = False) -> bool:
49-
if not self.fileLoaded:
62+
if self.file is None:
5063
logging.error("No file loaded for conversion, exiting...")
5164
return False
5265

@@ -145,8 +158,14 @@ def applyAugments(self, df: pd.DataFrame) -> pd.DataFrame | None:
145158

146159
return df
147160

148-
def package(self, compressLocation: Path) -> Path:
149-
renamedFile = self.metadataPath.rename(self.output.filePath / self.metadataPath.name)
150-
outputPath = zp.compress(self.output.filePath, compressLocation)
161+
def package(self, compressLocation: Path) -> Path | None:
162+
outputFileName = self.getMetadata(-1, Metadata.OUTPUT)
163+
if outputFileName is None:
164+
return
165+
166+
outputFilePath = self.conversionDir / outputFileName
167+
renamedFile = self.metadataPath.rename(outputFilePath / self.metadataPath.name)
168+
outputPath = zp.compress(outputFilePath, compressLocation)
151169
renamedFile.rename(self.metadataPath)
170+
152171
return outputPath

0 commit comments

Comments
 (0)