Source

brightway2 / brightway2 / io / export_database.py

# -*- coding: utf-8 -*-
import os
import bz2
from ..serialization import JsonWrapper
from .. import config, Database, databases


class DatabaseExport(object):
    """Export database to Brightway2 format, which is bz2-compressed JSON. Pickle can't be used because of security reasons.

    Brightway2 format for databases is:

    .. code-block::

        {
            "meta":
                {
                "name": database_name,
                "depends": [list_of_databases],
                "version": version_number,
                "from format": format,
                "bw2 version": bw2_version
                },
            "data": [
                [database_name, process_id], [process_data],
                ]
        }

    """
    def exporter(self, name):
        """Export a database to Brightway2 format.

        Args:
            *name* (str): Name of database to export.

        Returns:
            Filepath of exported database.

        """
        assert name in databases, "Database %s not found" % name
        meta = databases[name]
        data = Database(name).load().iteritems()
        version = config.version
        processed = {
            "meta": {
                "name": name,
                "depends": meta["depends"],
                "version": meta["version"],
                "from format": meta["from format"],
                "bw2 version": version
                },
            "data": data
            }
        dirname = config.request_dict("export")
        assert dirname, "No suitable directory for export found"
        filepath = os.path.join(dirname, name + ".json.bz2")
        with bz2.BZ2File(filepath, "w") as f:
            f.write(JsonWrapper.dumps(processed))
        return filepath
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.