from flask import Flask, session from flask import request import psycopg2 from config import config, secret import json from datetime import datetime from pytz import timezone from markupsafe import escape from werkzeug.security import generate_password_hash, check_password_hash import user_class from flask_login import LoginManager, login_user, current_user, logout_user, login_required app = Flask(__name__) app.secret_key = secret() params = config() print('connecting to the postgres db...') conn = psycopg2.connect(**params) cur = conn.cursor() tz = timezone('America/Chicago') login_manager = LoginManager() login_manager.init_app(app) @login_manager.user_loader def load_user(user_id): return user_class.User.get(user_id) @app.route('/')
import flask import flask_cors import flask_httpauth import os import config import flask_sqlalchemy import base64 app = flask.Flask(__name__) app.config["SECRET"] = config.secret() or base64.encodebytes( os.urandom(64)).decode() app.config["SQLALCHEMY_DATABASE_URI"] = config.sql_uri() flask_cors.CORS(app, supports_credentials=True) auth = flask_httpauth.HTTPTokenAuth() db = flask_sqlalchemy.SQLAlchemy(app)
def main(): #find stations to update query = "SELECT * FROM stations WHERE activated = 1" query2 = [] rows = [] prevreq = [] cursor.execute(query) rows = cursor.fetchall() for row in rows: #get information from files if row["sourceformat"] == "xml": track = getinfofromxml(row["sourceurl"]) elif row["sourceformat"] == "json": track = getinfofromjson(row["sourceurl"]) elif row["sourceformat"] == "tunein": track, prevreq = getinfofromshoutcastpage(row["sourceurl"], prevreq, row["name"]) elif row["sourceformat"]=="idobi": track = getinfofromidobi(row["sourceurl"]) else: track = dict({"title":"", "artist":"", "coverurl":"css/nocover.jpg"}) if track["title"] is None: track["title"] = str("") else: track["title"] = track["title"].encode("utf-8") if track["artist"] is None: track["artist"] = str("") else: track["artist"] = track["artist"].encode("utf-8") if track["coverurl"] is None: track["coverurl"] = str("css/nocover.jpg") else: track["coverurl"] = track["coverurl"].encode("utf-8") if track["album"] is None: track["album"] = str("") else: track["album"] = track["album"].encode("utf-8") #I'm not stupid, this is the workaround to an even more complicated problem cnx2 = config.connect() cursor2 = cnx2.cursor(MySQLdb.cursors.DictCursor) cursor2.execute("SELECT lastfm_auth FROM users WHERE timeout>CURRENT_TIMESTAMP AND station="+str(row["id"])) dat=cursor2.fetchall() cursor2.close() cnx2.close() if track["title"] != row["c_title"] and track["title"] != "": #update db at change query2.append("UPDATE stations SET c_title = '" + MySQLdb.escape_string(track["title"]) + "', c_artist='" + MySQLdb.escape_string(track["artist"]) + "', album='" + MySQLdb.escape_string(track["album"]) + "', coverurl='" + MySQLdb.escape_string(track["coverurl"]) + "' WHERE id = " + str(row["id"]) + "; ") #scrobble now for active users for entry in dat: m = hashlib.md5() #generating the signature -> submit to last.fm presig = "album" + row["album"] + "api_key" + config.api_key() + "artist" + row["c_artist"] + "methodtrack.scrobble" + "sk" + entry["lastfm_auth"] + "timestamp" + str(int(time.time())) + "track" + row["c_title"] + config.secret() m.update(presig) sig = m.hexdigest() url = "http://ws.audioscrobbler.com/2.0/?method=track.scrobble&album=" + row["album"] + "&api_key=" + config.api_key() + "&artist=" + row["c_artist"] + "&sk=" + entry["lastfm_auth"] + "×tamp=" + str(int(time.time())) + "&track=" + row["c_title"] + "&api_sig=" + sig req = requests.post(url) print(row["c_title"] + " - " + row["c_artist"] + " - " + row["album"]) #send nowplaying request for entry in dat: x = hashlib.md5() presigg = "album" + track["album"] + "api_key" + config.api_key() + "artist" + track["artist"] + "duration30methodtrack.updateNowPlaying" + "sk" + entry["lastfm_auth"] + "timestamp" + str(int(time.time())) + "track" + track["title"] + config.secret() x.update(presigg) sigg = x.hexdigest() url = "http://ws.audioscrobbler.com/2.0/?method=track.updateNowPlaying&album=" + track["album"] + "&api_key=" + config.api_key() + "&artist=" + track["artist"] + "&sk=" + entry["lastfm_auth"] + "×tamp=" + str(int(time.time())) + "&track=" + track["title"] + "&api_sig=" + sigg + "&duration=30" rex = requests.post(url) if not rex.text.find('<lfm status="ok">'): print(rex.text) for q in query2: cursor.execute(q) cnx.commit()
# -*- coding: utf-8 -*- import orm import config secret = config.secret() from flask_restplus import abort import postgresql import postgresql.exceptions import postgresql.types def create(user_id, season_id, description, value): try: penalty_id = orm.create_penalty.first(user_id, season_id, description, value) except postgresql.exceptions.UniqueError: abort(400, "Duplicated penalty") return { 'message': 'Penalty created', 'value': penalty_id, } def index(season_id=None): if season_id: penalties = orm.to_json(orm.get_season_penalties(season_id)) else: penalties = orm.to_json(orm.get_penalties()) if penalties is None: abort(404, "No penalties") return penalties