Пример #1
0
    def encrypt(self, repo_slug, value):
        """Encrypt value using a repository's public key."""
        key = RSA.importKey(self.repo_key(repo_slug))
        cipher = PKCS1_v1_5.new(key)
        return base64.b64encode(cipher.encrypt(value))

        try:
            res = self.v3client.get('{}/repo/{}/key'.format(V3URI, repo_slug))
            return get_response_contents(res)
        except Exception as e:
            res = self.v3client.post('{}/repo/{}/key'.format(V3URI, repo_slug))
            return get_response_contents(res)
Пример #2
0
    def find_one3(cls, session, entity_id, **kwargs):
        from travispy.entities import COMMAND_TO_ENTITY
        command = cls.one()
        #print(command)
        #print(**kwargs)
        #print(entity_id)
        #print(cls)
        response = session.get(
            session.uri +
            cls._find_one_command(command, str(entity_id), **kwargs))
        #print("contents",response.json())
        contents = get_response_contents(response)
        #print("step1",contents)
        result = cls._load(contents, session)[0]
        #print("step2",result)
        for name in contents.keys():
            #print(name)
            # Unknown entity.
            if name not in COMMAND_TO_ENTITY:
                continue

            entity_class = COMMAND_TO_ENTITY[name]
            #print(entity_class)
            dependency = entity_class._load(contents[name], session)
            if name == entity_class.one():
                dependency = dependency[0]
            setattr(result, name, dependency)
            result._data[name] = dependency
        return result
def test_get_response_contents():
    response = Response()
    response.status_code = 111
    response._content = b'foo'
    with pytest.raises(TravisError) as exception_info:
        get_response_contents(response)
    assert str(exception_info.value) == '[111] foo'

    response._content = ''
    with pytest.raises(TravisError) as exception_info:
        get_response_contents(response)
    assert str(exception_info.value) == textwrap.dedent('''
        [111] Unexpected error
            Possible reasons are:
             - Communication with Travis CI has failed.
             - Insufficient permissions.
             - Invalid contents returned.
    ''')[1:]

    response._content = b'{"error": "foo"}'
    with pytest.raises(TravisError) as exception_info:
        get_response_contents(response)
    assert str(exception_info.value) == '[111] foo'

    response.status_code = 200
    assert get_response_contents(response) == {'error': 'foo'}
Пример #4
0
 def cron_enable(self,
                 repo_slug,
                 branch,
                 interval='weekly',
                 dont_run_if_recent_build_exists=True):
     """Enable cron for specific branc on a repository."""
     repo_id = self.repo(repo_slug).id
     endpoint = '{}/repo/{}/branch/{}/cron'.format(V3URI, repo_id, branch)
     res = self.v3client.post(endpoint,
                              json={
                                  'interval': interval,
                                  'dont_run_if_recent_build_exists': True,
                              })
     return get_response_contents(res)
Пример #5
0
    def find_many(cls, session, **kwargs):
        '''
        Method responsible for returning as many as possible matches for current class.

        :type session: :class:`.Session`
        :param session:
            Session that must be used to search for results.

        :rtype: list(:class:`.Entity`)

        :raises TravisError: when response has status code different than 200.
        '''
        from travispy.entities import COMMAND_TO_ENTITY

        count = 0
        for param in cls._FIND_MANY_EXCLUSIVE_PARAMETERS:
            if param in kwargs:
                count += 1

        if count != 1 and len(cls._FIND_MANY_EXCLUSIVE_PARAMETERS) > 0:
            exclusive_parameters = '", "'.join(
                cls._FIND_MANY_EXCLUSIVE_PARAMETERS)
            raise RuntimeError('You have to supply either "%s".' %
                               exclusive_parameters)

        command = cls.many()
        response = session.get(session.uri + '/%s' % command, params=kwargs)

        dependencies_result = {}
        contents = get_response_contents(response)

        # Retrieving information from Travis and loading into respective classes.
        infos = contents.pop(command, [])
        result = cls._load(infos, session)

        for name in contents.keys():
            #print("DEBUG",name)
            if name in COMMAND_TO_ENTITY:
                entity_class = COMMAND_TO_ENTITY[name]
                dependencies_result[entity_class.one()] = \
                                                          entity_class._load(contents[name], session)

        # Injecting dependencies into main objects.
        for i, entity in enumerate(result):
            for dependency_name, dependencies in dependencies_result.items():
                setattr(entity, dependency_name, dependencies[i])
                result._data[dependency_name] = dependencies[i]

        return result
