OpenWISP 2 controller module (built using Python and the Django web-framework).
Want to help OpenWISP? Find out how to help us grow here.
Table of Contents:
An automated installer is available at ansible-openwisp2.
- Python 2.7 or Python >= 3.4
- OpenSSL
Install from pypi:
pip install openwisp-controller
Install tarball:
pip install https://github.com/openwisp/openwisp-controller/tarball/master
Alternatively you can install via pip using git:
pip install -e git+git://github.com/openwisp/openwisp-controller#egg=openwisp_controller
If you want to contribute, install your cloned fork:
git clone git@github.com:<your_fork>/openwisp-controller.git
cd openwisp_controller
python setup.py develop
INSTALLED_APPS
and EXTENDED_APPS
(an internal openwisp2 setting) in settings.py
should look like the following (ordering is important):
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.gis',
# all-auth
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
'django_extensions',
# openwisp2 modules
'openwisp_users',
'openwisp_controller.pki',
'openwisp_controller.config',
'openwisp_controller.geo',
# admin
'openwisp_utils.admin_theme',
'django.contrib.admin',
# other dependencies
'sortedm2m',
'reversion',
'leaflet',
# rest framework
'rest_framework',
'rest_framework_gis',
# channels
'channels',
]
EXTENDED_APPS = ('django_netjsonconfig', 'django_x509', 'django_loci',)
Ensure you are using one of the available geodjango backends, eg:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': 'openwisp-controller.db',
}
}
Add openwisp_utils.staticfiles.DependencyFinder
to STATICFILES_FINDERS
in your settings.py
:
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'openwisp_utils.staticfiles.DependencyFinder',
]
Add openwisp_utils.loaders.DependencyLoader
to TEMPLATES
in your settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'OPTIONS': {
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
'openwisp_utils.loaders.DependencyLoader',
],
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
}
]
Add the following settings to settings.py
:
FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'asgiref.inmemory.ChannelLayer',
'ROUTING': 'openwisp_controller.geo.channels.routing.channel_routing',
},
}
LOGIN_REDIRECT_URL = 'admin:index'
ACCOUNT_LOGOUT_REDIRECT_URL = LOGIN_REDIRECT_URL
urls.py
:
from django.conf import settings
from django.conf.urls import include, url
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from openwisp_utils.admin_theme.admin import admin, openwisp_admin
openwisp_admin()
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('openwisp_controller.urls')),
]
urlpatterns += staticfiles_urlpatterns()
Install sqlite:
sudo apt-get install sqlite3 libsqlite3-dev libsqlite3-mod-spatialite openssl libssl-dev
sudo apt-get install gdal-bin libproj-dev libgeos-dev libspatialite-dev
Install your forked repo:
git clone git://github.com/<your_fork>/openwisp-controller
cd openwisp-controller/
python setup.py develop
Install test requirements:
pip install -r requirements-test.txt
Create database:
cd tests/
./manage.py migrate
./manage.py createsuperuser
Launch development server:
./manage.py runserver 0.0.0.0:8000
You can access the admin interface at http://127.0.0.1:8000/admin/.
Run tests with:
./runtests.py
Build from the Dockerfile:
sudo docker build -t openwisp/controller .
Run the docker container:
sudo docker run -it -p 8000:8000 openwisp/controller
You may encounter some issues while installing GeoDjango.
If you are getting below exception:
django.core.exceptions.ImproperlyConfigured: Unable to load the SpatiaLite library extension
then, You need to specify SPATIALITE_LIBRARY_PATH
in your settings.py
as explained in
django documentation regarding how to install and configure spatialte.
Please refer troubleshooting issues related to geospatial libraries.
Please read the OpenWISP contributing guidelines and also keep in mind the following:
- Announce your intentions in the OpenWISP Mailing List
- Fork this repo and install it
- Follow PEP8, Style Guide for Python Code
- Write code
- Write tests for your code
- Ensure all tests pass
- Ensure test coverage does not decrease
- Document your changes
- Send pull request
See CHANGES.
See LICENSE.