Пример #1
0
async def command_messages_restore_default():
    form_data = await get_form_data()

    form = CommandMessagesRestoreDefaultForm(form_data)

    if request.method == 'POST':
        data = form.message_name.data
        default_messages = load_message_templates()
        if data == 'None':
            pass
        elif data == 'all':
            app.overlord.messages = default_messages
            session = database.Session()
            if messages_db := session.query(database.Settings).get('messages'):
                session.delete(messages_db)
            session.commit()
            await flash("Command Outputs were reset.")
        else:
            app.overlord.messages[data] = default_messages[data]
            session = database.Session()
            if messages_db := session.query(database.Settings).get('messages'):
                data_from_db = json.loads(messages_db.value)
                new_messages = {}
                for message_name in data_from_db:
                    if not message_name == data:
                        new_messages[message_name] = default_messages[message_name]
                messages_db.value = json.dumps(new_messages)
            session.commit()
            await flash(f"Command Output '{data}' was reset.")
Пример #2
0
    async def twitch_key_auto_refresher(self):
        while True:
            if self.tokens_ready and self.twitch_key_expires_at and time.time() + 60 > self.twitch_key_expires_at:
                url = 'https://razbi.funcity.org/stocks-chat-minigame/twitch/refresh_token'
                querystring = {'access_token': self.twitch_key}
                res = requests.get(url, params=querystring)
                if res.status_code == 200:
                    session = database.Session()
                    twitch_key_db = session.query(database.Settings).get('twitch_key')
                    if twitch_key_db:
                        twitch_key_db.value = res.json()['access_token']
                    expires_at_db = session.query(database.Settings).get('twitch_key_expires_at')
                    if expires_at_db:
                        expires_at_db.value = str(int(time.time()) + res.json()['expires_in'])
                    self.mark_dirty('twitch_key_expires_at')
                    session.commit()
                    print("Twitch key refreshed successfully.")
                elif res.status_code == 500:
                    print(
                        "Tried refreshing the twitch token, but the server is down or smth, please tell Razbi about this. ")
                else:
                    raise ValueError('Unhandled status code when refreshing the twitch key. TELL RAZBI',
                                     res.status_code)

            elif self.tokens_ready and self.currency_system == 'stream_elements' and \
                    self.stream_elements_key_expires_at and time.time() + 60 > self.stream_elements_key_expires_at:
                url = 'https://razbi.funcity.org/stocks-chat-minigame/stream_elements/refresh_token'
                querystring = {'access_token': self.stream_elements_key}
                res = requests.get(url, params=querystring)
                if res.status_code == 200:
                    session = database.Session()
                    stream_element_key_db = session.query(database.Settings).get('stream_elements_key')
                    if stream_element_key_db:
                        stream_element_key_db.value = res.json()['access_token']
                    expires_at_db = session.query(database.Settings).get('stream_elements_key_expires_at')
                    if expires_at_db:
                        expires_at_db.value = str(int(time.time()) + res.json()['expires_in'])
                    self.mark_dirty('stream_elements_key_expires_at')
                    session.commit()
                    print("Stream_elements key refreshed successfully.")
                elif res.status_code == 500:
                    print(
                        "Tried refreshing the stream_elements token, but the server is down or smth, please tell Razbi about this. ")
                else:
                    raise ValueError('Unhandled status code when refreshing the stream_elements key. TELL RAZBI',
                                     res.status_code)

            await asyncio.sleep(60)
