Source code for lca_algebraic.io

import brightway2 as bw
from bw2data.parameters import DatabaseParameter, ProjectParameter
from bw2io import BW2Package

from lca_algebraic.log import warn
from lca_algebraic.params import _listParams, loadParams

__all__ = ["export_db", "import_db"]


def _param_data(param):
    """Return param data except id"""
    res = {key: val for key, val in param.__data__.items() if key != "id"}
    data = res.pop("data")
    res.update(data)

    return res


[docs] def export_db(db_name, filename): """This function exports a database to the **BW2Package** format, including the definition of parameters""" db = bw.Database(db_name) db_params = DatabaseParameter.select().where(DatabaseParameter.database == db_name) # Export Db params db.metadata["database_parameters"] = [_param_data(param) for param in db_params] # List of all project params used in this dataset used_project_params = list(param.name for param in _listParams(db_name) if param.dbname is None) if len(used_project_params) > 0: warn( "Warning : this DB uses project parameters that are exported as well " "and might override project params at import time : ", used_project_params, ) proj_params = list(ProjectParameter.get(ProjectParameter.name == name) for name in used_project_params) db.metadata["project_parameters"] = [_param_data(param) for param in proj_params] BW2Package._write_file(filename, [BW2Package._prepare_obj(db, False)])
[docs] def import_db(filename): """Import Db from BW2Package with linked parameters (as produced by **export_db**)""" db = BW2Package.import_file(filename)[0] if "database_parameters" in db.metadata: params = db.metadata["database_parameters"] bw.parameters.new_database_parameters(params, db.name) if "project_parameters" in db.metadata: params = db.metadata["project_parameters"] bw.parameters.new_project_parameters(params) # Reload the parameters loadParams() return db