Skip to content

Commit

Permalink
cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
wpbonelli committed Jul 19, 2024
1 parent 79a99e6 commit 33bdc32
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 6 deletions.
13 changes: 9 additions & 4 deletions flopy4/block.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from collections.abc import MutableMapping
from typing import Any, Dict

from flopy4.parameter import MFParameter
from flopy4.parameter import MFParameter, MFParameters
from flopy4.utils import strip


Expand All @@ -20,7 +20,7 @@ class MFBlock(MutableMapping):
def __init__(self, name=None, index=None, *args, **kwargs):
self.name = name
self.index = index
self.params = dict()
self.params = MFParameters()
self.update(dict(*args, **kwargs))
for key, param in self.items():
setattr(self, key, param)
Expand Down Expand Up @@ -50,12 +50,13 @@ def __len__(self):
return len(self.params)

@classmethod
def load(cls, f):
def load(cls, f, strict=False):
name = None
index = None
found = False
params = dict()
members = get_member_params(cls)

while True:
pos = f.tell()
line = strip(f.readline()).lower()
Expand All @@ -69,7 +70,7 @@ def load(cls, f):
elif key == "end":
break
elif found:
if key in members:
if not strict or key in members:
f.seek(pos)
param = members[key]
param.block = name
Expand All @@ -86,3 +87,7 @@ def write(self, f):
for param in self.values():
param.write(f)
f.write(end)


class MFBlocks:
pass
30 changes: 30 additions & 0 deletions flopy4/parameter.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from abc import abstractmethod
from collections.abc import MutableMapping
from dataclasses import dataclass, fields
from enum import Enum
from typing import Any, Optional
Expand Down Expand Up @@ -129,8 +130,37 @@ def __init__(
default_value=default_value,
)

def __get__(self, instance, _):
if instance is None:
return self
else:
return self.value

@property
@abstractmethod
def value(self) -> Optional[Any]:
"""Get the parameter's value, if loaded."""
pass


class MFParameters(MutableMapping):
def __init__(self, *args, **kwargs):
self.params = dict()
self.update(dict(*args, **kwargs))
for key, param in self.items():
setattr(self, key, param)

def __getitem__(self, key):
return self.params[key]

def __setitem__(self, key, value):
self.params[key] = value

def __delitem__(self, key):
del self.params[key]

def __iter__(self):
return iter(self.params)

def __len__(self):
return len(self.params)
4 changes: 2 additions & 2 deletions test/test_block.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class TestBlock(MFBlock):
# a = MFArray(description="array")


def test_get_member_params():
def test_params():
params = get_member_params(TestBlock)
assert len(params) == 5

Expand Down Expand Up @@ -48,7 +48,7 @@ def test_get_member_params():
# assert not f.optional


def test_block_load_write_no_index(tmp_path):
def test_load_write(tmp_path):
name = "options"
fpth = tmp_path / f"{name}.txt"
with open(fpth, "w") as f:
Expand Down

0 comments on commit 33bdc32

Please sign in to comment.