Пример #6
0
    def find_one2(cls, session, entity_id, **kwargs):
        '''
        Method responsible for returning exactly one instance of current class.

        :type session: :class:`.Session`
        :param session:
            Session that must be used to search for result.

        :param int entity_id:
            The ID of the entity.

        :rtype: :class:`.Entity`

        :raises TravisError: when response has status code different than 200.
        '''
        from travispy.entities import COMMAND_TO_ENTITY

        command = cls.one()
        print(command)
        print(**kwargs)
        print(entity_id)
        print(cls)
        response = session.get(session.uri +
                               cls._find_one_command2(command, **kwargs))
        print(response)
        print(response.json())
        contents = get_response_contents(response)
        #if command not in contents:
        #    return

        #info = contents.pop(command, {})
        result = cls._load(contents, session)[0]

        for name in contents.keys():

            # Unknown entity.
            if name not in COMMAND_TO_ENTITY:
                continue

            entity_class = COMMAND_TO_ENTITY[name]
            dependency = entity_class._load(contents[name], session)
            if name == entity_class.one():
                dependency = dependency[0]

            setattr(result, name, dependency)
            result._data[name] = dependency
            #result.

        return result
Пример #7
0
    def find_one(cls, session, entity_id, **kwargs):
        '''
        Method responsible for returning exactly one instance of current class.

        :type session: :class:`.Session`
        :param session:
            Session that must be used to search for result.

        :param int entity_id:
            The ID of the entity.

        :rtype: :class:`.Entity`

        :raises TravisError: when response has status code different than 200.
        '''
        from travispy.entities import COMMAND_TO_ENTITY

        command = cls.one()
        response = session.get(
            session.uri +
            cls._find_one_command(cls.many(), str(entity_id), **kwargs)
        )

        contents = get_response_contents(response)
        if command not in contents:
            return

        info = contents.pop(command, {})
        result = cls._load(info, session)[0]

        for name in contents.keys():

            # Unknown entity.
            if name not in COMMAND_TO_ENTITY:
                continue

            entity_class = COMMAND_TO_ENTITY[name]
            dependency = entity_class._load(contents[name], session)
            if name == entity_class.one():
                dependency = dependency[0]

            setattr(result, name, dependency)

        return result
Пример #8
0
    def find_many(cls, session, **kwargs):
        '''
        Method responsible for returning as many as possible matches for current class.

        :type session: :class:`.Session`
        :param session:
            Session that must be used to search for results.

        :rtype: list(:class:`.Entity`)

        :raises TravisError: when response has status code different than 200.
        '''
        from travispy.entities import COMMAND_TO_ENTITY

        count = 0
        for param in cls._FIND_MANY_EXCLUSIVE_PARAMETERS:
            if param in kwargs:
                count += 1

        if count != 1 and len(cls._FIND_MANY_EXCLUSIVE_PARAMETERS) > 0:
            exclusive_parameters = '", "'.join(cls._FIND_MANY_EXCLUSIVE_PARAMETERS)
            raise RuntimeError('You have to supply either "%s".' % exclusive_parameters)

        command = cls.many()
        response = session.get(session.uri + '/%s' % command, params=kwargs)

        dependencies_result = {}
        contents = get_response_contents(response)

        # Retrieving information from Travis and loading into respective classes.
        infos = contents.pop(command, [])
        result = cls._load(infos, session)

        for name in contents.keys():
            entity_class = COMMAND_TO_ENTITY[name]
            dependencies_result[entity_class.one()] = \
                entity_class._load(contents[name], session)

        # Injecting dependencies into main objects.
        for i, entity in enumerate(result):
            for dependency_name, dependencies in dependencies_result.items():
                setattr(entity, dependency_name, dependencies[i])

        return result
Пример #9
0
 def crons(self, repo_slug):
     """List enabled crons."""
     repo_id = self.repo(repo_slug).id
     res = self.v3client.get('{}/repo/{}/crons'.format(V3URI, repo_id))
     return (AttrDict(c) for c in get_response_contents(res)['crons'])