A curated list of open technology projects to sustain a stable climate, energy supply, biodiversity and natural resources.

specify7

A biological collections data management platform.
https://github.com/specify/specify7

Category: Biosphere
Sub Category: Biodiversity Data Access and Management

Keywords from Contributors

biodiversity archiver biodiversity-informatics species transforms specimen curation measur museum community

Last synced: about 7 hours ago
JSON representation

Repository metadata

An open-source platform for managing biological and geological collections.

README.md

Specify 7

The Specify Collections Consortium is pleased
to offer Specify 7, the web implementation of our biological collections data
management platform.

We encourage members to use our
Dockerized compositions of
Specify 7. You can choose a version, make the necessary adjustments and then run
a single command to get everything working. It is very simple and can be easily
updated when new versions are released. Members can contact us at
[email protected] to gain access
to this repository.

The new generation of Specify combines the interface design components and data
management foundation of Specify 6 with the efficiency and ease-of-use of
web-based data access and cloud computing. Specify 7 uses the same interface
layout language as Specify 6, so any user interface customization made in one
platform is mirrored in the other. Also Specify 6 and Specify 7 use the same
data model and can work from the same Specify MySQL or MariaDB database, which
means 6 and 7 can be run simultaneously with any Specify collection. Specify 7
helps transition Specify 6 collections to cloud computing. It is also a great
starting platform for institutions that prefer zero workstation software
installation and ubiquitous web browser access.

Specify 7’s architecture supports collaborative digitization projects and remote
hosting of specimen databases. Without the need for a local area or campus
network to connect to the MySQL data server, Specify 7 gives you and your
collaborators access to a shared specimen database through any web browser.
Finding it challenging to obtain IT support to maintain a local secure database
server? With the Specify 7 server software supported on generic Linux servers,
museums can utilize a server hosting service to provide support for the
technical complexities of systems administration, security management, and
backing-up. Want to create a joint database for a collaborative digitizing
effort? No problem! Host, hire a hosting service or use our
Specify Cloud service for
your Specify database, set up accounts and go. We provide the same efficient
user interface, report and labels customization and help desk support for
Specify 7 as we do for Specify 6.

Secure. Support for Single Sign-On (SSO) integrates Specify 7 with a campus
or institutional identity providers. It supports all identity providers (IdPs)
that have an OpenID endpoints.

The Security and Accounts tool allows administrators to give access based on
roles and policies. Create, edit, and copy roles among collections and
databases. Administrators can give users as many or few permissions as desired,
from guest accounts to collection managers.

Accessible. It is important that web applications work for people with
disabilities. Specify 7 is developed with this top of mind, not only meeting
international accessibility standards but also providing a better experience for
everyone.

Specify 7 is largely compliant with the main WWW accessibility standard – WCAG
2.1 (AA)
. It supports screen readers and allows each user to customize their
color scheme and appearance as well as reduce motion and resize all elements.

This accessible design respects system and web browser preferences for date
formats, language, theme, and animations.


The Specify Collections Consortium is funded by its member institutions. The
Consortium web site is: https://specifysoftware.org

Specify 7 Copyright © 2024 Specify Collections Consortium. Specify comes with
ABSOLUTELY NO WARRANTY. This is free software licensed under GNU General Public
License 2 (GPL2).

Specify Collections Consortium
Biodiversity Institute
University of Kansas
1345 Jayhawk Blvd.
Lawrence, KS 66045 USA

Table of Contents

Changelog

Changelog is available in CHANGELOG.md

Installation

We encourage all users to read our documentation on the Community Forum
regarding installing and deploying Specify –
Specify 7 Installation Instructions.

If you are an existing Specify 6 user who is looking to evaluate Specify 7, you
can contact [email protected]
along with a copy of your database and we can configure a temporary deployment
for evaluation purposes.

Docker Installation (Recommended)

Specify Collections Consortium (SCC) Members:

We encourage members to use our
Dockerized compositions of
Specify 7. You can choose your desired version, make the necessary adjustments
and then run a single command to get everything working. It is very simple and
can be easily updated when new versions are released. Documentation for
deploying Specify using Docker is available within the repository.

📨 Click here to request access
or email [email protected] with
your GitHub username, member institution or collection, and any additional
questions you have for us.

