from __future__ import absolute_import, division, print_function, unicode_literals

import os, json

_constants_filename = os.path.join(os.path.dirname(__file__), "..", "constants.json")
_constants = {}

def write():
    from . import aws
    constants = {"instance_types": {}}
    instance_attrs = ["vcpu", "memory", "storage", "gpu", "clockSpeed", "networkPerformance"]
    spot_instance_families = {"m3", "m4", "c3", "c4", "r3", "r4", "i2", "i3", "d2", "g2"}
    for product in aws.get_ec2_products():
        if not any(product["attributes"]["instanceType"].startswith(fam + ".") for fam in spot_instance_families):
            continue
        traits = {field: product["attributes"].get(field) for field in instance_attrs}
        constants["instance_types"][product["attributes"]["instanceType"]] = traits
    with open(_constants_filename, "w") as fh:
        json.dump(constants, fh)

def get(field):
    if not _constants:
        with open(_constants_filename) as fh:
            _constants.update(json.load(fh))
    return _constants.get(field)