Skip to content
This repository has been archived by the owner on Dec 26, 2022. It is now read-only.

Dict methods #41

Merged
merged 2 commits into from
Mar 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 15 additions & 4 deletions n_const/data_format.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from collections.abc import ItemsView, KeysView, ValuesView
from types import SimpleNamespace
from typing import Any
from typing import Any, Hashable


class DataClass(SimpleNamespace):
Expand Down Expand Up @@ -32,13 +32,24 @@ def __repr__(self) -> str:
return super().__repr__().replace("namespace", self.__class__.__name__)

def keys(self) -> KeysView:
"""``dict.keys()`` interface."""
"""Equivalent to ``dict.keys()`` method."""
return self.__dict__.keys()

def values(self) -> ValuesView:
"""``dict.values()`` interface."""
"""Equivalent to ``dict.values()`` method."""
return self.__dict__.values()

def items(self) -> ItemsView:
"""``dict.items()`` interface."""
"""Equivalent to ``dict.items()`` method."""
return self.__dict__.items()

def get(self, key: Hashable, default: Any = None) -> Any:
"""Equivalent to ``dict.get(key, default)`` method."""
return self.__dict__.get(key, default)

def pop(self, key: Hashable, default: Any = KeyError) -> Any:
"""Equivalent to ``dict.pop(key, default)`` method."""
if default is KeyError:
return self.__dict__.pop(key)
else:
return self.__dict__.pop(key, default)
13 changes: 6 additions & 7 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ python = "^3.6"
astropy = "^3.0"
numpy = "^1.19"
dataclasses = { version = "^0.8", python = "~3.6" }
typing-extensions = { version = "^3.10.0", python = "<3.9" }
typing-extensions = { version = ">=3.0, <5.0", python = "<3.9" }
tomlkit = "^0.10"

[tool.poetry.dev-dependencies]
Expand Down
16 changes: 16 additions & 0 deletions tests/test_dataclass.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import pytest
from n_const.data_format import DataClass


Expand Down Expand Up @@ -50,3 +51,18 @@ def test_items(self):
]
for kwargs in test_cases:
assert DataClass(**kwargs).items() == kwargs.items()

def test_get(self):
example = DataClass(a=1, b=2)
assert example.get("a") == 1
assert example.get("b", 1) == 2
assert example.get("c") is None
assert example.get("c", 100) == 100

def test_pop(self):
example = DataClass(a=1, b=2)
assert example.pop("a") == 1
assert ["b"] == list(example.keys())
with pytest.raises(KeyError):
_ = example.pop("a")
assert example.pop("a", 100) == 100