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)
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