def create_app(): app = Flask(__name__) app.register_blueprint(web, url_prefix='/') app.register_blueprint(api, url_prefix='/api') print('Initializing database...') DB.initialize() game.initialize() global bot_thread bot_thread = threading.Thread(target=bot.run) bot_thread.start() return app
def add_task(): data = request.get_json() session = DB.Session() user = session.query(User).filter_by(duid=data['user_id']).first() if user is not None: current_task = session.query(Task).filter_by(duid=data['user_id']).order_by(Task.started.desc()).first() if current_task is None: try: if not 'range_end' in data: data['range_end'] = data['range_start'] new_task = Task(data['range_start'], data['range_end'], name=data['action']) user.tasks.append(new_task) session.add(new_task) session.commit() return '{}, your task has been started! Check back later to see your progress.', 200 except: session.rollback() return 'DB error', 500 session.close() else: session.close() return '{}, you\'re already working on another task! Please wait for it to be completed before adding more work to your queue.', 200 else: session.close() return '{}, you don\'t have a farm yet! Type `$start` to begin playing!', 200
def register(): data = request.get_json() session = DB.Session() user = session.query(User).filter_by(duid=data['user_id']).first() if user is None: try: user = User( data['user_id'], data['user_name'], datetime.utcnow(), datetime.utcnow(), game_time=datetime.strptime('1975-07-01 06:00:00', '%Y-%m-%d %H:%M:%S') ) farm = Farm() user.farms.append(farm) session.add(user) session.commit() return 'Welcome to your :sparkles:**DREAM FARM**:sparkles:, {}!', 200 except: session.rollback() return 'DB error', 500 else: return '{}, you\'re already playing!', 200
def __init__(self, name=None): if name is not None: if name in CropInfo.cache: self.info_id = CropInfo.cache[name] else: session = DB.Session() info = session.query(CropInfo).filter_by(name=name).first() self.info_id = info.id CropInfo.cache[name] = self.info_id session.close()
def seed_db(): # Seed the database with game data session = DB.Session() try: tiles = json.load( open(os.path.realpath('./dreamfarm/game/data/tiles.json'))) for name, tile in tiles.items(): current = session.query(TileInfo).filter_by(name=name).first() info = TileInfo(name, tile['texture_x'], tile['texture_y']) if current is not None: info.id = current.id merged = session.merge(info) session.add(merged) objects = json.load( open(os.path.realpath('./dreamfarm/game/data/objects.json'))) for name, obj in objects.items(): current = session.query(ObjInfo).filter_by(name=name).first() info = ObjInfo(name, obj['required_tool'], obj['texture_x'], obj['texture_y']) if current is not None: info.id = current.id merged = session.merge(info) session.add(merged) crops = json.load( open(os.path.realpath('./dreamfarm/game/data/crops.json'))) for name, crop in crops.items(): current = session.query(CropInfo).filter_by(name=name).first() info = CropInfo(name, crop['lifespan'], crop['value'], crop['texture_x'], crop['texture_y']) if current is not None: info.id = current.id merged = session.merge(info) session.add(merged) tasks = json.load( open(os.path.realpath('./dreamfarm/game/data/tasks.json'))) for name, task in tasks.items(): current = session.query(TaskInfo).filter_by(name=name).first() info = TaskInfo(name, task['completion_time']) if current is not None: info.id = current.id merged = session.merge(info) session.add(merged) session.commit() except: session.rollback() session.close()
def do_calculations(): data = request.get_json() session = DB.Session() user = session.query(User).filter_by(duid=data['user_id']).first() if user is not None: report = user.do_calculations() session.add(user) session.commit() return jsonify(report), 200 session.close() return 'User doesn\'t exist', 400
def __init__(self, cell_start, cell_end, name=None): if name is not None: if name in TaskInfo.cache: self.info_id = TaskInfo.cache[name] else: session = DB.Session() info = session.query(TaskInfo).filter_by(name=name).first() self.info_id = info.id TaskInfo.cache[name] = self.info_id session.close() self.cell_start = cell_start self.cell_end = cell_end self.status = TaskStatus.active self.started = datetime.utcnow()
def __init__(self, x, y, name=None, crop=None, obj=None): self.x = x self.y = y self.crop = crop self.obj = obj if name is not None: if name in TileInfo.cache: self.info_id = TileInfo.cache[name] else: session = DB.Session() info = session.query(TileInfo).filter_by(name=name).first() self.info_id = info.id TileInfo.cache[name] = self.info_id session.close()
def get_current_farm(): user_id = request.args.get('duid') etag = request.headers.get('If-None-Match') session = DB.Session() farm = session.query(Farm).filter_by(duid=user_id).order_by(Farm.id).first() if farm is not None: if etag is not None: if etag.replace('"', '') == str(farm.current_ver): return '', 304 resp = make_response(send_file(farm.render_file(), mimetype='image/png')) resp.cache_control.no_cache = True resp.cache_control.must_revalidate = True resp.cache_control.max_age = 0 resp.cache_control.public = False resp.cache_control.private = True resp.set_etag(str(farm.current_ver)) return resp session.close() return 'No farm exists for user', 400
def get_by_name(name): session = DB.Session() obj = session.query(ObjInfo).filter_by(name=name).first() session.close() return obj