From dbd6ce07d0a815cda9d6d5edf0027bc18482de74 Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Jun 18 2019 16:41:44 +0000 Subject: frontend: nicer submitter identification .. both in web-UI and in backend's redis database. For normal builds (submitted via web-UI or API) we still print the copr user link (pointing to list of user's copr projects). But for webhooks - where we don't know build.user_id - this isn't possible. So if the webhook method allows this (.. so it sets the 'build.submitted_by' field) print that nicely in the web-UI instead. --- diff --git a/frontend/coprs_frontend/alembic/schema/versions/1f4e04bb3618_add_build_submitted_by_field.py b/frontend/coprs_frontend/alembic/schema/versions/1f4e04bb3618_add_build_submitted_by_field.py new file mode 100644 index 0000000..b0b2903 --- /dev/null +++ b/frontend/coprs_frontend/alembic/schema/versions/1f4e04bb3618_add_build_submitted_by_field.py @@ -0,0 +1,20 @@ +""" +add build.submitted_by field + +Revision ID: 1f4e04bb3618 +Revises: 2d8b4722918b +Create Date: 2019-06-10 06:08:14.501770 +""" + +import sqlalchemy as sa +from alembic import op + + +revision = '1f4e04bb3618' +down_revision = '2d8b4722918b' + +def upgrade(): + op.add_column('build', sa.Column('submitted_by', sa.Text(), nullable=True)) + +def downgrade(): + op.drop_column('build', 'submitted_by') diff --git a/frontend/coprs_frontend/coprs/logic/builds_logic.py b/frontend/coprs_frontend/coprs/logic/builds_logic.py index 253caff..e0aa226 100644 --- a/frontend/coprs_frontend/coprs/logic/builds_logic.py +++ b/frontend/coprs_frontend/coprs/logic/builds_logic.py @@ -763,7 +763,8 @@ ORDER BY @classmethod def rebuild_package(cls, package, source_dict_update={}, copr_dir=None, update_callback=None, - scm_object_type=None, scm_object_id=None, scm_object_url=None): + scm_object_type=None, scm_object_id=None, + scm_object_url=None, submitted_by=None): source_dict = package.source_json_dict source_dict.update(source_dict_update) @@ -789,6 +790,7 @@ ORDER BY scm_object_type=scm_object_type, scm_object_id=scm_object_id, scm_object_url=scm_object_url, + submitted_by=submitted_by, ) db.session.add(build) diff --git a/frontend/coprs_frontend/coprs/models.py b/frontend/coprs_frontend/coprs/models.py index 99df1a2..2f177dd 100644 --- a/frontend/coprs_frontend/coprs/models.py +++ b/frontend/coprs_frontend/coprs/models.py @@ -13,6 +13,8 @@ from six.moves.urllib.parse import urljoin from libravatar import libravatar_url import zlib +from flask import url_for + from copr_common.enums import ActionTypeEnum, BackendResultEnum, FailTypeEnum, ModuleStatusEnum, StatusEnum from coprs import constants from coprs import db @@ -832,6 +834,9 @@ class Build(db.Model, helpers.Serializer): # method to call on build state change update_callback = db.Column(db.Text) + # used by webhook builds; e.g. github.com:praiskup, or pagure.io:jdoe + submitted_by = db.Column(db.Text) + @property def user_name(self): return self.user.name @@ -1062,6 +1067,26 @@ class Build(db.Model, helpers.Serializer): return result + @property + def submitter(self): + """ + Return tuple (submitter_string, submitter_link), while the + submitter_link may be empty if we are not able to detect it + wisely. + """ + if self.user: + user = self.user.name + return (user, url_for('coprs_ns.coprs_by_user', username=user)) + + if self.submitted_by: + links = ['http://', 'https://'] + if any([self.submitted_by.startswith(x) for x in links]): + return (self.submitted_by, self.submitted_by) + + return (self.submitted_by, None) + + return (None, None) + class DistGitBranch(db.Model, helpers.Serializer): """ diff --git a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html index 2913266..01a5f83 100644 --- a/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html +++ b/frontend/coprs_frontend/coprs/templates/coprs/detail/build.html @@ -106,9 +106,11 @@
Built by:
- - {{ build.user.name }} - + {% if build.submitter[1] %} + {{ build.submitter[0] }} + {% else %} + {{ build.submitter[0] or "unknown user" }} + {% endif %}
diff --git a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py index fd75f14..c68b9a3 100644 --- a/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py +++ b/frontend/coprs_frontend/coprs/views/backend_ns/backend_general.py @@ -100,7 +100,7 @@ def get_build_record(task): "project_owner": task.build.copr.owner_name, "project_name": task.build.copr_name, "project_dirname": task.build.copr_dirname, - "submitter": task.build.user.name if task.build.user else None, # there is no user for webhook builds + "submitter": task.build.submitter[0], "chroot": task.mock_chroot.name, "repos": task.build.repos, "memory_reqs": task.build.memory_reqs, @@ -144,6 +144,7 @@ def get_srpm_build_record(task): "project_owner": task.copr.owner_name, "project_name": task.copr_name, "project_dirname": task.copr_dirname, + "submitter": task.submitter[0], "source_type": task.source_type, "source_json": task.source_json, "chroot": chroot,