def put_batch(id): req = request.get_json() try: batch = user_restrict( db_session.query(models.Batch), models.UserBatchLink).filter(models.Batch.id == id).one() params = { 'brew_date', 'rack_date', 'package_date', 'pre_boil_gravity', 'original_gravity', 'final_gravity' } for param in params & req.keys(): setattr(batch, param, req[param]) db_session.commit() return jsonify(hal.item(batch, href='/batch/{id}'.format(id=id))) except sqlalchemy.orm.exc.NoResultFound: db_session.rollback() return make_response(('Batch not found', 404)) except: db_session.rollback() raise
def new_batch(): req = request.get_json() try: query = user_restrict(db_session.query(models.Recipe), models.UserRecipeLink) recipe = query.filter(models.Recipe.id == req['recipe_id']).one() batch = models.Batch(**req) if not batch.profile_id: batch.actual_profile = recipe.profile if not batch.brew_date: batch.brew_date = datetime.now() db_session.add(batch) db_session.add( models.UserBatchLink(user=get_logged_in_user(), batch=batch)) db_session.commit() return jsonify(hal.item(batch, href='/batch/{id}'.format(id=batch.id))) except KeyError: db_session.rollback() return make_response(('Must supply recipe ID', 400)) except sqlalchemy.orm.exc.NoResultFound: db_session.rollback() return make_response(('Recipe not found', 404)) except: db_session.rollback() raise
def get_recipe(id=None): if id is None: # We're fetch the list of recipes query = user_restrict(db_session.query(models.Recipe), models.UserRecipeLink) return jsonify(hal.query(query, href='/recipe')) try: recipe = load_recipe(id) result = hal.item(recipe, href='/recipe/{id}', stats='/recipe/{id}/stats') result['profile'] = hal.item(recipe.profile, href='/recipe/{id}/profile'.format(id=id)) result['grain_bill'] = hal.item( recipe.grain_bill, href='/recipe/{id}/grain_bill'.format(id=id)) result['hop_schedule'] = hal.item( recipe.hop_schedule, href='/recipe/{id}/hop_schedule'.format(id=id)) if recipe.yeast: result['yeast'] = hal.item( recipe.yeast, href='/yeast/{id}'.format(id=recipe.yeast_id)) return jsonify(result) except sqlalchemy.orm.exc.NoResultFound: return make_response(('Recipe not found', 404))
def get_profile(id): try: profile = user_restrict(db_session.query(models.BrewingProfile), models.UserProfileLink).filter( models.BrewingProfile.id == id).one() return jsonify(hal.item(profile, href='/profile/{id}'.format(id=id))) except sqlalchemy.orm.exc.NoResultFound: db_session.rollback() return make_response(('Profile not found', 404))
def get_batch(id): try: batch = user_restrict( db_session.query(models.Batch), models.UserBatchLink).filter(models.Batch.id == id).one() result = hal.item(batch, href='/batch/{id}'.format(id=id)) result['profile'] = hal.item( batch.actual_profile, href='/profile/{id}'.format(id=batch.profile_id)) result['recipe'] = hal.item( batch.recipe, href='/recipe/{id}'.format(id=batch.recipe_id)) return jsonify(result) except sqlalchemy.orm.exc.NoResultFound: return make_response(('Batch not found', 404))
def load_recipe(id): """Convenience function to load the recipe given the ID""" query = user_restrict(db_session.query(models.Recipe), models.UserRecipeLink) return query.filter(models.Recipe.id == id).one()