From f4992d842e731ff8b72c4baf5162d12433593aae Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Thu, 6 Apr 2017 19:05:51 +0300 Subject: [PATCH] Add example for abstract factory provider --- examples/providers/abstract_factory/cache.py | 25 +++++++++++++++++ .../providers/abstract_factory/example.py | 28 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 examples/providers/abstract_factory/cache.py create mode 100644 examples/providers/abstract_factory/example.py diff --git a/examples/providers/abstract_factory/cache.py b/examples/providers/abstract_factory/cache.py new file mode 100644 index 00000000..fe499a2c --- /dev/null +++ b/examples/providers/abstract_factory/cache.py @@ -0,0 +1,25 @@ +"""Example hierarchy of cache clients with abstract base class.""" + + +class AbstractCacheClient(object): + """Abstract cache client.""" + + +class RedisCacheClient(AbstractCacheClient): + """Cache client implementation based on Redis.""" + + def __init__(self, host, port, db): + """Initializer.""" + self.host = host + self.port = port + self.db = db + + +class MemcacheCacheClient(AbstractCacheClient): + """Cache client implementation based on Memcached.""" + + def __init__(self, hosts, port, prefix): + """Initializer.""" + self.hosts = hosts + self.port = port + self.prefix = prefix diff --git a/examples/providers/abstract_factory/example.py b/examples/providers/abstract_factory/example.py new file mode 100644 index 00000000..2bad9a77 --- /dev/null +++ b/examples/providers/abstract_factory/example.py @@ -0,0 +1,28 @@ +"""`AbstractFactory` providers example.""" + +import cache + +import dependency_injector.providers as providers + + +# Define abstract cache client factory: +cache_client_factory = providers.AbstractFactory(cache.AbstractCacheClient) + +if __name__ == '__main__': + # Override abstract factory with redis client factory: + cache_client_factory.override(providers.Factory(cache.RedisCacheClient, + host='localhost', + port=6379, + db=0)) + redis_cache = cache_client_factory() + print(redis_cache) # + + # Override abstract factory with memcache client factory: + cache_client_factory.override(providers.Factory(cache.MemcacheCacheClient, + hosts=['10.0.1.1', + '10.0.1.2', + '10.0.1.3'], + port=11211, + prefix='my_app')) + memcache_cache = cache_client_factory() + print(memcache_cache) #