PyPSA / pypsa-eur

PyPSA-Eur: A Sector-Coupled Open Optimisation Model of the European Energy System
https://pypsa-eur.readthedocs.io/
342 stars 242 forks source link

Path snakemakel.input.hotmaps_industrial_database not correctly mocked #1123

Closed fhg-isi closed 1 month ago

fhg-isi commented 4 months ago

Describe the Bug

I tried to run

python scripts/build_industrial_distribution_key.py

using

        snakemake = mock_snakemake(
            "build_industrial_distribution_key",
            simpl="",
            clusters=37,
        )

and got the error below.

The attribute snakemakel.input.hotmaps_industrial_database does not seem to be correctly mocked and has the value

'/home/projekt-resilient03/pypsa-eur/.snakemake/storage/http/gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv'

Error Message

Exception has occurred: FileNotFoundError [Errno 2] No such file or directory: '/home/projekt-resilient03/pypsa-eur/.snakemake/storage/http/gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv' File "/home/projekt-resilient03/pypsa-eur/scripts/build_industrial_distribution_key.py", line 103, in prepare_hotmaps_database df = pd.read_csv(snakemake.input.hotmaps_industrial_database, sep=";", index_col=0) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/projekt-resilient03/pypsa-eur/scripts/build_industrial_distribution_key.py", line 189, in hotmaps = prepare_hotmaps_database(regions) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '/home/projekt-resilient03/pypsa-eur/.snakemake/storage/http/gitlab.com/hotmaps/industrial_sites/industrial_sites_Industrial_Database/-/raw/master/data/Industrial_Database.csv'

Related:

https://github.com/PyPSA/pypsa-eur/issues/1118

fhg-isi commented 4 months ago

I tried to fix the path by adapting _helpers.py:

def make_accessable(*ios):
            for io in ios:
                for i, _ in enumerate(io):
                    relative_path = io[i]
                    http_prefix = '.snakemake/storage/http/'
                    if relative_path.startswith(http_prefix):
                        absolute_path = relative_path.replace(http_prefix,'http://')
                        io[i] = absolute_path
                    else:
                      io[i] = os.path.abspath(relative_path)

Now I get another error:

https://github.com/PyPSA/pypsa-eur/issues/1124

fneum commented 1 month ago

This should be fixed now as the HTTPS input is outsourced into a retrieve* rule.