def gen_leader_data(lea_addr): res, err = rest.get(lea_addr) if err is not None: return {} info = LeaderInfo.make(res.json()["info"]) url = "{0}subordinates".format(lea_addr) res, err = rest.get(url) if err is not None: return {} subs = res.json()["subordinates"] sub_info_list = [SoldierInfo.make(s) for s in subs] return { "text": "Leader: {0}({1}) at {2}".format(info.name, info.id, info.place), "icon": "troops leader", "href": info.endpoint, "nodes": [ { "text": "missions", "nodes": [gen_mission_data(m) for m in info.missions] }, { "text": "subordinates", "nodes": [gen_soldier_data(info) for info in sub_info_list] }, ] }
def gen_commander_data(com_addr): res, err = rest.get(com_addr) if err is not None: return {} info = CommanderInfo.make(res.json()["info"]) url = "{0}subordinates".format(com_addr) res, err = rest.get(url) if err is not None: return {} subs = res.json()["subordinates"] sub_addr_list = [sub["endpoint"] for sub in subs] leaders = [gen_leader_data(addr) for addr in sub_addr_list] leaders = [l for l in leaders if len(l) != 0] return { "text": "Commander: {0}({1}) at {2}". format(info.name, info.id, info.place), "icon": "troops commander", "href": info.endpoint, "nodes": [ { "text": "campaigns", "nodes": [gen_campaign_data(c) for c in info.campaigns] }, { "text": "subordinates", "nodes": leaders }, ] }
def gen_leader_data(lea_addr): res, err = rest.get(lea_addr) if err is not None: return {} info = LeaderInfo.make(res.json()["info"]) url = "{0}subordinates".format(lea_addr) res, err = rest.get(url) if err is not None: return {} subs = res.json()["subordinates"] sub_info_list = [SoldierInfo.make(s) for s in subs] return { "text": "Leader: {0}({1}) at {2}". format(info.name, info.id, info.place), "icon": "troops leader", "href": info.endpoint, "nodes": [ { "text": "missions", "nodes": [gen_mission_data(m) for m in info.missions] }, { "text": "subordinates", "nodes": [gen_soldier_data(info) for info in sub_info_list] }, ] }
def gen_commander_data(com_addr): res, err = rest.get(com_addr) if err is not None: return {} info = CommanderInfo.make(res.json()["info"]) url = "{0}subordinates".format(com_addr) res, err = rest.get(url) if err is not None: return {} subs = res.json()["subordinates"] sub_addr_list = [sub["endpoint"] for sub in subs] leaders = [gen_leader_data(addr) for addr in sub_addr_list] leaders = [l for l in leaders if len(l) != 0] return { "text": "Commander: {0}({1}) at {2}".format(info.name, info.id, info.place), "icon": "troops commander", "href": info.endpoint, "nodes": [ { "text": "campaigns", "nodes": [gen_campaign_data(c) for c in info.campaigns] }, { "text": "subordinates", "nodes": leaders }, ] }
def run(self): while not self.lock.wait(timeout=self.interval): url = self.soldier.superior_ep + "subordinates/" + self.soldier.id res, err = rest.get(url, etag=self.etag) if err is not None: # TODO: エラー処理ちゃんとやる logger.error('In HeartBeat, failed to post report') logger.error('> err: {0}', err) break if res.status_code == 304: continue self.etag = res.headers['ETag'] info = SoldierInfo.make(res.json()['info']) logger.info([str(m) for m in info.orders]) # 以前に受理されているorderにはあるが新規のorderリストには無い # (消された)orderを消す oid_list = [o.get_id() for o in info.orders] for old_oid in self.soldier.orders.keys(): if old_oid not in oid_list: self.soldier.remove_order(old_oid) for m in info.orders: self.soldier.accept_order(m) self.soldier.shutdown()
def __get_review(self, reviewid): request = rest.get(self.__server, '/rest-service/reviews-v1/{id}'.format(id=reviewid)) if request.status_code == requests.codes.ok: return request.json() elif request.status_code != 404: request.raise_for_status()
def awake(self, rec_ep: str, heartbeat_rate: int): from model import LeaderInfo # 上官を解決する url = rec_ep + 'department/squad/leader?soldier_id=' + self.id res, err = rest.get(url) if err is not None: return False self.place = res.json()["place"] superior = LeaderInfo.make(res.json()['leader']) self.superior_ep = superior.endpoint logger.info("superior was resolved: id={0}".format(superior.id)) # 分隊に加入する url = self.superior_ep + "subordinates" info = SoldierInfo( id=self.id, name=self.name, place=self.place, weapons=list(self.weapons.keys()), orders=list(self.orders.values())) res, err = rest.post(url, json=info.to_dict()) if err is not None: return False logger.info("joined to squad: leader_id: {0}".format(superior.id)) # orderを取得する self.heartbeat_thread.interval = heartbeat_rate self.heartbeat_thread.start() return True
def awake(self, rec_ep: str, heartbeat_rate: int): from model import LeaderInfo # 上官を解決する url = rec_ep + 'department/squad/leader?soldier_id=' + self.id res, err = rest.get(url) if err is not None: return False self.place = res.json()["place"] superior = LeaderInfo.make(res.json()['leader']) self.superior_ep = superior.endpoint logger.info("superior was resolved: id={0}".format(superior.id)) # 分隊に加入する url = self.superior_ep + "subordinates" info = SoldierInfo(id=self.id, name=self.name, place=self.place, weapons=list(self.weapons.keys()), orders=list(self.orders.values())) res, err = rest.post(url, json=info.to_dict()) if err is not None: return False logger.info("joined to squad: leader_id: {0}".format(superior.id)) # orderを取得する self.heartbeat_thread.interval = heartbeat_rate self.heartbeat_thread.start() return True
def __get_review(self, reviewid): request = rest.get( self.__server, '/rest-service/reviews-v1/{id}'.format(id=reviewid)) if request.status_code == requests.codes.ok: return request.json() elif request.status_code != 404: request.raise_for_status()
def get_reviews_from_jira(self, jirakey): request = rest.get(self.__server, '/rest-service/search-v1/reviewsForIssue', {'jiraKey': jirakey}) if request.status_code == requests.codes.ok: return request.json()['reviewData'] else: request.raise_for_status()
def __plan_exist(self, plankey): request = rest.get(self.__bamboo_server, '/rest/api/latest/plan/{}'.format(plankey)) if request.status_code == requests.codes.ok: return True elif request.status_code != 404: request.raise_for_status() return False
def __get_builds(self): request = rest.get(self.__bamboo_server, '/build/admin/ajax/getDashboardSummary.action') if request.status_code == requests.codes.ok: return request.json()['builds'] elif request.status_code != 403: request.raise_for_status() return None
def generate_data(rec_addr): url = "{0}commanders".format(rec_addr) res, err = rest.get(url) if err is not None: return {} com_addr_list = [] for cid in res.json()["commanders"]: url = "{0}commanders/{1}".format(rec_addr, cid) res, err = rest.get(url) if err is not None: return {} com_info = res.json()["commander"] if len(com_info) == 0: continue com_addr_list.append(com_info["endpoint"]) return [gen_commander_data(addr) for addr in com_addr_list]
def __get_deployment_key(self, deploymentid): request = rest.get( self.__bamboo_server, '/rest/api/latest/deploy/result/{}'.format(deploymentid)) if request.status_code == requests.codes.ok: return request.json()['key']['key'] elif request.status_code != 404: request.raise_for_status() return None
def get_reviews_from_jira(self, jirakey): request = rest.get( self.__server, '/rest-service/search-v1/reviewsForIssue', {'jiraKey': jirakey}) if request.status_code == requests.codes.ok: return request.json()['reviewData'] else: request.raise_for_status()
def __get_builds(self): request = rest.get( self.__bamboo_server, '/build/admin/ajax/getDashboardSummary.action') if request.status_code == requests.codes.ok: return request.json()['builds'] elif request.status_code != 403: request.raise_for_status() return None
def __plan_exist(self, plankey): request = rest.get( self.__bamboo_server, '/rest/api/latest/plan/{}'.format(plankey)) if request.status_code == requests.codes.ok: return True elif request.status_code != 404: request.raise_for_status() return False
def __get_uncompleted_reviewers(self, reviewid): request = rest.get( self.__server, '/rest-service/reviews-v1/{id}/reviewers/uncompleted'.format( id=reviewid)) reviewers = request.json()['reviewer'] for r in reviewers: user_id = self.__slackclient.find_user_by_name(r['userName']) yield '<@{}>'.format(user_id) if user_id else '@{}'.format( r['userName'])
def __get_uncompleted_reviewers(self, reviewid): request = rest.get( self.__server, '/rest-service/reviews-v1/{id}/reviewers/uncompleted' .format(id=reviewid)) reviewers = request.json()['reviewer'] for r in reviewers: user_id = self.__slackclient.find_user_by_name(r['userName']) if not user_id and self.__handle_field: user_id = slackbot_utils.get_user_by_crucible_handle(self.__slackclient, r['userName'], self.__handle_field) yield '<@{}>'.format(user_id) if user_id else '@{}'.format(r['userName'])
def get_stash_branches(self, repos, project, filter): results = [] for repo in repos: path = '/rest/api/1.0/projects/{project}/repos/{repo}/branches'\ .format(project=project, repo=repo) data = {'filterText': filter, 'details': True, 'limit': 100} request = rest.get(self.__server, path, data) for result in request.json()['values']: results.append((repo, result['id'], result['displayId'], result['latestChangeset'])) return results
def branch_merged(self, project, basebranches, repo, branch): for to in basebranches: path = ('/rest/api/1.0/projects/{project}/repos/{repo}/' 'compare/changes/').format(project=project, repo=repo) data = {'from': branch, 'to': to, 'limit': 1} request = rest.get(self.__server, path, data) if request.status_code != requests.codes.ok: raise Exception(request.text) else: if request.json()['size'] == 0: return True return False
def resolve_leader(self, leader_id, force_retrieve=False) -> LeaderInfo: """ Leaderの情報を上官Commanderから取得する :param str leader_id: 取得したいLeaderのID :param bool force_retrieve: キャッシュを無視して問い合わせるかどうか """ # TODO: エラー処理 com_id = self.get_troop_commander(leader_id) com_info = self.commander_cache[com_id] url = "{0}subordinates/{1}".format(com_info.endpoint, leader_id) res, err = rest.get(url) if err is not None: return None return LeaderInfo.make(res.json()["info"])
def find_matching_branches(self, plankey, searched_term): request = rest.get(self.__bamboo_server, '/rest/api/latest/search/branches', data={ 'masterPlanKey': plankey, 'searchTerm': searched_term }) if request.status_code != requests.codes.ok: request.raise_for_status() for result in request.json()['searchResults']: result = result['searchEntity'] yield (result['id'], '{}/{}'.format(result['planName'], result['branchName']))
def find_matching_branches(self, plankey, searched_term): request = rest.get( self.__bamboo_server, '/rest/api/latest/search/branches', data={ 'masterPlanKey': plankey, 'searchTerm': searched_term } ) if request.status_code != requests.codes.ok: request.raise_for_status() for result in request.json()['searchResults']: result = result['searchEntity'] yield (result['id'], '{}/{}'.format(result['planName'], result['branchName']))
def awake(self, rec_ep: str, heartbeat_rate: int): from model import CommanderInfo # 上官を解決する url = rec_ep + 'department/troop/commander?leader_id=' + self.id res, err = rest.get(url) if err is not None: return False self.place = res.json()["place"] superior = CommanderInfo.make(res.json()['commander']) self.superior_ep = superior.endpoint logger.info("superior was resolved: id={0}".format(superior.id)) # 部隊に加入する url = self.superior_ep + "subordinates" res, err = rest.post(url, json=self.generate_info().to_dict()) if err is not None: return False logger.info("joined to squad: commander_id: {0}".format(superior.id)) # missionを取得する self.start_heartbeat(heartbeat_rate) return True
def get_games(self): url = '{}/games/current'.format(settings.FAF_SERVICE_URL) body = yield from rest.get(url) return body