Пример #3
0
def request_warranty(order_item_id):
    """
    Запрос решения по гарантии
    """
    # парсим входные данные
    try:
        warranty_request = WarrantyRequest.parse_obj(
            request.get_json(force=True))
    except BadRequest:
        return {"message": "Bad json"}, 400
    except ValidationError as e:
        return {"message": e.errors()}, 400

    with database.Session() as s:
        # достаем available_count из базы
        order_and_item = (s.query(OrderItem, Item).join(Item).filter(
            OrderItem.order_item_uid == order_item_id).one_or_none())
        if not order_and_item:
            return {"message": "Order not found"}, 404
        available_count = order_and_item.Item.available_count

    # перенаправляем запрос на warranty
    warranty_service_response = circuit_breaker.external_request(
        "POST",
        f"http://{WARRANTY_SERVICE_URL}{ROOT_PATH}/warranty/{order_item_id}/warranty",
        json={
            "reason": warranty_request.reason,
            "availableCount": available_count
        })
    if not warranty_service_response.ok:
        return {
            "message": f"Warranty not found for itemUid '{order_item_id}'"
        }, 404

    return warranty_service_response.json(), 200
Пример #4
0
def get_progress(id):
    if not utils.validate_id(id):
        abort(404)
    session = database.Session()
    model = session.query(
        database.model).filter(database.model.code == id).all()[0]
    return jsonify({"progress": model.progress})
Пример #5
0
def ac14(source, target, machine_number, isotope, skip_calc, **kwargs):
    """Migrate an ac14 database into brahma.

    \b
    SOURCE: the name of the ac14 database to migrate from
    TARGET: the name of the brahma database to migrate to
    MACHINE_NUMBER: the number of the machine to migrate. The machine must exist in TARGET!
    """
    click.echo('')
    with database.Session(**kwargs) as session:
        _validate(source, target, session)
        _validate_machine_exists(machine_number, target, session)

        click.echo(f'Migrating {source} into {target}')
        migrator = migration.Ac14Migrator(session, source, target, isotope,
                                          machine_number)

        _migrate('run', migrator.migrate_run)

        click.echo('  adding cycle_definition:', nl=False)
        cycle_definition_id = migrator.add_default_cycle_definition()
        click.echo(' done')

        _migrate('cycle', migrator.migrate_cycle, cycle_definition_id)

        if not skip_calc:
            _perform('calculating', 'runs', migrator.calculate_runs)
            _perform('calculating', 'targets', migrator.calculate_targets)

    click.echo('done')
Пример #6
0
async def synclol(bot, thing: extradiscord.discord.Message, arguments):
    """Connetti il tuo account di LoL all'account Royal Games!
    
Sintassi: `{symbol}synclol <nome evocatore>`"""
    # Set status to typing
    await status_typing(bot, thing)
    # Check the command syntax
    if len(arguments) < 1:
        await display_help(bot, thing, synclol)
        return
    # Open a new database session
    session = database.Session()
    # Create a new lol account and connect it to the user
    user = session.query(database.Account).filter_by(id=thing.author.id).first()
    if user is None:
        await answer(bot, thing, "⚠ Fai il login prima di sincronizzare l'account di LoL.")
        return
    # Check if there are other LoL account registered with the user
    user = session.query(database.Account).filter_by(id=thing.author.id).join(database.LoL).all()
    if len(user) > 0:
        await answer(bot, thing, "⚠ Hai già un account connesso.\n_Se stai cercando di registrare uno smurf, chiedi a Steffo._")
    # Get data about the user
    summoner_name = " ".join(arguments)
    data = await lol.get_summoner_data("euw", summoner_name=summoner_name)
    # Create a new database entry for the account
    lolaccount = database.LoL(id=data["id"], summoner_name=summoner_name)
    lolaccount.parent_id = thing.author.id
    session.add(lolaccount)
    # Update the newly added user
    lolaccount.update_data()
    # Send some info to Discord
    await d.client.send_message(thing.channel, "Connessione riuscita!", embed=lolaccount.generate_discord_embed())
    # Commit the changes to the database
    session.commit()
