change db schema

root of all is requests
This commit is contained in:
Ludwig Nussel 2015-05-21 13:17:33 +02:00
parent 0e1addcbd7
commit ea7152130f
7 changed files with 131 additions and 23 deletions

1
.gitignore vendored
View File

@ -1,6 +1,5 @@
*~
*.pyc
*.html
.*.swp
.coverage
.coveralls.yml

View File

@ -40,30 +40,23 @@ app.config.from_object(__name__)
@app.route('/')
def list():
session = db_session()
reports = session.query(ABICheck).all()
requests = session.query(Request).all()
return render_template('index.html', reports = reports)
return render_template('index.html', requests = requests)
@app.route('/request/<int:request_id>')
def request(request_id):
session = db_session()
reports = session.query(ABICheck).filter(ABICheck.request_id == request_id)
request = session.query(Request).filter(Request.id == request_id).one()
return render_template('index.html', reports = reports)
return render_template('request.html', request = request)
@app.route('/report/<int:report_id>')
def show(report_id):
session = db_session()
report = session.query(ABICheck).filter(ABICheck.id == report_id).one()
return render_template('libreport.html', report = report)
@app.route('/report/<int:report_id>/<int:libreport_id>')
def libreport(report_id, libreport_id):
def report(report_id):
session = db_session()
report = session.query(LibReport).filter(LibReport.id == libreport_id).one()
report = session.query(LibReport).filter(LibReport.id == report_id).one()
fn = os.path.join(CACHEDIR, report.htmlreport)

View File

@ -325,8 +325,6 @@ class ABIChecker(ReviewBot.ReviewBot):
self.text_summary = ''
ret = ReviewBot.ReviewBot.check_one_request(self, req)
self.save_reports_to_db(req)
result = None
if ret is not None:
state = 'done'
@ -337,6 +335,9 @@ class ABIChecker(ReviewBot.ReviewBot):
#if state is None and not self.text_summary:
# self.text_summary = 'abichecker will take a look later'
state = 'seen'
self.save_reports_to_db(req, state, result)
if commentid:
self.commentapi.delete(commentid)
self.post_comment(req, state, result)
@ -348,10 +349,20 @@ class ABIChecker(ReviewBot.ReviewBot):
return ret
def save_reports_to_db(self, req):
def save_reports_to_db(self, req, state, result):
request = self.session.query(DB.Request).filter(DB.Request.id == req.reqid).one()
if request:
self.session.query(DB.ABICheck).filter(DB.ABICheck.request_id == req.reqid).delete()
else:
request = DB.Request(id = req.reqid,
state = state,
result = result,
)
self.session.add(request)
self.session.commit()
for r in self.reports:
abicheck = DB.ABICheck(
request_id = req.reqid,
request = request,
src_project = r.src_project,
src_package = r.src_package,
src_rev = r.src_rev,
@ -379,9 +390,9 @@ class ABIChecker(ReviewBot.ReviewBot):
)
self.session.add(libreport)
self.session.commit()
self.text_summary += "* %s: [%s](%s/%d/%d)\n"%(lr.dst_lib,
self.text_summary += "* %s: [%s](%s/report/%d)\n"%(lr.dst_lib,
"compatible" if lr.result else "***INCOMPATIBLE***",
WEB_URL, abicheck.id, libreport.id)
WEB_URL, libreport.id)
self.reports = []

View File

@ -22,7 +22,7 @@
import os
import sys
from datetime import datetime
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, DateTime
from sqlalchemy import Column, ForeignKey, Integer, String, Boolean, DateTime, Text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy.orm import sessionmaker
@ -30,10 +30,22 @@ from sqlalchemy import create_engine
Base = declarative_base()
class Request(Base):
__tablename__ = 'request'
id = Column(Integer, primary_key=True)
state = Column(String(32), nullable=False)
result = Column(String(32), nullable=True)
log = Column(Text(), nullable=True)
t_created = Column(DateTime, default=datetime.now)
t_updated = Column(DateTime, default=datetime.now, onupdate=datetime.now)
class ABICheck(Base):
__tablename__ = 'abicheck'
id = Column(Integer, primary_key=True)
request_id = Column(Integer, nullable=True)
request_id = Column(Integer, ForeignKey('request.id'))
request = relationship(Request, backref=backref('abichecks', order_by=id, cascade="all, delete-orphan"))
src_project = Column(String(255), nullable=False)
src_package = Column(String(255), nullable=False)
src_rev = Column(String(255), nullable=True)

View File

@ -0,0 +1,34 @@
{% extends "layout.html" %}
{% block title %}{{ super() }}ABI Check results{% endblock %}
{% block body %}
{{ super() }}
<h1>ABI Check results</h1>
<table>
<thead>
<tr>
<td>ID</td>
<td>State</td>
<td>Result</td>
<td>Created</td>
<td>Updated</td>
</tr>
</thead>
<tbody>
{% for r in requests %}
<tr>
<td><a href="{{ url_for('request', request_id=r.id) }}">{{ r.id }}</a></td>
<!--
<td><a href="https://build.opensuse.org/request/show/{{r.request_id}}">{{ r.request_id }}</a></td>
-->
<td>{{ r.state }}</td>
<td>{{ r.result }}</td>
<td>{{ r.t_created }}</td>
<td>{{ r.t_updated }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
<!-- vim: sw=4 et
-->

View File

@ -0,0 +1,11 @@
<!doctype html>
{% block head %}
<title>{% block title %}{% endblock %}</title>
<meta charset=utf-8>
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">
<link rel="stylesheet" href="https://static.opensuse.org/themes/bento/css/style.fluid.css" media="screen" />
{% endblock %}
{% for message in get_flashed_messages() %}
<p class=message>{{ message }}
{% endfor %}
{% block body %}{% endblock %}

View File

@ -0,0 +1,48 @@
{% extends "layout.html" %}
{% block title %}{{ super() }}ABI Check results for request {{ request.id }}{% endblock %}
{% block body %}
{{ super() }}
<h1>ABI Check results for request <a href="https://build.opensuse.org/request/show/{{request.id}}">{{ request.id}}</a></h1>
<ul>
{% for check in request.abichecks %}
<li>
{{ check.src_project }}/{{ check.src_package
}}@{{ check.src_rev }} -&gt; {{
check.dst_project }}/{{ check.dst_package }}:
<span class="boolean_{{ check.result }}">{{ "compatible" if check.result else "INCOMPATIBLE" }}</span>
{% for check in request.abichecks %}
<table>
<thead>
<tr>
<td>Repo</td>
<td>Lib</td>
<td>Repo</td>
<td>Lib</td>
<td>Arch</td>
<td>Result</td>
<td>Created</td>
</tr>
</thead>
<tbody>
{% for r in check.reports %}
<tr>
<td>{{ r.src_repo }}</td>
<td>{{ r.src_lib }}</td>
<td>{{ r.dst_repo }}</td>
<td>{{ r.dst_lib }}</td>
<td>{{ r.arch }}</td>
<td><a href="{{ url_for('report', report_id = r.id) }}">
<span class="boolean_{{ r.result }}">{{ "compatible" if r.result else "INCOMPATIBLE" }}</span></a></td>
<td>{{ r.t_created }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endfor %}
</li>
{% endfor %}
</ul>
{% endblock %}
<!-- vim: sw=4 et
-->