mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2025-05-16 16:14:28 -04:00
remove dataclass for ArchiveIndex in favor of plain dict to simplify schema file
This commit is contained in:
parent
88721512d4
commit
ea695b8bef
3 changed files with 38 additions and 64 deletions
|
@ -101,20 +101,18 @@ def write_json_links_index(out_dir: str, links: List[Link]) -> None:
|
||||||
|
|
||||||
path = os.path.join(out_dir, 'index.json')
|
path = os.path.join(out_dir, 'index.json')
|
||||||
|
|
||||||
index_json = ArchiveIndex(
|
index_json = {
|
||||||
info='ArchiveBox Index',
|
'info': 'ArchiveBox Index',
|
||||||
source='https://github.com/pirate/ArchiveBox',
|
'source': 'https://github.com/pirate/ArchiveBox',
|
||||||
docs='https://github.com/pirate/ArchiveBox/wiki',
|
'docs': 'https://github.com/pirate/ArchiveBox/wiki',
|
||||||
version=GIT_SHA,
|
'version': VERSION,
|
||||||
num_links=len(links),
|
'num_links': len(links),
|
||||||
updated=datetime.now(),
|
'updated': datetime.now(),
|
||||||
links=links,
|
'links': links,
|
||||||
)
|
}
|
||||||
|
|
||||||
assert isinstance(index_json._asdict(), dict)
|
|
||||||
|
|
||||||
with open(path, 'w', encoding='utf-8') as f:
|
with open(path, 'w', encoding='utf-8') as f:
|
||||||
json.dump(index_json._asdict(), f, indent=4, cls=ExtendedEncoder)
|
json.dump(index_json, f, indent=4, cls=ExtendedEncoder)
|
||||||
|
|
||||||
chmod_file(path)
|
chmod_file(path)
|
||||||
|
|
||||||
|
|
|
@ -1,29 +1,40 @@
|
||||||
|
import os
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from dataclasses import dataclass
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from schema import Link, ArchiveResult, RuntimeStats
|
|
||||||
from config import ANSI, REPO_DIR, OUTPUT_DIR
|
from .schema import Link, ArchiveResult
|
||||||
|
from .config import ANSI, REPO_DIR, OUTPUT_DIR
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class RuntimeStats:
|
||||||
|
"""mutable stats counter for logging archiving timing info to CLI output"""
|
||||||
|
|
||||||
|
skipped: int = 0
|
||||||
|
succeeded: int = 0
|
||||||
|
failed: int = 0
|
||||||
|
|
||||||
|
parse_start_ts: datetime = None
|
||||||
|
parse_end_ts: datetime = None
|
||||||
|
|
||||||
|
index_start_ts: datetime = None
|
||||||
|
index_end_ts: datetime = None
|
||||||
|
|
||||||
|
archiving_start_ts: datetime = None
|
||||||
|
archiving_end_ts: datetime = None
|
||||||
|
|
||||||
# globals are bad, mmkay
|
# globals are bad, mmkay
|
||||||
_LAST_RUN_STATS = RuntimeStats(
|
_LAST_RUN_STATS = RuntimeStats()
|
||||||
skipped=0,
|
|
||||||
succeeded=0,
|
|
||||||
failed=0,
|
|
||||||
|
|
||||||
parse_start_ts=0,
|
|
||||||
parse_end_ts=0,
|
|
||||||
|
|
||||||
index_start_ts=0,
|
|
||||||
index_end_ts=0,
|
|
||||||
|
|
||||||
archiving_start_ts=0,
|
|
||||||
archiving_end_ts=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
def pretty_path(path: str) -> str:
|
def pretty_path(path: str) -> str:
|
||||||
"""convert paths like .../ArchiveBox/archivebox/../output/abc into output/abc"""
|
"""convert paths like .../ArchiveBox/archivebox/../output/abc into output/abc"""
|
||||||
return path.replace(REPO_DIR + '/', '')
|
pwd = os.path.abspath('.')
|
||||||
|
# parent = os.path.abspath(os.path.join(pwd, os.path.pardir))
|
||||||
|
return path.replace(pwd + '/', './')
|
||||||
|
|
||||||
|
|
||||||
### Parsing Stage
|
### Parsing Stage
|
||||||
|
|
|
@ -268,38 +268,3 @@ class Link:
|
||||||
'dom_url': static_url,
|
'dom_url': static_url,
|
||||||
})
|
})
|
||||||
return canonical
|
return canonical
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class ArchiveIndex:
|
|
||||||
info: str
|
|
||||||
version: str
|
|
||||||
source: str
|
|
||||||
docs: str
|
|
||||||
num_links: int
|
|
||||||
updated: str
|
|
||||||
links: List[Link]
|
|
||||||
schema: str = 'ArchiveIndex'
|
|
||||||
|
|
||||||
def __post_init__(self):
|
|
||||||
assert self.schema == self.__class__.__name__
|
|
||||||
|
|
||||||
def _asdict(self):
|
|
||||||
return asdict(self)
|
|
||||||
|
|
||||||
@dataclass
|
|
||||||
class RuntimeStats:
|
|
||||||
"""mutable stats counter for logging archiving timing info to CLI output"""
|
|
||||||
|
|
||||||
skipped: int
|
|
||||||
succeeded: int
|
|
||||||
failed: int
|
|
||||||
|
|
||||||
parse_start_ts: datetime
|
|
||||||
parse_end_ts: datetime
|
|
||||||
|
|
||||||
index_start_ts: datetime
|
|
||||||
index_end_ts: datetime
|
|
||||||
|
|
||||||
archiving_start_ts: datetime
|
|
||||||
archiving_end_ts: datetime
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue