from flask import Blueprint, request, json
from alfred_db.models import Repository, Commit

from .database import db
from .helpers import parse_hook_data


webhooks = Blueprint('webhooks', __name__)


@webhooks.route('/', methods=['POST'])
def handler():
    payload = request.form.get('payload', '')
    try:
        payload_data = json.loads(payload)
    except ValueError:
        return 'Bad request', 400
    hook_data = parse_hook_data(payload_data)

    repository = db.session.query(Repository).filter_by(
        name=hook_data['repo_name'], user=hook_data['repo_user']
    ).first()
    if repository is None:
        repository = Repository()
        repository.name = hook_data['repo_name']
        repository.user = hook_data['repo_user']
        repository.url = hook_data['repo_url']
        db.session.add(repository)
        db.session.commit()

    commit = db.session.query(Commit).filter_by(
        hash=hook_data['hash'], repository_id=repository.id
    ).first()
    if commit is None:
        commit = Commit()
        commit.repository_id = repository.id
        commit.hash = hook_data['hash']
        commit.ref = hook_data['ref']
        commit.compare_url = hook_data['compare_url']
        commit.committer_name = hook_data['committer_name']
        commit.committer_email = hook_data['committer_email']
        commit.message = hook_data['message']
        db.session.add(commit)
        db.session.commit()
    return 'OK'

from flask import Blueprint, request, json
from alfred_db.models import Repository, Commit

from .database import db
from .helpers import parse_hook_data


webhooks = Blueprint('webhooks', __name__)


@webhooks.route('/', methods=['POST'])
def handler():
    payload = request.form.get('payload', '')
    try:
        payload_data = json.loads(payload)
    except ValueError:
        return 'Bad request', 400
    hook_data = parse_hook_data(payload_data)

    repository = db.session.query(Repository).filter_by(
        name=hook_data['repo_name'], user=hook_data['repo_user']
    ).first()
    if repository is None:
        repository = Repository(
            name=hook_data['repo_name'],
            user=hook_data['repo_user'],
            url=hook_data['repo_url']
        )
        db.session.add(repository)
        db.session.commit()

    commit = db.session.query(Commit).filter_by(
        hash=hook_data['hash'], repository_id=repository.id
    ).first()
    if commit is None:
        commit = Commit(
            repository_id=repository.id,
            hash=hook_data['hash'],
            ref=hook_data['ref'],
            compare_url=hook_data['compare_url'],
            committer_name=hook_data['committer_name'],
            committer_email=hook_data['committer_email'],
            message=hook_data['message']
        )
        db.session.add(commit)
        db.session.commit()
    return 'OK'

Change the way to instaniate models
Change the way to instaniate models

  from flask import Blueprint, request, json
  from alfred_db.models import Repository, Commit
  
  from .database import db
  from .helpers import parse_hook_data
  
  
  webhooks = Blueprint('webhooks', __name__)
  
  
  @webhooks.route('/', methods=['POST'])
  def handler():
      payload = request.form.get('payload', '')
      try:
          payload_data = json.loads(payload)
      except ValueError:
          return 'Bad request', 400
      hook_data = parse_hook_data(payload_data)
  
      repository = db.session.query(Repository).filter_by(
          name=hook_data['repo_name'], user=hook_data['repo_user']
      ).first()
      if repository is None:
-         repository = Repository()
+         repository = Repository(
-         repository.name = hook_data['repo_name']
+             name=hook_data['repo_name'],
-         repository.user = hook_data['repo_user']
+             user=hook_data['repo_user'],
-         repository.url = hook_data['repo_url']
+             url=hook_data['repo_url']
+         )
          db.session.add(repository)
          db.session.commit()
  
      commit = db.session.query(Commit).filter_by(
          hash=hook_data['hash'], repository_id=repository.id
      ).first()
      if commit is None:
-         commit = Commit()
+         commit = Commit(
-         commit.repository_id = repository.id
+             repository_id=repository.id,
-         commit.hash = hook_data['hash']
+             hash=hook_data['hash'],
-         commit.ref = hook_data['ref']
+             ref=hook_data['ref'],
-         commit.compare_url = hook_data['compare_url']
+             compare_url=hook_data['compare_url'],
-         commit.committer_name = hook_data['committer_name']
+             committer_name=hook_data['committer_name'],
-         commit.committer_email = hook_data['committer_email']
+             committer_email=hook_data['committer_email'],
-         commit.message = hook_data['message']
+             message=hook_data['message']
+         )
          db.session.add(commit)
          db.session.commit()
      return 'OK'
  
Change the way to instaniate models
## Code Before:
from flask import Blueprint, request, json
from alfred_db.models import Repository, Commit

from .database import db
from .helpers import parse_hook_data


webhooks = Blueprint('webhooks', __name__)


@webhooks.route('/', methods=['POST'])
def handler():
    payload = request.form.get('payload', '')
    try:
        payload_data = json.loads(payload)
    except ValueError:
        return 'Bad request', 400
    hook_data = parse_hook_data(payload_data)

    repository = db.session.query(Repository).filter_by(
        name=hook_data['repo_name'], user=hook_data['repo_user']
    ).first()
    if repository is None:
        repository = Repository()
        repository.name = hook_data['repo_name']
        repository.user = hook_data['repo_user']
        repository.url = hook_data['repo_url']
        db.session.add(repository)
        db.session.commit()

    commit = db.session.query(Commit).filter_by(
        hash=hook_data['hash'], repository_id=repository.id
    ).first()
    if commit is None:
        commit = Commit()
        commit.repository_id = repository.id
        commit.hash = hook_data['hash']
        commit.ref = hook_data['ref']
        commit.compare_url = hook_data['compare_url']
        commit.committer_name = hook_data['committer_name']
        commit.committer_email = hook_data['committer_email']
        commit.message = hook_data['message']
        db.session.add(commit)
        db.session.commit()
    return 'OK'

## Instruction:
Change the way to instaniate models
## Code After:
from flask import Blueprint, request, json
from alfred_db.models import Repository, Commit

from .database import db
from .helpers import parse_hook_data


webhooks = Blueprint('webhooks', __name__)


@webhooks.route('/', methods=['POST'])
def handler():
    payload = request.form.get('payload', '')
    try:
        payload_data = json.loads(payload)
    except ValueError:
        return 'Bad request', 400
    hook_data = parse_hook_data(payload_data)

    repository = db.session.query(Repository).filter_by(
        name=hook_data['repo_name'], user=hook_data['repo_user']
    ).first()
    if repository is None:
        repository = Repository(
            name=hook_data['repo_name'],
            user=hook_data['repo_user'],
            url=hook_data['repo_url']
        )
        db.session.add(repository)
        db.session.commit()

    commit = db.session.query(Commit).filter_by(
        hash=hook_data['hash'], repository_id=repository.id
    ).first()
    if commit is None:
        commit = Commit(
            repository_id=repository.id,
            hash=hook_data['hash'],
            ref=hook_data['ref'],
            compare_url=hook_data['compare_url'],
            committer_name=hook_data['committer_name'],
            committer_email=hook_data['committer_email'],
            message=hook_data['message']
        )
        db.session.add(commit)
        db.session.commit()
    return 'OK'
