def test_get(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query_doc.get('key1')

        query_doc.make_request.assert_called_once_with(
            method='GET', uri='queries/key1')
    def test_put(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query_doc.put('key1', {'query_doc': 1})

        query_doc.make_request.assert_called_once_with(
            method='PUT', uri='queries/key1/', data={'query_doc': 1})
    def test_post(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query_doc.post({'query_doc': 1})

        query_doc.make_request.assert_called_once_with(
            method='POST', uri='queries/', data={'query_doc': 1})
    def test_execute_with_variable(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query_doc.execute('key1', 'variable')

        query_doc.make_request.assert_called_once_with(
            method='GET', uri='queries/key1/execute/?variable=variable')
    def test_delete(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query_doc.delete('key1')

        query_doc.make_request.assert_called_once_with(
            method='DELETE', uri='queries/key1/')
Exemple #6
0
 def generate_auth(self):
     LOGGER.info('New Auth')
     self.auth = auth.Auth(api_url=self.host,
                           username=GLOBOMAP_API_USERNAME,
                           password=GLOBOMAP_API_PASSWORD)
     self.doc = Document(auth=self.auth)
     self.query = Query(auth=self.auth)
 def test_list_with_pagination(self):
     query_doc = Query(Mock())
     query_doc.make_request = Mock()
     query_doc.list(20, 2)
     params = {
         'per_page': 20,
         'page': 2
     }
     query_doc.make_request.assert_called_once_with(
         method='GET', uri='queries/', params=params)
    def test_search(self):
        query_doc = Query(Mock())
        query_doc.make_request = Mock()
        query = [[{'field': 'name', 'operator': 'LIKE', 'value': 'test'}]]
        query_doc.search(query, 20, 2)

        params = {
            'query': json.dumps(query),
            'per_page': 20,
            'page': 2
        }
        query_doc.make_request.assert_called_once_with(
            method='GET', uri='queries/', params=params)
import os
from globomap_api_client.auth import Auth
from globomap_api_client.collection import Collection
from globomap_api_client.edge import Edge
from globomap_api_client.graph import Graph
from globomap_api_client.query import Query

GMAP_API_PORT = os.getenv('GMAP_API_PORT', '7002')

auth_inst = Auth(api_url='http://localhost:{}'.format(GMAP_API_PORT),
                 username='******',
                 password='******')
coll = Collection(auth=auth_inst)
edge = Edge(auth=auth_inst)
graph = Graph(auth=auth_inst)
query = Query(auth=auth_inst)
coll.post({
    'name': 'vip',
    'alias': 'vip',
    'icon': 'icon',
})
coll.post({
    'name': 'vm',
    'alias': 'vm',
    'icon': 'icon',
})
coll.post({
    'name': 'network',
    'alias': 'network',
    'icon': 'icon',
})
Exemple #10
0
class GloboMapClient(object):
    def __init__(self, host):
        self.host = host
        self.generate_auth()

    def generate_auth(self):
        LOGGER.info('New Auth')
        self.auth = auth.Auth(api_url=self.host,
                              username=GLOBOMAP_API_USERNAME,
                              password=GLOBOMAP_API_PASSWORD)
        self.doc = Document(auth=self.auth)
        self.query = Query(auth=self.auth)

    def update_element_state(self,
                             action,
                             type,
                             collection,
                             element,
                             key,
                             retries=0):

        try:
            if action.upper() == 'CREATE':
                return self.create(type, collection, element)
            elif action.upper() == 'UPDATE':
                return self.update(type, collection, key, element)
            elif action.upper() == 'PATCH':
                return self.patch(type, collection, key, element)
            elif action.upper() == 'DELETE':
                return self.delete(type, collection, key)
            elif action.upper() == 'CLEAR':
                return self.clear(type, collection, element)

        except exceptions.ValidationError as err:
            if '1200' in err.message['errors'] and retries < RETRIES:
                LOGGER.warning('Retry action %s %s %s %s %s', action, type,
                               collection, element, key)
                retries += 1
                time.sleep(2)
                self.update_element_state(action, type, collection, element,
                                          key, retries)
            else:
                LOGGER.error('Bad request in send element %s %s %s %s %s %s',
                             action, type, collection, element, key,
                             err.message)
                raise GloboMapException(err.message, err.status_code)

        except exceptions.Unauthorized as err:
            if retries < RETRIES:
                LOGGER.warning('Retry action %s %s %s %s %s', action, type,
                               collection, element, key)
                retries += 1
                self.generate_auth()
                time.sleep(5 + (retries * 5))
                self.update_element_state(action, type, collection, element,
                                          key, retries)
            else:
                LOGGER.error('Error send element %s %s %s %s %s', action, type,
                             collection, element, key)
                raise GloboMapException(err.message, err.status_code)

        except exceptions.Forbidden as err:
            LOGGER.error('Forbbiden send element %s %s %s %s %s', action, type,
                         collection, element, key)
            raise GloboMapException(err.message, err.status_code)

        except exceptions.ApiError as err:
            if retries < RETRIES:
                LOGGER.warning('Retry send element %s %s %s %s %s', action,
                               type, collection, element, key)
                retries += 1
                time.sleep(5 + (retries * 5))
                self.update_element_state(action, type, collection, element,
                                          key, retries)
            else:
                LOGGER.error('Error send element %s %s %s %s %s', action, type,
                             collection, element, key)
                raise GloboMapException(err.message, err.status_code)

    def create(self, type, collection, payload):
        try:
            return self.doc.post(type, collection, payload)

        except exceptions.NotFound as err:
            raise GloboMapException(err.message, err.status_code)

        except exceptions.DocumentAlreadyExists:
            LOGGER.warning('Element already insered')

    def update(self, type, collection, key, payload):
        try:
            return self.doc.put(type, collection, key, payload)

        except exceptions.NotFound:
            return self.create(type, collection, payload)

    def patch(self, type, collection, key, payload):
        try:
            return self.doc.patch(type, collection, key, payload)

        except exceptions.NotFound:
            return self.create(type, collection, payload)

    def delete(self, type, collection, key):
        try:
            return self.doc.delete(type, collection, key)

        except exceptions.NotFound:
            LOGGER.warning('Element %s already deleted', key)

    def clear(self, type, collection, payload):
        return self.doc.clear(type, collection, payload)

    def run_query(self, query_id, variable):
        return self.query.execute(query_id, variable)