Guest User

Untitled

a guest
Dec 13th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.74 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #Blake VandeMerwe 9/27/2012 -- Program 2
  3.  
  4. from collections import OrderedDict as oDict
  5. from collections import namedtuple
  6.  
  7. Segment = namedtuple('Segment', ['company', 'ticker', 'price', 'dollarChange', 'percentChange', 'ytdChange', 'w52high', 'w52low', 'peRatio'])
  8.  
  9. CHUNK_IDENT = 'Last updated'
  10.  
  11. class Observer(object):
  12.     name = "Observer base"
  13.     def update(self, data, dataChunk):
  14.         raise NotImplementedError("Method not implemented")
  15.  
  16. class Average(Observer):
  17.     name = "Average"
  18.     oFile = "Average.dat"
  19.     def update(self, data, dataChunk):
  20.         with open(Average.oFile, 'a') as f:
  21.             averagePrice = 0
  22.             for s in dataChunk:
  23.                 averagePrice += float(s.price)
  24.             averagePrice = averagePrice / len(dataChunk)
  25.             f.write('%s, Average Price: %s\n' % (data, averagePrice))
  26.  
  27. class Change10(Observer):
  28.     name = "Change10"
  29.     oFile = "Change10.dat"
  30.     def update(self, data, dataChunk):
  31.         with open(Change10.oFile, 'a') as f:
  32.             f.write('%s:\n' % (data))
  33.             for s in dataChunk:
  34.                 if abs(float(s.percentChange)) > 10:
  35.                     f.write('%s %s %s\n' % (s.ticker, s.price, s.percentChange))    
  36.             f.write('\n')
  37.  
  38. class Selections(Observer):
  39.     name = "Selections"
  40.     oFile = "Selections.dat"
  41.    
  42.     def __init__(self, toWatch = []):
  43.         self.watch = toWatch
  44.        
  45.     def update(self, data, dataChunk):
  46.  
  47.         with open(Selections.oFile, 'a') as f:
  48.             f.write('%s:\n' % (data))
  49.             for s in dataChunk:
  50.                 if s.ticker in self.watch:
  51.                     f.write('%s\n' % (' '.join([v for v in s]).strip()))
  52.             f.write('\n')
  53.    
  54. class LocalStocks(object):
  55.     def __init__(self, registers = []):
  56.         self.data = oDict()
  57.         self.observers = {}
  58.        
  59.         if registers: [self.register(r) for r in registers]
  60.  
  61.     def snapshot(self, data = ''):
  62.         def _parseChunks(chunk = ''):
  63.             newChunk = []
  64.             for seg in chunk:
  65.                 seg = seg.split()[::-1]
  66.                 if len(seg) > 0:
  67.                     newChunk.append(Segment(
  68.                         peRatio = seg[0],
  69.                         w52low = seg[1],
  70.                         w52high = seg[2],
  71.                         ytdChange = seg[3],
  72.                         percentChange = seg[4],
  73.                         dollarChange = seg[5],
  74.                         price = seg[6],
  75.                         ticker = seg[7],
  76.                         company = ' '.join(seg[8:][::-1]).strip()))
  77.             return newChunk
  78.  
  79.         chunks = oDict()
  80.         chunk = ''
  81.        
  82.         for line in data:
  83.             if CHUNK_IDENT in line:
  84.                 chunk = line.split(CHUNK_IDENT)[-1].strip()
  85.             else:
  86.                 chunks.setdefault(chunk, []).append(line.strip())
  87.                
  88.         for c in chunks.keys():
  89.             chunks[c] = _parseChunks(chunks[c])
  90.        
  91.         self.data = chunks
  92.         self.notify()
  93.        
  94.     def register(self, observer):
  95.         self.observers[observer.name] = observer
  96.    
  97.     def remove(self, observer):
  98.         del self.observers[observer.name]
  99.        
  100.     def notify(self):
  101.         delData = []
  102.         for data in self.data.keys():
  103.             delData.append(data)
  104.             for o in self.observers.keys():
  105.                 self.observers[o].update(data, self.data[data])
  106.         for d in delData:
  107.             del self.data[d]
  108.    
  109. def main():
  110.     LS = LocalStocks([Average(), Selections(['ALL', 'BA', 'BC', 'GBEL', 'KFT', 'MCD', 'TR', 'WAG']), Change10()])
  111.    
  112.     with open('ticker.dat') as f:
  113.         LS.snapshot(f.readlines())
  114.  
  115. if __name__ == "__main__":
  116.     main()
Add Comment
Please, Sign In to add comment