Source code for bw2regional.databases

import warnings

import pyprind
from bw2data import Database, databases

from . import Topography, geocollections, topocollections
from .base_data import COUNTRIES


[docs] def label_activity_geocollections(name): """Add geocollections to activity ``location`` fields. ``name`` is the name of an existing LCI database.""" assert name in databases, "{} not found".format(name) assert "world" in geocollections, "Please run `create_world_collections` first" ecoinvent = ( {x[1] for x in Topography("ecoinvent").load()} if "ecoinvent" in topocollections else set() ) RoWs = ( {x[1] for x in Topography("RoW").load()} if "RoW" in topocollections else set() ) db = Database(name) searchable = db.metadata.get("searchable") if searchable: db.make_unsearchable() found_geocollections = set() locations = {x["location"] for x in db} assert "RoW" not in locations, "`RoW` found; use `rower` to label Rest-of-Worlds" for act in pyprind.prog_bar(db): if isinstance(act["location"], tuple): found_geocollections.add(act["location"][0]) elif act["location"] in COUNTRIES: found_geocollections.add("world") elif act["location"] == "GLO": found_geocollections.add("world") elif act["location"] in RoWs: act["location"] = ("RoW", act["location"]) act.save() found_geocollections.add("RoW") elif act["location"] in ecoinvent: act["location"] = ("ecoinvent", act["location"]) act.save() found_geocollections.add("ecoinvent") else: warnings.warn( ( "Location {} in {} not understood; please add geocollection" " manually, and add to databases[name]['geocollections']" ).format(act["location"], act.key) ) if searchable: db.make_searchable() db.process() db.metadata["regionalized"] = True db.metadata["geocollections"] = sorted(found_geocollections) databases.flush()