def enable(request, key): if request.method != 'POST': return MethodNotAllowed() if request.user.is_anonymous() or not request.user.is_admin: return Unauthorized() recipe = models.Recipe.get(key) if not recipe: return NotFound() # Zmień status na włączony recipe.disabled = False recipe.put() if recipe.rec_vis == VISIBILITY[2]: def utx(): user = PMMUser.get(recipe.parent_key()) user.rec_pub += 1 user.put() cache_delete('gfcu', recipe.parent_key().name()) db.run_in_transaction(utx) # na później odłóż indeksację, uaktualnienie tagów i licznika kategorii deferred_lib.defer(deferred.recipe_update, recipe.key(), 'enable') request.notifications.success('Przepis włączony!') return render_json_response({'redirectUrl': url_for('przepisy/disabled_list')})
def favs_button(request, operation, key): if operation not in ('dodaj', 'usun'): return NotFound() if request.user.is_anonymous(): return Unauthorized() db_key = db.Key(key) if db_key.kind() != 'Recipe': return NotFound() if operation == 'dodaj': models.Favs.add_one(request.user.key(), db_key) return render_json_response({'msg': 'Przepis dodany do ulubionych'}) else: models.Favs.remove_one(request.user.key(), db_key) return render_json_response({'msg': 'Przepis usunięty z ulubionych'})
def remove(request, key): if request.method != 'POST': return MethodNotAllowed() if request.user.is_anonymous(): return Unauthorized() recipe = models.Recipe.get(key) if not recipe: return NotFound() # Użytkownik może usunąć swój publiczny przepis tą metodą, ale nie jest to reklamowane! if not (request.user.is_admin or request.user.key() == recipe.parent_key()): return Unauthorized() # Jeśli jest już wyłączony, wykonaj prostsze kroki usuwające if recipe.disabled: to_delete = models.RecipeIngr.all().ancestor(recipe).fetch(20) db.delete(to_delete) Counter.remove_by_name(SHARD_RECIPE_KEY % recipe.key()) recipe.delete() else: # Zmień status na wyłączony recipe.disabled = True recipe.put() # Usuń liczniki, składniki i użytkownika to_delete = models.RecipeIngr.all().ancestor(recipe).fetch(20) db.delete(to_delete) Counter.remove_by_name(SHARD_RECIPE_KEY % recipe.key()) if recipe.rec_vis == VISIBILITY[2]: def utx(): user = PMMUser.get(recipe.parent_key()) user.rec_pub -= 1 if user.rec_pub < 0: user.rec_pub = 0 user.put() cache_delete('gfcu', recipe.parent_key().name()) db.run_in_transaction(utx) # na później odłóż indeksację, uaktualnienie tagów i licznika kategorii deferred_lib.defer(deferred.recipe_update, recipe.key(), 'delete') request.notifications.success('Przepis usunięty!') return render_json_response({'redirectUrl': url_for('przepisy/my_list')})