add celery

This commit is contained in:
vanzhiganov 2017-09-03 18:48:42 +03:00
parent b63239009f
commit db65b4e7e9
13 changed files with 250 additions and 0 deletions

View file

@ -0,0 +1,36 @@
"""New table UserWotTokes
Revision ID: 6c29ab667741
Revises: b3222bf2cedb
Create Date: 2017-09-02 15:24:41.692342
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '6c29ab667741'
down_revision = 'b3222bf2cedb'
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
'user_wot_tokens',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user', sa.Integer(), nullable=False),
sa.Column('expires_at', sa.Integer),
sa.Column('access_token', sa.String(256)),
sa.PrimaryKeyConstraint('id'),
sa.ForeignKeyConstraint(['user'], ['user.id']),
sa.UniqueConstraint('user')
)
pass
def downgrade():
op.drop_table('user_wot_tokens')
pass

View file

@ -0,0 +1,34 @@
"""empty message
Revision ID: 34b1309f878a
Revises: 6c29ab667741
Create Date: 2017-09-03 17:37:21.158601
"""
from sqlalchemy.dialects.postgresql import ARRAY, HSTORE
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = '34b1309f878a'
down_revision = '6c29ab667741'
branch_labels = None
depends_on = None
def upgrade():
op.create_table(
'user_wot_data',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('user', sa.Integer(), nullable=True),
sa.Column('created_at', sa.Integer(), nullable=True),
sa.Column('data', HSTORE, default='{}'),
sa.PrimaryKeyConstraint('id'),
sa.ForeignKeyConstraint(['user'], ['user.id']),
)
def downgrade():
op.drop_table('user_wot_data')

27
config_file.ini Normal file
View file

@ -0,0 +1,27 @@
from datetime import timedelta
from celery.schedules import crontab
DEBUG=True
SECRET_KEY="super-secret"
SQLALCHEMY_DATABASE_URI="postgres://wot:wot@192.168.1.47/wot"
OPENID_FS_STORE_PATH="tmp"
WG_REDIRECT_URL="http://wot.anzhiganov.com/token"
WG_APPLICATION_ID="502910c1c785c3c7ca2e83c9e89bde02"
# WG_OPENID_URL=https://eu.wargaming.net/id/openid/
WG_OPENID_URL="https://wargaming.net/id/openid/"
WG_TOKEN_URL="https://api.worldoftanks.ru/wot/auth/login/"
# Celery configuration
CELERY_BROKER_URL = 'redis://192.168.1.47:6379/4'
CELERY_RESULT_BACKEND = 'redis://192.168.1.47:6379/4'
#CELERYBEAT_SCHEDULE = {
# 'wotstats.tasks.hello': {
# 'task': 'wotstats.tasks.hello',
# # 'schedule': timedelta(seconds=3)
# 'schedule': crontab(minute="*")
# },
#}

5
run_app.py Normal file
View file

@ -0,0 +1,5 @@
from wots import app
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)

2
run_celery.py Normal file
View file

@ -0,0 +1,2 @@
from wots import celery

3
wots.py Normal file
View file

@ -0,0 +1,3 @@
from wotstats.init import init_app
app, celery = init_app()

4
wotstats/log.py Normal file
View file

@ -0,0 +1,4 @@
import logging
log = logging.getLogger(__name__)
# log.setLevel(logging.DEBUG)

View file

@ -0,0 +1,17 @@
from sqlalchemy.dialects.postgresql import ARRAY, HSTORE
from wotstats.database import db
class UserWotData(db.Model):
id = db.Column(db.Integer, primary_key=True)
user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=True)
created_at = db.Column(db.DateTime, nullable=False)
# WG
data = db.Column(HSTORE, nullable=False, default={})
# def __init__(self):
# pass
def __repr__(self):
return '<UserWotData id={} user={} created_at={}>'.format(self.id, self.user, self.created_at)

View file

@ -0,0 +1,27 @@
from sqlalchemy.dialects.postgresql import ARRAY, HSTORE
from wotstats.database import db
class UserWotDetails(db.Model):
id = db.Column(db.Integer, primary_key=True)
user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
# next columns is WG data
nickname = db.Column(db.String(32), unique=True)
client_language = db.Column(db.String(3))
last_battle_time = db.Column(db.Integer)
account_id = db.Column(db.Integer)
created_at = db.Column(db.Integer)
updated_at = db.Column(db.Integer)
logout_at = db.Column(db.Integer)
private = db.Column(db.String(32))
global_rating = db.Column(db.String(32))
clan_id = db.Column(db.Integer)
#
# ForeignKeyConstraint(['user'], ['user.id'])
# def __init__(self):
# pass
def __repr__(self):
return '<User id={} user={} nickname={}>'.format(self.id, self.user, self.nickname)

View file

@ -0,0 +1,26 @@
from sqlalchemy.dialects.postgresql import ARRAY, HSTORE
from wotstats.database import db
class UserWotStats(db.Model):
id = db.Column(db.Integer, primary_key=True)
user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
created_at = db.Column(db.DateTime, nullable=False)
# WG
clan = db.Column(HSTORE, nullable=False, default={})
stronghold_skirmish = db.Column(HSTORE, nullable=False, default={})
regular_team = db.Column(HSTORE, nullable=False, default={})
trees_cut = db.Column(HSTORE, nullable=False, default={})
company = db.Column(HSTORE, nullable=False, default={})
all = db.Column(HSTORE, nullable=False, default={})
stronghold_defense = db.Column(HSTORE, nullable=False, default={})
historical = db.Column(HSTORE, nullable=False, default={})
team = db.Column(HSTORE, nullable=False, default={})
flags = db.Column(HSTORE, nullable=False, default={})
# def __init__(self):
# pass
def __repr__(self):
return '<UserWotStats id={} user={} created_at={}>'.format(self.id, self.user, self.created_at)

View file

@ -0,0 +1,27 @@
from sqlalchemy.dialects.postgresql import ARRAY, HSTORE
from wotstats.database import db
# from wotstats.models.user import User
class UserWotTokens(db.Model):
"""
([
('status', u'ok'),
('access_token', u'5c2e54189009738a001060f04c2e00f43d22f71b'),
('nickname', u'CrazyPants1999'),
('account_id', u'69552613'),
('expires_at', u'1505570179')
])
"""
id = db.Column(db.Integer, primary_key=True)
user = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
# next columns is WG data
expires_at = db.Column(db.Integer)
access_token = db.Column(db.String(256), nullable=True)
# def __init__(self):
# pass
def __repr__(self):
return '<User id={} user={} access_token={} expires_at={}>'.format(self.id, self.user, self.access_token, self.expires_at)

View file

@ -0,0 +1,4 @@
from celery import Celery
celery = Celery()

View file

@ -0,0 +1,38 @@
import time
from datetime import timedelta
from flask import current_app
from wotstats.pending_tasks import celery
@celery.task(name='wotstats.tasks.hello')
def hello():
time.sleep(3)
# current_app.log.error('wdwqd')
# with current_app.test_request_context() as request:
# print('Hello {0!r}'.format(request))
print 111
@celery.task
def mail_welcome():
time.sleep(3)
# current_app.log.error('wdwqd')
# with current_app.test_request_context() as request:
# print('Hello {0!r}'.format(request))
print 111
@celery.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
# Calls test('hello') every 10 seconds.
sender.add_periodic_task(10.0, hello.s(), name='add every 10')
# Calls test('world') every 30 seconds
# sender.add_periodic_task(30.0, test.s('world'), expires=10)
# Executes every Monday morning at 7:30 a.m.
# sender.add_periodic_task(
# crontab(hour=7, minute=30, day_of_week=1),
# test.s('Happy Mondays!'),
# )