taucmdr.mvc.controller module¶
TODO: FIXME: Docs
-
class
taucmdr.mvc.controller.Controller(model_cls, storage, context=None)[source]¶ Bases:
objectThe “C” in MVC.
-
model¶ Data model.
Type: AbstractModel
-
storage¶ Record storage.
Type: AbstractDatabase
-
context¶ A field filter, with syntax (key, value).
Type: List(Tuple)
-
Filtering according to a context means that only elements with
-
at least an element matching the rules set in the context will
-
be considered. Think of it as a whitelist.
-
A controller will filters results according to
-
- By default, nothing;
-
- If a context was given at the object's initialization, the controller only allows objects matching the context;
-
- If a context is given during a command, it overrides the internal context and the results are matched against it.
-
_associate(record, foreign_model, affected, via)[source]¶ Associates a record with another record.
Parameters:
-
_disassociate(record, foreign_model, affected, via)[source]¶ Disassociates a record from another record.
Parameters:
-
count(context=True)[source]¶ Return the number of records.
Returns: Effectively len(self.all())Return type: int
-
create(data)[source]¶ Atomically store a new record and update associations.
Invokes the on_create callback after the data is recorded. If this callback raises an exception then the operation is reverted.
Parameters: data (dict) – Data to record. Returns: The newly created data. Return type: Model
-
delete(keys, context=True)[source]¶ Delete recorded data and update associations.
- The behavior depends on the type of keys:
- Record.ElementIdentifier: delete the record with that element identifier.
- dict: delete all records with attributes matching keys.
- list or tuple: delete all records matching the elements of keys.
bool(keys) == False: raise ValueError.
Invokes the on_delete callback after the data is deleted. If this callback raises an exception then the operation is reverted.
Parameters: - keys (dict) – Attributes to match.
- keys – Fields or element identifiers to match.
-
exists(keys, context=True)[source]¶ Check if a record exists.
Parameters: keys – See AbstractStorage.exists.Returns: True if a record matching keys exists, False otherwise. Return type: bool
-
classmethod
export_records(keys=None, eids=None)[source]¶ Export data records.
Constructs a dictionary containing records matching keys or eids and all their associated records. Association fields (model and collection) are not updated and may contain eids of undefined records.
Parameters: Returns: Dictionary of tables containing records.
Return type: Example:
{ 'Brewery': {100: {'address': '4615 Hollins Ferry Rd, Halethorpe, MD 21227', 'brews': [10, 12, 14]}}, 'Beer': {10: {'origin': 100, 'color': 'gold', 'ibu': 45}, 12: {'origin': 100, 'color': 'dark', 'ibu': 15}, 14: {'origin': 100, 'color': 'pale', 'ibu': 30}} } Beer.export_records(eids=[10]) { 'Brewery': {100: {'address': '4615 Hollins Ferry Rd, Halethorpe, MD 21227', 'brews': [10, 12, 14]}}, 'Beer': {10: {'origin': 100, 'color': 'gold', 'ibu': 45}} }
-
messages= {}¶
-
populate(model, attribute=None, defaults=False, context=True)[source]¶ Merges associated data into the model record.
Example
Suppose we have the following Person records:
1: {'name': 'Katie', 'friends': [2, 3]} 2: {'name': 'Ryan', 'friends': [1]} 3: {'name': 'John', 'friends': [1]}
Populating
Person({'name': 'Katie', 'friends': [2, 3]})produces this dictionary:{'name': 'Katie', 'friends': [Person({'name': 'Ryan', 'friends': [1]}), Person({'name': 'John', 'friends': [1]}]})
Parameters: Returns: If attribute is None, a dictionary of controlled data merged with associated records. If attribute is not None, the value of the populated attribute.
Raises: KeyError– attribute is undefined in the record.
-
unset(fields, keys)[source]¶ Unset recorded data fields and update associations.
- The behavior depends on the type of keys:
- Record.ElementIdentifier: update the record with that element identifier.
- dict: update all records with attributes matching keys.
- list or tuple: apply update to all records matching the elements of keys.
bool(keys) == False: raise ValueError.
Invokes the on_update callback after the data is modified. If this callback raises an exception then the operation is reverted.
Parameters: - fields (list) – Names of fields to unset.
- keys – Fields or element identifiers to match.
-
update(data, keys)[source]¶ Change recorded data and update associations.
- The behavior depends on the type of keys:
- Record.ElementIdentifier: update the record with that element identifier.
- dict: update all records with attributes matching keys.
- list or tuple: apply update to all records matching the elements of keys.
bool(keys) == False: raise ValueError.
Invokes the on_update callback after the data is modified. If this callback raises an exception then the operation is reverted.
Parameters: - data (dict) – New data for existing records.
- keys – Fields or element identifiers to match.
-
-
taucmdr.mvc.controller.contextualize(function)[source]¶ Decorator that filters a controller method’s returned records by context requirements.
Wraps the decorated function so that its result (a dict or list of records) is filtered to include only records matching the controller’s active context. Context is a list of (key, value) requirements checked via
valid().