Пример #7
0
def command(msg):
    """Doodle that Doodle"""
    content_type, chat_type, chat_id = telepot.glance(msg)
    session = db.Session()
    doodle_entry = session.query(db.Doodle).filter_by(chat_id=chat_id).first()
    if not doodle_entry:
        bot.sendMessage(chat_id, "No doodle saved")
        return

    chat_entry = session.query(db.Chat).filter_by(chat_id=chat_id).first()
    poll = doodle.Doodle(doodle_entry.url)
    message = DoodleMessage(poll=poll, chat_entry=chat_entry).get_message()

    reply_markup = None
    if not poll.is_open:
        if show_calendar_link:
            ical_url = get_ical_url_from_db(chat_id=chat_id)
            if not ical_url:
                ical_url = DropBoxUploader(poll).get_url()
                doodle_to_db(url=doodle_entry.url, chat_id=doodle_entry.chat_id, ical_url=ical_url)

            reply_markup = InlineKeyboardMarkup(inline_keyboard=[
                [dict(text='Add to calendar', url=ical_url)]
            ])
    bot.sendMessage(chat_id, message, parse_mode="Markdown", disable_web_page_preview=True, reply_markup=reply_markup)
    session.close()
Пример #8
0
def user_to_db(user_id, chat_id, username=None, first_name=None, last_name=None):
    session = db.Session()
    entry = db.User(user_id=user_id, username=username, first_name=first_name,
                    last_name=last_name)
    entry.chats.append(db.Chat(chat_id=chat_id))
    session.merge(entry)
    session.commit()
Пример #9
0
def init(schema_name, rebuild, seed, **kwargs):
    """Initialize the brahma database schema.

    \b
    SCHEMA_NAME: the name for the brahma database schema
    """
    click.echo('')
    with database.Session(**kwargs) as session:
        brahma = database.Brahma(schema_name, session)

        if brahma.exists:
            if rebuild:
                click.echo(
                    f'Warning: The schema {schema_name} already exist => going to drop it',
                    err=True)
                brahma.drop()
            else:
                click.echo(f'The schema {schema_name} already exist.')
                if seed:
                    seed_default_data(session, schema_name)
                return

        click.echo(f'Initializing brahma into {schema_name}')
        brahma.create()
        if seed:
            seed_default_data(session, schema_name)
        click.echo('done')
Пример #10
0
def _create_token(username):
    session = db.Session()
    token = jwt.encode(
        {
            'username': username,
            'exp': datetime.utcnow() + timedelta(minutes=10)
        }, SETTINGS['SECRET_KEY'])
    refresh_token = str(uuid.uuid4())
    query = insert(token_table).values({
        'username':
        username,
        'expired_at':
        datetime.utcnow() + timedelta(minutes=60),
        'refresh_token':
        refresh_token,
    }).returning(token_table.c.refresh_token)
    try:
        inserted_token_data = session.execute(query).fetchone()
    except SQLAlchemyError:
        session.rollback()
        raise
    else:
        session.commit()
        return {
            'token': token.decode('UTF-8'),
            'refresh_token': inserted_token_data['refresh_token']
        }
Пример #11
0
def sign_up():
    data = request.get_json()
    session = db.Session()
    query = insert(user_table).values({
        'username':
        data['username'],
        'password':
        generate_password_hash(data['password'], method='sha256'),
        'role':
        UserRole.USER,
    }).returning(user_table.c.username)
    try:
        inserted_user_data = session.execute(query).fetchone()
    except IntegrityError:
        session.rollback()
        return jsonify({
            'message':
            'User with username {} already exists'.format(data['username'])
        })
    except SQLAlchemyError:
        session.rollback()
        raise
    else:
        session.commit()
        return jsonify({
            'message':
            'New user {} is created'.format(inserted_user_data['username'])
        })
Пример #12
0
def request_warranty(order_uid):
    """
    Запрос гарантии по заказу
    """
    # парсим входные данные
    try:
        warranty_request = WarrantyRequest.parse_obj(
            request.get_json(force=True))
    except BadRequest:
        return {"message": "Bad json"}, 400
    except ValidationError as e:
        return {"message": e.errors()}, 400

    with database.Session() as s:
        # убеждаемся, что заказ есть в базе
        order = s.query(Order).filter(
            Order.order_uid == order_uid).one_or_none()
        if not order:
            return {"message": "Order not found"}, 404

        # перенаправляем запрос на warehouse
        warehouse_service_response = circuit_breaker.external_request(
            "POST",
            f"http://{WAREHOUSE_SERVICE_URL}{ROOT_PATH}/warehouse/{order.item_uid}/warranty",
            json={"reason": warranty_request.reason})
        if not warehouse_service_response.ok:
            return {"message": "Warranty not found"}, 404

    return warehouse_service_response.json(), 200
