def _GoToSymbol(self, request_data, args): request = self._DefaultParameters(request_data) request.update({'Language': 'C#', 'Filter': args[0]}) response = self._GetResponse('/findsymbols', request) quickfixes = response['QuickFixes'] if quickfixes: if len(quickfixes) == 1: ref = quickfixes[0] ref_file = ref['FileName'] ref_line = ref['Line'] lines = GetFileLines(request_data, ref_file) line = lines[min(len(lines), ref_line - 1)] return responses.BuildGoToResponseFromLocation( _BuildLocation(request_data, ref_file, ref_line, ref['Column']), line) else: goto_locations = [] for ref in quickfixes: ref_file = ref['FileName'] ref_line = ref['Line'] lines = GetFileLines(request_data, ref_file) line = lines[min(len(lines), ref_line - 1)] goto_locations.append( responses.BuildGoToResponseFromLocation( _BuildLocation(request_data, ref_file, ref_line, ref['Column']), line)) return goto_locations else: raise RuntimeError('No symbols found')
def _Format(self, request_data): request = self._DefaultParameters(request_data) request['WantsTextChanges'] = True if 'range' in request_data: lines = request_data['lines'] start = request_data['range']['start'] start_line_num = start['line_num'] start_line_value = lines[start_line_num] start_codepoint = ByteOffsetToCodepointOffset( start_line_value, start['column_num']) end = request_data['range']['end'] end_line_num = end['line_num'] end_line_value = lines[end_line_num] end_codepoint = ByteOffsetToCodepointOffset( end_line_value, end['column_num']) request.update({ 'line': start_line_num, 'column': start_codepoint, 'EndLine': end_line_num, 'EndColumn': end_codepoint }) result = self._GetResponse('/formatRange', request) else: result = self._GetResponse('/codeformat', request) fixit = responses.FixIt( _BuildLocation(request_data, request_data['filepath'], request_data['line_num'], request_data['column_codepoint']), _LinePositionSpanTextChangeToFixItChunks(result['Changes'], request_data['filepath'], request_data)) return responses.BuildFixItResponse([fixit])
def _ResolveFixIt( self, request_data, unresolved_fixit = None ): fixit = unresolved_fixit if unresolved_fixit else request_data[ 'fixit' ] if not fixit[ 'resolve' ]: return { 'fixits': [ fixit ] } fixit = fixit[ 'command' ] code_action = fixit[ 'index' ] request = self._DefaultParameters( request_data ) request.update( { 'CodeAction': code_action, 'WantsTextChanges': True, } ) response = self._GetResponse( '/runcodeaction', request ) fixit = responses.FixIt( _BuildLocation( request_data, request_data[ 'filepath' ], request_data[ 'line_num' ], request_data[ 'column_codepoint' ] ), _LinePositionSpanTextChangeToFixItChunks( response[ 'Changes' ], request_data[ 'filepath' ], request_data ), response[ 'Text' ] ) # The sort is necessary to keep the tests stable. # Python's sort() is stable, so it won't mess up the order within a file. fixit.chunks.sort( key = lambda c: c.range.start_.filename_ ) return responses.BuildFixItResponse( [ fixit ] )
def get_authenticated_data(self, url, request, timeout=None): """ Get authenticated information from the exchange. B{NO retry}. Bitfinex API v1 U{https://www.bitfinex.com/pages/api} @param url: target url of API. (e.g. "/balances") @param request: request parameters for this API method {"key": <>} @return: """ # prepare components request.update({"request": self.__api_base+url, "nonce": str(time.time())}) payload = base64.b64encode(json.dumps(request).encode()) signature = hmac.new(key=self.__secret.encode(), msg=payload, digestmod=hashlib.sha384).hexdigest() headers = {"X-BFX-APIKEY": self.__api_key, "X-BFX-SIGNATURE": signature, "X-BFX-PAYLOAD": payload} # connect exchange conn = None try: conn = http.client.HTTPSConnection(self.__host, timeout=timeout) conn.request("POST", self.__api_base+url, "", headers) with conn.getresponse() as response: return json.loads(response.read().decode()) except OSError as e: self.logger.error("get_authenticated_data() failure. Query: {}. Msg: {}".format(request, e), exc_info=False) return None finally: if conn is not None: conn.close()
def del_event(self, itemid): request = {'username': self.username, 'ver': '1', "itemid": itemid} request.update(self.get_auth()) logging.debug('sending editevent: %s' % str(request)) result = self.server.LJ.XMLRPC.editevent(request) logging.debug('got result: %s' % str(result)) return result
def edit(self, itemid, eventtime, post, journal=None): moment = time.strptime(eventtime, LJ_TIME_FORMAT) request = { 'username': self.username, 'ver': '1', "itemid": itemid, 'event': post['text'], 'subject': post['subj'], 'props': { 'taglist': post['tags'], 'opt_preformatted': True }, 'year': moment[0], 'mon': moment[1], 'day': moment[2], 'hour': moment[3], 'min': moment[4] } if journal: request.update({'usejournal': journal}) request.update(self.get_auth()) logging.debug('sending editevent: %s' % str(request)) result = self.server.LJ.XMLRPC.editevent(request) logging.debug('got result: %s' % str(result)) return result
def del_event(self, itemid): request = {'username': self.username, 'ver': '1', "itemid": itemid} request.update(self.get_auth()) logging.debug('sending editevent: %s' % str(request)) result = self.server.LJ.XMLRPC.editevent(request) logging.debug('got result: %s' % str(result)) return result
def get_last(self): request = {'username': self.username, 'ver': '1', 'lineendings': '0x0A', "selecttype": "lastn", "itemid": -1, "howmany": 1} request.update(self.get_auth()) logging.debug('sending getevents: %s' % str(request)) result = self.server.LJ.XMLRPC.getevents(request) logging.debug('got result: %s' % str(result)) return result['events'][0]
def get_last(self): request = { 'username': self.username, 'ver': '1', 'lineendings': '0x0A', "selecttype": "lastn", "itemid": -1, "howmany": 1 } request.update(self.get_auth()) logging.debug('sending getevents: %s' % str(request)) result = self.server.LJ.XMLRPC.getevents(request) logging.debug('got result: %s' % str(result)) return result['events'][0]
def get_session(self): # Should I store session in cache? request = {'username': self.username, 'ver': '1', 'expiration': 'short'} request.update(self.get_auth()) logging.debug('sending sessiongenerate: %s' % str(request)) result = self.server.LJ.XMLRPC.sessiongenerate(request) logging.debug('got result: %s' % str(result)) try: return result['ljsession'] except KeyError: raise UnexpectedReply( 'Server didn\'t returned ljsession.')
def get_session(self): # Should I store session in cache? request = { 'username': self.username, 'ver': '1', 'expiration': 'short' } request.update(self.get_auth()) logging.debug('sending sessiongenerate: %s' % str(request)) result = self.server.LJ.XMLRPC.sessiongenerate(request) logging.debug('got result: %s' % str(result)) try: return result['ljsession'] except KeyError: raise UnexpectedReply('Server didn\'t returned ljsession.')
def post(self, post, eventtime=None, journal=None, raise_on_premod=False): if eventtime == None: moment = time.localtime() else: moment = time.strptime(eventtime, LJ_TIME_FORMAT) request = { 'username': self.username, 'clientversion': 'Zapys/0.8', 'ver': '1', 'event': post['text'], 'subject': post['subj'], 'props': { 'taglist': post['tags'], 'opt_preformatted': True }, 'year': moment[0], 'mon': moment[1], 'day': moment[2], 'hour': moment[3], 'min': moment[4], 'lineendings': '0x0A' } if journal: request.update({'usejournal': journal}) request.update(self.get_auth()) logging.debug('sending postevent: %s' % str(request)) result = self.server.LJ.XMLRPC.postevent(request) logging.debug('got result: %s' % str(result)) try: result['itemid'] result['url'] except KeyError: if raise_on_premod: raise UnexpectedReply('Didn\'t expected premoderated.') try: result['message'] except KeyError: raise UnexpectedReply('Server didn\'t returned message.') return result
def edit(self, itemid, eventtime, post, journal=None): moment = time.strptime(eventtime, LJ_TIME_FORMAT) request = {'username': self.username, 'ver': '1', "itemid": itemid, 'event': post['text'], 'subject': post['subj'], 'props': {'taglist': post['tags'], 'opt_preformatted': True}, 'year': moment[0], 'mon': moment[1], 'day': moment[2], 'hour' : moment[3], 'min': moment[4]} if journal: request.update({'usejournal': journal}) request.update(self.get_auth()) logging.debug('sending editevent: %s' % str(request)) result = self.server.LJ.XMLRPC.editevent(request) logging.debug('got result: %s' % str(result)) return result
def post(self, post, eventtime=None, journal=None, raise_on_premod=False): if eventtime == None: moment = time.localtime() else: moment = time.strptime(eventtime, LJ_TIME_FORMAT) request = {'username': self.username, 'clientversion': 'Zapys/0.8', 'ver':'1', 'event': post['text'], 'subject': post['subj'], 'props': {'taglist': post['tags'], 'opt_preformatted': True}, 'year': moment[0], 'mon': moment[1], 'day': moment[2], 'hour': moment[3], 'min': moment[4], 'lineendings':'0x0A'} if journal: request.update({'usejournal': journal}) request.update(self.get_auth()) logging.debug('sending postevent: %s' % str(request)) result = self.server.LJ.XMLRPC.postevent(request) logging.debug('got result: %s' % str(result)) try: result['itemid'] result['url'] except KeyError: if raise_on_premod: raise UnexpectedReply( 'Didn\'t expected premoderated.') try: result['message'] except KeyError: raise UnexpectedReply( 'Server didn\'t returned message.') return result
def build_json_request_string(credentials, query): """Build a JSON string from the urlquoted credentials and the actual query input""" userid, access_token, password, account, mode = credentials request = dict(userid=userid, version=VERSION, mode=mode, queryInput=query) if account: request.update( account=account) # empty account info would result in error 404 if access_token: request.update(accesstoken=access_token) if password: request.update(password=password) return urllib.parse.urlencode( dict(jsonRequest=json.dumps(request))).encode('utf-8')