Try to use words.
This commit is contained in:
parent
5585af65a6
commit
3a0b346e3a
|
@ -51,3 +51,10 @@ If you're in production collect static files:
|
|||
Run it:
|
||||
|
||||
./manage.py runserver
|
||||
|
||||
|
||||
## Words generation
|
||||
|
||||
To generate the french dict I used
|
||||
|
||||
$ unmunch <(grep po:adj /usr/share/hunspell/fr_FR.dic) /usr/share/hunspell/fr_FR.aff | LC_ALL=C grep '^[a-z]*$' | grep '^[a-z]\{2,7\}$' | uniq > dict/french
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,6 @@
|
|||
from webtools import settings
|
||||
|
||||
|
||||
from django.contrib.sessions.middleware import (
|
||||
SessionMiddleware as DjangoSessionMiddleware,
|
||||
)
|
||||
|
|
|
@ -2,12 +2,44 @@ import string
|
|||
import random
|
||||
import shortuuid
|
||||
import os
|
||||
import re
|
||||
from webtools import settings
|
||||
from functools import lru_cache
|
||||
from .models import Paste
|
||||
|
||||
|
||||
@lru_cache()
|
||||
def find_words():
|
||||
if not settings.DICT:
|
||||
return None
|
||||
short_words = []
|
||||
try:
|
||||
with open(settings.DICT) as dictionary:
|
||||
for line in dictionary:
|
||||
line = line.strip()
|
||||
if re.match("[a-z]{2,5}$", line):
|
||||
short_words.append(line)
|
||||
return short_words
|
||||
except FileNotFoundError:
|
||||
return None
|
||||
|
||||
|
||||
def random_id(model):
|
||||
"""Returns a short uuid for the slug of the given model."""
|
||||
"""Returns a short uuid for the slug of the given model.
|
||||
|
||||
If a DICT is given in the settings, try to use it to generate nicer URLS like:
|
||||
"""
|
||||
short_words = find_words()
|
||||
if short_words:
|
||||
slug = (
|
||||
random.choice(string.digits)
|
||||
+ random.choice(string.ascii_uppercase)
|
||||
+ "-"
|
||||
+ random.choice(short_words)
|
||||
)
|
||||
if not model.objects.filter(slug=slug):
|
||||
return slug
|
||||
# else, fallback to the shortuuid strategy:
|
||||
uuid = random.choice("0123456789") + shortuuid.uuid()
|
||||
for i in range(3, len(uuid)):
|
||||
potential_uuid = uuid[:i]
|
||||
|
|
|
@ -9,9 +9,9 @@ urlpatterns = [
|
|||
url(r"^history$", views.history, name="history"),
|
||||
url(r"^static/(?P<path>.*)", serve, {"document_root": settings.STATIC_ROOT}),
|
||||
url(
|
||||
r"^paste/(?P<slug>[a-zA-Z0-9]+)/(?P<renderer>[a-z]+)?$",
|
||||
r"^paste/(?P<slug>[a-zA-Z0-9-]+)/(?P<renderer>[a-z]+)?$",
|
||||
views.show,
|
||||
name="paste",
|
||||
),
|
||||
url(r"^(?P<slug>[0-9][a-zA-Z0-9]+)$", views.show, name="short_paste"),
|
||||
url(r"^(?P<slug>[0-9][a-zA-Z0-9-]+)$", views.show, name="short_paste"),
|
||||
]
|
||||
|
|
|
@ -8,136 +8,128 @@ SITE_ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
|||
|
||||
### Customize/configure Pasteque
|
||||
|
||||
DISPLAY_NAME = 'Pasteque'
|
||||
DISPLAY_NAME = "Pasteque"
|
||||
COMPRESS_ENABLED = False
|
||||
SECRET_KEY = 'change_me'
|
||||
ALLOWED_HOSTS = ['localhost','127.0.0.1']
|
||||
TIME_ZONE = 'Europe/Brussels'
|
||||
LANGUAGE_CODE = 'fr-FR'
|
||||
DEBUG = False
|
||||
SECRET_KEY = "change_me"
|
||||
ALLOWED_HOSTS = ["localhost", "127.0.0.1"]
|
||||
TIME_ZONE = "Europe/Brussels"
|
||||
LANGUAGE_CODE = "fr-FR"
|
||||
DICT = os.path.join(SITE_ROOT, "dict", "french")
|
||||
DEBUG = True
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
ADMINS = (
|
||||
('user', 'user@hostname.domain'),
|
||||
)
|
||||
ADMINS = (("user", "user@hostname.domain"),)
|
||||
DATABASES = {
|
||||
'default': {
|
||||
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||
'NAME': os.path.join(SITE_ROOT, 'var', 'db', 'webtools.sqlite3'),
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.sqlite3", # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
|
||||
"NAME": os.path.join(SITE_ROOT, "var", "db", "webtools.sqlite3"),
|
||||
# The following settings are not used with sqlite3:
|
||||
'USER': '',
|
||||
'PASSWORD': '',
|
||||
'HOST': '', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
|
||||
'PORT': '', # Set to empty string for default.
|
||||
"USER": "",
|
||||
"PASSWORD": "",
|
||||
"HOST": "", # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
|
||||
"PORT": "", # Set to empty string for default.
|
||||
}
|
||||
}
|
||||
|
||||
### End of customisation
|
||||
|
||||
APP_NAME = 'Pasteque'
|
||||
APP_VERSION = 'v0.1'
|
||||
APP_NAME = "Pasteque"
|
||||
APP_VERSION = "v0.1"
|
||||
SITE_ID = 1
|
||||
MANAGERS = ADMINS
|
||||
USE_I18N = True
|
||||
USE_L10N = True
|
||||
USE_TZ = True
|
||||
MEDIA_URL = ''
|
||||
CACHE_PATH = os.path.join(SITE_ROOT, 'var', 'pygments-static')
|
||||
COMPRESS_ROOT = os.path.join(SITE_ROOT, 'static')
|
||||
MEDIA_ROOT = os.path.join(SITE_ROOT, 'assets')
|
||||
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')
|
||||
STATIC_URL = '/static/'
|
||||
MEDIA_URL = ""
|
||||
CACHE_PATH = os.path.join(SITE_ROOT, "var", "pygments-static")
|
||||
COMPRESS_ROOT = os.path.join(SITE_ROOT, "static")
|
||||
MEDIA_ROOT = os.path.join(SITE_ROOT, "assets")
|
||||
STATIC_ROOT = os.path.join(SITE_ROOT, "static")
|
||||
STATIC_URL = "/static/"
|
||||
STATICFILES_FINDERS = (
|
||||
'django.contrib.staticfiles.finders.FileSystemFinder',
|
||||
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
|
||||
'compressor.finders.CompressorFinder',
|
||||
"django.contrib.staticfiles.finders.FileSystemFinder",
|
||||
"django.contrib.staticfiles.finders.AppDirectoriesFinder",
|
||||
"compressor.finders.CompressorFinder",
|
||||
)
|
||||
TEMPLATE_LOADERS = (
|
||||
'django.template.loaders.filesystem.Loader',
|
||||
'django.template.loaders.app_directories.Loader',
|
||||
"django.template.loaders.filesystem.Loader",
|
||||
"django.template.loaders.app_directories.Loader",
|
||||
)
|
||||
|
||||
TEMPLATES = [
|
||||
{
|
||||
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
||||
'DIRS': [],
|
||||
'APP_DIRS': True,
|
||||
'OPTIONS': {
|
||||
'context_processors': [
|
||||
'django.contrib.auth.context_processors.auth',
|
||||
'django.contrib.messages.context_processors.messages',
|
||||
'django.template.context_processors.debug',
|
||||
'django.template.context_processors.request',
|
||||
'paste.context_processors.app_details',
|
||||
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
||||
"DIRS": [],
|
||||
"APP_DIRS": True,
|
||||
"OPTIONS": {
|
||||
"context_processors": [
|
||||
"django.contrib.auth.context_processors.auth",
|
||||
"django.contrib.messages.context_processors.messages",
|
||||
"django.template.context_processors.debug",
|
||||
"django.template.context_processors.request",
|
||||
"paste.context_processors.app_details",
|
||||
],
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
'paste.middleware.SessionMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
"paste.middleware.SessionMiddleware",
|
||||
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
||||
"django.contrib.messages.middleware.MessageMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
"django.middleware.csrf.CsrfViewMiddleware",
|
||||
]
|
||||
|
||||
ROOT_URLCONF = 'webtools.urls'
|
||||
WSGI_APPLICATION = 'webtools.wsgi.application'
|
||||
ROOT_URLCONF = "webtools.urls"
|
||||
WSGI_APPLICATION = "webtools.wsgi.application"
|
||||
INSTALLED_APPS = (
|
||||
'django.contrib.staticfiles',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.admin',
|
||||
'django.contrib.auth',
|
||||
'django.contrib.messages',
|
||||
'django.contrib.sessions',
|
||||
'compressor',
|
||||
'paste',
|
||||
"django.contrib.staticfiles",
|
||||
"django.contrib.contenttypes",
|
||||
"django.contrib.admin",
|
||||
"django.contrib.auth",
|
||||
"django.contrib.messages",
|
||||
"django.contrib.sessions",
|
||||
"compressor",
|
||||
"paste",
|
||||
)
|
||||
|
||||
PASTE = {
|
||||
'has_title': False,
|
||||
'has_expire_by_views': False,
|
||||
'has_meta_table': False,
|
||||
'show_char_left': False,
|
||||
'private_by_default': True,
|
||||
'enabled_renderers': ['pygments', 'raw'],
|
||||
'default_renderer': 'pygments',
|
||||
'max_characters': 100000,
|
||||
'default_lifetime': 60 * 24 * 7 * 365,
|
||||
'default_language': 'Python',
|
||||
"has_title": False,
|
||||
"has_expire_by_views": False,
|
||||
"has_meta_table": False,
|
||||
"show_char_left": False,
|
||||
"private_by_default": True,
|
||||
"enabled_renderers": ["pygments", "raw"],
|
||||
"default_renderer": "pygments",
|
||||
"max_characters": 100000,
|
||||
"default_lifetime": 60 * 24 * 7 * 365,
|
||||
"default_language": "Python",
|
||||
}
|
||||
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': False,
|
||||
'filters': {
|
||||
'require_debug_false': {
|
||||
'()': 'django.utils.log.RequireDebugFalse'
|
||||
}
|
||||
},
|
||||
'handlers': {
|
||||
'mail_admins': {
|
||||
'level': 'ERROR',
|
||||
'filters': ['require_debug_false'],
|
||||
'class': 'django.utils.log.AdminEmailHandler'
|
||||
"version": 1,
|
||||
"disable_existing_loggers": False,
|
||||
"filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}},
|
||||
"handlers": {
|
||||
"mail_admins": {
|
||||
"level": "ERROR",
|
||||
"filters": ["require_debug_false"],
|
||||
"class": "django.utils.log.AdminEmailHandler",
|
||||
},
|
||||
'console': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.StreamHandler',
|
||||
},
|
||||
'logfile': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(SITE_ROOT, 'var', 'logs', 'error.log'),
|
||||
'maxBytes': 50000,
|
||||
'backupCount': 2,
|
||||
"console": {"level": "DEBUG", "class": "logging.StreamHandler",},
|
||||
"logfile": {
|
||||
"level": "DEBUG",
|
||||
"class": "logging.handlers.RotatingFileHandler",
|
||||
"filename": os.path.join(SITE_ROOT, "var", "logs", "error.log"),
|
||||
"maxBytes": 50000,
|
||||
"backupCount": 2,
|
||||
},
|
||||
},
|
||||
'loggers': {
|
||||
'django.request': {
|
||||
'handlers': ['console','logfile'],
|
||||
'level': 'ERROR',
|
||||
'propagate': True,
|
||||
"loggers": {
|
||||
"django.request": {
|
||||
"handlers": ["console", "logfile"],
|
||||
"level": "ERROR",
|
||||
"propagate": True,
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue