argus-server


Nameargus-server JSON
Version 1.16.0 PyPI version JSON
download
home_pageNone
SummaryArgus is an alert aggregator for monitoring systems
upload_time2024-04-23 10:40:48
maintainerNone
docs_urlNone
authorNone
requires_python>=3.8
licenseGPL-3.0-or-later
keywords
VCS
bugtrack_url
requirements anyio asgiref async-timeout attrs autobahn automat certifi cffi channels channels-redis charset-normalizer constantly cryptography daphne defusedxml dj-database-url django django-cors-headers django-filter django-phonenumber-field djangorestframework drf-rw-serializers drf-spectacular exceptiongroup factory-boy faker h11 httpcore httpx hyperlink idna incremental inflection jsonschema jsonschema-specifications msgpack oauthlib phonenumberslite psycopg2 pyasn1 pyasn1-modules pycparser pyjwt pyopenssl python-dataporten-auth python-dateutil python3-openid pytz pyyaml redis referencing requests requests-oauthlib rpds-py service-identity six sniffio social-auth-app-django social-auth-core sqlparse twisted txaio typing-extensions uritemplate urllib3 wheel whitenoise zope-interface
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Argus
[![build badge](https://github.com/Uninett/Argus/workflows/build/badge.svg)](https://github.com/Uninett/Argus/actions)
[![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/master/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![docs badge](https://readthedocs.org/projects/argus-server/badge/?version=latest&style=flat)](http://argus-server.rtfd.io/en/latest/)

Argus is a platform for aggregating incidents across network management systems, and
sending notifications to users. Users create notification profiles that define which
incidents they subscribe to. See [Argus docs](http://argus-server.rtfd.io/en/latest/) for more details.

This repository hosts the backend built with Django. There is also a
[REACT SPA frontend](https://github.com/Uninett/Argus-frontend).


See also the the [Python client library](https://github.com/Uninett/pyargus).

## Installation

There are several ways to install Argus.

### Prerequisites

#### Requirements

* Python 3.8+
* Django 4.2 or 5.0
* pip

#### Optional requirements

* **Redis**
  is recommended if you are going to run the frontend.
  Redis backs the websockets, in order to push realtime updates to the frontend.
* [Argus-frontend](https://github.com/Uninett/Argus-frontend/)
* PostgreSQL
* Docker and docker-compose to run Argus in Docker

#### Optional: Dataporten registration

Dataporten authentication is supported by Argus and can be used to log into
Argus-frontend.
Refer to the [Dataporten](http://argus-server.rtfd.io/en/latest/dataporten.html) section of the documentation to learn
about Dataporten registration, and how to set it up with Argus.

### Install Argus using pip

You can also install Argus with `pip` via PyPI. The package name is `argus-server`:
```console
$ pip install argus-server
```

If you are using the PyPI package in production, please note: The file
`requirements.txt` contains the pinned versions of dependencies that the
release was tested on. The file `constraints.txt` is for controlling versions
of sub-dependencies so as to not poison the pyproject.toml.

To update the dependency lock-files, use `tox`:

```console
$ pip install tox
$ tox -e upgrade-deps -- -U
```

To upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.

To install from the lock-file use pip:

```console
$ pip install -c constraints.txt --upgrade -r requirements.txt
```

Now change and adapt [Argus' settings](#settings-in-argus) according to your needs.

Run the initial Argus setup, and make note of the admin password that is generated:

```console
$ python manage.py initial_setup
******************************************************************************

  Created Argus superuser "admin" with password "2S0qJbjVEew0GunL".

   Please change the password via the admin interface.

******************************************************************************
```

Then run the Argus API server:

```console
$ python manage.py runserver
```

### Setup Argus using Docker Compose

Download the source code first.
```console
$ git clone https://github.com/Uninett/Argus.git
$ cd Argus
```

Running Argus with docker-compose is as simple as
```console
$ docker-compose up
```

Run the initial Argus setup, and make note of the admin password that is generated:

```console
$ docker-compose exec api django-admin initial_setup
******************************************************************************

  Created Argus superuser "admin" with password "ns6bfoKquW12koIP".

   Please change the password via the admin interface.

******************************************************************************
```


You will find Argus running at http://localhost:8000/.

## Settings in Argus

Site-specific settings can either be set using environment variables, using a
`settings.py` file, or a combination of both.

For more information on both methods and a list of the settings, consult the
documentation section on
[site-specific settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html).


## Running Argus in development

### Step 1: Installation

You can use docker-compose to conveniently setup a complete dev environment for Argus,
including PostgreSQL. Instructions
[are provided above](#setup-argus-using-docker-compose).

To do a manual install instead, follow these steps.

Download the source code first.
```console
$ git clone https://github.com/Uninett/Argus.git
$ cd Argus
```

We recommend using virtualenv or virtaulenvwrapper to create
a place to stash Argus' dependencies.

Create and activate a Python virtual environment.
```console
$ python -m venv venv
$ source venv/bin/activate
```

Install Argus' requirements into the virtual env.
```console
$ pip install -r requirements-django42.txt
$ pip install -r requirements/dev.txt
```

### Step 2: Setting environment variables and Django settings

Copy the `cmd.sh-template` to `cmd.sh` and make it executable
```console
$ cp cmd.sh-template cmd.sh
$ chmod u+x cmd.sh
```
Now set the environment variables in the file using an editor.

Required settings in `cmd.sh` are

- `DATABASE_URL`,
- `DJANGO_SETTINGS_MODULE` and
- `SECRET_KEY`.

The `DATAPORTEN` variables are optional. Refer to the dataporten section of
[setting site-specific settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html) for details.

`DJANGO_SETTINGS_MODULE` can be set to `argus.site.settings.dev`.

If you need more complex settings than environment variables and ``cmd.sh`` can provide,
we recommend having a `localsettings.py` in the same directory as `manage.py` with any
overrides.

Refer to the [development notes](http://argus-server.rtfd.io/en/latest/development.html) for further details and
useful hints on managing Argus in development mode.

### Step 3: Run Argus in development

Afterwards, run the initial Argus setup and start the server.
```console
$ python manage.py initial_setup
$ python manage.py runserver
```

You will find Argus running at http://localhost:8000/.

### Code style

Argus uses black as a source code formatter. Black will automatically install
with the [dev requirements](requirements/dev.txt).

A pre-commit hook will format new code automatically before committing.
To enable this pre-commit hook, run

```console
$ pre-commit install
```


## Running tests

Given that Argus is installed and configured as described above,
this command is the most basic option to run the tests.
```console
$ python manage.py test
```

If you have installed `tox`, the following command will
test Argus code against several Django versions, several Python versions, and
automatically compute code coverage.
```console
$ tox
```
An [HTML coverage report](htmlcov/index.html) will be generated.
Refer to the [tox.ini](tox.ini) file for further options.

## Using towncrier to automatically produce the changelog
### Before merging a pull request
To be able to automatically produce the changelog for a release one file for each
pull request (also called news fragment) needs to be added to the folder
`changelog.d/`.

The name of the file consists of three parts separated by a period:
1. The identifier: either the issue number (in case the pull request fixes that issue)
or the pull request number. If we don't want to add a link to the resulting changelog
entry then a `+` followed by a unique short description.
2. The type of the change: we use `security`, `removed`, `deprecated`, `added`,
`changed` and `fixed`.
3. The file suffix, e.g. `.md`, towncrier does not care which suffix a fragment has.

So an example for a file name related to an issue/pull request would be `214.added.md`
or for a file without corresponding issue `+fixed-pagination-bug.fixed.md`.

This file can either be created manually with a file name as specified above and the
changelog text as content or one can use towncrier to create such a file as following:

```console
$ towncrier create -c "Changelog content" 214.added.md
```

When opening a pull request there will be a check to make sure that a news fragment is
added and it will fail if it is missing.

### Before a release
To add all content from the `changelog.d/` folder to the changelog file simply run
```console
$ towncrier build --version {version}
```
This will also delete all files in `changelog.d/`.

To preview what the addition to the changelog file would look like add the flag
`--draft`. This will not delete any files or change `CHANGELOG.md`. It will only output
the preview in the terminal.

A few other helpful flags:
- `date DATE` - set the date of the release, default is today
- `keep` - do not delete the files in `changelog.d/`

More information about [towncrier](https://towncrier.readthedocs.io).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "argus-server",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": null,
    "author_email": "Uninett Opensource <opensource@uninett.no>",
    "download_url": "https://files.pythonhosted.org/packages/9d/b4/4fd1a912bd7ead3224e7519ada8e861b232b10ebf2f62456fcceec170806/argus_server-1.16.0.tar.gz",
    "platform": "any",
    "description": "# Argus\n[![build badge](https://github.com/Uninett/Argus/workflows/build/badge.svg)](https://github.com/Uninett/Argus/actions)\n[![codecov badge](https://codecov.io/gh/Uninett/Argus/branch/master/graph/badge.svg)](https://codecov.io/gh/Uninett/Argus)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![docs badge](https://readthedocs.org/projects/argus-server/badge/?version=latest&style=flat)](http://argus-server.rtfd.io/en/latest/)\n\nArgus is a platform for aggregating incidents across network management systems, and\nsending notifications to users. Users create notification profiles that define which\nincidents they subscribe to. See [Argus docs](http://argus-server.rtfd.io/en/latest/) for more details.\n\nThis repository hosts the backend built with Django. There is also a\n[REACT SPA frontend](https://github.com/Uninett/Argus-frontend).\n\n\nSee also the the [Python client library](https://github.com/Uninett/pyargus).\n\n## Installation\n\nThere are several ways to install Argus.\n\n### Prerequisites\n\n#### Requirements\n\n* Python 3.8+\n* Django 4.2 or 5.0\n* pip\n\n#### Optional requirements\n\n* **Redis**\n  is recommended if you are going to run the frontend.\n  Redis backs the websockets, in order to push realtime updates to the frontend.\n* [Argus-frontend](https://github.com/Uninett/Argus-frontend/)\n* PostgreSQL\n* Docker and docker-compose to run Argus in Docker\n\n#### Optional: Dataporten registration\n\nDataporten authentication is supported by Argus and can be used to log into\nArgus-frontend.\nRefer to the [Dataporten](http://argus-server.rtfd.io/en/latest/dataporten.html) section of the documentation to learn\nabout Dataporten registration, and how to set it up with Argus.\n\n### Install Argus using pip\n\nYou can also install Argus with `pip` via PyPI. The package name is `argus-server`:\n```console\n$ pip install argus-server\n```\n\nIf you are using the PyPI package in production, please note: The file\n`requirements.txt` contains the pinned versions of dependencies that the\nrelease was tested on. The file `constraints.txt` is for controlling versions\nof sub-dependencies so as to not poison the pyproject.toml.\n\nTo update the dependency lock-files, use `tox`:\n\n```console\n$ pip install tox\n$ tox -e upgrade-deps -- -U\n```\n\nTo upgrade a single dependency, replace the `-U` flag with `-P PACKAGENAME`.\n\nTo install from the lock-file use pip:\n\n```console\n$ pip install -c constraints.txt --upgrade -r requirements.txt\n```\n\nNow change and adapt [Argus' settings](#settings-in-argus) according to your needs.\n\nRun the initial Argus setup, and make note of the admin password that is generated:\n\n```console\n$ python manage.py initial_setup\n******************************************************************************\n\n  Created Argus superuser \"admin\" with password \"2S0qJbjVEew0GunL\".\n\n   Please change the password via the admin interface.\n\n******************************************************************************\n```\n\nThen run the Argus API server:\n\n```console\n$ python manage.py runserver\n```\n\n### Setup Argus using Docker Compose\n\nDownload the source code first.\n```console\n$ git clone https://github.com/Uninett/Argus.git\n$ cd Argus\n```\n\nRunning Argus with docker-compose is as simple as\n```console\n$ docker-compose up\n```\n\nRun the initial Argus setup, and make note of the admin password that is generated:\n\n```console\n$ docker-compose exec api django-admin initial_setup\n******************************************************************************\n\n  Created Argus superuser \"admin\" with password \"ns6bfoKquW12koIP\".\n\n   Please change the password via the admin interface.\n\n******************************************************************************\n```\n\n\nYou will find Argus running at http://localhost:8000/.\n\n## Settings in Argus\n\nSite-specific settings can either be set using environment variables, using a\n`settings.py` file, or a combination of both.\n\nFor more information on both methods and a list of the settings, consult the\ndocumentation section on\n[site-specific settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html).\n\n\n## Running Argus in development\n\n### Step 1: Installation\n\nYou can use docker-compose to conveniently setup a complete dev environment for Argus,\nincluding PostgreSQL. Instructions\n[are provided above](#setup-argus-using-docker-compose).\n\nTo do a manual install instead, follow these steps.\n\nDownload the source code first.\n```console\n$ git clone https://github.com/Uninett/Argus.git\n$ cd Argus\n```\n\nWe recommend using virtualenv or virtaulenvwrapper to create\na place to stash Argus' dependencies.\n\nCreate and activate a Python virtual environment.\n```console\n$ python -m venv venv\n$ source venv/bin/activate\n```\n\nInstall Argus' requirements into the virtual env.\n```console\n$ pip install -r requirements-django42.txt\n$ pip install -r requirements/dev.txt\n```\n\n### Step 2: Setting environment variables and Django settings\n\nCopy the `cmd.sh-template` to `cmd.sh` and make it executable\n```console\n$ cp cmd.sh-template cmd.sh\n$ chmod u+x cmd.sh\n```\nNow set the environment variables in the file using an editor.\n\nRequired settings in `cmd.sh` are\n\n- `DATABASE_URL`,\n- `DJANGO_SETTINGS_MODULE` and\n- `SECRET_KEY`.\n\nThe `DATAPORTEN` variables are optional. Refer to the dataporten section of\n[setting site-specific settings](http://argus-server.rtfd.io/en/latest/site-specific-settings.html) for details.\n\n`DJANGO_SETTINGS_MODULE` can be set to `argus.site.settings.dev`.\n\nIf you need more complex settings than environment variables and ``cmd.sh`` can provide,\nwe recommend having a `localsettings.py` in the same directory as `manage.py` with any\noverrides.\n\nRefer to the [development notes](http://argus-server.rtfd.io/en/latest/development.html) for further details and\nuseful hints on managing Argus in development mode.\n\n### Step 3: Run Argus in development\n\nAfterwards, run the initial Argus setup and start the server.\n```console\n$ python manage.py initial_setup\n$ python manage.py runserver\n```\n\nYou will find Argus running at http://localhost:8000/.\n\n### Code style\n\nArgus uses black as a source code formatter. Black will automatically install\nwith the [dev requirements](requirements/dev.txt).\n\nA pre-commit hook will format new code automatically before committing.\nTo enable this pre-commit hook, run\n\n```console\n$ pre-commit install\n```\n\n\n## Running tests\n\nGiven that Argus is installed and configured as described above,\nthis command is the most basic option to run the tests.\n```console\n$ python manage.py test\n```\n\nIf you have installed `tox`, the following command will\ntest Argus code against several Django versions, several Python versions, and\nautomatically compute code coverage.\n```console\n$ tox\n```\nAn [HTML coverage report](htmlcov/index.html) will be generated.\nRefer to the [tox.ini](tox.ini) file for further options.\n\n## Using towncrier to automatically produce the changelog\n### Before merging a pull request\nTo be able to automatically produce the changelog for a release one file for each\npull request (also called news fragment) needs to be added to the folder\n`changelog.d/`.\n\nThe name of the file consists of three parts separated by a period:\n1. The identifier: either the issue number (in case the pull request fixes that issue)\nor the pull request number. If we don't want to add a link to the resulting changelog\nentry then a `+` followed by a unique short description.\n2. The type of the change: we use `security`, `removed`, `deprecated`, `added`,\n`changed` and `fixed`.\n3. The file suffix, e.g. `.md`, towncrier does not care which suffix a fragment has.\n\nSo an example for a file name related to an issue/pull request would be `214.added.md`\nor for a file without corresponding issue `+fixed-pagination-bug.fixed.md`.\n\nThis file can either be created manually with a file name as specified above and the\nchangelog text as content or one can use towncrier to create such a file as following:\n\n```console\n$ towncrier create -c \"Changelog content\" 214.added.md\n```\n\nWhen opening a pull request there will be a check to make sure that a news fragment is\nadded and it will fail if it is missing.\n\n### Before a release\nTo add all content from the `changelog.d/` folder to the changelog file simply run\n```console\n$ towncrier build --version {version}\n```\nThis will also delete all files in `changelog.d/`.\n\nTo preview what the addition to the changelog file would look like add the flag\n`--draft`. This will not delete any files or change `CHANGELOG.md`. It will only output\nthe preview in the terminal.\n\nA few other helpful flags:\n- `date DATE` - set the date of the release, default is today\n- `keep` - do not delete the files in `changelog.d/`\n\nMore information about [towncrier](https://towncrier.readthedocs.io).\n",
    "bugtrack_url": null,
    "license": "GPL-3.0-or-later",
    "summary": "Argus is an alert aggregator for monitoring systems",
    "version": "1.16.0",
    "project_urls": {
        "Homepage": "https://github.com/Uninett/Argus"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5294810c6b9dcc8f9ca9ce1d011ffb9d2ae328ba1aebedcaf7f073d40d8e0f6d",
                "md5": "f6d48ee19f21c1cfd4d6a13d62bad21d",
                "sha256": "7d06c11c9459d8a12d6406a7b35bfab5e80b032b2b706a5280532bde4a3886cd"
            },
            "downloads": -1,
            "filename": "argus_server-1.16.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f6d48ee19f21c1cfd4d6a13d62bad21d",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 135817,
            "upload_time": "2024-04-23T10:40:45",
            "upload_time_iso_8601": "2024-04-23T10:40:45.051304Z",
            "url": "https://files.pythonhosted.org/packages/52/94/810c6b9dcc8f9ca9ce1d011ffb9d2ae328ba1aebedcaf7f073d40d8e0f6d/argus_server-1.16.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "9db44fd1a912bd7ead3224e7519ada8e861b232b10ebf2f62456fcceec170806",
                "md5": "26a71cfbcdb6abf28a76e761c77f6123",
                "sha256": "d02acceae162507d49e0939801a18805d4d7aee309281424bddc0b5e0cc3a357"
            },
            "downloads": -1,
            "filename": "argus_server-1.16.0.tar.gz",
            "has_sig": false,
            "md5_digest": "26a71cfbcdb6abf28a76e761c77f6123",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 441690,
            "upload_time": "2024-04-23T10:40:48",
            "upload_time_iso_8601": "2024-04-23T10:40:48.688673Z",
            "url": "https://files.pythonhosted.org/packages/9d/b4/4fd1a912bd7ead3224e7519ada8e861b232b10ebf2f62456fcceec170806/argus_server-1.16.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-23 10:40:48",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Uninett",
    "github_project": "Argus",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "anyio",
            "specs": [
                [
                    "==",
                    "3.7.1"
                ]
            ]
        },
        {
            "name": "asgiref",
            "specs": [
                [
                    "==",
                    "3.7.2"
                ]
            ]
        },
        {
            "name": "async-timeout",
            "specs": [
                [
                    "==",
                    "4.0.2"
                ]
            ]
        },
        {
            "name": "attrs",
            "specs": [
                [
                    "==",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "autobahn",
            "specs": [
                [
                    "==",
                    "23.1.2"
                ]
            ]
        },
        {
            "name": "automat",
            "specs": [
                [
                    "==",
                    "22.10.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2023.7.22"
                ]
            ]
        },
        {
            "name": "cffi",
            "specs": [
                [
                    "==",
                    "1.15.1"
                ]
            ]
        },
        {
            "name": "channels",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "channels-redis",
            "specs": [
                [
                    "==",
                    "4.1.0"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "constantly",
            "specs": [
                [
                    "==",
                    "15.1.0"
                ]
            ]
        },
        {
            "name": "cryptography",
            "specs": [
                [
                    "==",
                    "42.0.5"
                ]
            ]
        },
        {
            "name": "daphne",
            "specs": [
                [
                    "==",
                    "4.0.0"
                ]
            ]
        },
        {
            "name": "defusedxml",
            "specs": [
                [
                    "==",
                    "0.7.1"
                ]
            ]
        },
        {
            "name": "dj-database-url",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "django",
            "specs": [
                [
                    "==",
                    "4.2.11"
                ]
            ]
        },
        {
            "name": "django-cors-headers",
            "specs": [
                [
                    "==",
                    "4.2.0"
                ]
            ]
        },
        {
            "name": "django-filter",
            "specs": [
                [
                    "==",
                    "23.2"
                ]
            ]
        },
        {
            "name": "django-phonenumber-field",
            "specs": [
                [
                    "==",
                    "7.1.0"
                ]
            ]
        },
        {
            "name": "djangorestframework",
            "specs": [
                [
                    "==",
                    "3.14.0"
                ]
            ]
        },
        {
            "name": "drf-rw-serializers",
            "specs": [
                [
                    "==",
                    "1.1.1"
                ]
            ]
        },
        {
            "name": "drf-spectacular",
            "specs": [
                [
                    "==",
                    "0.26.4"
                ]
            ]
        },
        {
            "name": "exceptiongroup",
            "specs": [
                [
                    "==",
                    "1.1.2"
                ]
            ]
        },
        {
            "name": "factory-boy",
            "specs": [
                [
                    "==",
                    "3.3.0"
                ]
            ]
        },
        {
            "name": "faker",
            "specs": [
                [
                    "==",
                    "19.2.0"
                ]
            ]
        },
        {
            "name": "h11",
            "specs": [
                [
                    "==",
                    "0.14.0"
                ]
            ]
        },
        {
            "name": "httpcore",
            "specs": [
                [
                    "==",
                    "0.17.3"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    "==",
                    "0.24.1"
                ]
            ]
        },
        {
            "name": "hyperlink",
            "specs": [
                [
                    "==",
                    "21.0.0"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.7"
                ]
            ]
        },
        {
            "name": "incremental",
            "specs": [
                [
                    "==",
                    "22.10.0"
                ]
            ]
        },
        {
            "name": "inflection",
            "specs": [
                [
                    "==",
                    "0.5.1"
                ]
            ]
        },
        {
            "name": "jsonschema",
            "specs": [
                [
                    "==",
                    "4.18.4"
                ]
            ]
        },
        {
            "name": "jsonschema-specifications",
            "specs": [
                [
                    "==",
                    "2023.7.1"
                ]
            ]
        },
        {
            "name": "msgpack",
            "specs": [
                [
                    "==",
                    "1.0.5"
                ]
            ]
        },
        {
            "name": "oauthlib",
            "specs": [
                [
                    "==",
                    "3.2.2"
                ]
            ]
        },
        {
            "name": "phonenumberslite",
            "specs": [
                [
                    "==",
                    "8.13.17"
                ]
            ]
        },
        {
            "name": "psycopg2",
            "specs": [
                [
                    "==",
                    "2.9.6"
                ]
            ]
        },
        {
            "name": "pyasn1",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "pyasn1-modules",
            "specs": [
                [
                    "==",
                    "0.3.0"
                ]
            ]
        },
        {
            "name": "pycparser",
            "specs": [
                [
                    "==",
                    "2.21"
                ]
            ]
        },
        {
            "name": "pyjwt",
            "specs": [
                [
                    "==",
                    "2.8.0"
                ]
            ]
        },
        {
            "name": "pyopenssl",
            "specs": [
                [
                    "==",
                    "24.0.0"
                ]
            ]
        },
        {
            "name": "python-dataporten-auth",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "python-dateutil",
            "specs": [
                [
                    "==",
                    "2.8.2"
                ]
            ]
        },
        {
            "name": "python3-openid",
            "specs": [
                [
                    "==",
                    "3.2.0"
                ]
            ]
        },
        {
            "name": "pytz",
            "specs": [
                [
                    "==",
                    "2024.1"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    "==",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "redis",
            "specs": [
                [
                    "==",
                    "4.6.0"
                ]
            ]
        },
        {
            "name": "referencing",
            "specs": [
                [
                    "==",
                    "0.30.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "requests-oauthlib",
            "specs": [
                [
                    "==",
                    "1.3.1"
                ]
            ]
        },
        {
            "name": "rpds-py",
            "specs": [
                [
                    "==",
                    "0.9.2"
                ]
            ]
        },
        {
            "name": "service-identity",
            "specs": [
                [
                    "==",
                    "23.1.0"
                ]
            ]
        },
        {
            "name": "six",
            "specs": [
                [
                    "==",
                    "1.16.0"
                ]
            ]
        },
        {
            "name": "sniffio",
            "specs": [
                [
                    "==",
                    "1.3.0"
                ]
            ]
        },
        {
            "name": "social-auth-app-django",
            "specs": [
                [
                    "==",
                    "5.2.0"
                ]
            ]
        },
        {
            "name": "social-auth-core",
            "specs": [
                [
                    "==",
                    "4.4.2"
                ]
            ]
        },
        {
            "name": "sqlparse",
            "specs": [
                [
                    "==",
                    "0.5.0"
                ]
            ]
        },
        {
            "name": "twisted",
            "specs": [
                [
                    "==",
                    "22.10.0"
                ]
            ]
        },
        {
            "name": "txaio",
            "specs": [
                [
                    "==",
                    "23.1.1"
                ]
            ]
        },
        {
            "name": "typing-extensions",
            "specs": [
                [
                    "==",
                    "4.7.1"
                ]
            ]
        },
        {
            "name": "uritemplate",
            "specs": [
                [
                    "==",
                    "4.1.1"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "wheel",
            "specs": [
                [
                    "==",
                    "0.41.0"
                ]
            ]
        },
        {
            "name": "whitenoise",
            "specs": [
                [
                    "==",
                    "6.5.0"
                ]
            ]
        },
        {
            "name": "zope-interface",
            "specs": [
                [
                    "==",
                    "6.0"
                ]
            ]
        }
    ],
    "tox": true,
    "lcname": "argus-server"
}
        
Elapsed time: 0.26368s