Require Python3 across the board. Removed unicode

This commit is contained in:
Martin Mahner 2018-04-29 11:47:24 +02:00
parent edf5adc541
commit c1e39d9a7f
11 changed files with 44 additions and 50 deletions

View file

@ -1,20 +1,15 @@
language: python
python:
- 2.7
- 3.4
- 3.5
- 3.6
- 3.7-dev
env:
- DJANGO: django>=1.11,<2.0
- DJANGO: django>=2.0
matrix:
exclude:
- python: "2.7"
env: DJANGO=2.0.*
before_install:
- pip install coverage codacy-coverage
- coverage erase

View file

@ -42,10 +42,10 @@ source_suffix = '.rst'
master_doc = 'index'
# General information about the project.
project = u'dpaste'
copyright = u'2013, Martin Mahner'
project = 'dpaste'
copyright = '2013, Martin Mahner'
# The version info for the project you're documenting, acts as replacement for
# The version info for the project yo're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
@ -203,8 +203,8 @@ latex_elements = {
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
('index', 'dpaste.tex', u'dpaste Documentation',
u'Martin Mahner', 'manual'),
('index', 'dpaste.tex', 'dpaste Documentation',
'Martin Mahner', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
@ -233,8 +233,8 @@ latex_documents = [
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
('index', 'dpaste', u'dpaste Documentation',
[u'Martin Mahner'], 1)
('index', 'dpaste', 'dpaste Documentation',
['Martin Mahner'], 1)
]
# If true, show URL addresses after external links.
@ -247,8 +247,8 @@ man_pages = [
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
('index', 'dpaste', u'dpaste Documentation',
u'Martin Mahner', 'dpaste', 'One line description of project.',
('index', 'dpaste', 'dpaste Documentation',
'Martin Mahner', 'dpaste', 'One line description of project.',
'Miscellaneous'),
]

View file

@ -51,10 +51,10 @@ behavior without touching the code:
from django.utils.translation import ugettext_lazy as _
DPASTE_EXPIRE_CHOICES = (
(3600, _(u'In one hour')),
(3600 * 24 * 7, _(u'In one week')),
(3600 * 24 * 30, _(u'In one month')),
(3600 * 24 * 30 * 12 * 100, _(u'100 Years')),
(3600, _('In one hour')),
(3600 * 24 * 7, _('In one week')),
(3600 * 24 * 30, _('In one month')),
(3600 * 24 * 30 * 12 * 100, _('100 Years')),
)
**One-Time snippets** are supported. One-Time snippets are automatically
@ -64,10 +64,10 @@ behavior without touching the code:
from django.utils.translation import ugettext_lazy as _
DPASTE_EXPIRE_CHOICES = (
('onetime', _(u'One-Time snippet')),
(3600, _(u'In one hour')),
(3600 * 24 * 7, _(u'In one week')),
(3600 * 24 * 30, _(u'In one month')),
('onetime', _('One-Time snippet')),
(3600, _('In one hour')),
(3600 * 24 * 7, _('In one week')),
(3600 * 24 * 30, _('In one month')),
)
You can also set the maximum view count after what the snippet gets
@ -82,8 +82,8 @@ behavior without touching the code:
from django.utils.translation import ugettext_lazy as _
DPASTE_EXPIRE_CHOICES = (
(3600, _(u'In one hour')),
(u'never', _(u'Never')),
(3600, _('In one hour')),
('never', _('Never')),
)
``DPASTE_EXPIRE_DEFAULT``

View file

@ -21,10 +21,10 @@ EXPIRE_DEFAULT = getattr(settings, 'DPASTE_EXPIRE_DEFAULT', 3600)
MAX_CONTENT_LENGTH = getattr(settings, 'DPASTE_MAX_CONTENT_LENGTH', 250*1024*1024)
def get_expire_values(expires):
if expires == u'never':
if expires == 'never':
expire_type = Snippet.EXPIRE_KEEP
expires = None
elif expires == u'onetime':
elif expires == 'onetime':
expire_type = Snippet.EXPIRE_ONETIME
expires = None
else:

View file

@ -24,6 +24,6 @@ class Command(BaseCommand):
for d in deleteable_snippets:
self.stdout.write(u"- %s (%s)\n" % (d.secret_id, d.expires))
if options.get('dry_run'):
self.stdout.write(u'Dry run - Not actually deleting snippets!\n')
self.stdout.write('Dry run - Not actually deleting snippets!\n')
else:
deleteable_snippets.delete()

View file

@ -37,22 +37,22 @@ class Snippet(models.Model):
EXPIRE_KEEP = 2
EXPIRE_ONETIME = 3
EXPIRE_CHOICES = (
(EXPIRE_TIME, _(u'Expire by timestamp')),
(EXPIRE_KEEP, _(u'Keep Forever')),
(EXPIRE_ONETIME, _(u'One-Time snippet')),
(EXPIRE_TIME, _('Expire by timestamp')),
(EXPIRE_KEEP, _('Keep Forever')),
(EXPIRE_ONETIME, _('One-Time snippet')),
)
secret_id = models.CharField(
_(u'Secret ID'), max_length=255, blank=True, null=True, unique=True)
content = models.TextField(_(u'Content'))
_('Secret ID'), max_length=255, blank=True, null=True, unique=True)
content = models.TextField(_('Content'))
lexer = models.CharField(
_(u'Lexer'), max_length=30, default=highlight.LEXER_DEFAULT)
_('Lexer'), max_length=30, default=highlight.LEXER_DEFAULT)
published = models.DateTimeField(
_(u'Published'), auto_now_add=True)
_('Published'), auto_now_add=True)
expire_type = models.PositiveSmallIntegerField(
_(u'Expire Type'), choices=EXPIRE_CHOICES, default=EXPIRE_CHOICES[0][0])
_('Expire Type'), choices=EXPIRE_CHOICES, default=EXPIRE_CHOICES[0][0])
expires = models.DateTimeField(
_(u'Expires'), blank=True, null=True)
_('Expires'), blank=True, null=True)
view_count = models.PositiveIntegerField(
_('View count'), default=0)
parent = models.ForeignKey(

View file

@ -244,7 +244,7 @@ class SnippetAPITestCase(TestCase):
"""
Leading Whitespace is retained in the db.
"""
content = u' one\n two\n three\n four'
content = ' one\n two\n three\n four'
self.client.post(self.api_url, {'content': content})
self.assertEqual(Snippet.objects.all()[0].content, content)

View file

@ -102,7 +102,7 @@ class SnippetTestCase(TestCase):
the snippet is considered as spam. We let the user know its spam.
"""
data = self.valid_form_data()
data['title'] = u'Any content'
data['title'] = 'Any content'
response = self.client.post(self.new_url, data, follow=True)
self.assertEqual(response.status_code, 200)
self.assertEqual(Snippet.objects.count(), 0)
@ -212,8 +212,8 @@ class SnippetTestCase(TestCase):
# -------------------------------------------------------------------------
# XSS and correct escaping
# -------------------------------------------------------------------------
XSS_ORIGINAL = u'<script>hello</script>'
XSS_ESCAPED = u'&lt;script&gt;hello&lt;/script&gt;'
XSS_ORIGINAL = '<script>hello</script>'
XSS_ESCAPED = '&lt;script&gt;hello&lt;/script&gt;'
def test_xss_text_lexer(self):
# Simple 'text' lexer
@ -361,7 +361,7 @@ class SnippetTestCase(TestCase):
"""
Leading Whitespace is retained in the db.
"""
content = u' one\n two\n three\n four'
content = ' one\n two\n three\n four'
data = self.valid_form_data(content=content)
self.client.post(self.new_url, data, follow=True)
self.assertEqual(Snippet.objects.all()[0].content, content)

View file

@ -205,16 +205,16 @@ class AboutView(TemplateView):
def _format_default(s):
"""The default response is the snippet URL wrapped in quotes."""
return u'"%s%s"' % (BASE_URL, s.get_absolute_url())
return '"%s%s"' % (BASE_URL, s.get_absolute_url())
def _format_url(s):
"""The `url` format returns the snippet URL, no quotes, but a linebreak after."""
return u'%s%s\n' % (BASE_URL, s.get_absolute_url())
return '%s%s\n' % (BASE_URL, s.get_absolute_url())
def _format_json(s):
"""The `json` format export."""
return json.dumps({
'url': u'%s%s' % (BASE_URL, s.get_absolute_url()),
'url': '%s%s' % (BASE_URL, s.get_absolute_url()),
'content': s.content,
'lexer': s.lexer,
})

View file

@ -2,7 +2,7 @@
from setuptools import find_packages, setup
long_description = u'\n\n'.join((
long_description = '\n\n'.join((
open('README.rst').read(),
open('CHANGELOG').read()
))
@ -23,7 +23,6 @@ setup(
'Intended Audience :: Developers',
'License :: OSI Approved :: MIT License',
'Operating System :: OS Independent',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 3',
'Framework :: Django',
],

View file

@ -3,7 +3,7 @@ toxworkdir=/tmp/tox/dpaste
skip_missing_interpreters=True
envlist=
coverage_setup
py{27,34,35,36}-django-{111}
py{34,35,36}-django-{111}
py{34,35,36}-django-{20}
coverage_report