def test_before_committed(app, db, Todo): class Namespace: is_received = False def before_committed(sender, changes): Namespace.is_received = True before_models_committed.connect(before_committed) todo = Todo("Awesome", "the text") db.session.add(todo) db.session.commit() assert Namespace.is_received before_models_committed.disconnect(before_committed)
from system.models import OperationLog, SecurityLog for change in changes: if isinstance(change[0], OperationLog) or isinstance( change[0], SecurityLog): continue oplog = OperationLog() oplog.user = current_user oplog.module = unicode(change[0]) oplog.action = change[1] oplog.terminal_ip = request.remote_addr oplog.summary = str(change[0].__dict__) db.session.add(oplog) models_committed.connect(record_oplogs) before_models_committed.connect(record_oplogs) @login_mgr.user_loader def load_user(id): return User.query.get(int(id)) #user = cache.get("user-"+id) #if user is None: # user = User.query.get(int(id)) # cache.set("user-"+id, user) #return user from tango.login import user_logged_in, user_logged_out
def prepare_indexing(app): """Prepare indexing.""" before_models_committed.connect(register_record_modification) models_committed.connect(index_record_modification)
class Post(db.Model): __tablename__ = 'posts' id = db.Column(db.Integer, primary_key=True) created = db.Column(db.DateTime, default=datetime.datetime.utcnow) modified = db.Column(db.DateTime) title = db.Column(db.Unicode(100)) slug = db.Column(db.Unicode(100)) text = db.Column(db.Text) html = db.Column(db.Text) tags = db.Column(db.Unicode(60), index=True) def __str__(self): return self.title @classmethod def before_commit(sender, app, changes): for model, change in changes: if isinstance(model, Post) and change in ('insert', 'update'): # onupdate for field is only called if field is in the SET # this makes sure it is always called model.modified = datetime.datetime.utcnow() # as we don't want the html to be edited manually # the html has to be generated for each row update model.html = mistune.markdown(model.text) before_models_committed.connect(Post.before_commit)
# coding: utf-8 from flask import request, session, g, redirect, url_for, render_template, flash from models import app, db, Entries from flask_sqlalchemy import models_committed, before_models_committed from apps.signal.signal_receive import model_saved_before_test, model_saved_test before_models_committed.connect(model_saved_before_test, app) models_committed.connect(model_saved_test, app) @app.route('/') def show_entries(): cur = Entries.query.order_by(Entries.id.desc()).all() entries = [dict(id=row.id, title=row.title, text=row.text) for row in cur] return render_template('blog/show_entries.html', entries=entries) @app.route('/add', methods=['POST']) def add_entry(): content = Entries(request.form['title'], request.form['text']) db.session.add(content) db.session.commit() flash('New entry was successfully posted') return redirect(url_for('show_entries')) @app.route('/delete', methods=['POST', 'GET']) def delete_entry(): contents = Entries.query.all() for content in contents: db.session.delete(content)
def __init_signals(self): from bmp.signals.db_log import log before_models_committed.connect(log, self)
@declared_attr def modified_by_id(cls): return Column(db.Integer, db.ForeignKey('user.id')) @declared_attr def modified_by(cls): return db.relationship('User', backref='blueprints') def set_current_user(self): self.modified_by_id = current_user.id def on_models_committed(app, changes): for obj, op in changes: if op in ['insert', 'update'] and isinstance(obj, BlueprintModelMixin): obj.set_current_user() before_models_committed.connect(on_models_committed) config = { "name": "Blueprint", "description": "Blueprint fonctionnality", } class Blueprint(object): def __init__(self): self.config = config def init_app(self, app): self.bp = FlaskBlueprint('blueprint', __name__) app.register_blueprint(self.bp)
def record_oplogs(app,changes): if request.headers.environ.get('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest': return from system.models import OperationLog, SecurityLog for change in changes: if isinstance(change[0], OperationLog) or isinstance(change[0], SecurityLog): continue oplog = OperationLog() oplog.user = current_user oplog.module = unicode(change[0]) oplog.action = change[1] oplog.terminal_ip = request.remote_addr oplog.summary = str(change[0].__dict__) db.session.add(oplog) models_committed.connect(record_oplogs) before_models_committed.connect(record_oplogs) @login_mgr.user_loader def load_user(id): return User.query.get(int(id)) #user = cache.get("user-"+id) #if user is None: # user = User.query.get(int(id)) # cache.set("user-"+id, user) #return user from tango.login import user_logged_in, user_logged_out def record_login(app, user): #cache.set("user-"+str(user.id), user) from system.models import SecurityLog from datetime import datetime