class Star: lum = 0 rad = 0 temp = 0 mass = 0 age = 0 color = None maturity = None def __init__(self, lum, rad, temp, mass): (self.lum, self.rad, self.temp, self.mass) = (lum, rad, temp, mass) self.maturity = Maturity(self) self.color = calc_color(self.temp) def __str__(self): return (f"luminosity: {round(self.lum, N_DEC)}\n" f"radius: {round(self.rad, N_DEC)}\n" f"temp: {round(self.temp, N_DEC)}\n" f"age: {round(self.age, N_DEC)}\n" f"mass: {round(self.mass, N_DEC)}\n" f"stage: {self.maturity.__str__()}\n") def grow_up(self): self.maturity.grow_star() self.color = calc_color(self.temp)
def filter(cls, pid=None, account=None, issue=None): (all_pids, all_accounts, all_issues) = (False, False, False) if not pid: all_pids = True if account: uid = account.id else: uid = None all_accounts = True if issue: iid = issue.id else: iid = None all_issues = True result = [] with cls.db.conn.cursor() as curs: curs.execute('''SELECT maturity.id, maturity.matures, contract_type.id, contract_type.issue, issue.url, issue.title, position.account, position.quantity, position.basis, position.created, position.modified, position.id FROM maturity JOIN contract_type ON maturity.id = contract_type.matures JOIN issue ON issue.id = contract_type.issue JOIN position ON contract_type.id = position.contract_type WHERE (position.id = %s OR %s) AND (account = %s OR %s) AND (issue = %s OR %s) ''', (pid, all_pids, uid, all_accounts, iid, all_issues)) for row in curs.fetchall(): (mid, matures, cid, iid, url, title, uid, quantity, basis, created, modified, pid) = row account = Account(uid=uid) issue = Issue(url=url, iid=iid, title=title) maturity = Maturity(matures, mid) ctype = ContractType(issue, maturity, cid) result.append(cls(pid, account, ctype, quantity, basis, created, modified)) return result
def filter(cls, account=None, issue=None, ticker=False): all_events = not ticker (all_accounts, all_issues) = (False, False) if issue: iid = issue.id else: iid = None all_issues = True if account: uid = account.id else: uid = None all_accounts = True result = [] # Cursor object for the database driver. Database can have different # queries. curs points to this particular query. curs.execute runs a # SQL statement that you pass to the database. The result of this # execution can then be "fetched". with cls.db.conn.cursor() as curs: curs.execute( '''SELECT issue, url, title, maturity, matures, id, class, created, contract_type, side, price, quantity, message FROM message_overview WHERE (%s OR issue = %s) AND (%s OR recipient = %s) AND (%s OR (side = true AND (class = 'contract_created' OR class = 'contract_resolved') AND quantity > 0)) ORDER BY created DESC''', (all_issues, iid, all_accounts, uid, all_events)) for row in curs.fetchall(): (iid, url, title, maturity_id, matures, mid, mclass, created, cid, side, price, quantity, text) = row if ticker and (not url or not title or not matures or not maturity_id): pass # continue #FIXME (issue, maturity, contract_type) = (None, None, None) if iid: issue = Issue(iid=iid, url=url, title=title) if maturity_id and matures: maturity = Maturity(matures, maturity_id) if issue and maturity: contract_type = ContractType(issue, maturity, cid=cid) result.append( cls(mclass, account=account, contract_type=contract_type, side=side, price=price, quantity=quantity, text=text, created=created, mid=mid)) return result
def lookup(cls, iid, mid): with cls.db.conn.cursor() as curs: curs.execute( '''INSERT INTO contract_type (issue, matures) VALUES (%s, %s) ON CONFLICT (issue, matures) DO UPDATE set matures = %s RETURNING id''', (iid, mid, mid)) cid = curs.fetchone()[0] curs.execute( '''SELECT maturity.matures, issue.url, issue.title FROM maturity JOIN contract_type on maturity.id = contract_type.matures JOIN issue ON issue.id = contract_type.issue WHERE contract_type.id = %s''', (cid, )) (matures, url, title) = curs.fetchone() issue = Issue(url=url, iid=iid, title=title) maturity = Maturity(matures, mid) return cls(issue, maturity, cid)
def resolvable(cls): result = [] with cls.db.conn.cursor() as curs: curs.execute( '''SELECT DISTINCT maturity.matures, maturity.id, issue.url, issue.title, issue.id, contract_type.id FROM maturity JOIN contract_type on maturity.id = contract_type.matures JOIN issue ON issue.id = contract_type.issue JOIN position ON contract_type.id = position.contract_type WHERE maturity.matures < NOW() ORDER BY maturity.matures''') for row in curs.fetchall(): (matures, mid, url, title, iid, cid) = row issue = Issue(url=url, iid=iid, title=title) maturity = Maturity(matures, mid) result.append(cls(issue, maturity, cid)) return result
def __init__(self, lum, rad, temp, mass): (self.lum, self.rad, self.temp, self.mass) = (lum, rad, temp, mass) self.maturity = Maturity(self) self.color = calc_color(self.temp)