Exemplo n.º 1
0
def run_migrations_online():
    """Run migrations in 'online' mode.

    In this scenario we need to create an Engine
    and associate a connection with the context.

    """
    # connectable = engine_from_config(
    #     config.get_section(config.config_ini_section),
    #     prefix="sqlalchemy.",
    #     # poolclass=pool.Pool(),
    # )

    engine = db_connect(timeout=600)

    with engine.connect() as connection:
        context.configure(
            include_object=include_object,
            connection=connection,
            target_metadata=target_metadata,
        )

        try:
            with context.begin_transaction():
                context.run_migrations()
        finally:
            connection.close()
Exemplo n.º 2
0
def load_facility_fueltech_map():
    """
        Only do this for DUIDs that don't have a fueltech


    """

    engine = db_connect()
    session = sessionmaker(bind=engine)
    s = session()

    facility_fueltech_map = load_data_json("facility_fueltech_map.json")

    update_count = 0

    for facility_duid, facility_fueltech in facility_fueltech_map.items():

        facilities = (s.query(Facility).filter(
            Facility.network_code == facility_duid).all())

        for f in facilities:
            if f.fueltech_id:
                logger.debug(
                    "Skipping {} because it already has a fueltech of {}".
                    format(f.code, f.fueltech_id))
                continue

            f.fueltech_id = facility_fueltech
            s.add(f)
            update_count += 1

    s.commit()
    logger.info("Updated {} fueltechs for facilities".format(update_count))
Exemplo n.º 3
0
def opennem_geocode(limit=None):
    engine = db_connect()
    session = sessionmaker(bind=engine)
    s = session()

    records = s.query(Station).filter(Station.geom == None).filter(Station.geocode_skip == False)

    count = 0
    skipped = 0
    records_added = 0

    for r in records:
        geo_address_string = build_address_string(r)

        logger.info("Geocoding record: {}".format(geo_address_string))
        continue

        google_result = place_search(geo_address_string)

        pprint(google_result)

        if google_result and type(google_result) is list and len(google_result) > 0:
            result = google_result[0]

            r.place_id = result["place_id"]

            lat = result["geometry"]["location"]["lat"]
            lng = result["geometry"]["location"]["lng"]
            r.geom = "SRID=4326;POINT({} {})".format(lng, lat)

            r.geocode_processed_at = datetime.now()
            r.geocode_by = "google"
            r.geocode_approved = False

            try:
                s.add(r)
                s.commit()
                records_added += 1
            except IntegrityError as e:
                logger.error(e)
                skipped += 1
                pass
            except Exception as e:
                skipped += 1
                logger.error("Error: {}".format(e))
        else:
            skipped += 1

        count += 1
        if limit and count >= limit:
            break

    print("Geocode of opennem records done. Added {} records. Couldn't match {}".format(records_added, skipped))
Exemplo n.º 4
0
def get_mysql_engine() -> Engine:
    """Get a database connection to the mysql database, requires mysqlclient

    $ pip install mysqlclient

    and a connection string with the driver set as:

    ```mysql+pymysql://```
    """
    dbconnstr = os.environ.get("NEMWEB_MIGRATE_DB")

    if not dbconnstr:
        raise Exception(
            "Require a db connection string set at NEMWEB_MIGRATE_DB")

    engine = db_connect(db_conn_str=dbconnstr)

    return engine
Exemplo n.º 5
0
 def __init__(self):
     engine = db_connect()
     self.session = sessionmaker(bind=engine)
Exemplo n.º 6
0
import decimal
import json
from datetime import datetime

from sqlalchemy.orm import sessionmaker

from opennem.db import db_connect
from opennem.db.models.opennem import FuelTech
from opennem.db.models.wem import WemFacility, metadata

engine = db_connect()
session = sessionmaker(bind=engine)

PERIOD_MAP = {
    "all": 0,
    # current year
    "year": "date_trunc('year', current_date))",
    # current month
    "month": "date_trunc('month', current_date))",
}


