From 9735448e61a51a04ff0333b3e8143df7b1049610 Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Wed, 5 Aug 2015 16:44:00 +0300 Subject: [PATCH] Adding catalogs documentation --- docs/catalogs.rst | 27 ++++++++++++++ docs/images/catalogs/simple.png | Bin 0 -> 32492 bytes examples/catalogs/operating_with_providers.py | 33 ++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 docs/images/catalogs/simple.png create mode 100644 examples/catalogs/operating_with_providers.py diff --git a/docs/catalogs.rst b/docs/catalogs.rst index 05641883..186ff1f0 100644 --- a/docs/catalogs.rst +++ b/docs/catalogs.rst @@ -12,6 +12,10 @@ There are, actually, several popular use cases of catalogs: catalog ``Users``, that contains all functional parts of ``Users`` component). +Als, for both of these and some other cases, it might be useful to attach +some init / shutdown functionality or something else, that deals with group +of providers. + Writing catalogs ---------------- @@ -32,9 +36,32 @@ standard naming convention for names of attributes in Python. Example: +.. image:: /images/catalogs/simple.png + :width: 100% + :align: center + .. literalinclude:: ../examples/catalogs/simple.py :language: python +Operating with catalog providers +-------------------------------- + +There are several things that could be useful for operating with catalog +providers: + +- First of all, ``Catalog.providers`` attribute contains ``dict`` with all + catalog providers and their catalog names. This dictionary could be used + for any kind of operations that could be done with providers. The only note, + is that ``Catalog.providers`` attribute is read-only. +- Second one, ``Catalog.filter(provider_type=Provider)`` method could be + used for filtering catalog providers by provider types (for example, for + getting all ``Factory`` providers). + +Example: + +.. literalinclude:: ../examples/catalogs/operating_with_providers.py + :language: python + Overriding of catalogs ---------------------- diff --git a/docs/images/catalogs/simple.png b/docs/images/catalogs/simple.png new file mode 100644 index 0000000000000000000000000000000000000000..71006b0c8b5387236a7ff6c3aaa4dde1562c95f9 GIT binary patch literal 32492 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 K%lsEcAO9CLt3#~- literal 0 HcmV?d00001 diff --git a/examples/catalogs/operating_with_providers.py b/examples/catalogs/operating_with_providers.py new file mode 100644 index 00000000..3f8471e6 --- /dev/null +++ b/examples/catalogs/operating_with_providers.py @@ -0,0 +1,33 @@ +"""Operating with catalog providers example.""" + +from objects.catalog import AbstractCatalog +from objects.providers import Factory +from objects.providers import Singleton + + +class Catalog(AbstractCatalog): + + """Providers catalog.""" + + provider1 = Factory(object) + """:type: (objects.Provider) -> object""" + + provider2 = Factory(object) + """:type: (objects.Provider) -> object""" + + provider3 = Singleton(object) + """:type: (objects.Provider) -> object""" + + provider4 = Singleton(object) + """:type: (objects.Provider) -> object""" + + +# Making some asserts: +assert Catalog.providers == dict(provider1=Catalog.provider1, + provider2=Catalog.provider2, + provider3=Catalog.provider3, + provider4=Catalog.provider4) +assert Catalog.filter(Factory) == dict(provider1=Catalog.provider1, + provider2=Catalog.provider2) +assert Catalog.filter(Singleton) == dict(provider3=Catalog.provider3, + provider4=Catalog.provider4)