Non-Members:

If your institution is not a member of the Specify Collections Consortium, you
can follow the local installation instructions below or
contact [email protected]
to learn more about joining the SCC to receiving configuration assistance,
support, and hosting services if you are interested.

Local Installation

After completing these instructions you will be able to run the test server and
interact with the Django based Specify webapp in your browser on your local
machine.

Instructions for deployment follow.

Note: If updating from a previous version, some of the python dependencies
have changed. It is recommended to place the new version in a separate directory
next to the previous version and install all the new dependencies in a Python
virtualenv as described below. That will avoid version conflicts and allow the
previous version to continue working while the new version is being set up. When
the new version is working satisfactorily using the test server, the Apache conf
can be changed to point to it (or changed back to the old version, if problems
arise).

Installing system dependencies

Specify 7 requires Python 3.8. Ubuntu 20.04 LTS is recommended. For other
distributions these instructions will have to be adapted.

Ubuntu 20.04 LTS:

sudo apt install -y curl
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get -y install --no-install-recommends \
  build-essential \
  git \
  libldap2-dev \
  libmariadbclient-dev \
  libsasl2-dev \
  nodejs \
  python3-venv \
  python3.8 \
  python3.8-dev \
  redis \
  unzip

CentOS 7 / Red Hat 7:

yum install -y epel-release sudo wget
yum install -y \
  gcc make \
  git \
  openldap-devel \
  mariadb-devel \
  nodejs \
  npm \
  java-11-openjdk-headless \
  python36-virtualenv \
  python36 \
  python36u-devel \
  redis \
  unzip

Afterward, please make sure you have Node.js 20 installed:

node -v

Installing Specify 6

A copy of the most recent Specify 6 release is required on the server as Specify
7 makes use of resource files. A Java runtime is required to execute the Specify
6 installer, but is not needed to run Specify 7. It is possible to copy the
Specify 6 install from another Linux system to avoid the need to install Java on
the server.

wget https://update.specifysoftware.org/Specify_unix_64.sh
sh Specify_unix_64.sh -q -dir ./Specify6.8.03
sudo ln -s $(pwd)/Specify6.8.03 /opt/Specify

Cloning Specify 7 source repository

Clone this repository.

git clone https://github.com/specify/specify7.git

You will now have a specify7 directory containing the source tree.

Note, by default, git clone checks out the production branch of Specify 7.
That branch contains the latest tested features and bug fixes. If you prefer a
more stable release, you can switch to one of our tagged released.

cd specify7
git checkout tags/v7.8.6

Tagged releases are coming out every other week and undergo more testing.

See the list of tags to check what's
the latest stable release.

Adjusting settings files

In the directory specify7/specifyweb/settings you will find the
specify_settings.py file. Make a copy of this file as
local_specify_settings.py and edit it. The file contains comments explaining
the various settings.

Setting up Python Virtual Environment

Using a Python
virtual environment
will avoid version conflicts with other Python libraries on your system. Also,
it avoids having to use a superuser account to install the Python dependencies.

python3.8 -m venv specify7/ve
specify7/ve/bin/pip install wheel
specify7/ve/bin/pip install --upgrade -r specify7/requirements.txt

Building

To build Specify 7 use the default make target.

cd specify7
source ve/bin/activate
make

Note, if source command is not available on your system, try running
. ve/bin/activate instead

Other make targets:

make build

Runs all necessary build steps.

make frontend

Installs or updates Javascript dependencies and builds the Javascript modules
only.

make clean

Removes all generated files.

The following targets require the virualenv to be activated:

make pip_requirements

Install or updates Python dependencies.

make django_migrations

Applies Specify schema changes to the database named in the settings. This step
may fail if the master user configured in the settings does not have DDL
privileges. Changing the MASTER_NAME and MASTER_PASSWORD settings to the
MySQL root user will allow the changes to be applied. Afterward, the master user
settings can be restored.

make runserver

A shortcut for running the Django development server.

make webpack_watch

Run webpack in watch mode so that changes to the frontend source code will be
automatically compiled. Useful during the development process.

Turning on debugging

For development purposes, Django debugging should be turned on. It will enable
stack traces in responses that encounter exceptions, and allow operation with
the unoptimized Javascript files.

