| 91 | db.session.add(self) |
| 92 | |
| 93 | def update(self, data, authz): |
| 94 | self.label = data.get("label", self.label) |
| 95 | self.summary = data.get("summary", self.summary) |
| 96 | self.publisher = data.get("publisher", self.publisher) |
| 97 | self.publisher_url = data.get("publisher_url", self.publisher_url) |
| 98 | if self.publisher_url is not None: |
| 99 | self.publisher_url = stringify(self.publisher_url) |
| 100 | self.info_url = data.get("info_url", self.info_url) |
| 101 | if self.info_url is not None: |
| 102 | self.info_url = stringify(self.info_url) |
| 103 | self.data_url = data.get("data_url", self.data_url) |
| 104 | if self.data_url is not None: |
| 105 | self.data_url = stringify(self.data_url) |
| 106 | countries = ensure_list(data.get("countries", self.countries)) |
| 107 | self.countries = [registry.country.clean(val) for val in countries] |
| 108 | languages = ensure_list(data.get("languages", self.languages)) |
| 109 | self.languages = [registry.language.clean(val) for val in languages] |
| 110 | self.frequency = data.get("frequency", self.frequency) |
| 111 | self.restricted = data.get("restricted", self.restricted) |
| 112 | self.xref = data.get("xref", self.xref) |
| 113 | self.updated_at = datetime.utcnow() |
| 114 | |
| 115 | # Some fields are editable only by admins in order to have |
| 116 | # a strict separation between source evidence and case |
| 117 | # material. |
| 118 | if authz.is_admin: |
| 119 | self.category = data.get("category", self.category) |
| 120 | creator = ensure_dict(data.get("creator")) |
| 121 | creator_id = data.get("creator_id", creator.get("id")) |
| 122 | creator = Role.by_id(creator_id) |
| 123 | if creator is not None: |
| 124 | self.creator = creator |
| 125 | |
| 126 | db.session.add(self) |
| 127 | db.session.flush() |
| 128 | |
| 129 | @property |
| 130 | def team_id(self): |