51611c3934
* PEP8 cleanups * PEP8 cleanups (server.py) * PEP8 cleanups (blueprints.py) * PEP8 cleanups (config.py) * PEP8 cleanups (cookies.py) * PEP8 cleanups (handlers.py) * PEP8 cleanups (request.py) * PEP8 cleanups (response.py) * PEP8 cleanups (router.py) * PEP8 cleanups (sanic.py) #2 * PEP8 cleanups (server.py) #2 * PEP8 cleanups (static.py) * PEP8 cleanups (utils.py) * PEP8 cleanups (views.py) Updated docstring
93 lines
3.7 KiB
Python
93 lines
3.7 KiB
Python
import os
|
|
import types
|
|
|
|
|
|
class Config(dict):
|
|
def __init__(self, defaults=None):
|
|
super().__init__(defaults or {})
|
|
self.LOGO = """
|
|
▄▄▄▄▄
|
|
▀▀▀██████▄▄▄ _______________
|
|
▄▄▄▄▄ █████████▄ / \\
|
|
▀▀▀▀█████▌ ▀▐▄ ▀▐█ | Gotta go fast! |
|
|
▀▀█████▄▄ ▀██████▄██ | _________________/
|
|
▀▄▄▄▄▄ ▀▀█▄▀█════█▀ |/
|
|
▀▀▀▄ ▀▀███ ▀ ▄▄
|
|
▄███▀▀██▄████████▄ ▄▀▀▀▀▀▀█▌
|
|
██▀▄▄▄██▀▄███▀ ▀▀████ ▄██
|
|
▄▀▀▀▄██▄▀▀▌████▒▒▒▒▒▒███ ▌▄▄▀
|
|
▌ ▐▀████▐███▒▒▒▒▒▐██▌
|
|
▀▄▄▄▄▀ ▀▀████▒▒▒▒▄██▀
|
|
▀▀█████████▀
|
|
▄▄██▀██████▀█
|
|
▄██▀ ▀▀▀ █
|
|
▄█ ▐▌
|
|
▄▄▄▄█▌ ▀█▄▄▄▄▀▀▄
|
|
▌ ▐ ▀▀▄▄▄▀
|
|
▀▀▄▄▀
|
|
"""
|
|
self.REQUEST_MAX_SIZE = 100000000 # 100 megababies
|
|
self.REQUEST_TIMEOUT = 60 # 60 seconds
|
|
|
|
def __getattr__(self, attr):
|
|
try:
|
|
return self[attr]
|
|
except KeyError as ke:
|
|
raise AttributeError("Config has no '{}'".format(ke.args[0]))
|
|
|
|
def __setattr__(self, attr, value):
|
|
self[attr] = value
|
|
|
|
def from_envvar(self, variable_name):
|
|
"""Load a configuration from an environment variable pointing to
|
|
a configuration file.
|
|
|
|
:param variable_name: name of the environment variable
|
|
:return: bool. ``True`` if able to load config, ``False`` otherwise.
|
|
"""
|
|
config_file = os.environ.get(variable_name)
|
|
if not config_file:
|
|
raise RuntimeError('The environment variable %r is not set and '
|
|
'thus configuration could not be loaded.' %
|
|
variable_name)
|
|
return self.from_pyfile(config_file)
|
|
|
|
def from_pyfile(self, filename):
|
|
"""Update the values in the config from a Python file.
|
|
Only the uppercase variables in that module are stored in the config.
|
|
|
|
:param filename: an absolute path to the config file
|
|
"""
|
|
module = types.ModuleType('config')
|
|
module.__file__ = filename
|
|
try:
|
|
with open(filename) as config_file:
|
|
exec(compile(config_file.read(), filename, 'exec'),
|
|
module.__dict__)
|
|
except IOError as e:
|
|
e.strerror = 'Unable to load configuration file (%s)' % e.strerror
|
|
raise
|
|
self.from_object(module)
|
|
return True
|
|
|
|
def from_object(self, obj):
|
|
"""Update the values from the given object.
|
|
Objects are usually either modules or classes.
|
|
|
|
Just the uppercase variables in that object are stored in the config.
|
|
Example usage::
|
|
|
|
from yourapplication import default_config
|
|
app.config.from_object(default_config)
|
|
|
|
You should not use this function to load the actual configuration but
|
|
rather configuration defaults. The actual config should be loaded
|
|
with :meth:`from_pyfile` and ideally from a location not within the
|
|
package because the package might be installed system wide.
|
|
|
|
:param obj: an object holding the configuration
|
|
"""
|
|
for key in dir(obj):
|
|
if key.isupper():
|
|
self[key] = getattr(obj, key)
|