Debugging can be enabled by creating the file
specify7/specifyweb/settings/debug.py with the contents, DEBUG = True.

The development server

NOTE: development server should only be run in debug mode. See previous
section for instructions on how to turn on debugging.

Specify7 can be run using the Django development server.

cd specify7
source ve/bin/activate
make runserver

This will start a development server for testing purposes on localhost:8000.

When the server starts up, it will issue a warning that some migrations have not
been applied:

You have 11 unapplied migration(s). Your project may not work
properly until you apply the migrations for app(s): auth,
contenttypes, sessions.  Run 'python manage.py migrate' to apply them.

Specify 7 makes use of functions from the listed Django apps (auth,
contenttypes, and sessions) but does not need the corresponding tables to be
added to the database. Running make django_migrations will apply only those
migrations needed for Specify 7 to operate.

The Specify 7 Worker

Starting from version v7.6.0, the Specify WorkBench utilizes this dedicated
worker process to handle the upload and validation operations.

Starting from version v7.9.0, the record merging functionality employs the
worker to handle all record merging activities.

This worker process utilizes
Celery, a job queue
management system, with
Redis
serving as the broker.

The worker process can be started from the commandline by executing:

cd specify7
celery -A specifyweb worker -l INFO --concurrency=1

For deployment purposes it is recommended to configure a systemd unit to
automatically start the Specify 7 worker process on system start up by executing
the above command within the installation directory. It is possible to run Redis
and worker process on a separate server and to provision multiple worker
processes for high volume scenarios. Contact the Specify team about these use
cases.

Installing production requirements

For production environments, Specify7 can be hosted by Apache. The following
packages are needed:

  • Apache
  • mod-wsgi to connect Python to Apache

Ubuntu:

sudo apt-get install apache2 libapache2-mod-wsgi-py3

CentOS / Red Hat:

yum install httpd python3-mod_wsgi

Warning: This will replace the Python 2.7 version of mod-wsgi that was used by
Specify 7.4.0 and prior. If executed on a production server running one of those
versions, Specify 7 will stop working until the new deployment is configured.

Setting up Apache

In the specify7 directory you will find the specifyweb_apache.conf file.
Make a copy of the file as local_specifyweb_apache.conf and edit the contents
to reflect the location of Specify6 and Specify7 on your system. There are
comments showing what to change.

Then remove the default Apache welcome page and make a link to your
local_specifyweb_apache.conf file.

Ubuntu:

sudo rm /etc/apache2/sites-enabled/000-default.conf
sudo ln -s $(pwd)/specify7/local_specifyweb_apache.conf /etc/apache2/sites-enabled/

CentOS / Red Hat:

sudo ln -s $(pwd)/specify7/local_specifyweb_apache.conf /etc/httpd/conf.d/

Restarting Apache

After changing Apache's config files restart the service.

Ubuntu:

sudo systemctl restart apache2.service

CentOS / Red Hat:

sudo systemctl restart httpd.service

Nginx configuration

Specify 7 is web-server agnostic. Example
nginx.conf
(note, you would have to adjust the host names and enable HTTPs).

Updating Specify 7

Specify 7.4.0 and prior versions were based on Python 2.7. If updating from one
of these versions, it will be necessary to install Python 3.8 by running the
apt-get commands in the
Install system dependencies and the
Production requirements steps. Then proceed as
follows:

  1. Backup your Specify database using MySQL dump or the Specify backup and
    restore tool.

  2. Clone or download a new copy of this repository in a directory next to your
    existing installation.

    git clone https://github.com/specify/specify7.git specify7-new-version

  3. Copy the settings from the existing to the new installation.

    cp specify7/specifyweb/settings/local* specify7-new-version/specifyweb/settings/

  4. Make sure to update the THICK_CLIENT_LOCATION setting in
    local_specify_settings.py, if you are updating the Specify 6 version.

  5. Update the system level dependencies by executing the apt-get command in
    the Installing system dependencies
    section.

  6. Create a new virtualenv for the new installation by following the
    Python Virtual Environment section for the new
    directory.

  7. Build the new version of Specify 7.

  8. Test it out with the development server.

  9. Deploy the new version by updating your Apache config to replace the old
    installation paths with the new ones and restarting Apache.

  10. Configure the Specify 7 worker process to execute at system start up as
    described in The Specify 7 worker section.

