コード例 #1
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def openapi():
    yield '5f5141cbae5ca099d3f420f9c42c94cf'
    refresh()
    try:  # teardown
        APIDoc.get('5f5141cbae5ca099d3f420f9c42c94cf').delete()
    except elasticsearch.exceptions.NotFoundError:
        pass
コード例 #2
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def test_delete(myvariant):

    mv = SmartAPI.get(myvariant)
    mv.delete()

    refresh()

    assert not APIDoc.exists(myvariant)

    URL = "http://example.com/valid.json"
    with open(os.path.join(dirname, './validate/openapi-pass.json'), 'rb') as file:
        smartapi = SmartAPI(URL)
        smartapi.raw = file.read()
        with pytest.raises(NotFoundError):
            smartapi.delete()
コード例 #3
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def setup_fixture():
    """
    Index 2 documents.
    """
    reset()
    # save initial docs with paths already transformed
    mygene = APIDoc(meta={'id': MYGENE_ID}, **MYGENE_ES)
    mygene._raw = decoder.compress(MYGENE_RAW)
    mygene.save()

    mychem = APIDoc(meta={'id': MYCHEM_ID}, **MYCHEM_ES)
    mychem._raw = decoder.compress(MYCHEM_RAW)
    mychem.save()

    # refresh index
    refresh()
コード例 #4
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def test_uptime_status():
    mygene = SmartAPI.get(MYGENE_ID)
    assert mygene.uptime.status[0] is None

    mygene.uptime.update(('good', None))
    assert mygene.uptime.status[0] == 'good'
    mygene.save()
    refresh()
    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.uptime_status == 'good'

    mygene.uptime.update((None, None))
    assert mygene.uptime.status[0] is None
    mygene.save()
    refresh()
    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.uptime_status is None
コード例 #5
0
def setup():
    """
    setup state called once for the class
    """
    reset()

    mygene = SmartAPI(MYGENE_URL)
    mygene.username = '******'
    mygene.refresh()
    mygene.check()
    mygene.save()

    mychem = SmartAPI(MYCHEM_URL)
    mychem.username = '******'
    mychem.refresh()
    mychem.check()
    mychem.save()

    refresh()
コード例 #6
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def myvariant():

    with open(os.path.join(dirname, 'myvariant.es.json'), 'r') as file:
        MYVARIANT_ES = json.load(file)
    with open(os.path.join(dirname, 'myvariant.yml'), 'rb') as file:
        MYVARIANT_RAW = file.read()
    MYVARIANT_ID = MYVARIANT_ES.pop("_id")

    myvariant = APIDoc(meta={'id': MYVARIANT_ID}, **MYVARIANT_ES)
    myvariant._raw = decoder.compress(MYVARIANT_RAW)
    myvariant.save()

    refresh()
    yield MYVARIANT_ID
    refresh()

    try:
        APIDoc.get(MYVARIANT_ID).delete()
    except elasticsearch.exceptions.NotFoundError:
        pass
コード例 #7
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def test_uptime_update():

    mygene = SmartAPI.get(MYGENE_ID)
    mygene.check()  # minimum api document
    assert mygene.uptime.status[0] == 'unknown'  # TODO VERIFY THIS IS IN FACT CORRECT

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.uptime_status == 'unknown'

    mychem = SmartAPI.get(MYCHEM_ID)
    mychem.check()  # full api document
    assert mychem.uptime.status[0] == 'unknown'

    mychem.save()
    refresh()

    mychem_doc = APIDoc.get(MYCHEM_ID)
    assert mychem_doc._status.uptime_status == 'unknown'
コード例 #8
0
def setup_fixture():
    """
    Index 2 documents.
    """
    reset()

    # save initial docs with paths already transformed
    mygene = SmartAPI(MYGENE_URL)
    mygene.raw = MYGENE_RAW
    mygene.username = '******'
    mygene.slug = 'mygene'
    mygene.save()

    mychem = SmartAPI(MYCHEM_URL)
    mychem.raw = MYCHEM_RAW
    mychem.username = '******'
    mychem.slug = 'mychem'
    mychem.save()

    # refresh index
    refresh()
コード例 #9
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def test_refresh_update():

    mychem = SmartAPI.get(MYCHEM_ID)
    assert mychem.webdoc.status is None

    # NOTE
    # the following update and the updates thereafter will be applied
    # https://github.com/NCATS-Tangerine/translator-api-registry/commit/b01baa5

    mychem.refresh()
    assert mychem.webdoc.status == 299  # new version
    assert mychem.webdoc.timestamp > datetime(2020, 1, 1, tzinfo=timezone.utc)
    _ts0 = mychem.webdoc.timestamp

    mychem.refresh()
    assert mychem.webdoc.status == 200  # already latest
    assert mychem.webdoc.timestamp >= _ts0  # could be cached internally

    mychem.save()
    refresh()
    mychem_doc = APIDoc.get(MYCHEM_ID)
    assert mychem_doc._status.refresh_status == 200
