From 818ebeabba5e051627d444c4849fde55947f94be Mon Sep 17 00:00:00 2001 From: Mike Shultz Date: Thu, 4 Jan 2018 21:16:29 -0700 Subject: [PATCH] Added support for dict-style assignments for some edge cases. --- rawl/__init__.py | 17 +++++++++++++++++ setup.py | 2 +- tests/test_rawl.py | 17 ++++++++++++++++- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/rawl/__init__.py b/rawl/__init__.py index c20cdc7..eb40876 100644 --- a/rawl/__init__.py +++ b/rawl/__init__.py @@ -177,6 +177,23 @@ def __getitem__(self, k): except IndexError: raise IndexError("Unknown index value %s" % k) + def __setitem__(self, k, v): + # If it's an int, use the int to lookup a column in the position of the + # sequence provided. + if type(k) == int: + return dict.__setitem__(self._data, self.columns[k], v) + # If it's a string, it's a dict lookup + elif type(k) == str: + return dict.__setitem__(self._data, k, v) + # Anything else and we have no idea how to handle it. + else: + int_k = None + try: + int_k = int(k) + return dict.__setitem__(self._data, self.columns[int_k], v) + except IndexError: + raise IndexError("Unknown index value %s" % k) + def __len__(self): return len(self._data) diff --git a/setup.py b/setup.py index badcf06..9fb5268 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name = 'rawl', - version = '0.2.5b1', + version = '0.2.6b1', description = 'An ugly raw SQL postgresql db layer', url = 'https://github.com/mikeshultz/rawl', author = 'Mike Shultz', diff --git a/tests/test_rawl.py b/tests/test_rawl.py index f046a55..2676b5e 100644 --- a/tests/test_rawl.py +++ b/tests/test_rawl.py @@ -362,4 +362,19 @@ def test_single_line_call(self, pgdb): result = TheModel(RAWL_DSN).get(str(RAWL_ID))[0] - assert type(result) == RawlResult \ No newline at end of file + assert type(result) == RawlResult + + @pytest.mark.dependency(depends=['test_all', 'test_get_single_rawl']) + def test_dict_assignment(self, pgdb): + """ + This test tries to assign something to RawlResult as if it were a dict + """ + + RAWL_ID = 5 + NAME = 'Shoopadoop' + + result = TheModel(RAWL_DSN).get(RAWL_ID) + + result[0]['name'] = NAME + + assert result[0].name == NAME \ No newline at end of file