Updating the database (Specify 6) version

The Specify database is updated from one version to the next by the Specify 6
application. To update the database version connect to the database with a new
version of Specify 6 and follow the Specify 6 update procedures.

Once the database version is updated, a corresponding copy of Specify 6 must be
provided to the Specify 7 server by repeating the
Installing Specify 6 section of this guide for the new
version of Specify 6.

analytics

Localizing Specify 7

Specify 7 interface is localized to a few languages out of the box. We welcome
contributions of new translations. We are using
Weblate continuous
localization platform.
Instructions on how you can contribute

Citation (CITATION.cff)

cff-version: 1.2.0
message: 'If you use this software in your research, please cite it as:'
authors:
  - name: Specify Collections Consortium & Contributors
    email: [email protected]
title: Specify 7
keywords:
  - collections management software
  - open source
identifiers:
  - type: url
    value: 'https://www.specifysoftware.org/'
    description: Specify Collections Consortium
abstract: >-
  The Specify Collections Consortium research repositories produce software
  platforms that process species and specimen data.
license: GPL-2.0-only
repository-code: specify/specify7
repository: 'https://github.com/specify/specify7'

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 6 days ago

Total Commits: 13,521
Total Committers: 49
Avg Commits per committer: 275.939
Development Distribution Score (DDS): 0.765

Commits in past year: 2,588
Committers in past year: 16
Avg Commits per committer in past year: 161.75
Development Distribution Score (DDS) in past year: 0.733

Name Email Commits
Max Patiiuk m****x@p****k 3183
Ben Anhalt a****t@k****u 2686
Caroline D 1****s 2156
Maksym Patiiuk 4****p 1106
melton-jason m****2@y****m 975
realVinayak r****3@g****m 786
alec_dev a****1@g****m 767
Sharad S s****n@s****g 525
Grant Fitzsimmons 3****s 474
Google Translate n****e@w****g 243
Anonymous n****y@w****g 129
timo t****o@k****u 114
alesan99 a****9@g****m 86
timo t****o@l****u 75
combs-a c****a@g****m 34
Andrew Reyes a****1@g****m 32
gallegonovato f****o@h****s 31
Jim Beach b****h@s****g 17
Heather h****e@c****a 14
Manuel Sánchez Ruiz m****r@m****s 11
cdamyx c****s@a****g 10
Chanu Lee c****1@g****m 8
Carlos Mbendera c****a@g****m 8
Pashia Vang p****2@g****m 7
Tomislav Urban t****n@t****u 7
Antoine Lesimple a****e@i****r 5
Fitzsimmons g****6@b****u 4
Daniel Fernandez d****z@s****h 3
Hugo h****e@o****r 2
Matthew Blissett m****t@b****k 2
and 19 more...

Committer domains:


Issue and Pull Request metadata

Last synced: 1 day ago

Total issues: 2,391
Total pull requests: 1,015
Average time to close issues: 7 months
Average time to close pull requests: about 1 month
Total issue authors: 35
Total pull request authors: 21
Average comments per issue: 1.97
Average comments per pull request: 2.77
Merged pull request: 693
Bot issues: 0
Bot pull requests: 37

Past year issues: 971
Past year pull requests: 458
Past year average time to close issues: about 2 months
Past year average time to close pull requests: 16 days
Past year issue authors: 24
Past year pull request authors: 15
Past year average comments per issue: 0.87
Past year average comments per pull request: 1.74
Past year merged pull request: 280
Past year bot issues: 0
Past year bot pull requests: 23

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/specify/specify7

Top Issue Authors

  • grantfitzsimmons (991)
  • bronwyncombs (190)
  • emenslin (182)
  • maxpatiiuk (167)
  • lexiclevenger (123)
  • CarolineDenis (101)
  • carlosmbe (87)
  • pashiav (66)
  • realVinayak (62)
  • combs-a (59)
  • tlammer (55)
  • sharadsw (53)
  • benanhalt (46)
  • melton-jason (34)
  • alesan99 (31)

