コード例 #1
0
ファイル: routes.py プロジェクト: Stormy9/CS407MA_Fall-18
def create_post():
    if not current_user.is_authenticated:
        return redirect(url_for("register"))

    category_id = request.args.get("category_id", None, type=int)
    form = PostForm()
    categories = Category.query.order_by("title")
    form.category_id.choices = [(c.id, c.title) for c in categories]
    form.category_id.data = (category_id
                             if category_id else categories.first().id)

    if form.validate_on_submit():
        post = Post(
            title=form.title.data,
            body=form.body.data,
            link=form.link.data,
            url=form.url.data,
            category_id=form.category_id.data,
            author=current_user,
        )
        db.session.add(post)
        db.session.commit()
        ActivityLog.log_event(current_user, f"Create: {post}")  # removed .id
        flash("Your post is now live!")
        return redirect(url_for("index"))
    return render_template(
        "create_post.html",
        greeting_name=greeting_name(),
        title="Create Post",
        form=form,
    )
コード例 #2
0
ファイル: routes.py プロジェクト: jgillespie17/CS465
def down_vote_comment(comment_id):
    next_page = request.args.get("next")
    if current_user.is_authenticated:
        comment = Comment.query.filter_by(id=comment_id).first_or_404()
        comment.down_vote(current_user)
        ActivityLog.log_event(current_user, f"Down Vote: {comment}")
        return redirect(next_page or url_for("index"))
    else:
        return redirect(url_for("login"))
コード例 #3
0
ファイル: routes.py プロジェクト: Stormy9/CS407MA_Fall-18
def up_vote(id):
    next = request.args.get("next")
    if current_user.is_authenticated:
        post = Post.query.filter_by(id=id).first_or_404()
        post.up_vote(current_user)
        ActivityLog.log_event(current_user, f"Up Vote: {post}")  # removed .id
        return redirect(next or url_for("index"))
    else:
        return redirect(url_for("login"))
コード例 #4
0
def up_vote_comment(id):
    next = request.args.get("next")
    if current_user.is_authenticated:
        comment = Comment.query.filter_by(id=id).first_or_404()
        comment.up_vote(current_user)
        ActivityLog.log_event(current_user, f"Up Vote: {comment}")
        return redirect(next or url_for("index"))  # ^^^ removed .id
    else:
        return redirect(url_for("login"))
コード例 #5
0
 def test_activity_logging(self):
     s = Student(first_name='billy')
     act1 = Activity(activity_name='nap')
     act_entry1 = ActivityLog(student_id=s.student_id, activity_id=act1.activity_id)
     s.activity.append(act_entry1)
     act1.student.append(act_entry1)
     act_entry2 = ActivityLog(student_id=s.student_id, activity_id=act1.activity_id)
     s.activity.append(act_entry2)
     act1.student.append(act_entry2)
     self.assertTrue(len(s.activity) == 2)
コード例 #6
0
ファイル: test_routes.py プロジェクト: lnian15/wolfit
def test_login_and_logout_create_activity_log(client, test_user):
    login(client, test_user.username, PASSWORD)
    e = ActivityLog.latest_entry()
    assert e is not None
    assert "Login" in e.details
    assert test_user.id == e.user_id
    logout(client)
    e = ActivityLog.latest_entry()
    assert e is not None
    assert "Logout" in e.details
    assert test_user.id == e.user_id
コード例 #7
0
def add_activity_log(activity, description, employee_id):
    activity_log = ActivityLog()

    activity_log.activity = activity
    activity_log.description = description
    activity_log.employee_id = employee_id

    db.session.add(activity_log)
    db.session.commit()

    return activity_log
コード例 #8
0
def counter_contract(contract_id):
    contract = Contract.query.filter(Contract.id == contract_id).first_or_404()
    parent = contract if contract.parent_id is None else Contract.query.get(contract.parent_id)
    role = 'owner' if contract.owner_id == current_user.id else 'cparty'
    if 'counter' not in contract_transitions[contract.status][role]:
        flash('This action is not permitted')
        return redirect(url_for('index'))
    form = EditProposalForm()
    form.template_id.choices = [(t.id, t.title) for t in Template.query.order_by('title')]
    if form.validate_on_submit():
        proposal = Contract(template_id=form.template_id.data, params=form.params.data, memo=form.memo.data, status="draft", owner_id=current_user.id, parent_id=parent.id)
        db.session.add(proposal)
        db.session.flush()
        for p in contract.party:
            party = Party(contract_id=proposal.id, role=p.role, user_id=p.user_id)
            db.session.add(party)
        db.session.flush()
        description = 'Created a counter draft'
        alog = ActivityLog(contract_id=proposal.id, timestamp=datetime.now(), method='/contract/counter', description=description, user_id=current_user.id)
        db.session.add(alog)
        db.session.commit()
        flash('Draft edited.')
        return redirect(url_for('index'))
    form.template_id.data = contract.template_id
    form.params.data = contract.params
    return render_template('edit_draft.html', title='Edit a Draft Proposal', form=form, contract_id=contract_id, parties=contract.party, deal=parent.memo)
