mirror of
https://github.com/DarrenOfficial/dpaste.git
synced 2024-11-15 08:02:54 +11:00
Require Python3 across the board. Removed unicode
This commit is contained in:
parent
edf5adc541
commit
c1e39d9a7f
11 changed files with 44 additions and 50 deletions
|
@ -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
|
||||
|
|
18
docs/conf.py
18
docs/conf.py
|
@ -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'),
|
||||
]
|
||||
|
||||
|
|
|
@ -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``
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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'<script>hello</script>'
|
||||
XSS_ORIGINAL = '<script>hello</script>'
|
||||
XSS_ESCAPED = '<script>hello</script>'
|
||||
|
||||
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)
|
||||
|
|
|
@ -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,
|
||||
})
|
||||
|
|
3
setup.py
3
setup.py
|
@ -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',
|
||||
],
|
||||
|
|
2
tox.ini
2
tox.ini
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue