mirror of https://git.sr.ht/~sircmpwn/hub.sr.ht
Implement bug tracker addition
This commit is contained in:
parent
b98a88e47f
commit
ae7768cc70
|
@ -19,3 +19,53 @@ def new_GET(owner, project_name):
|
|||
trackers = sorted(trackers, key=lambda r: r["updated"], reverse=True)
|
||||
return render_template("tracker-new.html", view="new-resource",
|
||||
owner=owner, project=project, trackers=trackers)
|
||||
|
||||
@trackers.route("/<owner>/<project_name>/trackers/new", methods=["POST"])
|
||||
@loginrequired
|
||||
def new_POST(owner, project_name):
|
||||
owner, project = get_project(owner, project_name, ProjectAccess.write)
|
||||
valid = Validation(request)
|
||||
if "create" in valid:
|
||||
assert False # TODO
|
||||
else:
|
||||
tracker_name = None
|
||||
for field in valid.source:
|
||||
if field.startswith("existing-"):
|
||||
tracker_name = field[len("existing-"):]
|
||||
break
|
||||
|
||||
if not tracker_name:
|
||||
search = valid.optional("search")
|
||||
trackers = todo.get_trackers(owner)
|
||||
# TODO: Search properly
|
||||
tracker = filter(lambda r: search.lower() in r["name"].lower(), trackers)
|
||||
tracker = sorted(trackers, key=lambda r: r["updated"], reverse=True)
|
||||
return render_template("tracker-new.html", view="new-resource",
|
||||
owner=owner, project=project, trackers=trackers,
|
||||
search=search)
|
||||
|
||||
remote_tracker = todo.get_tracker(owner, tracker_name)
|
||||
|
||||
tracker = Tracker()
|
||||
tracker.remote_id = remote_tracker["id"]
|
||||
tracker.project_id = project.id
|
||||
tracker.owner_id = owner.id
|
||||
tracker.name = remote_tracker["name"]
|
||||
tracker.description = remote_tracker["description"]
|
||||
db.session.add(tracker)
|
||||
db.session.flush()
|
||||
|
||||
event = Event()
|
||||
event.event_type = EventType.tracker_added
|
||||
event.tracker_id = tracker.id
|
||||
event.project_id = project.id
|
||||
event.user_id = project.owner_id
|
||||
db.session.add(event)
|
||||
|
||||
todo.ensure_user_webhooks(owner)
|
||||
todo.ensure_tracker_webhooks(owner, tracker.name)
|
||||
|
||||
db.session.commit()
|
||||
|
||||
return redirect(url_for("projects.summary_GET",
|
||||
owner=owner.canonical_name, project_name=project.name))
|
||||
|
|
|
@ -48,3 +48,17 @@ def mailing_list():
|
|||
raise NotImplementedError()
|
||||
elif event == "patchset:received":
|
||||
raise NotImplementedError()
|
||||
|
||||
@csrf_bypass
|
||||
@webhooks.route("/webhooks/tracker", methods=["POST"])
|
||||
def tracker():
|
||||
event = request.headers.get("X-Webhook-Event")
|
||||
payload = json.loads(request.data.decode("utf-8"))
|
||||
if event == "tracker:update":
|
||||
raise NotImplementedError()
|
||||
elif event == "tracker:delete":
|
||||
raise NotImplementedError()
|
||||
elif event == "ticket:create":
|
||||
raise NotImplementedError()
|
||||
else:
|
||||
raise NotImplementedError()
|
||||
|
|
|
@ -121,6 +121,13 @@ class TodoService(SrhtService):
|
|||
raise Exception(r.json())
|
||||
return r.json()
|
||||
|
||||
def ensure_user_webhooks(self, user):
|
||||
config = {
|
||||
origin + url_for("webhooks.tracker"): ["tracker:update", "tracker:delete"]
|
||||
}
|
||||
url = f"{_todosrht}/api/user/webhooks"
|
||||
ensure_webhooks(user, url, config)
|
||||
|
||||
def ensure_tracker_webhooks(self, user, tracker_name):
|
||||
config = {
|
||||
origin + url_for("webhooks.tracker"): ["ticket:create"]
|
||||
|
|
|
@ -15,6 +15,14 @@
|
|||
<p>New mailing list added</p>
|
||||
<small class="text-muted">{{event.created | date}}</small>
|
||||
</div>
|
||||
{% elif event.event_type == EventType.tracker_added %}
|
||||
<div class="event">
|
||||
<a
|
||||
href="{{event.tracker.url()}}"
|
||||
>{{event.tracker.owner.canonical_name}}/{{event.tracker.name}}</a>
|
||||
<p>New ticket tracker added</p>
|
||||
<small class="text-muted">{{event.created | date}}</small>
|
||||
</div>
|
||||
{% else %}
|
||||
TODO: implement event type {{event.event_type}}
|
||||
{% endif %}
|
||||
|
|
|
@ -28,6 +28,11 @@
|
|||
project_name=project.name), "mailing lists")}}
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if any(project.trackers) %}
|
||||
<li class="nav-item">
|
||||
{{link("#", "tickets")}}
|
||||
</li>
|
||||
{% endif %}
|
||||
{# TODO
|
||||
<li class="nav-item">
|
||||
<a
|
||||
|
@ -37,9 +42,6 @@
|
|||
<li class="nav-item">
|
||||
{{link("#", "documentation")}}
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
{{link("#", "tickets")}}
|
||||
</li>
|
||||
#}
|
||||
{% if view == "summary" and current_user and current_user.id == owner.id %}
|
||||
<li class="flex-grow-1"></li>
|
||||
|
|
|
@ -57,6 +57,15 @@
|
|||
{% endif %}
|
||||
</li>
|
||||
<li>
|
||||
{% if any(project.trackers) %}
|
||||
{{icon('check', cls='text-success')}}
|
||||
Add bug trackers
|
||||
<br />
|
||||
<small class="text-muted">
|
||||
You can see the list of your ticket trackers by clicking
|
||||
"tickets" on the project navigation.
|
||||
</small>
|
||||
{% else %}
|
||||
{{icon('plus-square', cls='text-info')}}
|
||||
<a
|
||||
href="{{url_for("trackers.new_GET",
|
||||
|
@ -67,6 +76,7 @@
|
|||
Bug trackers give you a place to organize your tasks and record
|
||||
known defects.
|
||||
</small>
|
||||
{% endif %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -6,6 +6,7 @@ from srht.database import Base
|
|||
class EventType(Enum):
|
||||
source_repo_added = "source_repo_added"
|
||||
mailing_list_added = "mailing_list_added"
|
||||
tracker_added = "tracker_added"
|
||||
external_event = "external_event"
|
||||
|
||||
class Event(Base):
|
||||
|
@ -36,6 +37,11 @@ class Event(Base):
|
|||
mailing_list = sa.orm.relationship("MailingList", cascade="all, delete")
|
||||
"""The mailing list implicated in this event, if applicable"""
|
||||
|
||||
tracker_id = sa.Column(sa.Integer,
|
||||
sa.ForeignKey("tracker.id", ondelete="CASCADE"))
|
||||
tracker = sa.orm.relationship("Tracker", cascade="all, delete")
|
||||
"""The ticket tracker implicated in this event, if applicable"""
|
||||
|
||||
external_source = sa.Column(sa.Unicode) # e.g. "lists.sr.ht"
|
||||
external_summary = sa.Column(sa.Unicode) # markdown
|
||||
external_details = sa.Column(sa.Unicode) # markdown
|
||||
|
|
Loading…
Reference in New Issue