subiquity/subiquitycore/controller.py

52 lines
1.8 KiB
Python
Raw Normal View History

# Copyright 2015 Canonical, Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from abc import ABC
import logging
from typing import Optional
log = logging.getLogger("subiquitycore.controller")
2016-11-01 23:44:04 +00:00
class BaseController(ABC):
"""Base class for controllers."""
model_name: Optional[str] = None
def __init__(self, app):
self.name = type(self).__name__[:-len("Controller")]
self.opts = app.opts
self.app = app
self.context = self.app.context.child(self.name, childlevel="DEBUG")
2019-12-17 02:05:17 +00:00
if self.model_name is not None:
self.model = getattr(self.app.base_model, self.model_name)
def start(self):
"""Called just before the main loop is started.
At the time this is called, all controllers and models and so on
have been created. This is when the controller should start
interacting with the outside world, e.g. probing for network
devices or start making connections to the snap store.
"""
pass
def serialize(self):
return None
def deserialize(self, data):
if data is not None:
raise Exception("missing deserialize method on {}".format(self))