# -*- coding: utf8 -*- from sqlalchemy import text from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import ( scoped_session, sessionmaker, ) from zope.sqlalchemy import ZopeTransactionExtension, mark_changed from datetime import * import transaction from bs4 import BeautifulSoup import urllib2 from .default import ( execute_query, ) def get_actifs(request, no_id): if no_id == '0': query = "SELECT actifs.*, classes.* FROM actifs INNER JOIN classes ON actifs.classe = classes.classe ORDER BY ordre, libelle" results = request.dbsession.execute(query).fetchall() else: # lire le actif par son identifiant query = """SELECT * FROM actifs WHERE no_id=:no_id;""" results = request.dbsession.execute(query, {'no_id': no_id}).first() return results def update_actif(request, no_id, new_values): # formater les champs s = '' for param in new_values.keys(): if param == 'symbole': new_values['symbole'] = new_values['symbole'].upper() if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if no_id == '0': query = "INSERT INTO actifs SET %s" % s else: new_values['no_id'] = no_id query = "UPDATE actifs SET %s WHERE no_id = :no_id;" % s execute_query(request, query, new_values) def update_actif_devise(request, devise, taux): query = "UPDATE actifs SET parite = :taux WHERE devise = :devise;" execute_query(request, query, {'taux': taux, 'devise': devise}) def update_actif_valeur(request, symbole, cours): query = "UPDATE actifs SET cours = :cours WHERE symbole = :symbole;" execute_query(request, query, {'symbole': symbole, 'cours': cours}) def update_portefeuille(request, logged_in): query = "CALL spUPD_PORTEFEUILLE(:logged_in);" execute_query(request, query, {'logged_in': logged_in}) def delete_actif(request, no_id): query = "DELETE FROM actifs WHERE no_id = :no_id ;" execute_query(request, query, {'no_id': no_id}) def get_allocation(request, no_cat): if no_cat == '0': query = """ SELECT allocation.*, classes.* FROM allocation INNER JOIN classes ON allocation.classe = classes.classe ORDER BY ordre""" results = request.dbsession.execute(query).fetchall() else: # lire le actif par son identifiant query = """SELECT * FROM allocation WHERE no_cat=:no_cat;""" results = request.dbsession.execute(query, {'no_cat': no_cat}).first() return results def get_allocation_bytype(request, type): # lire le actif par son identifiant query = """SELECT allocation.*, classes.* FROM allocation INNER JOIN classes ON allocation.classe = classes.classe WHERE type=:type ORDER by ordre;""" results = request.dbsession.execute(query, {'type': type}).fetchall() return results def update_allocation(request, no_cat, new_values): # formater les champs s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if no_cat == '0': query = "INSERT INTO allocation SET %s" % s else: new_values['no_cat'] = no_cat query = "UPDATE allocation SET %s WHERE no_cat = :no_cat;" % s execute_query(request, query, new_values) def delete_allocation(request, no_cat): query = "DELETE FROM allocation WHERE no_cat = :no_cat ;" execute_query(request, query, {'no_cat': no_cat}) def get_classes(request, classe): if classe == '0': query = """SELECT * FROM classes ORDER BY ordre""" results = request.dbsession.execute(query).fetchall() else: # lire la classe par son identifiant query = """SELECT * FROM classes WHERE classe=:classe;""" results = request.dbsession.execute(query, {'classe': classe}).first() return results def get_histo(request, no_id): if no_id == '0': query = "SELECT * FROM histo ORDER BY date" results = request.dbsession.execute(query).fetchall() else: # lire le histo par le no_id query = """SELECT * FROM histo WHERE no_id=:no_id;""" results = request.dbsession.execute(query, {'no_id': no_id}).first() return results def update_histo(request, no_id, new_values): # formater les champs s = '' for param in new_values.keys(): if s: s += ",%s=:%s" % (param, param) else: s = "%s=:%s" % (param, param) if no_id == '0': query = "INSERT INTO histo SET date=CURRENT_DATE(), %s" % s else: new_values['no_id'] = no_id query = "UPDATE histo SET %s WHERE no_id = :no_id;" % s execute_query(request, query, new_values) def delete_histo(request, no_id): query = "DELETE FROM histo WHERE no_id = :no_id ;" execute_query(request, query, {'no_id': no_id}) def getCurrencyRate(currency): # specify the url quote_page = 'http://www.finances.net/devises/courseuro' # query & parse the html using beautiful soap and store in variable `soup` soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser') # get the history table rows = soup.find('table', attrs={'class': 'news_table'}).tbody.findAll('tr') divs = rows[1].findAll('td') rate = divs[1].span.text return float(rate.replace(',','.')) def getYahooQuote(ticker): # specify the url quote_page = 'https://finance.yahoo.com/quote/%s/history/' % ticker # query & parse the html using beautiful soap and store in variable `soup` soup = BeautifulSoup(urllib2.urlopen(quote_page), 'html.parser') data = [] # get the quote price rows = soup.findAll('table')[0].tbody.findAll('tr') for each_row in rows: divs = each_row.findAll('td') if divs[1].span.text != 'Dividend': #Ignore this row in the table #I'm only interested in 'Close' price; data.append({'Date': divs[0].span.text, 'Close': float(divs[5].span.text.replace(',',''))}) break # retourne la prière ligne return data[0]