Metadata-Version: 2.1
Name: gblackboard
Version: 0.2.2
Summary: Blackboard pattern implementation
Home-page: https://github.com/GTedHa/gblackboard
Author: G.Ted
Author-email: gted221@gmail.com
License: MIT license
Keywords: gblackboard
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Dist: Click (>=6.0)
Requires-Dist: redis (>=3.0.0)

===========
gblackboard
===========


.. image:: https://img.shields.io/pypi/v/gblackboard.svg
        :target: https://pypi.python.org/pypi/gblackboard

.. image:: https://img.shields.io/travis/GTedHa/gblackboard.svg
        :target: https://travis-ci.org/GTedHa/gblackboard

.. image:: https://readthedocs.org/projects/gblackboard/badge/?version=latest
        :target: https://gblackboard.readthedocs.io/en/latest/?badge=latest
        :alt: Documentation Status




Blackboard pattern implementation


* Free software: MIT license
* Documentation: https://gblackboard.readthedocs.io.
* Repository: https://github.com/GTedHa/gblackboard


Features
-------

* To be updated
* Refer to 'Usage'


Usage
-------

To use gblackboard in a project:

- basic usage::

.. code-block:: python

    from gblackboard import Blackboard
    from gblackboard import SupportedMemoryType

    blackboard = Blackboard(SupportedMemoryType.DICTIONARY)
    # Set a key-value data;
    # `set` method should be called only once for a key.
    # It's a kind of initialization for data.
    blackboard.set('key', 'value')
    # Retrieve data with key.
    value = blackboard.get('key')
    # Update data with new value;
    # `update` method should be called
    # after `set` method called for a key.
    blackboard.update('key', 'new_value')
    # Delete data from blackboard with key.
    blackboard.drop('key')
    # Clear all data in blackboard.
    blackboard.clear()


- observer::

.. code-block:: python

    from gblackboard import Blackboard
    from gblackboard import SupportedMemoryType

    def callback(data):
        print(data)

    blackboard = Blackboard(SupportedMemoryType.DICTIONARY)
    blackboard.set('key', 'value')
    # Register `callback` function as a callback.
    blackboard.register_callback('key', callback)
    # Update data;
    # `callback` function will be called during `update`,
    # and `new_value` will passed to `callback` function.
    blackboard.update('key', 'new_value')


- complex data::

.. code-block:: python

    from gblackboard import Blackboard
    from gblackboard import SupportedMemoryType

    import datetime as dt

    class User(object):

        def __init__(self, name, email):
            self.name = name
            self.email = email
            self.created_at = dt.datetime.now()

        def __repr__(self):
            return '<User(name={self.name!r})>'.format(self=self)

    blackboard = Blackboard(SupportedMemoryType.DICTIONARY)

    # You can also store customized class objects in blackboard.
    blackboard.set('user', User("G.Ted", "gted221@gmail.com"))
    user = blackboard.get('user')
    print(user)
    # <User(name='G.Ted')> will be printed.

    # List of complex objects is also supported.
    blackboard.set('users',
        [
            User("User1", "user1@gblackboard.com"),
            User("User2", "user2@gblackboard.com"),
        ]
    )
    users = blackboard.get('users')
    print(users)
    # [<User(name='User1')>, <User(name='User2')>] will be printed.


- save & load::

.. code-block:: python

    from gblackboard import Blackboard
    from gblackboard import SupportedMemoryType

    import datetime as dt

    class User(object):

        def __init__(self, name, email):
            self.name = name
            self.email = email
            self.created_at = dt.datetime.now()

        def __repr__(self):
            return '<User(name={self.name!r})>'.format(self=self)

    blackboard = Blackboard(SupportedMemoryType.DICTIONARY)
    # Store sample data
    blackboard.set('user', User("G.Ted", "gted221@gmail.com"))
    # Save current blackboard contents as file.
    blackboard.save()
    # Close current blackboard;
    # this means clear all data in blackboard
    blackboard.close()
    # ------------------------------------------------------------
    blackboard = Blackboard(SupportedMemoryType.DICTIONARY)
    # Load saved blackboard contents from files.
    blackboard.load()
    user = blackboard.get('user')
    print(user)
    # <User(name='G.Ted')> will be printed.


TODO
-------

* `Save & Load` on subprocess
* Validation for Redis configurations
* Print blackboard contents for debugging


Credits
-------

This package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage


=======
History
=======

0.1.0 (2019-01-24)
------------------

* First commit on GitHub.


0.1.1 (2019-01-30)
------------------

* Add fakeredis for test


0.2.0 (2019-02-16)
------------------

* Eliminates the limitations of supported data types.
* Change object serialization method for storing data from JSON serialization method using marshmallow (external)
  library to serialization method using pickle library.
* Replace CRUD methods of redis with Hash-CRUD methods
    - set(key, value) -> hset('gblackboard', key, value)
    - get(key)        -> hget('gblackboard', key)
    - delete(key)     -> hdel('gblackboard', key)
    - exists(key)     -> hexists('gblackboard', key)
* Remove useless setup() step and mem_ready status
* Add raise_conn_error (raise 'connection error') decorator for RedisWrapper CRUD methods
* Add save & load features