def bom_observation(station_id, region="wa"):
    __query = """
        SELECT
            observation_time,
            temp_air as value
        FROM bom_observation
        WHERE
            station_id = '{station_id}'
            AND observation_time > now() - interval '7 days'
Exemplo n.º 7
0
from opennem.core.compat.energy import trading_energy_data
from opennem.core.compat.loader import load_statset_v2
from opennem.core.compat.schema import OpennemDataSetV2
from opennem.core.energy import _energy_aggregate, energy_sum
from opennem.core.parsers.aemo import parse_aemo_urls
from opennem.db import db_connect, get_database_engine
from opennem.pipelines.files import _fallback_download_handler
from opennem.schema.network import NetworkNEM
from opennem.settings import settings
from opennem.utils.http import http
from opennem.utils.numbers import sigfig_compact
from opennem.utils.series import series_are_equal, series_joined
from opennem.workers.energy import get_generated, get_generated_query

engine = db_connect(settings.db_url)
engine_local = db_connect(
    "postgresql://*****:*****@127.0.0.1:15433/opennem")


def run() -> None:
    aemo = parse_aemo_urls([
        "http://nemweb.com.au/Reports/Current/Next_Day_Dispatch/PUBLIC_NEXT_DAY_DISPATCH_20210304_0000000337689171.zip",
        "http://nemweb.com.au/Reports/Current/Next_Day_Dispatch/PUBLIC_NEXT_DAY_DISPATCH_20210305_0000000337748278.zip",
        "http://nemweb.com.au/Reports/Current/Next_Day_Dispatch/PUBLIC_NEXT_DAY_DISPATCH_20210306_0000000337800035.zip",
    ])

    meter_data = aemo.get_table("METER_DATA_GEN_DUID")

    if meter_data:
        df = pd.DataFrame(meter_data.records)
Exemplo n.º 8
0
def load_opennem_facilities():
    station_fixture = load_data("facility_registry.json", from_fixture=True)

    stations = [{"station_code": k, **v} for k, v in station_fixture.items()]

    engine = db_connect()
    session = sessionmaker(bind=engine)
    s = session()

    for station_data in stations:
        station = None

        facilities = [{
            "code": k,
            **v
        } for k, v in station_data["duid_data"].items()]

        # update facilities
        for facility_data in facilities:
            facility_duid = facility_data["code"]
            station_name = station_name_cleaner(station_data["display_name"])
            # station_code = normalize_duid(station_data["station_code"])
            station_code = facility_map_station(
                facility_duid, normalize_duid(station_data["station_code"]))
            station_state = map_compat_facility_state(
                station_data["status"]["state"])
            station_network = "WEM" if station_data["location"][
                "state"] == "WA" else "NEM"

            station = s.query(Station).filter(
                Station.network_code == station_code).one_or_none()

            if not station:
                station = Station(
                    network_id=station_network,
                    code=station_code,
                    network_code=station_code,
                    name=station_name,
                    network_name=station_data["display_name"],
                    created_by="opennem.load_facilities",
                )
                logger.info("Created station: {} {} ".format(
                    station_name, station_code))

                s.add(station)
                s.commit()

            facility_status = station_state

            # Network region
            facility_network_region = map_compat_network_region(
                station_data["region_id"])

            # Fueltech
            facility_fueltech = None

            if "fuel_tech" in facility_data and facility_data["fuel_tech"]:
                facility_fueltech = map_compat_fueltech(
                    facility_data["fuel_tech"])

            # Capacity
            facility_capacity = None

            if "registered_capacity" in facility_data and facility_data[
                    "registered_capacity"]:
                facility_capacity = clean_capacity(
                    facility_data["registered_capacity"])

            facility = None

            try:
                facility = (s.query(Facility).filter(
                    Facility.network_code == facility_duid).one_or_none())
            except MultipleResultsFound:
                logger.error("Multiple facilities found for duid {}".format(
                    facility_duid))

                # facility = (
                #     s.query(Facility)
                #     .filter(Facility.network_code == facility_duid)
                #     .first()
                # )
                continue

            if not facility:
                facility = Facility(
                    code=facility_duid,
                    network_code=facility_duid,
                    network_region=facility_network_region,
                    created_by="opennem.load_facilities",
                )

                logger.info("Created facility: {} {} to station {} ".format(
                    facility_duid, facility_fueltech, station_code))

            if not facility.unit_id:
                facility.unit_id = 1
                facility.unit_number = 1

            if facility_capacity and not facility.unit_capacity:
                facility.unit_capacity = facility_capacity

            if facility_capacity and not facility.capacity_registered:
                facility.capacity_registered = facility_capacity

            if facility_fueltech and not facility.fueltech_id:
                facility.fueltech_id = facility_fueltech

            if not facility.status_id:
                facility.status_id = facility_status

            if not facility.station:
                facility.station = station

            s.add(facility)
            s.commit()