mirror of
https://github.com/DarrenOfficial/dpaste.git
synced 2024-11-23 20:06:35 +11:00
More Monkeytyping
This commit is contained in:
parent
4fec267cbe
commit
cb3ad997ac
5 changed files with 39 additions and 28 deletions
|
@ -1,4 +1,6 @@
|
||||||
VERSION = (3, 4)
|
from .types import VersionType
|
||||||
|
|
||||||
|
VERSION: VersionType = (3, 4)
|
||||||
|
|
||||||
__version__ = "{major}.{minor}{rest}".format(
|
__version__ = "{major}.{minor}{rest}".format(
|
||||||
major=VERSION[0],
|
major=VERSION[0],
|
||||||
|
|
|
@ -5,13 +5,15 @@ from django.core.handlers.wsgi import WSGIRequest
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
|
from .types import DjangoChoicesType
|
||||||
|
|
||||||
|
|
||||||
class dpasteAppConfig(AppConfig):
|
class dpasteAppConfig(AppConfig):
|
||||||
name = "dpaste"
|
name: str = "dpaste"
|
||||||
verbose_name = "dpaste"
|
verbose_name: str = "dpaste"
|
||||||
|
|
||||||
# The application title used throughout the user interface.
|
# The application title used throughout the user interface.
|
||||||
APPLICATION_NAME = "dpaste"
|
APPLICATION_NAME: str = "dpaste"
|
||||||
|
|
||||||
# This content is loaded in the <head> section of each template.
|
# This content is loaded in the <head> section of each template.
|
||||||
# You can use it to add any HTML tags, specifically custom CSS styles.
|
# You can use it to add any HTML tags, specifically custom CSS styles.
|
||||||
|
@ -27,35 +29,33 @@ class dpasteAppConfig(AppConfig):
|
||||||
# .btn { background-color: blue; border: 3px solid yellow; }
|
# .btn { background-color: blue; border: 3px solid yellow; }
|
||||||
# </style>
|
# </style>
|
||||||
# """
|
# """
|
||||||
EXTRA_HEAD_HTML = ""
|
EXTRA_HEAD_HTML: str = ""
|
||||||
|
|
||||||
# HTML content injected in the About page
|
# HTML content injected in the About page
|
||||||
EXTRA_POST_ABOUT = ""
|
EXTRA_POST_ABOUT: str = ""
|
||||||
|
|
||||||
# HTML content injeted after the "New snippet" form
|
# HTML content injeted after the "New snippet" form
|
||||||
EXTRA_POST_NEW = ""
|
EXTRA_POST_NEW: str = ""
|
||||||
|
|
||||||
# HTML content injected at the end of every form
|
# HTML content injected at the end of every form
|
||||||
EXTRA_POST_FORM = ""
|
EXTRA_POST_FORM: str = ""
|
||||||
|
|
||||||
# Integer. Length of the random slug for each new snippet. In the rare
|
# Integer. Length of the random slug for each new snippet. In the rare
|
||||||
# case an existing slug is generated again, the length will increase by
|
# case an existing slug is generated again, the length will increase by
|
||||||
# one more character.
|
# one more character.
|
||||||
SLUG_LENGTH = 4
|
SLUG_LENGTH: int = 4
|
||||||
|
|
||||||
# String. A string of characters which are used to create the random slug.
|
# String. A string of characters which are used to create the random slug.
|
||||||
# This is intentionally missing l and I as they look too similar with
|
# This is intentionally missing l and I as they look too similar with
|
||||||
# sans-serif fonts.
|
# sans-serif fonts.
|
||||||
SLUG_CHOICES = (
|
SLUG_CHOICES: str = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890"
|
||||||
"abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ1234567890"
|
|
||||||
)
|
|
||||||
|
|
||||||
# String. The lexer key that is pre-selected in the dropdown. Note that
|
# String. The lexer key that is pre-selected in the dropdown. Note that
|
||||||
# this is only used if the user has not saved a snippet before, otherwise
|
# this is only used if the user has not saved a snippet before, otherwise
|
||||||
LEXER_DEFAULT = "python"
|
LEXER_DEFAULT: str = "python"
|
||||||
|
|
||||||
# Integer. Maximum number of bytes per snippet.
|
# Integer. Maximum number of bytes per snippet.
|
||||||
MAX_CONTENT_LENGTH = 250 * 1024 * 1024
|
MAX_CONTENT_LENGTH: int = 250 * 1024 * 1024
|
||||||
|
|
||||||
# A tuple of seconds and a descriptive string used in the lexer
|
# A tuple of seconds and a descriptive string used in the lexer
|
||||||
# expiration dropdown. Example::
|
# expiration dropdown. Example::
|
||||||
|
@ -77,7 +77,7 @@ class dpasteAppConfig(AppConfig):
|
||||||
# (3600, _('In one hour')),
|
# (3600, _('In one hour')),
|
||||||
# ('never', _('Never')),
|
# ('never', _('Never')),
|
||||||
# )
|
# )
|
||||||
EXPIRE_CHOICES = (
|
EXPIRE_CHOICES: DjangoChoicesType = (
|
||||||
("onetime", _("One-Time snippet")),
|
("onetime", _("One-Time snippet")),
|
||||||
(3600, _("Expire in one hour")),
|
(3600, _("Expire in one hour")),
|
||||||
(3600 * 24 * 7, _("Expire in one week")),
|
(3600 * 24 * 7, _("Expire in one week")),
|
||||||
|
@ -86,7 +86,7 @@ class dpasteAppConfig(AppConfig):
|
||||||
)
|
)
|
||||||
|
|
||||||
# Default value for ``EXPIRE_CHOICES``
|
# Default value for ``EXPIRE_CHOICES``
|
||||||
EXPIRE_DEFAULT = 3600 * 24 * 7
|
EXPIRE_DEFAULT: int = 3600 * 24 * 7
|
||||||
|
|
||||||
# **One-Time snippets** are supported. One-Time snippets are automatically
|
# **One-Time snippets** are supported. One-Time snippets are automatically
|
||||||
# deleted once a defined view count has reached (Default: ``2``). To
|
# deleted once a defined view count has reached (Default: ``2``). To
|
||||||
|
@ -104,21 +104,21 @@ class dpasteAppConfig(AppConfig):
|
||||||
# You can also set the maximum view count after what the snippet gets
|
# You can also set the maximum view count after what the snippet gets
|
||||||
# deleted. The default is ``2``. One view is from the author, one view
|
# deleted. The default is ``2``. One view is from the author, one view
|
||||||
# is from another user.
|
# is from another user.
|
||||||
ONETIME_LIMIT = 2
|
ONETIME_LIMIT: int = 2
|
||||||
|
|
||||||
# Disable "view Raw" mode.
|
# Disable "view Raw" mode.
|
||||||
RAW_MODE_ENABLED = True
|
RAW_MODE_ENABLED: bool = True
|
||||||
|
|
||||||
# If enabled, the "raw View" mode will display the snippet content as
|
# If enabled, the "raw View" mode will display the snippet content as
|
||||||
# plain text rather rendered in a template.
|
# plain text rather rendered in a template.
|
||||||
RAW_MODE_PLAIN_TEXT = True
|
RAW_MODE_PLAIN_TEXT: bool = True
|
||||||
|
|
||||||
# Lexers which have wordwrap enabled by default
|
# Lexers which have wordwrap enabled by default
|
||||||
LEXER_WORDWRAP = ("rst",)
|
LEXER_WORDWRAP: Tuple[str] = ("rst",)
|
||||||
|
|
||||||
# Key names of the default text and code lexer.
|
# Key names of the default text and code lexer.
|
||||||
PLAIN_TEXT_SYMBOL = "_text"
|
PLAIN_TEXT_SYMBOL: str = "_text"
|
||||||
PLAIN_CODE_SYMBOL = "_code"
|
PLAIN_CODE_SYMBOL: str = "_code"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def TEXT_FORMATTER(self,) -> List[Tuple[str, str, Type[object]]]:
|
def TEXT_FORMATTER(self,) -> List[Tuple[str, str, Type[object]]]:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from typing import Any, Dict, Optional, Tuple, Type, Union
|
from typing import Any, Dict, Optional, Tuple, Union
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
|
|
|
@ -42,7 +42,7 @@ class Highlighter(object):
|
||||||
lexer_name: str,
|
lexer_name: str,
|
||||||
direction: Optional[str] = None,
|
direction: Optional[str] = None,
|
||||||
**kwargs
|
**kwargs
|
||||||
) -> SafeString:
|
) -> str:
|
||||||
highlighted_string = self.highlight(code_string, lexer_name=lexer_name)
|
highlighted_string = self.highlight(code_string, lexer_name=lexer_name)
|
||||||
context = {
|
context = {
|
||||||
"highlighted": highlighted_string,
|
"highlighted": highlighted_string,
|
||||||
|
|
|
@ -96,7 +96,9 @@ class SnippetDetailView(DetailView, FormView):
|
||||||
always expire.
|
always expire.
|
||||||
"""
|
"""
|
||||||
if "delete" in self.request.POST:
|
if "delete" in self.request.POST:
|
||||||
snippet = get_object_or_404(Snippet, secret_id=self.kwargs["snippet_id"])
|
snippet = get_object_or_404(
|
||||||
|
Snippet, secret_id=self.kwargs["snippet_id"]
|
||||||
|
)
|
||||||
snippet.delete()
|
snippet.delete()
|
||||||
|
|
||||||
# Append `#` so #delete goes away in Firefox
|
# Append `#` so #delete goes away in Firefox
|
||||||
|
@ -243,7 +245,9 @@ class SnippetHistory(TemplateView):
|
||||||
add_never_cache_headers(response)
|
add_never_cache_headers(response)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def post(self, request: WSGIRequest, *args, **kwargs) -> HttpResponseRedirect:
|
def post(
|
||||||
|
self, request: WSGIRequest, *args, **kwargs
|
||||||
|
) -> HttpResponseRedirect:
|
||||||
"""
|
"""
|
||||||
Delete all user snippets at once.
|
Delete all user snippets at once.
|
||||||
"""
|
"""
|
||||||
|
@ -344,11 +348,16 @@ class APIView(View):
|
||||||
)
|
)
|
||||||
expires, expire_type = get_expire_values(expires)
|
expires, expire_type = get_expire_values(expires)
|
||||||
else:
|
else:
|
||||||
expires = datetime.datetime.now() + datetime.timedelta(seconds=60 * 60 * 24)
|
expires = datetime.datetime.now() + datetime.timedelta(
|
||||||
|
seconds=60 * 60 * 24
|
||||||
|
)
|
||||||
expire_type = Snippet.EXPIRE_TIME
|
expire_type = Snippet.EXPIRE_TIME
|
||||||
|
|
||||||
snippet = Snippet.objects.create(
|
snippet = Snippet.objects.create(
|
||||||
content=content, lexer=lexer, expires=expires, expire_type=expire_type,
|
content=content,
|
||||||
|
lexer=lexer,
|
||||||
|
expires=expires,
|
||||||
|
expire_type=expire_type,
|
||||||
)
|
)
|
||||||
|
|
||||||
# Custom formatter for the API response
|
# Custom formatter for the API response
|
||||||
|
|
Loading…
Reference in a new issue