requirements fix

This commit is contained in:
manuel83 2019-01-07 22:05:52 +01:00
parent 26417074de
commit dcc82d4bd8
8 changed files with 104 additions and 8 deletions

View file

@ -18,6 +18,10 @@ class ConfigController():
self.cbpi = cbpi
self.cbpi.register(self)
def get_state(self):
return self.cache
async def init(self):
this_directory = os.path.dirname(__file__)

View file

@ -17,6 +17,9 @@ class DashboardController(CRUDController):
self.logger = logging.getLogger(__name__)
self.cbpi.register(self)
def get_state(self):
return dict(items=self.cache)
async def get_content(self, dashboard_id):
return await DashboardContentModel.get_by_dashboard_id(dashboard_id)

View file

@ -108,13 +108,14 @@ class PluginController():
'''
logger.info("Register %s Class %s" % (name, clazz.__name__))
if issubclass(clazz, CBPiActor):
self.cbpi.actor.types[name] = {"class": clazz, "config": self._parse_props(clazz)}
#self.cbpi.actor.types[name] = {"class": clazz, "config": self._parse_props(clazz)}
self.cbpi.actor.types[name] = self._parse_props(clazz)
if issubclass(clazz, CBPiSensor):
self.cbpi.sensor.types[name] = {"class": clazz, "config": self._parse_props(clazz)}
self.cbpi.sensor.types[name] = self._parse_props(clazz)
if issubclass(clazz, CBPiKettleLogic):
self.cbpi.kettle.types[name] = {"class": clazz, "config": self._parse_props(clazz)}
self.cbpi.kettle.types[name] = self._parse_props(clazz)
if issubclass(clazz, CBPiSimpleStep):
self.cbpi.step.types[name] = self._parse_props(clazz)

View file

@ -14,14 +14,17 @@ class SystemController():
self.service = cbpi.actor
self.cbpi.register(self, "/system")
@request_mapping("/state", method="GET", auth_required=False)
@request_mapping("/", method="GET", auth_required=False)
def state(self, request):
# TODO implement restart
return web.json_response(data=dict(
actor=self.cbpi.actor.get_state(),
sensor=self.cbpi.sensor.get_state(),
kettle=self.cbpi.kettle.get_state(),
step=self.cbpi.step.get_state())
step=self.cbpi.step.get_state(),
dashboard=self.cbpi.dashboard.get_state(),
translations=self.cbpi.translation.get_all(),
config=self.cbpi.config.get_state())
, dumps=json_dumps)
@request_mapping("/restart", method="POST", name="RestartServer", auth_required=False)
@ -47,4 +50,5 @@ class SystemController():
@request_mapping("/events", method="GET", name="get_all_events", auth_required=False)
def get_all_events(self, request):
return web.json_response(data=self.cbpi.bus.dump())
return web.json_response(data=self.cbpi.bus.dump())

View file

@ -0,0 +1,29 @@
import logging
from database.model import TranslationModel
class TranslationController(object):
def __init__(self, cbpi):
self.cbpi = cbpi
self._cache = {}
self.logger = logging.getLogger(__name__)
async def init(self):
self._cache = await TranslationModel.get_all()
print(self._cache)
def get_all(self):
return self._cache
async def add_key(self, locale, key):
try:
if locale not in self._cache or key not in self._cache[locale]:
await TranslationModel.add_key(locale, key)
self._cache = await TranslationModel.get_all()
except Exception as e:
self.logger.error("Error during adding translation key %s - %s - %s" % (key, locale, str(e)))

View file

@ -30,7 +30,8 @@ from cbpi.http_endpoints.http_dashboard import DashBoardHttpEndpoints
from cbpi.http_endpoints.http_kettle import KettleHttpEndpoints
from cbpi.http_endpoints.http_sensor import SensorHttpEndpoints
from cbpi.http_endpoints.http_step import StepHttpEndpoints
from controller.translation_controller import TranslationController
from http_endpoints.http_translation import TranslationHttpEndpoint
logger = logging.getLogger(__name__)
@ -73,6 +74,7 @@ class CraftBeerPi():
self.bus = CBPiEventBus(self.app.loop, self)
self.ws = CBPiWebSocket(self)
self.job = JobController(self)
self.translation = TranslationController(self)
self.actor = ActorController(self)
self.sensor = SensorController(self)
self.plugin = PluginController(self)
@ -88,6 +90,7 @@ class CraftBeerPi():
self.http_actor = ActorHttpEndpoints(self)
self.http_kettle = KettleHttpEndpoints(self)
self.http_dashboard = DashBoardHttpEndpoints(self)
self.http_translation = TranslationHttpEndpoint(self)
self.notification = NotificationController(self)
self.login = Login(self)
@ -221,7 +224,7 @@ class CraftBeerPi():
await self.job.init()
await DBModel.setup()
await self.config.init()
await self.translation.init()
self._setup_http_index()
self.plugin.load_plugins()
self.plugin.load_plugins_from_evn()

View file

@ -130,3 +130,35 @@ class DashboardContentModel(DBModel):
async with aiosqlite.connect(DATABASE_FILE) as db:
await db.execute("DELETE FROM %s WHERE dbid = ?" % (cls.__table_name__), (id,))
await db.commit()
class TranslationModel(DBModel):
__fields__ = ["key", "text", "language_code"]
__table_name__ = "translation"
__json_fields__ = []
__priamry_key__ = "key"
@classmethod
async def get_all(cls):
result = {}
async with aiosqlite.connect(DATABASE_FILE) as db:
sql = "SELECT * FROM %s" % cls.__table_name__
db.row_factory = DBModel.dict_factory
async with db.execute(sql) as cursor:
async for row in cursor:
code = row.get("language_code")
key = row.get("key")
text = row.get("text")
if code not in result:
result[code] = {}
result[code][key] = text
await cursor.close()
return result
@classmethod
async def add_key(cls, locale, key):
async with aiosqlite.connect(DATABASE_FILE) as db:
await db.execute("INSERT INTO %s (language_code, key, text) VALUES (?,?, ' ')" % (cls.__table_name__), (locale, key))
await db.commit()

View file

@ -0,0 +1,20 @@
from aiohttp import web
from aiohttp_auth import auth
from cbpi.api import *
class TranslationHttpEndpoint():
def __init__(self,cbpi):
self.cbpi = cbpi
self.cbpi.register(self, url_prefix="/translation")
@request_mapping(path="/missing_key", method="POST", auth_required=False)
async def missing_key(self, request):
data = await request.json()
await self.cbpi.translation.add_key(**data)
return web.Response(status=204)