Skip to content

Commit

Permalink
Add special check for zipfile.Path (facebookresearch#1317)
Browse files Browse the repository at this point in the history
  • Loading branch information
jieru-hu authored Jan 23, 2021
1 parent ef85707 commit 98c2795
Showing 1 changed file with 23 additions and 14 deletions.
37 changes: 23 additions & 14 deletions hydra/_internal/core_plugins/importlib_resources_config_source.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
import os
import sys
import zipfile
from typing import List, Optional

from omegaconf import OmegaConf
Expand Down Expand Up @@ -40,23 +41,31 @@ def load_config(
if not res.exists():
raise ConfigLoadError(f"Config not found : {normalized_config_path}")

with res.open(encoding="utf-8") as f:
header_text = f.read(512)
try:
if sys.version_info[0:2] >= (3, 8) and isinstance(res, zipfile.Path):
f = res.open()
header_text = f.read(512).decode("utf-8")
else:
f = res.open(encoding="utf-8")
header_text = f.read(512)
header = ConfigSource._get_header_dict(header_text)
self._update_package_in_header(
header=header,
normalized_config_path=normalized_config_path,
is_primary_config=is_primary_config,
package_override=package_override,
)
f.seek(0)
cfg = OmegaConf.load(f)
return ConfigResult(
config=self._embed_config(cfg, header["package"]),
path=f"{self.scheme()}://{self.path}",
provider=self.provider,
header=header,
)
finally:
f.close()

self._update_package_in_header(
header=header,
normalized_config_path=normalized_config_path,
is_primary_config=is_primary_config,
package_override=package_override,
)
return ConfigResult(
config=self._embed_config(cfg, header["package"]),
path=f"{self.scheme()}://{self.path}",
provider=self.provider,
header=header,
)

def available(self) -> bool:
try:
Expand Down

0 comments on commit 98c2795

Please sign in to comment.