about summary refs log tree commit diff
path: root/wqflask/utility/monads.py
diff options
context:
space:
mode:
Diffstat (limited to 'wqflask/utility/monads.py')
-rw-r--r--wqflask/utility/monads.py114
1 files changed, 0 insertions, 114 deletions
diff --git a/wqflask/utility/monads.py b/wqflask/utility/monads.py
deleted file mode 100644
index 2d708261..00000000
--- a/wqflask/utility/monads.py
+++ /dev/null
@@ -1,114 +0,0 @@
-"""Monadic utilities
-
-This module is a collection of monadic utilities for use in
-GeneNetwork. It includes:
-
-* MonadicDict - monadic version of the built-in dictionary
-* MonadicDictCursor - monadic version of MySQLdb.cursors.DictCursor
-  that returns a MonadicDict instead of the built-in dictionary
-"""
-
-from collections import UserDict
-from functools import partial
-
-from MySQLdb.cursors import DictCursor
-from pymonad.maybe import Just, Nothing
-
-class MonadicDict(UserDict):
-    """
-    Monadic version of the built-in dictionary.
-
-    Keys in this dictionary can be any python object, but values must
-    be monadic values.
-
-    from pymonad.maybe import Just, Nothing
-
-    Initialize by setting individual keys to monadic values.
-    >>> d = MonadicDict()
-    >>> d["foo"] = Just(1)
-    >>> d["bar"] = Nothing
-    >>> d
-    {'foo': 1}
-
-    Initialize by converting a built-in dictionary object.
-    >>> MonadicDict({"foo": 1})
-    {'foo': 1}
-    >>> MonadicDict({"foo": 1, "bar": None})
-    {'foo': 1}
-
-    Initialize from a built-in dictionary object with monadic values.
-    >>> MonadicDict({"foo": Just(1)}, convert=False)
-    {'foo': 1}
-    >>> MonadicDict({"foo": Just(1), "bar": Nothing}, convert=False)
-    {'foo': 1}
-
-    Get values. For non-existent keys, Nothing is returned. Else, a
-    Just value is returned.
-    >>> d["foo"]
-    Just 1
-    >>> d["bar"]
-    Nothing
-
-    Convert MonadicDict object to a built-in dictionary object.
-    >>> d.data
-    {'foo': 1}
-    >>> type(d)
-    <class 'utility.monads.MonadicDict'>
-    >>> type(d.data)
-    <class 'dict'>
-
-    Delete keys. Deleting non-existent keys does nothing.
-    >>> del d["bar"]
-    >>> d
-    {'foo': 1}
-    >>> del d["foo"]
-    >>> d
-    {}
-    """
-    def __init__(self, d={}, convert=True):
-        """Initialize monadic dictionary.
-
-        If convert is False, values in dictionary d must be
-        monadic. If convert is True, values in dictionary d are
-        converted to monadic values.
-        """
-        if convert:
-            super().__init__({key:Just(value) for key, value in d.items()
-                              if value is not None})
-        else:
-            super().__init__(d)
-    def __getitem__(self, key):
-        """Get key from dictionary.
-
-        If key exists in the dictionary, return a Just value. Else,
-        return Nothing.
-        """
-        try:
-            return Just(self.data[key])
-        except KeyError:
-            return Nothing
-    def __setitem__(self, key, value):
-        """Set key in dictionary.
-
-        value must be a monadic value---either Nothing or a Just
-        value. If value is a Just value, set it in the dictionary. If
-        value is Nothing, do nothing.
-        """
-        value.bind(partial(super().__setitem__, key))
-    def __delitem__(self, key):
-        """Delete key from dictionary.
-
-        If key exists in the dictionary, delete it. Else, do nothing.
-        """
-        try:
-            super().__delitem__(key)
-        except KeyError:
-            pass
-
-
-def sql_query_mdict(conn, query):
-    """Execute SQL query and return a generator of MonadicDict objects."""
-    with conn.cursor(DictCursor) as cursor:
-        cursor.execute(query)
-        while (row := cursor.fetchone()):
-            yield MonadicDict(row)