Registry
In glim, most of the core components are extending from Registry class. The Registry class provides configuration which can be dynamically accessed using "." notation. The Registry implementation is the following;
class Registry:
"""
This class is basically a dictionary supercharged with
useful functions.
Attributes
----------
registrar (dict): A registrar to hold a generic
configuration of a class.
Usage
-----
config = {
'a' : 'b',
'c' : {
'd' : 'e'
}
}
reg = Registry(config)
reg.get('a') # returns b
reg.get('c.d') # returns e
reg.set('f', 'g') # sets 'f' key of dict
reg.get('f') # returns g
"""
def __init__(self, registrar):
self.registrar = registrar
def get(self, key):
"""
Function deeply gets the key with "." notation
Args
----
key (string): A key with the "." notation.
Returns
-------
reg (unknown type): Returns a dict or a primitive
type.
"""
try:
layers = key.split('.')
value = self.registrar
for key in layers:
value = value[key]
return value
except:
return None
def set(self, key, value):
"""
Function deeply sets the key with "." notation
Args
----
key (string): A key with the "." notation.
value (unknown type): A dict or a primitive type.
"""
target = self.registrar
for element in key.split('.')[:-1]:
target = target.setdefault(element, dict())
target[key.split(".")[-1]] = value
def flush(self):
"""
Function clears the registrar
Note:
After this function is called, all of your data
in your registry will be lost. So, use this smartly.
"""
self.registrar.clear()
def update(self, registrar):
"""
Function batch updates the registry. This function is an
alias of dict.update()
Args
----
registrar (dict): A dict of configuration.
Note:
After this function is called, all of your data may be
overriden and lost by the registrar you passed. So, use
this smartly.
"""
self.registrar.update(registrar)
def all(self):
"""
Function returns all the data in registrar.
Returns
-------
registrar (dict): The current registry in the class.
"""
return self.registrar
def __str__(self):
return self.registrar
You can see the docstring introduces the usage of a registry object. In glim, the Config class is extending the registry. It has the following implementation;
class Config(Registry):
"""
The configuration class is to hold framework level constants.
It holds the dict in app.config.<env>.config.
"""
You can notice that there aren't any changes in the Registry class. The Config can be instantiated with a dict namely the registrar.
Updated less than a minute ago