Top Pull Request Authors

  • CarolineDenis (426)
  • melton-jason (100)
  • acwhite211 (93)
  • maxpatiiuk (85)
  • sharadsw (82)
  • grantfitzsimmons (81)
  • realVinayak (52)
  • dependabot[bot] (37)
  • alesan99 (16)
  • benanhalt (12)
  • Areyes42 (6)
  • cdamyx (5)
  • carlosmbe (4)
  • combs-a (4)
  • pashiav (3)

Top Issue Labels

  • 1 - Bug (1,468)
  • 1 - Request (619)
  • 2 - Forms (379)
  • 2 - Queries (291)
  • 2 - User Interface (210)
  • 2 - WorkBench (196)
  • 2 - App Resources (184)
  • 2 - Trees (175)
  • geospecify (160)
  • 2 - Interactions (129)
  • todo:verify (128)
  • 2 - Database/Schema (82)
  • 1 - Enhancement (73)
  • 2 - Schema Config (72)
  • SeparationFrom6 (70)
  • 2 - Record Sets (66)
  • 2 - Attachments (64)
  • regression (59)
  • 2 - Security & Accounts (44)
  • good first issue (41)
  • 3 - Verified (39)
  • 2 - Reports (38)
  • res:duplicate (37)
  • 2 - Statistics (37)
  • 2 - Merging (35)
  • 2 - Exporting Data (34)
  • 2 - Preferences (26)
  • Batch Edit (26)
  • type:housekeeping (22)
  • pri:low (17)

Top Pull Request Labels

  • dependencies (38)
  • javascript (30)
  • Migration (20)
  • python (16)
  • 2 - Queries (15)
  • 1 - Bug (13)
  • 2 - API (7)
  • 2 - Trees (6)
  • 2 - Database/Schema (6)
  • 2 - WorkBench (5)
  • geospecify (3)
  • 2 - Forms (2)
  • 1 - Request (2)
  • 2 - Merging (2)
  • 2 - Preferences (2)
  • 2 - Statistics (2)
  • 2 - Interactions (1)
  • 2 - Exporting Data (1)
  • 2 - App Resources (1)
  • type:housekeeping (1)
  • SeparationFrom6 (1)

Dependencies

.github/workflows/docker.yml actions
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • docker/build-push-action v3 composite
  • docker/login-action v2 composite
  • docker/setup-buildx-action v2 composite
.github/workflows/sync-pre-commit.yml actions
  • EndBug/add-and-commit v9 composite
  • actions/checkout v3 composite
  • actions/setup-node v3 composite
.github/workflows/test.yml actions
  • SimenB/github-actions-cpu-cores v1 composite
  • actions/cache v3 composite
  • actions/checkout v3 composite
  • actions/setup-node v3 composite
  • actions/setup-python v4 composite
  • dorny/paths-filter v2 composite
  • mariadb latest docker
Dockerfile docker
  • common latest build
  • node 18-alpine build
  • run-common latest build
  • ubuntu 18.04 build
docker-compose.yml docker
  • mariadb latest
  • nginx alpine
  • redis latest
  • specifyconsortium/report-runner latest
  • specifyconsortium/specify-asset-service latest
  • specifyconsortium/specify6-service 6.8.02
specifyweb/frontend/js_src/package-lock.json npm
  • 1209 dependencies