Пример #13
0
async def company_names_restore_default_confirm():
    session = database.Session()
    session.delete(session.query(database.Settings).get('company_names'))
    app.overlord.load_names(session)
    session.commit()
    await flash("Company Names reset successfully.")
    return redirect('/customizations/company_names')
Пример #14
0
async def command_messages():
    # form_list = CommandMessagesForm(data={"items": [{"message_name": "thing", 'command_message': "reee"},
    #                                                 {'message_name': 'thingy2', 'command_message': 'acquire'}]})
    form_data = await get_form_data()

    messages = []
    for key, value in app.overlord.messages.items():
        messages.append({'message_name': key, "command_message": value})
    form_list = CommandMessagesForm(form_data, data={"items": messages})
    test_command_form = TestCommandForm(form_data, data={'user_points': 10000})

    if request.method == 'POST':
        if form_list.validate():
            new_messages = {}
            saved_messages = {}
            default_messages = load_message_templates()
            for res in form_list.items.data:
                new_messages[res['message_name']] = res['command_message']
                if res['message_name'] in default_messages:
                    if res['command_message'] != default_messages[res['message_name']]:
                        print(f"Saved {res['command_message']} because: {res['command_message']} is different than {default_messages[res['message_name']]}")
                        saved_messages[res['message_name']] = res['command_message']
            app.overlord.messages = new_messages
            session = database.Session()
            # session.query(database.Settings).get('messages').value = json.dumps(app.overlord.messages)
            if messages_db := session.query(database.Settings).get('messages'):
                messages_db.value = json.dumps(saved_messages)
            else:
                session.add(database.Settings(key='messages', value=json.dumps(saved_messages)))
            session.commit()
            await flash("Command Outputs saved successfully.")
Пример #15
0
async def home():
    if app.overlord.api.twitch_key_requires_refreshing:
        app.overlord.api.twitch_key_requires_refreshing = False
        app.overlord.api.twitch_key_just_refreshed = True
        return redirect("https://razbi.funcity.org/stocks-chat-minigame/twitch_login")

    if app.overlord.api.stream_elements_key_requires_refreshing:
        app.overlord.api.stream_elements_key_requires_refreshing = False
        app.overlord.api.stream_elements_key_just_refreshed = True
        return redirect("https://razbi.funcity.org/stocks-chat-minigame/streamelements_login")

    if not app.overlord.api.tokens_ready:
        return redirect(url_for('setup'))

    app.overlord.api.console_buffer_done = []
    session = database.Session()
    most = {
            'wealthy_user': session.query(database.User).order_by((database.User.gain-database.User.lost).desc()).first(),
            'poorest_user': session.query(database.User).order_by((database.User.gain-database.User.lost)).first(),
            'richest_company': session.query(database.Company).order_by(database.Company.stock_price.desc()).first(),
            'most_bought_company': session.query(database.Company).order_by(database.Company.stocks_bought.desc()).first(),
            'oldest_company': session.query(database.Company).order_by(database.Company.months.desc()).first()
            }

    return await render_template("home.html", tokens_loaded=app.overlord.api.tokens_ready, started=app.overlord.started,
                                 currency_system=app.overlord.api.currency_system.capitalize(), currency_name=app.overlord.currency_name,
                                 most=most, round=round, int=int)
