SODAR Core Development Resources
This document details instructions and guidelines for development of the SODAR Core package.
App Development
Guidelines for developing internal SODAR Core apps (ones included when installing the django-sodar-core package) are detailed in this section.
For the most part, developing apps within the SODAR Core package follow the same guidelines as detailed in Site Development. However, there are certain exceptions.
REST API Views
For internal SODAR Core apps, you need to use core counterparts to the mixins
than provided for SODAR Core using sites. The counterparts use different media
type and versioning from views to be implemented on external sites. This is to
prevent version number clashes requiring changes in external APIs. The classes
can be found in projectroles.views_api
and are as follows:
CoreAPIVersioning
CoreAPIRenderer
CoreAPIBaseMixin
CoreAPIBaseProjectMixin
CoreAPIGenericProjectMixin
For detailed API descriptions, see docstrings in the view_api
module. The
media type and versioning for these views are hardcoded and should not be
changed, except version information upon a new release of SODAR Core.
Projectroles App Development
This section details issues regarding updates to the projectroles
app.
Warning
As all other apps in SODAR Core as well as sites implementing SODAR Core are based on projectroles, changes to this app need to be implemented and tested with extra care. Also make sure to provide detailed documentation for all breaking changes.
Projectroles App Settings
Projectroles defines its own app settings in projectroles/app_settings.py
.
These are not expected to be altered by SODAR Core based sites. These settings
add the local
attribute, which allows/disallows editing the value on a
TARGET
site.
To alter projectroles app settings when developing the app, update the
PROJECTROLES_APP_SETTINGS
dictionary as follows:
'example_setting': {
'scope': 'PROJECT', # PROJECT/USER
'type': 'STRING', # STRING/INTEGER/BOOLEAN
'default': 'example',
'options': ['example', 'example2'], # Optional, only for settings of type STRING or INTEGER
'label': 'Project setting', # Optional, defaults to name/key
'placeholder': 'Enter example setting here', # Optional
'description': 'Example project setting', # Optional
'user_modifiable': True, # Optional, show/hide in forms
'local': False, # Allow editing in target site forms if True
}
Testing
To run unit tests, you have to install Chrome and Chromedriver followed by the Python test requirements:
$ sudo utility/install_chrome.sh
$ pip install -r requirements/test.txt
Now you can run all tests with the following make command:
$ make test
If you want to only run a certain subset of tests, use e.g.:
$ make test arg=projectroles.tests.test_views
Remote Site Development
For developing remote site features, you will want to run two or more SODAR Core
example sites concurrently: one SOURCE
site and one or more TARGET
sites.
For running a single TARGET
site in addition to the main site, the fastest
way to get started is the following:
First, set up a second database called sodar_core_target
using
utility/setup_database.sh
.
Next, migrate the new database and create a superuser using
make manage_target
. The admin user name is hardcoded into admin_target
in config.settings.target
, so you are strongly recommended to use that
name for your target site admin.
$ make manage_target arg=migrate
$ make manage_target arg=createsuperuser
Launch your site with make serve_target
. By default, you can access the site
at Port 8001
on localhost. The port can be altered by providing the
target_port
parameter, e.g. make serve_target target_port=8002
.
Management commands to the target site can be issued with the make manage_target
make command.
Due to how cookies are set by Django, you currently may have to relogin when switching to a different site on your browser. As a workaround you can launch one of the sites in a private/incognito window or use different browsers.
If you need to create multiple target sites for testing PEER
synchronization
features, make sure that you have a separate SODAR Core database for each site
and launch each site on a different port on localhost. The configuration
local_target2.py
is included for developing with multiple TARGET
sites.