-
Notifications
You must be signed in to change notification settings - Fork 68
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add whiteboard flag to webcompat sightline bugs (#2498)
Co-authored-by: Suhaib Mujahid <[email protected]>
- Loading branch information
1 parent
8ede0c2
commit d66e5d5
Showing
5 changed files
with
142 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
from typing import Iterable, Optional | ||
|
||
from google.cloud import bigquery | ||
from google.oauth2 import service_account | ||
|
||
from bugbot import utils | ||
|
||
SCOPES = { | ||
"cloud-platform": "https://www.googleapis.com/auth/cloud-platform", | ||
"drive": "https://www.googleapis.com/auth/drive", | ||
} | ||
|
||
|
||
def get_bigquery_client( | ||
project: str, scopes: Optional[Iterable[str]] = None | ||
) -> bigquery.Client: | ||
"""Get a bigquery.Client for a given project | ||
Args: | ||
project: Name of the project. | ||
scopes: Optional iterable containing the scopes the client should have. | ||
By default this will be the cloud-platform scopes required to | ||
run queries. | ||
Returns: | ||
bigquery.Client | ||
""" | ||
scope_urls = ( | ||
[SCOPES["cloud-platform"]] | ||
if scopes is None | ||
else [SCOPES.get(item, item) for item in scopes] | ||
) | ||
|
||
credentials = service_account.Credentials.from_service_account_info( | ||
utils.get_gcp_service_account_info() | ||
).with_scopes(scope_urls) | ||
|
||
return bigquery.Client(project=project, credentials=credentials) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
# This Source Code Form is subject to the terms of the Mozilla Public | ||
# License, v. 2.0. If a copy of the MPL was not distributed with this file, | ||
# You can obtain one at http://mozilla.org/MPL/2.0/. | ||
|
||
from typing import Any, Optional | ||
|
||
from bugbot import gcp | ||
from bugbot.bzcleaner import BzCleaner | ||
|
||
|
||
class WebcompatSightline(BzCleaner): | ||
WHITEBOARD_ENTRY = "[webcompat:sightline]" | ||
|
||
def __init__(self): | ||
super().__init__() | ||
self.sightline_ids = set() | ||
|
||
def description(self) -> str: | ||
return "Bugs with the [webcompat:sightline] whiteboard tag updated" | ||
|
||
def filter_no_nag_keyword(self) -> bool: | ||
return False | ||
|
||
def has_default_products(self) -> bool: | ||
return False | ||
|
||
def handle_bug( | ||
self, bug: dict[str, Any], data: dict[str, Any] | ||
) -> Optional[dict[str, Any]]: | ||
bug_id = str(bug["id"]) | ||
whiteboard = bug["whiteboard"] | ||
|
||
if bug["id"] in self.sightline_ids: | ||
if self.WHITEBOARD_ENTRY not in whiteboard: | ||
self.autofix_changes[bug_id] = { | ||
"whiteboard": whiteboard + self.WHITEBOARD_ENTRY | ||
} | ||
return bug | ||
else: | ||
if self.WHITEBOARD_ENTRY in whiteboard: | ||
self.autofix_changes[bug_id] = { | ||
"whiteboard": whiteboard.replace(self.WHITEBOARD_ENTRY, "") | ||
} | ||
return bug | ||
|
||
return None | ||
|
||
def get_bz_params(self, date) -> dict[str, Any]: | ||
fields = ["id", "summary", "whiteboard"] | ||
self.sightline_ids = self.get_sightline_bug_ids() | ||
# Get all bugs that either have, or should have, the [webcompat:sightline] | ||
# whiteboard entry | ||
return { | ||
"include_fields": fields, | ||
"j_top": "OR", | ||
"f1": "bug_id", | ||
"o1": "anyexact", | ||
"v1": ",".join(str(item) for item in self.sightline_ids), | ||
"f2": "status_whiteboard", | ||
"o2": "substring", | ||
"v2": self.WHITEBOARD_ENTRY, | ||
} | ||
|
||
def get_sightline_bug_ids(self) -> set[int]: | ||
project = "moz-fx-dev-dschubert-wckb" | ||
dataset = "webcompat_knowledge_base" | ||
|
||
client = gcp.get_bigquery_client(project, ["cloud-platform", "drive"]) | ||
query = f""" | ||
SELECT number FROM `{project}.{dataset}.webcompat_topline_metric_site_reports` as bugs | ||
""" | ||
|
||
return {row["number"] for row in client.query(query).result()} | ||
|
||
|
||
if __name__ == "__main__": | ||
WebcompatSightline().run() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<p> | ||
The following {{ plural('bug has', data, pword='bugs have') }} had the <code>[webcompat:sightline]</code> whiteboard entry updated to match their URL: | ||
</p> | ||
<table {{ table_attrs }}> | ||
<thead> | ||
<tr> | ||
<th>Bug</th> | ||
<th>Summary</th> | ||
</tr> | ||
</thead> | ||
<tbody> | ||
{% for i, (bugid, summary) in enumerate(data) -%} | ||
<tr {% if i % 2 == 0 %}bgcolor="#E0E0E0" | ||
{% endif -%} | ||
> | ||
<td> | ||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id={{ bugid }}">{{ bugid }}</a> | ||
</td> | ||
<td>{{ summary | e }}</td> | ||
</tr> | ||
{% endfor -%} | ||
</tbody> | ||
</table> |