コード例 #10
0
    def test_post(self):

        _ID = '1ad2cba40cb25cd70d00aa8fba9cfaf3'
        VALID_V3_URL = \
            'https://raw.githubusercontent.com/schurerlab/'\
            'smartAPIs/master/LINCS_Data_Portal_smartAPIs.yml'

        try:
            smartapi = SmartAPI.get(_ID)
            smartapi.delete()
            refresh()
        except NotFoundError:
            pass

        self.request("/api/metadata/",
                     method='POST',
                     data={'url': VALID_V3_URL},
                     expect=401)
        self.request("/api/metadata/",
                     method='POST',
                     data={'url': MYGENE_URL},
                     headers=self.auth_user,
                     expect=409)
        self.request("/api/metadata/",
                     method='POST',
                     headers=self.auth_user,
                     expect=400)
        self.request("/api/metadata/",
                     method='POST',
                     data={'url': "http://invalidhost/file"},
                     headers=self.auth_user,
                     expect=400)
        self.request("/api/metadata/",
                     method='POST',
                     data={
                         'url': VALID_V3_URL,
                         'dryrun': True
                     },
                     headers=self.auth_user)
        refresh()
        assert not SmartAPI.exists(_ID)
        self.request("/api/metadata/",
                     method='POST',
                     data={'url': VALID_V3_URL},
                     headers=self.auth_user)
        refresh()
        assert SmartAPI.exists(_ID)

        try:
            smartapi = SmartAPI.get(_ID)
            smartapi.delete()
        except NotFoundError:
            pass
コード例 #11
0
    def test_delete(self):

        # setup
        assert SmartAPI.exists(MYGENE_ID)

        self.request("/api/metadata/" + MYGENE_ID, method='DELETE', expect=401)
        self.request("/api/metadata/" + MYGENE_ID,
                     method='DELETE',
                     headers=self.evil_user,
                     expect=403)
        self.request("/api/metadata/" + MYGENE_ID,
                     method='DELETE',
                     headers=self.auth_user)

        refresh()
        assert not SmartAPI.exists(MYGENE_ID)

        # teardown
        refresh()
        if not SmartAPI.exists(MYGENE_ID):  # recover the deleted file
            mygene = APIDoc(meta={'id': MYGENE_ID}, **MYGENE_ES)
            mygene._raw = decoder.compress(MYGENE_RAW)
            mygene.save()
        refresh()
コード例 #12
0
ファイル: test_controller.py プロジェクト: colleenXu/smartAPI
def test_refresh_status():

    with open(os.path.join(dirname, 'mygene_full.yml'), 'rb') as file:
        MYGENE_FULL = file.read()

    mygene = SmartAPI.get(MYGENE_ID)  # minimum
    assert mygene.webdoc.status is None
    assert 'components' not in mygene

    mygene.webdoc.update(File(200, MYGENE_FULL, None, None))  # new content

    assert mygene.webdoc.status == 299  # updated
    assert 'components' in mygene
    assert mygene.webdoc.timestamp > datetime(2020, 1, 1)
    _ts0 = mygene.webdoc.timestamp

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.refresh_status == 299
    assert 'components' in mygene_doc

    mygene.webdoc.update(File(200, MYGENE_FULL, None, None))  # no change

    assert mygene.webdoc.status == 200  # latest
    assert 'components' in mygene
    assert mygene.webdoc.timestamp > _ts0

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.refresh_status == 200
    assert 'components' in mygene_doc

    mygene.webdoc.update(File(404, None, None, None))  # link broken

    assert mygene.webdoc.status == 404
    assert 'components' in mygene  # do not affect main copy

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.refresh_status == 404
    assert 'components' in mygene_doc

    mygene.webdoc.update(File(200, MYGENE_FULL, None, None))  # link back working

    assert mygene.webdoc.status == 200  # latest
    assert 'components' in mygene

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.refresh_status == 200
    assert 'components' in mygene_doc

    mygene.webdoc.update(File(200, b'{"openapi":"3.0.0"}', None, None))  # invalid

    assert mygene.webdoc.status == 499  # invalid
    assert 'components' in mygene  # do not affect main copy

    mygene.save()
    refresh()

    mygene_doc = APIDoc.get(MYGENE_ID)
    assert mygene_doc._status.refresh_status == 499
    assert 'components' in mygene_doc
コード例 #13
0
ファイル: test_controller.py プロジェクト: colleenXu/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
コード例 #14
0
ファイル: test_model.py プロジェクト: colleenXu/smartAPI
def setup_fixture():
    client.delete(ES_INDEX_NAME, "doc0", ignore=404)
    client.delete(ES_INDEX_NAME, "doc1", ignore=404)
    client.create(ES_INDEX_NAME, "doc1", MYGENE)
    refresh()
コード例 #15
0
ファイル: migrate.py プロジェクト: colleenXu/smartAPI
            smartapi.username = doc['_source']['_meta']['github_username']
            smartapi.slug = doc['_source']['_meta'].get('slug')
            smartapi.save()
    print()


def update():

    for doc in scan(Elasticsearch(ES_DESTINATION),
                    query={"query": {
                        "match_all": {}
                    }},
                    index="smartapi_docs",
                    scroll="60m"):
        print(doc["_id"])
        smartapi = SmartAPI.get(doc["_id"])
        print(smartapi.check())
        print(smartapi.refresh())
        if smartapi.webdoc.status == 299:
            smartapi.webdoc._status = 200  # change status not reliable during migration
        smartapi.save()
    print()


if __name__ == "__main__":
    input('Will reset smartapi_docs index. Ctrl-C to cancel.')
    indices.reset()
    migrate()
    indices.refresh()
    update()
コード例 #16
0
    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()