Source code for arx.bundle

from schematics.exceptions import ValidationError
from schematics.types import StringType
from schematics.types.compound import DictType, ListType, ModelType

from .inner.schematics import Model, SourceType


class Ctx(Model):
    label = StringType()
    cwd = StringType()
    env = DictType(StringType)


[docs]class Code(Ctx): source = SourceType() cmd = StringType() args = ListType(StringType, default=[]) def validate_cmd_and_source(self): if bool(self.source) == bool(self.cmd): raise ValidationError('One of either Code.source or Code.cmd ' 'must be set -- but not both.')
[docs]class Data(Ctx): source = SourceType(required=True) target = StringType()
[docs]class Bundle(Ctx): code = ListType(ModelType(Code)) data = ListType(ModelType(Data)) def __iadd__(self, arg): for cls, col in [(Code, self.code), (Data, self.data)]: if isinstance(arg, cls): col += [arg] return self raise TypeError('Bundles can only append Code or Data instances.') def __isub__(self, arg): for cls, col in [(Code, self.code), (Data, self.data)]: if isinstance(arg, cls): for idx in [i for i, el in enumerate(col) if arg == el]: del col[idx] return self raise TypeError('Bundles can only remove Code or Data instances.')