Skip to content

Commit

Permalink
fix(package paths): fixed auto-generated package paths to make them u…
Browse files Browse the repository at this point in the history
…nique (#1401) (#1425)

* fix(package paths): fixed auto-generated package paths to make them unique (#1401)
  • Loading branch information
spaulins-usgs committed May 31, 2022
1 parent ce51469 commit d5fca7a
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 2 deletions.
2 changes: 2 additions & 0 deletions autotest/t066_test_copy.py
Expand Up @@ -56,6 +56,7 @@ def model_is_copy(m1, m2):
"package_key_dict",
"package_type_dict",
"package_name_dict",
"package_filename_dict",
"_ftype_num_dict",
]:
continue
Expand Down Expand Up @@ -101,6 +102,7 @@ def package_is_copy(pk1, pk2):
"dimensions",
"package_key_dict",
"package_name_dict",
"package_filename_dict",
"package_type_dict",
"post_block_comments",
"simulation_data",
Expand Down
2 changes: 1 addition & 1 deletion autotest/t505_test.py
Expand Up @@ -1391,7 +1391,7 @@ def test_np001():
mpath = sim.simulation_data.mfpath.get_model_path(model.name)
spath = sim.simulation_data.mfpath.get_sim_path()
found_cellid = False
with open(os.path.join(mpath, "np001_mod.wel_1"), "r") as fd:
with open(os.path.join(mpath, "np001_mod.wel"), "r") as fd:
for line in fd:
line_lst = line.strip().split()
if (
Expand Down
12 changes: 12 additions & 0 deletions flopy/mf6/mfbase.py
Expand Up @@ -483,6 +483,7 @@ def __init__(self, simulation_data, name):
self._packagelist = []
self.package_type_dict = {}
self.package_name_dict = {}
self.package_filename_dict = {}
self.package_key_dict = {}

@staticmethod
Expand Down Expand Up @@ -572,6 +573,8 @@ def _add_package(self, package, path):
self._packagelist.append(package)
if package.package_name is not None:
self.package_name_dict[package.package_name.lower()] = package
if package.filename is not None:
self.package_filename_dict[package.filename.lower()] = package
self.package_key_dict[path[-1].lower()] = package
if package.package_type not in self.package_type_dict:
self.package_type_dict[package.package_type.lower()] = []
Expand All @@ -584,6 +587,11 @@ def _remove_package(self, package):
and package.package_name.lower() in self.package_name_dict
):
del self.package_name_dict[package.package_name.lower()]
if (
package.filename is not None
and package.filename.lower() in self.package_filename_dict
):
del self.package_filename_dict[package.filename.lower()]
del self.package_key_dict[package.path[-1].lower()]
package_list = self.package_type_dict[package.package_type.lower()]
package_list.remove(package)
Expand Down Expand Up @@ -672,6 +680,10 @@ def get_package(self, name=None):
if name.lower() in self.package_key_dict:
return self.package_key_dict[name.lower()]

# search for file name
if name.lower() in self.package_filename_dict:
return self.package_filename_dict[name.lower()]

# search for partial and case-insensitive package name
for pp in self._packagelist:
if pp.package_name is not None:
Expand Down
12 changes: 11 additions & 1 deletion flopy/mf6/mfmodel.py
Expand Up @@ -19,6 +19,7 @@
ExtFileAction,
FlopyException,
MFDataException,
MFFileMgmt,
PackageContainer,
PackageContainerType,
ReadAsArraysException,
Expand Down Expand Up @@ -1711,7 +1712,16 @@ def register_package(
package.package_name = package.package_type

if set_package_filename:
package._filename = f"{self.name}.{package_extension}"
# filename uses model base name
package._filename = MFFileMgmt.string_to_file_path(
f"{self.name}.{package.package_type}"
)
if package._filename in self.package_filename_dict:
# auto generate a unique file name and register it
file_name = MFFileMgmt.unique_file_name(
package._filename, self.package_filename_dict
)
package._filename = file_name

if add_to_package_list:
self._add_package(package, path)
Expand Down

0 comments on commit d5fca7a

Please sign in to comment.