Пример #16
0
def game(bot: telegram.Bot, update: telegram.Update, user_data):
    logging.info('Get the callback from the keyboard.')

    query = update.callback_query
    chat_id = query.message.chat_id

    user_data['waiting'] = query.data

    msg = f'Send a {query.data.lower()}.'
    try:
        bot.send_message(chat_id=chat_id, text=msg)
    except telegram.error.Unauthorized:
        logging.info('Get telegram.error.Unathorized')

        session = db.Session()

        _, game_data = (session.query(db.PlayerGameLink, db.Game).join(
            db.Game).filter(db.PlayerGameLink.player_id == chat_id).filter(
                db.Game.game_end == None).one_or_none())

        game_data.game_cancelled = True

        session.commit()
        db.Session.remove()

        return -1

    return 'FIRST'
Пример #17
0
def update_person(person_id: Any):
    """
    обновить человека
    """
    try:
        person_id = int(person_id)
    except Exception:
        return response_400("bad person id", {"person_id": person_id})

    input_json = request.get_json(force=True)
    if not isinstance(input_json, dict):
        return response_400("non-json input", {"input": input_json})

    try:
        person_model = PersonModel.parse_obj(input_json)
    except ValidationError as e:
        return response_400("bad input json",
                            {"validation errors": e.errors()})

    with database.Session() as s:
        person = s.query(Person).get(person_id)
        if not person:
            return response_404(f"Person with id={person_id} not found")
        s.query(Person).filter(Person.id == person_id).update(
            person_model.dict())
        s.flush()
        return s.query(Person).get(person_id).to_json(), 200
Пример #18
0
def refresh():
    data = request.get_json()
    session = db.Session()
    try:
        token = session.execute(
            select([token_table]).where(token_table.c.refresh_token ==
                                        data.get('refreshToken'))).fetchone()
    except SQLAlchemyError:
        session.rollback()
        raise
    if not token:
        return jsonify({'message': 'Token is invalid!'}), 401

    username = token['username']

    try:
        session.execute(
            delete(token_table).where(token_table.c.username == username))
    except SQLAlchemyError:
        session.rollback()
        raise
    else:
        session.commit()

    token = _create_token(username)
    return jsonify(token)
Пример #19
0
def crypto_in():
    if request.method == "POST":
        auth = request.form.get("ipn_auth")
        if auth != IPN_AUTH:
            abort(401)
        address = request.form.get("address")
        confirmed = float(request.form.get("confirmed"))
        unconfirmed = float(request.form.get("unconfirmed"))
        logger.warning("IPN address {} -- confirmed {} -- unconfirmed {}".format(address, confirmed, unconfirmed))
        session = database.Session(autocommit=False)
        user = CryptoAddress.get_address_user(address=address, session=session)
        if user:
            logger.warning("IPN for user {} -- address {}".format(user, address))
            dep = UserTransactions.get_user_netdeposits(user, session=session)
            if confirmed > dep:
                UserTransactions.add_transaction(user, confirmed-dep, "deposit", reference="IPN", session=session)
                logger.warning("Deposit confirmed! user {} -- address {} -- amount {}".format(user, address, confirmed-dep))
            else:
                logger.warning("Confirmed is lower than net deposit yet. User {} -- address {} -- conf {} -- dep {} "
                               .format(user, address, confirmed, dep))
        else:
            logger.error("Address {} don't match any user.".format(address))
        data = {
            "address": address,
            "confirmed": confirmed,
            "unconfirmed": unconfirmed,
            "ipn_auth": auth
        }
        return jsonify(data)
    else:
        logger.error("Invalid request at IPN url!")
        abort(401)
Пример #20
0
def request_warranty_result(item_uid):
    """
    Запрос решения по гарантии
    """
    try:
        warranty_request = WarrantyRequest.parse_obj(
            request.get_json(force=True))
    except ValidationError as e:
        return {"message": e.errors()}, 400

    with database.Session() as s:
        warranty = s.query(Warranty).filter(
            Warranty.item_uid == item_uid).one_or_none()
        if not warranty:
            return {"message": "Not found"}, 404
        if warranty.status != Status.on:
            decision = "REFUSED"
        elif warranty_request.availableCount > 0:
            decision = "RETURN"
        else:
            decision = "FIXING"

        return {
            "warrantyDate": warranty.warranty_date.isoformat(),
            "decision": decision
        }, 200
