From bd5749640dc62c0c81a79b41a0e3bedd9f979d11 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 11 2016 13:26:15 +0000 Subject: [PATCH 1/3] Only select the close_status when there is one --- diff --git a/pagure/ui/issues.py b/pagure/ui/issues.py index aee72dc..b1b8954 100644 --- a/pagure/ui/issues.py +++ b/pagure/ui/issues.py @@ -807,7 +807,9 @@ def view_issue(repo, issueid, username=None, namespace=None): form.priority.data = str(issue.priority) form.milestone.data = str(issue.milestone) form.private.data = issue.private - form.close_status.data = issue.close_status + form.close_status.data = '' + if issue.close_status: + form.close_status.data = issue.close_status tag_list = pagure.lib.get_tags_of_project(SESSION, repo) knowns_keys = {} From 6956808b722ef896fd53cb7793fd2b7949156b64 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 11 2016 13:26:21 +0000 Subject: [PATCH 2/3] Ensure we write the files in UTF-8 --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index 130adfd..7093975 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -188,7 +188,7 @@ def is_valid_ssh_key(key): if not key: return None with tempfile.TemporaryFile() as f: - f.write(key) + f.write(key.encode('utf-8')) f.seek(0) proc = subprocess.Popen(['/usr/bin/ssh-keygen', '-l', '-f', '/dev/stdin'], From 7aa0258cbe39942a5395eee9b069a1738a03ab30 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Oct 11 2016 13:26:30 +0000 Subject: [PATCH 3/3] Fix the form so that the values returned are strings as expected --- diff --git a/pagure/forms.py b/pagure/forms.py index 0698df2..7bfdaac 100644 --- a/pagure/forms.py +++ b/pagure/forms.py @@ -13,6 +13,7 @@ # pylint: disable=super-on-old-class import re +import tempfile import flask import flask_wtf as wtf @@ -21,8 +22,8 @@ try: except ImportError: from flask_wtf import Form as FlaskForm +import six import wtforms -import tempfile import pagure import pagure.lib @@ -34,6 +35,15 @@ PROJECT_NAME_REGEX = \ '^[a-zA-z0-9_][a-zA-Z0-9-_]*$' +def convert_value(val): + """ Convert the provided values to strings when possible. """ + if val: + if not isinstance(val, (list, tuple, six.string_types)): + return val.decode('utf-8') + elif isinstance(val, six.string_types): + return val + + class MultipleEmail(wtforms.validators.Email): """ Split the value by comma and run them through the email validator of wtforms. @@ -119,7 +129,7 @@ class ProjectForm(ProjectFormSimplified): 'Project Namespace', [wtforms.validators.optional()], choices=[], - coerce=lambda val: unicode(val) if val else None + coerce=convert_value ) def __init__(self, *args, **kwargs): @@ -296,7 +306,7 @@ class UpdateIssueForm(FlaskForm): 'Milestone', [wtforms.validators.Optional()], choices=[], - coerce=lambda val: unicode(val) if val else None + coerce=convert_value ) private = wtforms.BooleanField( 'Private', @@ -306,7 +316,7 @@ class UpdateIssueForm(FlaskForm): 'Closed as', [wtforms.validators.Optional()], choices=[], - coerce=lambda val: unicode(val) if val else None + coerce=convert_value ) def __init__(self, *args, **kwargs):