You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
979 B
Python
36 lines
979 B
Python
"""Deterministic ID generators for ACE-F entities."""
|
|
from __future__ import annotations
|
|
|
|
import hashlib
|
|
import uuid
|
|
|
|
|
|
def document_id(source: str, issuer_id: str, date: str, accession: str) -> str:
|
|
"""DOC::{source}::{issuer_id}::{date}::{accession}"""
|
|
return f"DOC::{source}::{issuer_id}::{date}::{accession}"
|
|
|
|
|
|
def event_id(document_id_str: str, event_type: str, sequence: int = 0) -> str:
|
|
"""EVT::{document_id}::{event_type}::{sequence}"""
|
|
return f"EVT::{document_id_str}::{event_type}::{sequence}"
|
|
|
|
|
|
def issuer_id_from_cik(cik: str) -> str:
|
|
return f"ISSUER::{cik.lstrip('0').zfill(10)}"
|
|
|
|
|
|
def symbol_id_from_ticker(ticker: str, venue: str = "XNYS") -> str:
|
|
return f"SYM::{ticker.upper()}::{venue}"
|
|
|
|
|
|
def new_job_run_id() -> str:
|
|
return str(uuid.uuid4())
|
|
|
|
|
|
def sha256_checksum(content: bytes) -> str:
|
|
return hashlib.sha256(content).hexdigest()
|
|
|
|
|
|
def sha256_checksum_str(content: str) -> str:
|
|
return sha256_checksum(content.encode("utf-8"))
|