Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "bento/ubuntu-16.04"
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.synced_folder "../django-markdownx", "/srv/django-markdownx", create: true
config.vm.provision :shell, :path => "bootstrap.sh", privileged: false
config.vm.network :forwarded_port, guest: 8000, host: 8000
config.vm.hostname = "django-markdownx"
config.ssh.forward_agent = true
config.vm.provider "virtualbox" do |vb|
vb.name = "django-markdownx"
vb.gui = true
vb.customize ["modifyvm", :id,
"--memory", "512",
"--ioapic", "on",
"--cpus", "2"]
end
end
bootstrap.sh
#!/usr/bin/env bash
# NOTE: Python alias
alias python=python3
# NOTE: Install dependencies
sudo apt-get update -y
sudo apt-get install -y gettext build-essential pkg-config nodejs-legacy npm python3-dev libjpeg-dev zlib1g-dev python-virtualenv virtualenvwrapper
# NOTE: Install virtual environment
source /etc/bash_completion.d/virtualenvwrapper
mkvirtualenv --python=/usr/bin/python3 --no-site-packages --unzip-setuptools django-markdownx
pip install --upgrade pip
pip install -r /srv/django-markdownx/requirements.txt
# NOTE: Folders
sudo chown vagrant:vagrant /srv
# NOTE: Bash
sudo sed -i '$a cd /srv/django-markdownx/' ~/.bashrc
sudo sed -i '$a workon django-markdownx' ~/.bashrc
# NOTE: Install Node modules, compile static files and run migrations
cd /srv/django-markdownx/
npm install
npm run dist
./manage.py migrate
echo -e '\e[33;1;5mDONE!\e[0m \e[33;1;3m Connect using "vagrant ssh" \e[0m'
package.json
{
"name": "django-markdownx",
"description": "Django Markdownx frontend (JavaScript).",
"version": "2.0.0",
"author": "Adi, Pouria Hadjibagheri",
"license": "2-clause BSD",
"engines": {
"node": ">=0.10",
"npm": ">=1.3"
},
"devDependencies": {
"watch": "~1",
"typescript": "~2.2",
"uglify-js": "~2.7",
"browserify": "~14.1",
"clean-css-cli": "~4"
},
"config": {
"tsfolder": "markdownx/.static/markdownx/js",
"jsoutput": "markdownx/static/markdownx/js",
"cssfolder": "markdownx/.static/markdownx/admin/css",
"cssoutput": "markdownx/static/markdownx/admin/css"
},
"scripts": {
"build:ts": "tsc -p $npm_package_config_tsfolder/tsconfig.json",
"build:js": "npm run build:ts && browserify $npm_package_config_tsfolder/markdownx.js -o $npm_package_config_jsoutput/markdownx.js && uglifyjs $npm_package_config_jsoutput/markdownx.js -o $npm_package_config_jsoutput/markdownx.js --beautify --stats",
"build:css": "cleancss $npm_package_config_cssfolder/markdownx.css -o $npm_package_config_cssoutput/markdownx.css --format beautify --debug",
"build": "npm run build:js && npm run build:css",
"dist:js": "npm run build:ts && browserify $npm_package_config_tsfolder/markdownx.js -o $npm_package_config_jsoutput/markdownx.js && uglifyjs $npm_package_config_jsoutput/markdownx.js -o $npm_package_config_jsoutput/markdownx.min.js --screw-ie8 --mangle --stats",
"dist:css": "npm run build:css && cleancss $npm_package_config_cssfolder/markdownx.css -o $npm_package_config_cssoutput/markdownx.min.css --compatibility ie9 --debug",
"dist": "npm run dist:js && npm run dist:css",
"watch:js": "watch 'npm run build:js' $npm_package_config_tsfolder -d -u",
"watch:css": "watch 'npm run build:css' $npm_package_config_cssfolder -d -u"
}
}
runtests.py
from __future__ import absolute_import
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'markdownx'))
import django
from django.conf import settings
configure_settings = {
'DATABASES': {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
},
'INSTALLED_APPS': [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.staticfiles',
'markdownx',
],
'DEBUG': False,
'STATIC_URL': '/static/',
'TEMPLATES': [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'markdownx/tests/templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
'debug': True,
},
},
],
'ROOT_URLCONF': 'tests.urls',
}
settings.configure(**configure_settings)
django.setup()
from django.test.utils import get_runner
test_runner = get_runner(settings)
failures = test_runner(
verbosity=1,
interactive=False,
failfast=False).run_tests(['tests'])
sys.exit(failures)
docs
Makefile
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
SPHINXPROJ = DjangoMarkdownx
SOURCEDIR = src
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
docscreate_docs.sh
#!/usr/bin/env bash
# Compile the docs.
make clean
make html
# Open in the browser.
URL="build/html/index.html"
echo "Documentations index file: $URL"
[[ -x $BROWSER ]] && exec "$BROWSER" "$URL"
path=$(which xdg-open || which gnome-open || which open) && exec "$path" "$URL"
echo "Built the docs - but couldn't find a browser to open them."
manage.py
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testapp.settings")
try:
from django.core.management import execute_from_command_line
except ImportError:
# The above import may fail for some other reason. Ensure that the
# issue is really that Django is missing to avoid masking other
# exceptions on Python 2.
try:
import django
except ImportError:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
)
raise
execute_from_command_line(sys.argv)
Dockerfile
FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /markdownx
WORKDIR /markdownx
ADD requirements.txt /markdownx/
RUN python3.6 -m pip install -U setuptools
RUN python3.6 -m pip install -r requirements.txt
ADD . /markdownx/
docker-compose.yml
version: '2'
services:
web:
restart: always
build: .
command: python3.6 manage.py runserver 0.0.0.0:8000
volumes:
- .:/markdownx
ports:
- "8000:8000"
mem_limit: 500m
cpuset: "1"
runtests.py
from __future__ import absolute_import
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'markdownx'))
import django
from django.conf import settings
configure_settings = {
'DATABASES': {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:',
}
},
'INSTALLED_APPS': [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.staticfiles',
'markdownx',
],
'DEBUG': False,
'STATIC_URL': '/static/',
'TEMPLATES': [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(os.path.abspath(os.path.dirname(__file__)), 'markdownx/tests/templates'),
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.contrib.auth.context_processors.auth',
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.media',
'django.template.context_processors.static',
'django.template.context_processors.tz',
'django.contrib.messages.context_processors.messages',
],
'debug': True,
},
},
],
'ROOT_URLCONF': 'tests.urls',
}
settings.configure(**configure_settings)
django.setup()
from django.test.utils import get_runner
test_runner = get_runner(settings)
failures = test_runner(
verbosity=1,
interactive=False,
failfast=False).run_tests(['tests'])
sys.exit(failures)