def put(self, source_name): helper = RequestHelper(self) source_name = urllib.unquote(source_name) success, values = read_json_fields(helper, "url", "active", logger=logging) if not success: return url, active = values # a Feed must be sole owner of an ArtifactSource; # fails if source already exists and is already linked to a feed source = ArtifactSourceAccessor.get_by_name(source_name, return_none=True) if source: source_feed_key = Feed.get_by_source(source, keys_only=True, return_none=True) if source_feed_key: msg = "source '%s' is referenced by feed %s" % (source_name, source_feed_key.name()) helper.error(409, msg) else: source = ArtifactSourceAccessor.create(source_name) # creates UrlResource if necessary resource = UrlResourceAccessor.get_by_url(url, return_none=True) if not resource: resource = UrlResourceAccessor.create(url) # create or update Feed feed = Feed.get_by_source_name(source_name, return_none=True) if feed: feed.artifact_source = source feed.url_resource = resource feed.put() else: Feed.create(source_name, artifact_source=source, url=url, url_resource=resource, active=bool(active)) helper.set_status(204)
def get(self, name, **kw): helper = RequestHelper(self) source = ArtifactSourceAccessor.get_by_name(name, return_none=True) if not source: helper.error(404) return helper.write_json(source_hash(source))
def put(self, name, **kw): helper = RequestHelper(self) source = ArtifactSourceAccessor.get_by_name(name, return_none=True) if source: helper.set_status(409, "duplicate ArtifactSouce") return ArtifactSourceAccessor.create(name) helper.set_status(204)