コード例 #9
0
ファイル: routes.py プロジェクト: Stormy9/CS407MA_Fall-18
def register():
    if current_user.is_authenticated:
        return redirect(url_for("index"))
    form = RegistrationForm()
    if form.validate_on_submit():
        user = User(username=form.username.data, email=form.email.data)
        user.set_password(form.password.data)
        db.session.add(user)
        db.session.commit()
        ActivityLog.log_event(user, "Register")  # removed .id
        flash("Congratulations, you are now a registered user!")
        return redirect(url_for("login"))
    return render_template("register.html",
                           greeting_name=greeting_name(),
                           title="Register",
                           form=form)
コード例 #10
0
def test_activity_log_logs_to_info_when_successful_response(mocker):
    mocker.patch('logging.info')
    response = requests.Response()
    response.status_code = 201
    u = User(username="******", email="*****@*****.**")

    act = {
        "user_id": u.id,
        "username": u.username,
        "timestamp": str(datetime.utcnow()),
        "details": "testing success"
    }

    mocker.patch.object(requests, 'post', return_value=response)
    ActivityLog.post_activity(act)
    requests.post.assert_called_once()
    logging.info.asset_called_once_with(f"Post activity SUCCESS at ")
コード例 #11
0
def test_activity_log_logs_to_critical_when_failed_response(mocker):
    mocker.patch('logging.critical')
    response = requests.Response()
    response.status_code = 404
    u = User(username="******", email="*****@*****.**")

    act = {
        "user_id": u.id,
        "username": u.username,
        "timestamp": str(datetime.utcnow()),
        "details": "testing fail"
    }

    mocker.patch.object(requests, 'post', return_value=response)
    ActivityLog.post_activity(act)
    requests.post.assert_called_once()
    logging.critical.asset_called_once_with(f"Post activity FAILURE: ")
コード例 #12
0
ファイル: routes.py プロジェクト: Stormy9/CS407MA_Fall-18
def login():
    if current_user.is_authenticated:
        return redirect(url_for("index"))
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user is None or not user.check_password(form.password.data):
            flash("Invalid username or password")
            return redirect(url_for("login"))
        login_user(user, remember=form.remember_me.data)
        ActivityLog.log_event(user, f"Login {user}")  # removed .id
        return redirect(url_for("index"))
    elif form.is_submitted():
        return redirect(url_for("login"))
    else:
        return render_template("login.html",
                               greeting_name=greeting_name(),
                               title="Login",
                               form=form)
コード例 #13
0
def sign_contract(contract_id):
    contract = Contract.query.filter(Contract.id == contract_id).first_or_404()
    role = 'owner' if contract.owner_id == current_user.id else 'cparty'
    if 'sign' not in contract_transitions[contract.status][role]:
        flash('This action is not permitted')
        return redirect(url_for('index'))
    all_signed = True
    for party in contract.party:
        if party.user_id == current_user.id:
            if party.signed_on is None:
                party.signed_on = datetime.now()
            else:
                flash('Contract is already signed by this party')
        else:
            if party.signed_on is None:
                all_signed = False
    if all_signed:
        contract.status = "signed"
        siblings = Contract.query.filter(or_(Contract.parent_id == contract.parent_id, Contract.id == contract.parent_id)).all()
        for c in siblings:
            if c.id == contract.id:
                continue
            c.status = "archived"
        db.session.flush()
        description = 'Signed a proposal'
        alog = ActivityLog(contract_id=contract.id, timestamp=datetime.now(), method='/contract/sign', description=description, user_id=current_user.id)
        db.session.add(alog)
        description = 'Contract is in effect'
        alog2 = ActivityLog(contract_id=contract.id, timestamp=datetime.now(), method='/contract/sign', description=description, user_id=current_user.id)
        db.session.add(alog2)
        db.session.commit()
        flash('Contract signed--now in effect!')
    else:
        contract.status = "partially signed"
        db.session.flush()
        description = 'Signed a proposal'
        alog = ActivityLog(contract_id=contract.id, timestamp=datetime.now(), method='/contract/sign', description=description, user_id=current_user.id)
        db.session.add(alog)
        db.session.commit()
        flash('Contract signed--now pending other signature(s)')
    msg = Message(subject='Someone signed a contract', sender='*****@*****.**', recipients=[p.user.email for p in contract.party if p.user_id != current_user.id], html='<h1>New Signature</h1><p>Please click <a href="' + url_for('show_draft', contract_id=contract_id, _external=True) + '">here</a> to view the contract.</p>')
    mail.send(msg)
    return redirect(url_for('index'))
