Beispiel #1
0
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('/')
Beispiel #2
0
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)
Beispiel #3
0
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"] + "&timestamp=" + 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"] + "&timestamp=" + 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()
Beispiel #4
0
# -*- 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