def post(self, repository_id): repo = Repository.query.get(repository_id) if repo is None: return "", 404 args = self.parser.parse_args() if args.url: repo.url = args.url if args.backend: repo.backend = RepositoryBackend[args.backend] needs_import = False if args.status == "inactive": repo.status = RepositoryStatus.inactive elif args.status == "active" and repo.status == RepositoryStatus.inactive: repo.status = RepositoryStatus.active needs_import = True db.session.add(repo) db.session.commit() if needs_import: import_repo.delay_if_needed(repo_id=repo.id.hex, task_id=repo.id.hex) return self.respond(repo)
def post(self, repository_id): repo = Repository.query.get(repository_id) if repo is None: return '', 404 args = self.parser.parse_args() if args.url: repo.url = args.url if args.backend: repo.backend = RepositoryBackend[args.backend] needs_import = False if args.status == 'inactive': repo.status = RepositoryStatus.inactive elif args.status == 'active' and repo.status == RepositoryStatus.inactive: repo.status = RepositoryStatus.active needs_import = True db.session.add(repo) for name in OPTION_DEFAULTS.keys(): value = args[name] if value is None: continue # special case phabricator.callsign since we can't enforce a unique # constraint if name == 'phabricator.callsign': existing = ItemOption.query.filter( ItemOption.item_id != repo.id, ItemOption.name == name, ItemOption.value == value, ).first() if existing: return '{"error": "A repository already exists with the given Phabricator callsign"}', 400 create_or_update(ItemOption, where={ 'item_id': repo.id, 'name': name, }, values={ 'value': value, }) db.session.commit() if needs_import: import_repo.delay_if_needed( repo_id=repo.id.hex, task_id=repo.id.hex, ) context = self.serialize(repo) context['options'] = self._get_options(repo) return self.respond(context, serialize=False)