Пример #21
0
def get_ical_url_from_db(chat_id: int) -> str:
    session = db.Session()
    doodle_entry = session.query(db.Doodle).filter_by(chat_id=chat_id).first()
    session.close()
    if doodle_entry.ical_url:
        return doodle_entry.ical_url
    return ""
Пример #22
0
def loginUser():
    username = str(request.json.get('username', ""))
    password = str(request.json.get('password', ""))

    if (username == "" or password == ""):
        resp = jsonify(success=False, message="username or password is empty")
        return make_response(resp, 400)

    if db.User.query.filter_by(username=username,
                               password=password).count() != 1:
        resp = jsonify(success=False,
                       message="username not found or password invalid")
        return make_response(resp, 404)

    token = ''.join(
        random.choice(string.ascii_uppercase + string.digits)
        for _ in range(TOKEN_LEN))
    print "generated token: ", token
    timestamp = time.time()
    s = db.Session(token, username, timestamp)
    db.db_session.add(s)
    db.db_session.commit()
    u = db.User.query.filter_by(username=s.username).first()
    resp = jsonify(success=True, token=token, dropbox=u.dropbox)
    return make_response(resp, 201)
Пример #23
0
def get_changes():
    '''
    return: [(index, value)]
            where index is index of cards array and value is the value to be set
    '''
    se = db.Session()
    changed_cells = se.query(db.Cell).filter(db.Cell.new_state != None).all()
    # changed_cells = se.query(db.Cell).filter(db.Cell.state != 'free').all()
    if len(changed_cells) == 0:
        return []
    nums_to_load = []
    byte_indexes = []
    for i in changed_cells:
        start = i.no - i.no % 8
        byte_indexes.append(start // 8)
        nums_to_load.extend(range(start, start + 8))
    nums_to_load = sorted(list(set(nums_to_load)))
    byte_indexes = sorted(list(set(byte_indexes)))
    needed_cells = se.query(db.Cell).filter(db.Cell.no.in_(nums_to_load)).all()
    by_no = {i.no: i for i in needed_cells}
    result = []
    for byte_index in byte_indexes:
        start = byte_index * 8
        values = []
        for i in range(start, start + 8):
            cell = by_no[i]
            val = cell.state if cell.new_state is None else cell.new_state
            values.append(1 if val == 'on' else 0)
        values.reverse()
        values = ''.join(map(str, values))
        value = int(values, 2)
        result.append((byte_index, value))
    return result
Пример #24
0
 def shared(self):
     db = database.Session()
     try:
         d = db.query(database.Event).filter_by(action = "sharing", success = True).group_by(database.Event.uid).order_by(database.Event.id.desc()).limit(6).all()
     except:
         log.error("DB read exception:\n%s" % traceback.format_exc())
     return templates.load('shared.html').generate(tracks=d)
Пример #25
0
def request_warranty(order_uid):
    """
    Запрос гарантии по заказу
    """
    try:
        warranty_request = WarrantyRequest.parse_obj(
            request.get_json(force=True))
    except ValidationError as e:
        return {"message": e.errors()}, 400

    if not requests.get(f"http://{WAREHOUSE_SERVICE_URL}/manage/health").ok:
        return {"message": "Warehouse sevice unavailable"}, 422

    with database.Session() as s:
        order = s.query(Order).filter(
            Order.order_uid == order_uid).one_or_none()
        if not order:
            return {"message": "Order not found"}, 404

        warehouse_service_response = requests.post(
            f"http://{WAREHOUSE_SERVICE_URL}{ROOT_PATH}/warehouse/{order.item_uid}/warranty",
            json={"reason": warranty_request.reason})
        if not warehouse_service_response.ok:
            return {"message": "Warranty not found"}, 404

    return warehouse_service_response.json(), 200
Пример #26
0
    def graph(self):
        history = {}
        db = database.Session()
        for i in xrange(1, 24*2): # last 3 days
            low = datetime.now() - timedelta(hours = i)
            high = low + timedelta(hours = 1)
            timestamp = 1000 * time.mktime(high.timetuple())
            try:
                dayr = db.query(database.Event).add_columns('count(*)', database.Event.action, database.Event.success).group_by('action', 'success').filter(database.Event.start.between(low, high)).all()
                n = {}
                for daya in dayr:
                    if daya.action == 'download':
                        n[daya.action] = [timestamp , int(daya.__dict__['count(*)'])]
                    elif daya.action == 'remix' or daya.action == 'share':
                        n["%s%s" % (daya.action, daya.success)] = [timestamp, int(daya.__dict__['count(*)'])]

                for k in self.keys:
                    if not k in history:
                        history[k] = []
                    if k in n:
                        history[k].append(n[k])
                    else:
                        history[k].append([timestamp, int(0)])
            except:
                log.error("DB read exception, rolling back:\n%s" % traceback.format_exc())
                db.rollback()
        return history 
Пример #27
0
def process_upload_multiple(files, callback_url=None):
    id = utils.generate_id()
    d = utils.storage_dir_for_id(id)
    os.makedirs(d)

    file_id = 0
    session = database.Session()
    m = database.model(id, '')
    session.add(m)

    for file in files:
        fn = file.filename
        filewriter = lambda fn: file.save(fn)
        filewriter(os.path.join(d, id + "_" + str(file_id) + ".ifc"))
        file_id += 1

        m.files.append(database.file(id, ''))

    session.commit()

    session.close()

    if DEVELOPMENT:
        t = threading.Thread(
            target=lambda: worker.process_multiple(id, callback_url))
        t.start()

    else:
        q.enqueue(worker.process_multiple, id, callback_url)

    return id
Пример #28
0
 def get(self, uid):
     if not uid in r.finished or not os.path.isfile('static/songs/%s.mp3' % uid):
         raise tornado.web.HTTPError(404)
     else:
         db = database.Session()
         try:
             uploader = db.query(database.Event.ip).filter_by(uid = uid, action = "upload").first()[0]
         except:
             log.error("DB exception, rolling back:\n%s" % traceback.format_exc())
             db.rollback()
             uploader = self.request.remote_ip
         if uploader != self.request.remote_ip:
             log.error("Download attempt on remix %s by IP %s, not uploader %s!" % (uid, self.request.remote_ip, uploader))
             raise tornado.web.HTTPError(403)
         filename = "%s.mp3" % (r.finished[uid]['tag']['new_title'] if 'new_title' in r.finished[uid]['tag'] else uid)
         self.set_header('Content-disposition', 'attachment; filename="%s"' % filename)
         self.set_header('Content-type', 'audio/mpeg')
         self.set_header('Content-Length', os.stat('static/songs/%s.mp3' % uid)[6])
         self.write(open('static/songs/%s.mp3' % uid).read())
         self.finish()
         try:
             db.add(database.Event(uid, "download", success = True, ip = self.request.remote_ip))
             db.commit()
         except:
             log.error("DB exception, rolling back:\n%s" % traceback.format_exc())
             db.rollback()
         MonitorSocket.update(uid)
Пример #29
0
def set_progress(id, progress):
    session = database.Session()
    model = session.query(
        database.model).filter(database.model.code == id).all()[0]
    model.progress = int(progress)
    session.commit()
    session.close()
Пример #30
0
 def _parse_file(filename: str):
     """
     Add a new file to the database if it doesn't already exist and it is an audio file
     :param filename:  The path of the file to add
     """
     session = database.Session()
     file = session.query(database.Track).filter_by(location=filename).one_or_none()
     if file is not None:
         session.close()
         return
     try:
         with audioread.audio_open(filename) as track:
             length = track.duration
         valid = True
     except:
         length = 0.0
         valid = False
     if valid and length > 0.0:
         try:
             file = eyed3.load(filename)
             artist = file.tag.artist
             title = file.tag.title
         except:
             artist = ''
             title = ''
         session.add(database.Track(location=filename, artist=artist, title=title, length=length))
         session.commit()
     session.close()