kopia lustrzana https://github.com/glidernet/ogn-python
48 wiersze
1.2 KiB
Python
48 wiersze
1.2 KiB
Python
import os
|
|
import gzip
|
|
import time
|
|
from contextlib import contextmanager
|
|
|
|
from flask import current_app
|
|
from app import db
|
|
|
|
|
|
@contextmanager
|
|
def open_file(filename):
|
|
"""Opens a regular OR gzipped textfile for reading."""
|
|
|
|
file = open(filename, "rb")
|
|
a = file.read(2)
|
|
file.close()
|
|
if a == b"\x1f\x8b":
|
|
file = gzip.open(filename, "rt", encoding="latin-1")
|
|
else:
|
|
file = open(filename, "rt", encoding="latin-1")
|
|
|
|
try:
|
|
yield file
|
|
finally:
|
|
file.close()
|
|
|
|
|
|
class Timer(object):
|
|
def __init__(self, name=None):
|
|
self.name = name
|
|
|
|
def __enter__(self):
|
|
self.tstart = time.time()
|
|
|
|
def __exit__(self, type, value, traceback):
|
|
if self.name:
|
|
print("[{}]".format(self.name))
|
|
print("Elapsed: {}".format(time.time() - self.tstart))
|
|
|
|
|
|
def export_to_path(path):
|
|
connection = db.engine.raw_connection()
|
|
cursor = connection.cursor()
|
|
|
|
aircraft_beacons_file = os.path.join(path, "sender_positions.csv.gz")
|
|
with gzip.open(aircraft_beacons_file, "wt", encoding="utf-8") as gzip_file:
|
|
cursor.copy_expert("COPY ({}) TO STDOUT WITH (DELIMITER ',', FORMAT CSV, HEADER, ENCODING 'UTF-8');".format("SELECT * FROM sender_positions"), gzip_file)
|