Newer
Older
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# System modules
import configparser
import importlib
import sys
# Third-party modules
from flask import Blueprint
# Custom modules
import devices
from .blocks import api as blocks_api
from .environment import api as environment_api
from .templates import api as templates_api
from .testfulvio import api as testfulvio_api
api_blueprint = Blueprint('api', __name__)
api = Api(api_blueprint,
description=['A description']
ends = configparser.ConfigParser()
ends.read('./config/api.ini')
def dynamic_import(url):
"""Dynamically import into this module api.ini files.
parts = url.split('/') # /dome/shutter/movement
namespace = parts[1] # dome
end = '/' + '/'.join(parts[2:]) # /shutter/movement
Davide Ricci
committed
dev_api = Namespace(namespace) # adding namespace /dome. Endpoint will be added
dev = getattr(devices, ends.get(url,"device")) # devices.light instance
cls = dev.__class__.__name__ # string "Switch"
mod_name = cls.lower() # string "switch"
module = importlib.import_module(base + mod_name ) # module api.switch
module_class = getattr(module, ends.get(url,"resource")) # class api.switch.State
dev_api.add_resource(module_class, end , resource_class_kwargs={"dev": dev})
Davide Ricci
committed
api.add_namespace(dev_api) # Adding to /dome: /shutter/movement
for end in ends.sections():
dynamic_import(end)
api.add_namespace(environment_api)
api.add_namespace(blocks_api)
api.add_namespace(templates_api)