import re
import feedparser
import csv
from urlgrabber.grabber import URLGrabber

class YFinEngine:
  def __init__(self):
    self.symbol_pattern=re.compile("^[A-Z]{4}$")
    self.grabber=URLGrabber()
 
  """
  Determines whether the symbol is a valid NYSE symbol
  "
""
  def validate_symbol(self,symbol):
    retval=False
    match=self.symbol_pattern.match(symbol)
    if match:
      retval=True
    return retval
   
  """
  Builds a CSV file url for a specific company
  "
""   
  def getstockurl(self,symbol):
    return "%ss=%s&f=sl1d1t1c1ohgv&e=.csv" %\
    ("http://finance.yahoo.com/d/quotes.csv?",symbol)
   
  """
  Returns a companies current stock quote
  "
""   
  def getCurrentQuote(self,symbol):
    url=self.getstockurl(symbol)
    data=self.grabber.urlread(url)
    return list(csv.reader(data)[0])

  """
  Returns feedparser RSS feed entries for Yahoos news feed for a specified symbol/company.
  "
""
  def getnews(self,symbol):
    url=self.getnewsurl(symbol)
    for entry in feedparser.parse(url,handlers=[self.grabber]).entries:
      yield entry
 
  """
  Builds an RSS feed url given a specific company
  "
""   
  def getnewsurl(self,symbol):
    return "%ss=%s" %("http://finance.yahoo.com/rss/headline?",symbol)