コード例 #14
0
def test_activity_log_logs_to_critical_when_exception_occurs(mocker):
    URL = os.environ.get('ACTLOG_URL')
    mocker.patch('logging.critical')
    response = requests.Response()
    response.status_code = 404
    u = User(username="******", email="*****@*****.**")

    act = {
        "user_id": u.id,
        "username": u.username,
        "timestamp": str(datetime.utcnow()),
        "details": "testing success"
    }

    mocker.patch.object(requests,
                        'post',
                        side_effect=requests.exceptions.RequestException)
    ActivityLog.post_activity(act)
    requests.post.assert_called_once()
    logging.critical.asset_called_once_with(
        f"Could not connect to activity log service at {URL}")
コード例 #15
0
def archive_draft(contract_id):
    contract = Contract.query.filter(Contract.id == contract_id).first_or_404()
    role = 'owner' if contract.owner_id == current_user.id else 'cparty'
    if 'archive' not in contract_transitions[contract.status][role]:
        flash('This action is not permitted')
        return redirect(url_for('index'))
    contract.status = "archived"
    db.session.flush()
    description = 'Archiving a draft/proposal'
    alog = ActivityLog(contract_id=contract.id, timestamp=datetime.now(), method='/contract/archive', description=description, user_id=current_user.id)
    db.session.add(alog)
    db.session.commit()
    return redirect(url_for('index'))
コード例 #16
0
def withdraw(contract_id):
    contract = Contract.query.filter(Contract.id == contract_id).first_or_404()
    role = 'owner' if contract.owner_id == current_user.id else 'cparty'
    if 'withdraw' not in contract_transitions[contract.status][role]:
        flash('This action is not permitted')
        return redirect(url_for('index'))
    contract.status = "draft"
    db.session.flush()
    description = 'Withdraw a proposal'
    alog = ActivityLog(contract_id=contract.id, timestamp=datetime.now(), method='/contract/withdraw', description=description, user_id=current_user.id)
    db.session.add(alog)
    db.session.commit()
    msg = Message(subject='A proposal of yours has been withdrawn', sender='*****@*****.**', recipients=[p.user.email for p in contract.party if p.user_id != current_user.id], html='<h1>Proposal Withdrawn</h1><p>Please click <a href="' + url_for('show_draft', contract_id=contract_id, _external=True) + '">here</a> to view the proposal.</p>')
    mail.send(msg)
    return redirect(url_for('index'))
コード例 #17
0
ファイル: test_routes.py プロジェクト: lnian15/wolfit
def test_new_post_should_create_activity_log(client, test_user,
                                             default_category):
    login(client, test_user.username, PASSWORD)
    title = "Logged post title"
    response = client.post(url_for("create_post"),
                           data=dict(title=title,
                                     body='',
                                     category_id=default_category.id,
                                     user_id=test_user.id),
                           follow_redirects=True)
    assert response.status_code == 200
    e = ActivityLog.latest_entry()
    assert e is not None
    assert title in e.details
    assert test_user.id == e.user_id
コード例 #18
0
def create_draft():
    form = CreateProposalForm()
    form.template_id.choices = [(t.id, t.title) for t in Template.query.order_by('title')]
    if form.validate_on_submit():
        proposal = Contract(template_id=form.template_id.data, memo=form.memo.data, params=form.params.data, status="draft", owner_id=current_user.id)
        db.session.add(proposal)
        db.session.flush()
        for p in json.loads(form.parties.data):
            party = Party(contract_id=proposal.id, role=p['label'], user_id=p['user_id'])
            db.session.add(party)
        db.session.flush()
        description = 'Creation of a new draft'
        alog = ActivityLog(contract_id=proposal.id, timestamp=datetime.now(), method='/contract/new', description=description, user_id=current_user.id)
        db.session.add(alog)
        db.session.commit()
        flash('Draft saved.')
        return redirect(url_for('index'))
    contacts = User.query.all()
    return render_template('create_draft.html', title='Create a new Draft Proposal', form=form, contacts=contacts)
コード例 #19
0
def test_repr_function_for_activity(client, test_user, single_post):
    a = ActivityLog()
    a.details = "You added Fernando"
    a.id = 1
    assert a.__repr__() == "<ActivityLog id 1 - You added Fernando>"
コード例 #20
0
ファイル: routes.py プロジェクト: Stormy9/CS407MA_Fall-18
def logout():
    ActivityLog.log_event(current_user,
                          f"Logout {current_user}")  # removed .id
    logout_user()
    return redirect(url_for("index"))
コード例 #21
0
def test_activitylog_as_string():
    details = "First Activity log"
    new_activitylog = ActivityLog(details=details)
    assert details in str(new_activitylog)