Browse Source

fix(plugins): use explicit unicode strings for plugins (#21873)

Stephen Cefali 4 years ago
parent
commit
ec2043dbdc

+ 1 - 1
src/sentry/shared_integrations/constants.py

@@ -7,4 +7,4 @@ ERR_INTERNAL = (
 
 ERR_UNAUTHORIZED = "Unauthorized: either your access token was invalid or you do not have" " access"
 
-ERR_UNSUPPORTED_RESPONSE_TYPE = "An unsupported response type was returned: {content_type}"
+ERR_UNSUPPORTED_RESPONSE_TYPE = u"An unsupported response type was returned: {content_type}"

+ 1 - 1
src/sentry_plugins/amazon_sqs/plugin.py

@@ -174,7 +174,7 @@ class AmazonSQSPlugin(CorePluginMixin, DataForwardingPlugin):
             if s3_bucket:
                 # we want something like 2020-08-29 so we can store it by the date
                 date = event.datetime.strftime("%Y-%m-%d")
-                key = "{}/{}/{}".format(event.project.slug, date, event.event_id)
+                key = u"{}/{}/{}".format(event.project.slug, date, event.event_id)
                 logger.info("sentry_plugins.amazon_sqs.s3_put_object", extra=logging_params)
                 s3_put_object(Bucket=s3_bucket, Body=json.dumps(payload), Key=key)
 

+ 10 - 10
src/sentry_plugins/bitbucket/client.py

@@ -31,7 +31,7 @@ class BitbucketClient(AuthApiClient):
         return kwargs
 
     def get_issue(self, repo, issue_id):
-        return self.get("/1.0/repositories/%s/issues/%s" % (repo, issue_id))
+        return self.get(u"/1.0/repositories/%s/issues/%s" % (repo, issue_id))
 
     def create_issue(self, repo, data):
         data = {
@@ -40,24 +40,24 @@ class BitbucketClient(AuthApiClient):
             "kind": data["issue_type"],
             "priority": data["priority"],
         }
-        return self.post("/1.0/repositories/{}/issues".format(repo), data=data, json=False)
+        return self.post(u"/1.0/repositories/{}/issues".format(repo), data=data, json=False)
 
     def search_issues(self, repo, query):
-        return self.get("/1.0/repositories/{}/issues".format(repo), params={"search": query})
+        return self.get(u"/1.0/repositories/{}/issues".format(repo), params={"search": query})
 
     def create_comment(self, repo, issue_id, data):
         return self.post(
-            "/1.0/repositories/%s/issues/%s/comments" % (repo, issue_id), data=data, json=False
+            u"/1.0/repositories/%s/issues/%s/comments" % (repo, issue_id), data=data, json=False
         )
 
     def get_repo(self, repo):
-        return self.get("/2.0/repositories/{}".format(repo))
+        return self.get(u"/2.0/repositories/{}".format(repo))
 
     def create_hook(self, repo, data):
-        return self.post("/2.0/repositories/{}/hooks".format(repo), data=data)
+        return self.post(u"/2.0/repositories/{}/hooks".format(repo), data=data)
 
     def delete_hook(self, repo, id):
-        return self.delete("/2.0/repositories/{}/hooks/{}".format(repo, id))
+        return self.delete(u"/2.0/repositories/{}/hooks/{}".format(repo, id))
 
     def transform_patchset(self, patch_set):
         file_changes = []
@@ -75,7 +75,7 @@ class BitbucketClient(AuthApiClient):
     def get_commit_filechanges(self, repo, sha):
         # returns unidiff file
 
-        resp = self.get("/2.0/repositories/{}/diff/{}".format(repo, sha), allow_text=True)
+        resp = self.get(u"/2.0/repositories/{}/diff/{}".format(repo, sha), allow_text=True)
 
         diff_file = resp.text
         ps = PatchSet.from_string(diff_file)
@@ -90,7 +90,7 @@ class BitbucketClient(AuthApiClient):
         # return api request that fetches last ~30 commits
         # see https://developer.atlassian.com/bitbucket/api/2/reference/resource/repositories/%7Busername%7D/%7Brepo_slug%7D/commits/%7Brevision%7D
         # using end_sha as parameter
-        data = self.get("/2.0/repositories/{}/commits/{}".format(repo, end_sha))
+        data = self.get(u"/2.0/repositories/{}/commits/{}".format(repo, end_sha))
 
         return self.zip_commit_data(repo, data["values"])
 
@@ -101,7 +101,7 @@ class BitbucketClient(AuthApiClient):
         commits = []
         done = False
 
-        url = "/2.0/repositories/{}/commits/{}".format(repo, end_sha)
+        url = u"/2.0/repositories/{}/commits/{}".format(repo, end_sha)
 
         while not done and len(commits) < 90:
             data = self.get(url)

+ 3 - 3
src/sentry_plugins/bitbucket/repository_provider.py

@@ -50,7 +50,7 @@ class BitbucketRepositoryProvider(BitbucketMixin, providers.RepositoryProvider):
         return config
 
     def get_webhook_secret(self, organization):
-        lock = locks.get("bitbucket:webhook-secret:{}".format(organization.id), duration=60)
+        lock = locks.get(u"bitbucket:webhook-secret:{}".format(organization.id), duration=60)
         with lock.acquire():
             secret = OrganizationOption.objects.get_value(
                 organization=organization, key="bitbucket:webhook_secret"
@@ -73,7 +73,7 @@ class BitbucketRepositoryProvider(BitbucketMixin, providers.RepositoryProvider):
                 {
                     "description": "sentry-bitbucket-repo-hook",
                     "url": absolute_uri(
-                        "/plugins/bitbucket/organizations/{}/webhook/".format(organization.id)
+                        u"/plugins/bitbucket/organizations/{}/webhook/".format(organization.id)
                     ),
                     "active": True,
                     "events": ["repo:push"],
@@ -85,7 +85,7 @@ class BitbucketRepositoryProvider(BitbucketMixin, providers.RepositoryProvider):
             return {
                 "name": data["name"],
                 "external_id": data["external_id"],
-                "url": "https://bitbucket.org/{}".format(data["name"]),
+                "url": u"https://bitbucket.org/{}".format(data["name"]),
                 "config": {"name": data["name"], "webhook_id": resp["uuid"]},
             }
 

+ 1 - 1
src/sentry_plugins/client.py

@@ -36,7 +36,7 @@ class AuthApiClient(ApiClient):
 
     def bind_auth(self, **kwargs):
         token = self.auth.tokens["access_token"]
-        kwargs["headers"]["Authorization"] = "Bearer {}".format(token)
+        kwargs["headers"]["Authorization"] = u"Bearer {}".format(token)
         return kwargs
 
     def _request(self, method, path, **kwargs):

+ 1 - 1
src/sentry_plugins/freight/plugin.py

@@ -6,7 +6,7 @@ from sentry.plugins.bases import ReleaseTrackingPlugin
 from sentry.plugins.interfaces.releasehook import ReleaseHook
 
 
-DOC_HTML = """
+DOC_HTML = u"""
 <p>Configure a Freight notification with the given webhook url.</p>
 <pre class="clippy">{{
     "type": "sentry",

+ 15 - 15
src/sentry_plugins/github/client.py

@@ -20,17 +20,17 @@ class GitHubClientMixin(AuthApiClient):
         # return api request that fetches last ~30 commits
         # see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository
         # using end_sha as parameter
-        return self.get("/repos/{}/commits".format(repo), params={"sha": end_sha})
+        return self.get(u"/repos/{}/commits".format(repo), params={"sha": end_sha})
 
     def compare_commits(self, repo, start_sha, end_sha):
         # see https://developer.github.com/v3/repos/commits/#compare-two-commits
         # where start sha is oldest and end is most recent
-        return self.get("/repos/{}/compare/{}...{}".format(repo, start_sha, end_sha))
+        return self.get(u"/repos/{}/compare/{}...{}".format(repo, start_sha, end_sha))
 
     def get_pr_commits(self, repo, num):
         # see https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request
         # Max: 250 Commits
-        return self.get("/repos/{}/pulls/{}/commits".format(repo, num))
+        return self.get(u"/repos/{}/pulls/{}/commits".format(repo, num))
 
 
 class GitHubClient(GitHubClientMixin, AuthApiClient):
@@ -46,31 +46,31 @@ class GitHubClient(GitHubClientMixin, AuthApiClient):
         return self._request(method, path, auth=None, data=data, params=params)
 
     def get_repo(self, repo):
-        return self.get("/repos/{}".format(repo))
+        return self.get(u"/repos/{}".format(repo))
 
     def get_issue(self, repo, issue_id):
-        return self.get("/repos/{}/issues/{}".format(repo, issue_id))
+        return self.get(u"/repos/{}/issues/{}".format(repo, issue_id))
 
     def create_issue(self, repo, data):
-        return self.post("/repos/{}/issues".format(repo), data=data)
+        return self.post(u"/repos/{}/issues".format(repo), data=data)
 
     def create_comment(self, repo, issue_id, data):
-        return self.post("/repos/{}/issues/{}/comments".format(repo, issue_id), data=data)
+        return self.post(u"/repos/{}/issues/{}/comments".format(repo, issue_id), data=data)
 
     def list_assignees(self, repo):
-        return self.get("/repos/{}/assignees?per_page=100".format(repo))
+        return self.get(u"/repos/{}/assignees?per_page=100".format(repo))
 
     def search_issues(self, query):
-        return self.get("/search/issues", params={"q": query})
+        return self.get(u"/search/issues", params={"q": query})
 
     def create_hook(self, repo, data):
-        return self.post("/repos/{}/hooks".format(repo), data=data)
+        return self.post(u"/repos/{}/hooks".format(repo), data=data)
 
     def update_hook(self, repo, hook_id, data):
-        return self.patch("/repos/{}/hooks/{}".format(repo, hook_id), data=data)
+        return self.patch(u"/repos/{}/hooks/{}".format(repo, hook_id), data=data)
 
     def delete_hook(self, repo, id):
-        return self.delete("/repos/{}/hooks/{}".format(repo, id))
+        return self.delete(u"/repos/{}/hooks/{}".format(repo, id))
 
     def get_installations(self):
         # TODO(jess): remove this whenever it's out of preview
@@ -112,7 +112,7 @@ class GitHubAppsClient(GitHubClientMixin, ApiClient):
     def request(self, method, path, headers=None, data=None, params=None):
         if headers is None:
             headers = {
-                "Authorization": "token %s" % self.get_token(),
+                u"Authorization": "token %s" % self.get_token(),
                 # TODO(jess): remove this whenever it's out of preview
                 "Accept": "application/vnd.github.machine-man-preview+json",
             }
@@ -120,9 +120,9 @@ class GitHubAppsClient(GitHubClientMixin, ApiClient):
 
     def create_token(self):
         return self.post(
-            "/app/installations/{}/access_tokens".format(self.integration.external_id),
+            u"/app/installations/{}/access_tokens".format(self.integration.external_id),
             headers={
-                "Authorization": b"Bearer %s" % self.get_jwt(),
+                u"Authorization": b"Bearer %s" % self.get_jwt(),
                 # TODO(jess): remove this whenever it's out of preview
                 "Accept": "application/vnd.github.machine-man-preview+json",
             },

+ 4 - 4
src/sentry_plugins/github/plugin.py

@@ -241,7 +241,7 @@ class GitHubPlugin(GitHubMixin, IssuePlugin2):
                 "placeholder": "e.g. getsentry/sentry",
                 "help": (
                     "If you want to add a repository to integrate commit data with releases, please install the "
-                    'new <a href="/settings/{}/integrations/github/">'
+                    u'new <a href="/settings/{}/integrations/github/">'
                     "Github global integration</a>.  "
                     "You cannot add repositories to the legacy Github integration."
                 ).format(project.organization.slug),
@@ -301,7 +301,7 @@ class GitHubRepositoryProvider(GitHubMixin, providers.RepositoryProvider):
         return config
 
     def get_webhook_secret(self, organization):
-        lock = locks.get("github:webhook-secret:{}".format(organization.id), duration=60)
+        lock = locks.get(u"github:webhook-secret:{}".format(organization.id), duration=60)
         with lock.acquire():
             # TODO(dcramer): get_or_create would be a useful native solution
             secret = OrganizationOption.objects.get_value(
@@ -321,7 +321,7 @@ class GitHubRepositoryProvider(GitHubMixin, providers.RepositoryProvider):
             "events": WEBHOOK_EVENTS,
             "config": {
                 "url": absolute_uri(
-                    "/plugins/github/organizations/{}/webhook/".format(organization.id)
+                    u"/plugins/github/organizations/{}/webhook/".format(organization.id)
                 ),
                 "content_type": "json",
                 "secret": self.get_webhook_secret(organization),
@@ -357,7 +357,7 @@ class GitHubRepositoryProvider(GitHubMixin, providers.RepositoryProvider):
             return {
                 "name": data["name"],
                 "external_id": data["external_id"],
-                "url": "https://github.com/{}".format(data["name"]),
+                "url": u"https://github.com/{}".format(data["name"]),
                 "config": {
                     "name": data["name"],
                     "webhook_id": resp["id"],

+ 6 - 6
src/sentry_plugins/gitlab/client.py

@@ -16,7 +16,7 @@ class GitLabClient(ApiClient):
         self.token = token
 
     def build_url(self, path):
-        return "{}/api/v4/{}".format(self.base_url, path.lstrip("/"))
+        return u"{}/api/v4/{}".format(self.base_url, path.lstrip("/"))
 
     def request(self, method, path, data=None, params=None):
         headers = {"Private-Token": self.token}
@@ -26,27 +26,27 @@ class GitLabClient(ApiClient):
         return self.request("GET", "/user")
 
     def get_project(self, repo):
-        return self.request("GET", "/projects/{}".format(quote(repo, safe="")))
+        return self.request("GET", u"/projects/{}".format(quote(repo, safe="")))
 
     def get_issue(self, repo, issue_id):
         try:
             return self.request(
-                "GET", "/projects/{}/issues/{}".format(quote(repo, safe=""), issue_id)
+                "GET", u"/projects/{}/issues/{}".format(quote(repo, safe=""), issue_id)
             )
         except IndexError:
             raise ApiError("Issue not found with ID", 404)
 
     def create_issue(self, repo, data):
-        return self.request("POST", "/projects/{}/issues".format(quote(repo, safe="")), data=data)
+        return self.request("POST", u"/projects/{}/issues".format(quote(repo, safe="")), data=data)
 
     def create_note(self, repo, issue_iid, data):
         return self.request(
             "POST",
-            "/projects/{}/issues/{}/notes".format(quote(repo, safe=""), issue_iid),
+            u"/projects/{}/issues/{}/notes".format(quote(repo, safe=""), issue_iid),
             data=data,
         )
 
     def list_project_members(self, repo):
         return self.request(
-            "GET", "/projects/{}/members/all/?per_page=100".format(quote(repo, safe=""))
+            "GET", u"/projects/{}/members/all/?per_page=100".format(quote(repo, safe=""))
         )

+ 2 - 2
src/sentry_plugins/gitlab/plugin.py

@@ -166,13 +166,13 @@ class GitLabPlugin(CorePluginMixin, IssuePlugin2):
         return {"title": issue["title"]}
 
     def get_issue_label(self, group, issue_id, **kwargs):
-        return "GL-{}".format(issue_id)
+        return u"GL-{}".format(issue_id)
 
     def get_issue_url(self, group, issue_iid, **kwargs):
         url = self.get_option("gitlab_url", group.project).rstrip("/")
         repo = self.get_option("gitlab_repo", group.project)
 
-        return "{}/{}/issues/{}".format(url, repo, issue_iid)
+        return u"{}/{}/issues/{}".format(url, repo, issue_iid)
 
     def get_configure_plugin_fields(self, request, project, **kwargs):
         gitlab_token = self.get_option("gitlab_token", project)

Some files were not shown because too many files changed in this diff