Source code for pluginsmanager.model.bank

# Copyright 2017 SrMouraSilva
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

from pluginsmanager.util.observable_list import ObservableList
from pluginsmanager.model.update_type import UpdateType

from unittest.mock import MagicMock
import uuid


[docs]class Bank(object): """ Bank is a data structure that contains :class:`Pedalboard`. It's useful for group common pedalboards, like "Pedalboards will be used in the Sunday show" A fast bank overview:: >>> bank = Bank('RHCP') >>> californication = Pedalboard('Californication') >>> # Add pedalboard in bank - mode A >>> bank.append(californication) >>> californication.bank == bank True >>> bank.pedalboards[0] == californication True >>> # Add pedalboard in bank - mode B >>> bank.pedalboards.append(Pedalboard('Dark Necessities')) >>> bank.pedalboards[1].bank == bank True >>> # If you needs change pedalboards order (swap), use pythonic mode >>> bank.pedalboards[1], bank.pedalboards[0] = bank.pedalboards[0], bank.pedalboards[1] >>> bank.pedalboards[1] == californication True >>> # Set pedalboard >>> bank.pedalboards[0] = Pedalboard("Can't Stop") >>> bank.pedalboards[0].bank == bank True >>> del bank.pedalboards[0] >>> bank.pedalboards[0] == californication # Pedalboard Can't stop rermoved, first is now the californication True You can also toggle pedalboards into different banks:: >>> bank1.pedalboards[0], bank2.pedalboards[2] = bank2.pedalboards[0], bank1.pedalboards[2] :param string name: Bank name """ def __init__(self, name): self.name = name self.pedalboards = ObservableList() self.pedalboards.observer = self._pedalboards_observer self.index = -1 self._uuid = str(uuid.uuid4()) self.manager = None self._observer = MagicMock() @property def observer(self): return self._observer @observer.setter def observer(self, observer): self._observer = observer for pedalboard in self.pedalboards: pedalboard.observer = observer def _pedalboards_observer(self, update_type, pedalboard, index): kwargs = { 'index': index, 'origin': self } if update_type == UpdateType.CREATED \ or update_type == UpdateType.UPDATED: pedalboard.bank = self pedalboard.observer = self.observer elif update_type == UpdateType.DELETED: pedalboard.bank = None pedalboard.observer = MagicMock() self.observer.on_pedalboard_updated(pedalboard, update_type, **kwargs) @property def json(self): """ Get a json decodable representation of this bank :return dict: json representation """ return self.__dict__ @property def __dict__(self): return { 'index': self.index, 'name': self.name, 'pedalboards': [pedalboard.json for pedalboard in self.pedalboards] }
[docs] def append(self, pedalboard): """ Add a :class:`Pedalboard` in this bank This works same as:: >>> bank.pedalboards.append(pedalboard) or:: >>> bank.pedalboards.insert(len(bank.pedalboards), pedalboard) :param Pedalboard pedalboard: Pedalboard that will be added """ self.pedalboards.append(pedalboard)