Skip to content
Snippets Groups Projects
Select Git revision
  • 1b1eada3f6231b37bb5e76b68916c1263c9bff7a
  • master default protected
2 results

kgrams_test.cpp

Blame
  • utils.py 1.12 KiB
    import sys, os
    import traceback
    import datetime
    from typing import Optional
    
    def eprint(*args, flush=True):
        print(*args, file=sys.stderr, flush=flush)
    
    
    async def catch_all(corutine, exitcode=None):
        try:
            await corutine
        except Exception as e:
            eprint(traceback.format_exc())
            if exitcode is not None:
                exit(exitcode)
    
    local_timezone = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo
    dt_pinf = datetime.datetime(2100, 1, 1, tzinfo=local_timezone)
    dt_minf = datetime.datetime(2000, 1, 1, tzinfo=local_timezone)
    
    
    def format_dt_to_user(dt: datetime.datetime) -> str:
        return dt.strftime("%Y-%m-%d %H:%M:%S")
    
    def parse_dt_from_user(val: str) -> Optional[datetime.datetime]:
        return datetime.datetime.strptime(val, "%Y-%m-%d %H:%M:%S").replace(tzinfo=local_timezone)
    
    def format_delay_s(s):
        if s is None:
            return ""
        if s < 0: return "- " + format_delay_s(-s)
        if s == 0: return "on time"
        if s < 60: return f"{s} s"
        if s < 10*60: return f"{s//60} min {s%60} s"
        if s < 60*60: return f"{s//60} min"
        if s < 60*60: return f"{s//60//60} h {s//60} min"