Beispiel #1
0
class Gitlab_Client:
    def __init__(self, url: str, access_token: str):
        self.url = url
        self.access_token = access_token
        self.url = urljoin(self.url, '/api/v4')
        self.doRequest = DoRequest(self.url)
        self.doRequest.updateHeaders({'PRIVATE-TOKEN': self.access_token})

    def get_projects(self,
                     page: int = 1,
                     per_page: int = 100,
                     search='',
                     simple=True):
        params = {'page': page, 'per_page': per_page}
        httpResponseResult = self.doRequest.get(
            '/projects?simple=%s&search=%s' % (simple, search), params=params)
        return ujson.loads(httpResponseResult.body)

    def _get_project_id(self, project_name: str):
        projects = self.get_projects(search=project_name)
        for project_info in projects:
            if project_info['name'] == project_name.strip():
                return project_info['id']

    def get_project_file(self, project_name, ref, file_path):
        """
        @param project_name:
        @param ref: 分支名、tag名、commit
        @param file_path:
        @return:
        """
        project_id = self._get_project_id(project_name)
        params = {'ref': ref}
        httpResponsResult = self.doRequest.get(
            '/projects/%s/repository/files/%s' % (project_id, file_path),
            params=params)
        return ujson.loads(httpResponsResult.body)

    def update_project_file(self, project_name: str, branch_name: str,
                            file_path: str, content: str, commit_message: str):
        """
        @param project_name:
        @param branch_name:
        @param file_path:
        @param content:
        @param commit_message:
        @return:
        """
        project_id = self._get_project_id(project_name)
        params = {
            'branch': branch_name,
            'content': content,
            'commit_message': commit_message
        }
        httpResponsResult = self.doRequest.put(
            '/projects/%s/repository/files/%s' % (project_id, file_path),
            params=params)
        return ujson.loads(httpResponsResult.body)
class Gitlab_Client:
    def __init__(self, url: str, username: str, password: str):
        self.url = url
        self.username = username
        self.password = password
        self.url = urljoin(self.url, '/api/v3')
        self.doRequest = DoRequest(self.url)
        self.private_token = self._get_private_token()
        self._path_private_token = '?private_token=%s' % self.private_token

    def _login(self):
        httpResponseResult = self.doRequest.post_with_form(
            '/session?login=%s&password=%s' % (self.username, self.password))
        return httpResponseResult

    def _get_private_token(self):
        user_info = self._login().body
        user_info = ujson.loads(user_info)
        return user_info['private_token']

    def get_user(self):
        return ujson.loads(self._login().body)

    def get_projects(self, page: int = 1, per_page: int = 100):
        params = {'page': 1, 'per_page': 100}
        httpResponseResult = self.doRequest.get('/projects%s' %
                                                self._path_private_token,
                                                params=params)
        return ujson.loads(httpResponseResult.body)

    def _get_project_id(self, project_name: str):
        projects = self.get_projects()
        for project_info in projects:
            if project_info['name'] == project_name.strip():
                return project_info['id']

    def get_project_tree(self, project_name: str):
        project_id = self._get_project_id(project_name)
        httpResponsResult = self.doRequest.get(
            '/projects/%s/repository/tree%s' %
            (project_id, self._path_private_token))
        return ujson.loads(httpResponsResult.body)

    def get_project_file(self, project_name, ref, file_path):
        """
        @param project_name:
        @param ref: 分支名、tag名、commit
        @param file_path:
        @return:
        """
        project_id = self._get_project_id(project_name)
        params = {'file_path': file_path, 'ref': ref}
        httpResponsResult = self.doRequest.get(
            '/projects/%s/repository/files%s' %
            (project_id, self._path_private_token),
            params=params)
        return ujson.loads(httpResponsResult.body)

    def update_project_file(self, project_name: str, branch_name: str,
                            file_path: str, content: str, commit_message: str):
        """
        @param project_name:
        @param branch_name:
        @param file_path:
        @param content:
        @param commit_message:
        @return:
        """
        project_id = self._get_project_id(project_name)
        params = {
            'file_path': file_path,
            'branch_name': branch_name,
            'content': content,
            'commit_message': commit_message
        }
        httpResponsResult = self.doRequest.put(
            '/projects/%s/repository/files%s' %
            (project_id, self._path_private_token),
            params=params)
        return ujson.loads(httpResponsResult.body)
Beispiel #3
0
class Disconf_Client:
    def __init__(self,
                 url: str,
                 username: str,
                 password: str,
                 is_verify_ssl_cer=True):
        self.url = url
        self.username = username
        self.password = password
        self.doRequest = DoRequest(self.url)
        self.doRequest.setVerify(is_verify_ssl_cer)
        self._login()

    def _login(self):
        params = {
            'name': 'admin_test',
            'password': '******',
            'remember': '1'
        }
        httpResponseResult = self.doRequest.post_with_form(
            '/api/account/signin', params)
        return ujson.loads(httpResponseResult.body)

    def get_app_list(self):
        httpResponseResult = self.doRequest.get('/api/app/list')
        app_list = ujson.loads(httpResponseResult.body)
        app_list = app_list['page']['result']
        return app_list

    def get_app_id(self, app_name: str):
        app_list = self.get_app_list()
        for app_info in app_list:
            if app_info['name'] == app_name:
                return app_info['id']

    def get_env_list(self):
        httpResponseResult = self.doRequest.get('/api/env/list')
        env_list = ujson.loads(httpResponseResult.body)
        env_list = env_list['page']['result']
        return env_list

    def get_env_id(self, env_name: str):
        env_list = self.get_env_list()
        for env_info in env_list:
            if env_info['name'] == env_name:
                return env_info['id']

    def get_version_list(self, app_id: int, env_id: int):
        params = {'appId': app_id, 'envid': env_id}
        httpResponseResult = self.doRequest.get('/api/web/config/versionlist',
                                                params)
        version_list = ujson.loads(httpResponseResult.body)
        version_list = version_list['page']['result']
        return version_list

    def get_config_list(self,
                        app_id: int,
                        env_id: int,
                        version: str,
                        pageSize: int = 50,
                        pageNo: int = 1):
        params = {
            'appId': app_id,
            'envId': env_id,
            'version': version,
            "page.pageSize": pageSize,
            "page.pageNo": pageNo
        }
        httpResponseResult = self.doRequest.get('/api/web/config/list', params)
        config_list = ujson.loads(httpResponseResult.body)
        config_list = config_list['page']['result']
        return config_list

    def get_config_id(self, app_name: str, env_name: str, version: str,
                      config_name: str):
        now_page = 1
        # 最多从500个文件获取
        while (not now_page > 10):
            config_list = self.get_config_list(self.get_app_id(app_name),
                                               self.get_env_id(env_name),
                                               version,
                                               pageSize=50,
                                               pageNo=now_page)
            for config_info in config_list:
                if config_info['key'] == config_name:
                    return config_info['configId']
            now_page += 1

    def get_config_info(self, config_id: int):
        httpResponseResult = self.doRequest.get('/api/web/config/%s' %
                                                config_id)
        config_info = ujson.loads(httpResponseResult.body)
        config_info = config_info['result']['value']
        return config_info

    def update_config_info(self, config_id: int, content: str):
        params = {'fileContent': content}
        httpResponseResult = self.doRequest.put(
            '/api/web/config/filetext/%s' % config_id, params)
        config_info = ujson.loads(httpResponseResult.body)
        return config_info