示例#1
0
    def get_quote(self, code, as_json=False):
        """
        gets the quote for a given stock code
        :param code:
        :return: dict or None
        :raises: HTTPError, URLError
        """
        code = code.upper()
        if self.is_valid_code(code):
            url = self.build_url_for_quote(code)
            req = Request(url, None, self.headers)
            # this can raise HTTPError and URLError, but we are not handling it
            # north bound APIs should use it for exception handling
            res = self.opener.open(req)

            # for py3 compat covert byte file like object to
            # string file like object
            res = byte_adaptor(res)

            # Now parse the response to get the relevant data
            match = re.search(\
                        r'\{<div\s+id="responseDiv"\s+style="display:none">\s+(\{.*?\{.*?\}.*?\})',
                        res.read(), re.S
                    )
            # ast can raise SyntaxError, let's catch only this error
            try:
                buffer = match.group(1)
                buffer = js_adaptor(buffer)
                response = self.clean_server_response(ast.literal_eval(buffer)['data'][0])
            except SyntaxError as err:
                raise Exception('ill formatted response')
            else:
                return self.render_response(response, as_json)
        else:
            return None
示例#2
0
        def __get_quote__(code):
            code = code.upper()
            if self.is_valid_code(code):
                url = self.build_url_for_quote(code)
                res = read_url(url, self.headers)

                # Now parse the response to get the relevant data
                match = re.search(
                    r'\{<div\s+id="responseDiv"\s+style="display:none">\s+(\{.*?\{.*?\}.*?\})',
                    res.read(), re.S)
                # ast can raise SyntaxError, let's catch only this error
                try:
                    buffer = match.group(1)
                    buffer = js_adaptor(buffer)
                    response = self.clean_server_response(
                        ast.literal_eval(buffer)['data'][0])
                except Exception as err:
                    raise Exception('Symbol Not Traded today')
                else:
                    rendered_response = self.render_response(response, as_json)
                    # Check if the market is open (to avoid repeated network computation)
                return rendered_response
示例#3
0
 def test_jsadptor(self):
     buffer = 'abc:true, def:false, ghi:NaN, jkl:none'
     expected_buffer = 'abc:True, def:False, ghi:"NaN", jkl:None'
     ret = js_adaptor(buffer)
     self.assertEqual(ret, expected_buffer)
示例#4
0
 def test_jsadptor(self):
     buffer = 'abc:true, def:false, ghi:NaN, jkl:none'
     expected_buffer = 'abc:True, def:False, ghi:"NaN", jkl:None'
     ret = js_adaptor(buffer)
     self.assertEqual(ret, expected_buffer)