| 21 | |
| 22 | |
| 23 | class LinkSchema(ma.Schema): |
| 24 | |
| 25 | class Meta: |
| 26 | unknown = ma.EXCLUDE |
| 27 | |
| 28 | id = ma.fields.String(load_default='') |
| 29 | paw = ma.fields.String() |
| 30 | command = ma.fields.String() |
| 31 | plaintext_command = ma.fields.String() |
| 32 | status = ma.fields.Integer(load_default=-3) |
| 33 | score = ma.fields.Integer(load_default=0) |
| 34 | jitter = ma.fields.Integer(load_default=0) |
| 35 | decide = ma.fields.DateTime(format=BaseObject.TIME_FORMAT) |
| 36 | pin = ma.fields.Integer(load_default=0) |
| 37 | pid = ma.fields.String() |
| 38 | facts = ma.fields.List(ma.fields.Nested(FactSchema())) |
| 39 | relationships = ma.fields.List(ma.fields.Nested(RelationshipSchema())) |
| 40 | used = ma.fields.List(ma.fields.Nested(FactSchema())) |
| 41 | unique = ma.fields.String() |
| 42 | collect = ma.fields.DateTime(format=BaseObject.TIME_FORMAT, dump_default='') |
| 43 | finish = ma.fields.String() |
| 44 | ability = ma.fields.Nested(AbilitySchema()) |
| 45 | executor = ma.fields.Nested(ExecutorSchema()) |
| 46 | cleanup = ma.fields.Integer(load_default=0) |
| 47 | visibility = ma.fields.Nested(VisibilitySchema()) |
| 48 | host = ma.fields.String(load_default=None) |
| 49 | output = ma.fields.String() |
| 50 | deadman = ma.fields.Boolean() |
| 51 | agent_reported_time = ma.fields.DateTime(format=BaseObject.TIME_FORMAT, load_default=None) |
| 52 | |
| 53 | @ma.pre_load() |
| 54 | def fix_ability(self, link, **_): |
| 55 | if 'ability' in link and isinstance(link['ability'], Ability): |
| 56 | ability = link.pop('ability') |
| 57 | link['ability'] = ability.schema.dump(ability) |
| 58 | return link |
| 59 | |
| 60 | @ma.pre_load() |
| 61 | def fix_executor(self, link, **_): |
| 62 | if 'executor' in link and isinstance(link['executor'], Executor): |
| 63 | executor = link.pop('executor') |
| 64 | link['executor'] = executor.schema.dump(executor) |
| 65 | return link |
| 66 | |
| 67 | @ma.pre_load() |
| 68 | def remove_properties(self, data, **_): |
| 69 | data.pop('unique', None) |
| 70 | data.pop('decide', None) |
| 71 | data.pop('pid', None) |
| 72 | data.pop('facts', None) |
| 73 | data.pop('collect', None) |
| 74 | data.pop('finish', None) |
| 75 | data.pop('visibility', None) |
| 76 | data.pop('output', None) |
| 77 | data.pop('used.unique', None) |
| 78 | return data |
| 79 | |
| 80 | @ma.post_load() |
no test coverage detected