import argparse import random import re import time from datetime import datetime PAD = re.compile(r"^0?([1-9]\d?)$") NORDIC_7 = ( " STAT SP IPHASW D HRMM SECON CODA AMPLIT PERI AZIMU VELO AIN AR TRES W DIS CAZ7" ) def generate_event(): ts = random.randint(946684800000, 1767225600000) dt = datetime.fromtimestamp(ts / 1e3) line_3 = " OBS: Dados falsos".ljust(79) + "3" stat = generate_station(dt) return "\n".join( [ gen_line_1(dt), line_3, generate_line6(dt), generate_line_i(dt), NORDIC_7, stat, "\n", ] ) def generate_agency(size: int = 3) -> str: return "".join([chr(random.randint(65, 90)) for _ in range(size)]) def remove_pad(v: str) -> str: aux = PAD.search(v) if aux: return aux.group(0) return "" def fmt_date(dt: datetime) -> str: return f"{dt.year} {dt.month:2d}{dt.day:2d} {dt.hour:2d}{dt.minute:2d} {dt.second:2d}.0" # 1D Lerp def generate_number(lb: float, ub: float, precision: int = 2) -> float: x = random.random() return round(lb * (1.0 - x) + (ub * x), precision) def gen_line_1(dt: datetime) -> str: lat = generate_number(-90.0, 90.0, 3) long = generate_number(-180.0, 180.0, 3) ev = random.choices(("E", "V", "Q"))[0] depth = generate_number(0.0, 30.0, 1) agency = generate_agency() mag = generate_number(1.0, 6.0, 1) return ( f" {fmt_date(dt)} L{ev}{lat: >7.3f}{long: >8.3f}{depth:>5.1f} {agency} 1 {mag: >4.1f}L{agency}{mag: >4.1f}C{agency}".ljust( 79 ) + "1" ) def generate_line6(dt: datetime) -> str: return f" {dt.strftime('%Y-%m-%d-%H%M-%S')}-FAKE___001".ljust(79) + "6" def generate_line_i(dt: datetime) -> str: return " " * 57 + f"ID:{dt.strftime('%Y%m%d%H%M%S')} I" def generate_station(dt: datetime) -> str: st = generate_agency(4) return "\n".join( [ f" {st} EZ EP {dt.hour:2d}{dt.minute:2d} {dt.second: >5.2f}".ljust( 80 ), f" {st} EZ ES {dt.hour:2d}{dt.minute:2d} {dt.second: >5.2f}".ljust( 80 ), ] ) def main(argv: int): fp = open("falsos.txt", "w", newline="\n") for _ in range(argv): aux = generate_event() fp.write(aux) fp.close() if __name__ == "__main__": random.seed(time.time()) parser = argparse.ArgumentParser() parser.add_argument( "n", action="store", type=int, help="Generates n amount of events" ) args = parser.parse_args() if args.n: main(args.n)