specifyweb/frontend/js_src/package.json npm
  • @babel/core ^7.18.9 development
  • @babel/plugin-transform-modules-commonjs ^7.18.6 development
  • @babel/preset-env ^7.18.9 development
  • @babel/preset-react ^7.18.6 development
  • @babel/preset-typescript ^7.18.6 development
  • @maxxxxxdlp/eslint-config-react ^1.0.2 development
  • @maxxxxxdlp/prettier-config ^1.0.4 development
  • @maxxxxxdlp/stylelint-config ^1.0.0 development
  • @rushstack/eslint-patch ^1.1.4 development
  • @stylelint/postcss-css-in-js ^0.38.0 development
  • @tailwindcss/forms ^0.5.2 development
  • @testing-library/jest-dom ^5.16.5 development
  • @testing-library/react ^13.3.0 development
  • @testing-library/user-event ^14.4.3 development
  • @types/backbone ^1.4.11 development
  • @types/d3 ^7.4.0 development
  • @types/gettext-parser ^4.0.2 development
  • @types/jest ^28.1.6 development
  • @types/jquery ~3.5.4 development
  • @types/leaflet ^1.7.0 development
  • @types/leaflet.featuregroup.subgroup ^1.0.0 development
  • @types/leaflet.markercluster ^1.4.4 development
  • @types/node ^18.7.9 development
  • @types/papaparse ~4.1.2 development
  • @types/react ^18.0.15 development
  • @types/react-dom ^18.0.6 development
  • @types/react-modal ^3.13.1 development
  • @types/react-router-dom ^5.3.3 development
  • @types/underscore ^1.10.24 development
  • autoprefixer 10.4.5 development
  • babel-jest ^28.1.3 development
  • babel-loader ^8.2.5 development
  • chalk ^4.1.2 development
  • commander ^9.4.1 development
  • core-js ^3.23.4 development
  • css-loader ^6.7.1 development
  • eslint ^8.20.0 development
  • gettext-parser ^6.0.0 development
  • jest ^28.1.3 development
  • jest-environment-jsdom ^28.1.3 development
  • jest-fail-on-console ^2.4.2 development
  • jest-silent-reporter ^0.5.0 development
  • jest-skipped-reporter ^0.0.5 development
  • jsdom-global ^3.0.2 development
  • loader-utils ^3.2.0 development
  • node-notifier ^10.0.1 development
  • postcss ^8.4.14 development
  • postcss-loader ^7.0.1 development
  • postcss-preset-env ^7.7.2 development
  • prettier ^2.7.1 development
  • regenerator-runtime ^0.13.9 development
  • style-loader ^3.3.1 development
  • stylelint ^14.1.0 development
  • tailwindcss ^3.1.6 development
  • ts-node ^10.9.1 development
  • typedoc ^0.23.7 development
  • typescript ^4.6.2 development
  • webpack ^5.73.0 development
  • webpack-cli ^4.10.0 development
  • webpack-manifest-plugin ^5.0.0 development
  • worker-loader ^3.0.8 development
  • @codemirror/lang-json ^6.0.0
  • @codemirror/lang-xml ^6.0.0
  • @codemirror/language ^6.2.0
  • @codemirror/legacy-modes ^6.1.0
  • @headlessui/react ^1.6.6
  • @uiw/codemirror-theme-okaidia ^4.10.4
  • @uiw/codemirror-theme-xcode ^4.10.4
  • @uiw/react-codemirror 4.11.0
  • backbone ~0.9.10
  • codemirror ^6.0.1
  • csv-parse ^5.3.0
  • csv-stringify ^6.2.0
  • d3 ^7.6.1
  • dayjs ^1.10.7
  • handsontable 9.0.0
  • jquery ~1.12.0
  • leaflet ^1.7.1
  • leaflet.featuregroup.subgroup ^1.0.2
  • leaflet.markercluster ^1.5.0
  • react ^18.2.0
  • react-dom ^18.2.0
  • react-draggable ^4.4.5
  • react-modal ^3.16.1
  • react-router-dom ^6.3.0
  • typesafe-i18n ^5.17.1
  • typesafe-reducer ^1.0.3
  • underscore ~1.8.3
  • xlsx ~0.16.8
requirements-testing.txt pypi
  • django-stubs ==1.5.0 test
  • hypothesis ==6.4.0 test
  • hypothesis-jsonschema ==0.19.0 test
  • mypy ==0.770 test
requirements.txt pypi
  • Django ==2.2.10
  • PyJWT ==2.3.0
  • SQLAlchemy ==1.2.11
  • celery ==5.0.3
  • django-auth-ldap ==1.2.15
  • django-jsonfield-backport ==1.0.2
  • jsonschema ==3.2.0
  • mysqlclient ==1.3.13
  • pycryptodome ==3.9.7
  • redis ==3.5.3
  • requests ==2.26.0
  • typing-extensions ==3.7.4.3
.github/workflows/codeql.yml actions
  • actions/checkout v3 composite
  • github/codeql-action/analyze v2 composite
  • github/codeql-action/autobuild v2 composite
  • github/codeql-action/init v2 composite

Score: 10.610833452495886