def test_search(): """ SmartAPI.exists(_id) SmartAPI.find(slug) SmartAPI.find(val, field) """ assert SmartAPI.exists(MYGENE_ID) assert SmartAPI.exists(MYCHEM_ID) assert SmartAPI.find('mygene') == MYGENE_ID assert SmartAPI.find('mychem') == MYCHEM_ID assert SmartAPI.find('tester', 'username') assert SmartAPI.find('gene', 'tags.name') == MYGENE_ID assert SmartAPI.find('drug', 'tags.name') == MYCHEM_ID assert SmartAPI.find(MYGENE_URL, 'url') == MYGENE_ID assert SmartAPI.find(MYCHEM_URL, 'url') == MYCHEM_ID
async def post(self): """ Add an API document """ if SmartAPI.find(self.args.url, "url"): raise HTTPError(409) try: file = await download_async(self.args.url) except DownloadError as err: raise BadRequest(details=str(err)) from err try: smartapi = SmartAPI(self.args.url) smartapi.raw = file.raw smartapi.validate() except (ControllerError, AssertionError) as err: raise BadRequest(details=str(err)) from err if self.args.dryrun: raise Finish({ 'success': True, 'details': f"[Dryrun] Valid {smartapi.version} Metadata" }) try: smartapi.username = self.current_user['login'] smartapi.refresh(file) # populate webdoc meta _id = smartapi.save() except ControllerError as err: raise BadRequest(details=str(err)) from err else: self.finish({'success': True, '_id': _id}) await self._notify(smartapi)
def test_save(openapi): """ SmartAPI.slug.validate(slug) smartapi.slug smartapi.save() """ _t0 = datetime.now(timezone.utc) time.sleep(0.1) URL = "http://example.com/valid.json" with pytest.raises(ValueError): SmartAPI.slug.validate("a") with pytest.raises(ValueError): SmartAPI.slug.validate("AAA") with pytest.raises(ValueError): SmartAPI.slug.validate("www") with pytest.raises(ValueError): SmartAPI.slug.validate("^_^") with open(os.path.join(dirname, './validate/openapi-pass.json'), 'rb') as file: raw = file.read() smartapi = SmartAPI(URL) with pytest.raises(ControllerError): smartapi.raw = None smartapi.raw = raw smartapi.slug = "mygene" smartapi.validate() with pytest.raises(ControllerError): smartapi.save() smartapi.username = "******" with pytest.raises(ConflictError): smartapi.save() smartapi.slug = "mychem" with pytest.raises(ConflictError): smartapi.save() smartapi.slug = "openapi" smartapi.save() refresh() assert SmartAPI.find("openapi") == smartapi._id assert smartapi.date_created > _t0 assert smartapi.last_updated > _t0 assert smartapi.date_created == smartapi.last_updated apidoc = APIDoc.get(smartapi._id) assert apidoc._meta.date_created == smartapi.date_created assert apidoc._meta.last_updated == smartapi.last_updated _t1 = smartapi.date_created smartapi.save() # no change refresh() assert SmartAPI.find("openapi") == smartapi._id assert smartapi.date_created == _t1 assert smartapi.last_updated == _t1 assert smartapi.date_created == smartapi.last_updated apidoc = APIDoc.get(smartapi._id) assert apidoc._meta.date_created == smartapi.date_created assert apidoc._meta.last_updated == smartapi.last_updated smartapi.slug = None smartapi.save() refresh() assert not SmartAPI.find("openapi") found = SmartAPI.get(openapi) assert dict(smartapi) == dict(found) assert smartapi.username == found.username assert smartapi.slug == found.slug assert smartapi.url == found.url assert smartapi.date_created == _t1 assert smartapi.last_updated == _t1 assert smartapi.date_created == smartapi.last_updated apidoc = APIDoc.get(smartapi._id) assert apidoc._meta.date_created == smartapi.date_created assert apidoc._meta.last_updated == smartapi.last_updated smartapi.raw = raw # should trigger ts update smartapi.save() refresh() assert smartapi.date_created == _t1 assert smartapi.last_updated > _t1 apidoc = APIDoc.get(smartapi._id) assert apidoc._meta.date_created == smartapi.date_created assert apidoc._meta.last_updated == smartapi.last_updated
def test_update_slug(self): mygene = SmartAPI.get(MYGENE_ID) assert mygene.slug == "mygene" self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "mygeeni"}, expect=401) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "mygeeni"}, headers=self.evil_user, expect=403) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "my"}, headers=self.auth_user, expect=400) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "www"}, headers=self.auth_user, expect=400) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "MYGENE"}, headers=self.auth_user, expect=400) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "mygene!!"}, headers=self.auth_user, expect=400) self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "mygeeni"}, headers=self.auth_user) refresh() assert not SmartAPI.find("mygene") assert SmartAPI.find("mygeeni") self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": ""}, headers=self.auth_user) refresh() assert not SmartAPI.find("mygeeni") assert not SmartAPI.find("mygene") self.request("/api/metadata/" + MYGENE_ID, method='PUT', data={"slug": "mygene"}, headers=self.auth_user) refresh() assert not SmartAPI.find("mygeeni") assert SmartAPI.find("mygene") # teardown refresh() if not SmartAPI.find("mygene"): mygene = APIDoc(meta={'id': MYGENE_ID}, **MYGENE_ES) mygene._raw = decoder.compress(MYGENE_RAW) mygene.save()