class OptionQuote(object):
    def __init__(self):
        self._expr_url = 'http://finance.yahoo.com/q/os?s=%s'
        self._option_url = "http://finance.yahoo.com/q/os?s=%s&m=%s"
        self._exp_parser = ExpirationParser()
        self._option_parser = OptionParser()

    def _convert_exp2str(self, expr):
        """
        Convert date object to YYYY-MM string format 
        @param expr expiration date as python DateTime object
        """
        return expr.strftime('%Y-%m')

    def _get_option_expirations(self, underlying):
        """
        Parser the main option page for list of expirations dates
        @param symbol symbol of the underlying stock
        @return list of expiration dates as Datetime obj
        """
        url = self._expr_url % underlying
        data = urllib.urlopen(url).read()
        self._exp_parser.reset()
        self._exp_parser.feed(data)
        self._exp_parser.close()
        return self._exp_parser.expirations

    def _get_option_by_expr(self, underlying, expr):
        """
        Parser yahoo option page for data
        @param underlying stock
        @param expr expiration date in YYYY-MM string format
        @return dict of option data for the given stock/expiration date
        """
        url = self._option_url % (underlying, expr)
        data = urllib.urlopen(url).read()
        self._option_parser.reset()
        self._option_parser.feed(data)
        self._option_parser.close()
        return normalize_option_data(self._option_parser.data[1:-1], expr)
class OptionQuote(object):
    def __init__(self):
        self._expr_url = "http://finance.yahoo.com/q/os?s=%s"
        self._option_url = "http://finance.yahoo.com/q/os?s=%s&m=%s"
        self._exp_parser = ExpirationParser()
        self._option_parser = OptionParser()

    def _convert_exp2str(self, expr):
        """
        Convert date object to YYYY-MM string format 
        @param expr expiration date as python DateTime object
        """
        return expr.strftime("%Y-%m")

    def _get_option_expirations(self, underlying):
        """
        Parser the main option page for list of expirations dates
        @param symbol symbol of the underlying stock
        @return list of expiration dates as Datetime obj
        """
        url = self._expr_url % underlying
        data = urllib.urlopen(url).read()
        self._exp_parser.reset()
        self._exp_parser.feed(data)
        self._exp_parser.close()
        return self._exp_parser.expirations

    def _get_option_by_expr(self, underlying, expr):
        """
        Parser yahoo option page for data
        @param underlying stock
        @param expr expiration date in YYYY-MM string format
        @return dict of option data for the given stock/expiration date
        """
        url = self._option_url % (underlying, expr)
        data = urllib.urlopen(url).read()
        self._option_parser.reset()
        self._option_parser.feed(data)
        self._option_parser.close()
        return normalize_option_data(self._option_parser.data[1:-1], expr)
 def __init__(self):
     self._expr_url = 'http://finance.yahoo.com/q/os?s=%s'
     self._option_url = "http://finance.yahoo.com/q/os?s=%s&m=%s"
     self._exp_parser = ExpirationParser()
     self._option_parser = OptionParser()
 def __init__(self):
     self._expr_url = "http://finance.yahoo.com/q/os?s=%s"
     self._option_url = "http://finance.yahoo.com/q/os?s=%s&m=%s"
     self._exp_parser = ExpirationParser()
     self._option_parser = OptionParser()