Source code for otoole
# -*- coding: utf-8 -*-
from pkg_resources import get_distribution, DistributionNotFound
import os
from yaml import SafeLoader, load
from datapackage import Package
from sqlalchemy import create_engine
try:
import importlib.resources as resources
except ImportError:
# Try backported to PY<37 `importlib_resources`.
import importlib_resources as resources # type: ignore
try:
# Change here if project is renamed and does not equal the package name
dist_name = __name__
__version__ = get_distribution(dist_name).version
except DistributionNotFound:
__version__ = "unknown"
finally:
del get_distribution, DistributionNotFound
def _read_file(open_file, ending):
if ending == ".yaml" or ending == ".yml":
contents = load(open_file, Loader=SafeLoader)
else:
contents = open_file.readlines()
return contents
[docs]def read_packaged_file(filename: str, module_name: str = None):
_, ending = os.path.splitext(filename)
if module_name is None:
with open(filename, "r") as open_file:
contents = _read_file(open_file, ending)
else:
with resources.open_text(module_name, filename) as open_file:
contents = _read_file(open_file, ending)
return contents
[docs]def read_datapackage(filepath: str, sql: bool = False):
"""Open an OSeMOSYS datapackage
Arguments
---------
filepath : str
sql : bool, default=False
"""
if sql:
engine = create_engine("sqlite:///{}".format(filepath))
package = Package(storage="sql", engine=engine)
package.infer()
else:
package = Package(filepath)
return package