Skip to main content

directory-components

code-climate-image circle-ci-image codecov-image pypi-image semver-image

Reusable components used across the GREAT platform for the Department for Business and Trade.


Installation

pip install directory-components

Development

$ git clone https://github.com/uktrade/directory-components
$ cd directory-components
$ [create virtual environment and activate]
$ make install_requirements

To test cookies locally add this to your /etc/hosts:

127.0.0.1       components.trade.great

Then visit the demo at components.trade.great:9013

Commands

Command Description
make clean Delete pyc files
make pytest Run all tests. Run pip install .[test] first
make pytest test_foo.py Run all tests in file called test_foo.py
make pytest -- --last-failed` Run the last tests to fail
make pytest -- -k foo Run the test called foo
make pytest -- Run arbitrary pytest command
make flake8 Run linting
make manage Run arbitrary management command
make webserver Run the demo development web server. Run pip install .[demo] first
make requirements Compile the requirements file
make install_requirements Installed the compile requirements file
make css Compile scss to css
make publish Publish the package to PyPI

Features

Environment variables

Environment variable Notes
FEATURE_MAINTENANCE_MODE_ENABLED Controls MaintenanceModeMiddleware.
FEATURE_FLAGS Place to store the service's feature flags.
DIRECTORY_COMPONENTS_VAULT_DOMAIN Hashicorp vault domain. For diffing vaults.
DIRECTORY_COMPONENTS_VAULT_ROOT_PATH Hashicorp vault root path. For diffing vaults.
DIRECTORY_COMPONENTS_VAULT_PROJECT Hashicorp vault project. For diffing vaults.
DIRECTORY_COMPONENTS_VAULT_IGNORE_SETTINGS_REGEX Settings to ignore when diffing vaults.

Middleware

Middleware can be found in directory_components.middleware.FooBar.

Middleware Notes
MaintenanceModeMiddleware Redirects to http://sorry.great.gov.uk if FEATURE_MAINTENANCE_MODE_ENABLED is true.
NoCacheMiddlware Prevents any page in the service from caching pages of logged in users.
PrefixUrlMiddleware Redirects use from unprefixed url to prefixed url.

Context processors

Middleware can be found in directory_components.context_processors.foo_bar.

Processor Context variable name Notes
sso_processor Exposes the state of the SSO user.
analytics directory_components_analytics GA details. Used by base template.
header_footer_processor header_footer_urls Urls used by base template's header and footer.
urls_processor directory_components_urls More urls used by base template's header and footer.
feature_flags feature_flags Exposes the service's feature flags.

Exception handlers

Add the following to your urls.py for directory components templates to be used on 404 and 500

handler404 = 'directory_components.views.handler404'

handler500 = 'directory_components.views.handler500'

Without doing this the 500 and 400 pages would not receive context data provided by context processors

Settings janitor

Management commands are provided to assist in the maintenance of settings. Install by pip install directory-components[janitor] and then add the following to settings.py:

if some_predicate_is_met:  # feature flagged so it's not used in prod
    INSTALLED_APPS.append('directory_components.janitor')

Diff vaults

You can diff the vaults of two environments by running the following.

manage.py vault_diff \
    --token=<token> \
    --domain=<domain> \
    --root=<root> \
    --project=<project> \
    --environment_a=<environment_a> \
    --environment_b=<environment_b>

For simplicity once you set the DIRECTORY_COMPONENTS_VAULT_DOMAIN, DIRECTORY_COMPONENTS_VAULT_PROJECT, and DIRECTORY_COMPONENTS_VAULT_ROOT_PATH that simplifies to

manage.py environment_diff \
    --token=<token> \
    --environment_a=<environment_a> \
    --environment_b=<environment_b>

Update vaults

You can batch update the vaults of all your environments by running the following

manage.py vault_update -- \
    --token=<token> \
    --domain=<domain> \
    --root=<root> \
    --mutator='path.to.function'

mutator is the path to a function relative to the project root. The call signature is secrets=dict, path=str. The return dict will be uploaded to vault.

For simplicity once you set the DIRECTORY_COMPONENTS_VAULT_DOMAIN, and DIRECTORY_COMPONENTS_VAULT_ROOT_PATH that simplifies to:

manage.py vault_update \
    --token=<token> \
    --mutator='path.to.function'

Detect settings orphans

You can detect settings that are either unused in the codebase, redundant because they're explicitly set to the default django value, or obsolete because they're set in the vault but not used anywhere:

manage.py settings_shake \
    --token=<token> \
    --root=<root> \
    --domain=<domain> \
    --project=<project> \
    --environment=<environment>

For simplicity once you set the DIRECTORY_COMPONENTS_VAULT_DOMAIN, DIRECTORY_COMPONENTS_VAULT_PROJECT, and DIRECTORY_COMPONENTS_VAULT_ROOT_PATH that simplifies to

manage.py settings_shake \
    --token=<token> \
    --environment=<environment>

Publish to PyPI

The package should be published to PyPI on merge to master. If you need to do it locally then get the credentials from rattic and add the environment variables to your host machine:

Setting
DIRECTORY_PYPI_USERNAME
DIRECTORY_PYPI_PASSWORD

Then run the following command:

make publish

Metadata

Release files for directory-components 41.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for directory-components 41.0.0
File Interpreter ABI Platform
directory_components-41.0.0-py3-none-any.whl Python 3 none any Details

Release files / directory_components-41.0.0-py3-none-any.whl

Download URL directory_components-41.0.0-py3-none-any.whl
Size 2.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
90a8f99451e085daab80ae406d67f0f2ad4653235a2c40b2f62fad0fe914dbee
BLAKE2b-256 checksum
How to use checksums
64466249801059eb3587956600879df5ba690b48ba4ce4068ea7774d86380552
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.0.1 CPython/3.13.7

Release history Release notifications | RSS feed

This release

41.0.0 This release

1 release file

40.4.2

1 release file

40.4.1

1 release file

40.4.0

1 release file

40.3.1

1 release file

40.3.0

1 release file

40.2.4

1 release file

40.2.3

1 release file

40.2.2

1 release file

40.2.1

1 release file

40.2.0

1 release file

40.1.1

1 release file

40.1.0

1 release file

40.0.0

1 release file

39.1.4

1 release file

39.1.3

1 release file

39.1.2

1 release file

39.1.0

1 release file

39.0.3

1 release file

39.0.2

1 release file

39.0.1

1 release file

39.0.0

1 release file

38.2.1

1 release file

38.2.0

1 release file

38.0.0

1 release file

37.3.0

1 release file

37.2.2

1 release file

37.2.1

1 release file

37.2.0

1 release file

37.1.0

1 release file

37.0.0

1 release file

36.3.1

1 release file

36.3.0

1 release file

36.2.0

1 release file

36.1.0

1 release file

36.0.0

1 release file

35.27.0

1 release file

35.26.0

1 release file

35.25.1

1 release file

35.25.0

1 release file

35.24.0

1 release file

35.23.0

1 release file

35.22.0

1 release file

35.20.0

1 release file

35.19.0

1 release file

35.17.0

1 release file

35.16.0

1 release file

35.15.2

1 release file

35.15.1

1 release file

35.15.0

1 release file

35.13.0

1 release file

35.12.1

1 release file

35.12.0

1 release file

35.11.0

1 release file

35.10.0

1 release file

35.9.1

1 release file

35.9.0

1 release file

35.8.0

1 release file

35.7.2

1 release file

35.7.1

1 release file

35.7.0

1 release file

35.6.2

1 release file

35.6.1

1 release file

35.6.0

1 release file

35.5.0

1 release file

35.4.0

1 release file

35.3.1

1 release file

35.3.0

1 release file

35.2.1

1 release file

35.2.0

1 release file

35.1.0

1 release file

35.0.1

1 release file

35.0.0

1 release file

34.0.1

1 release file

34.0.0

1 release file

33.4.0

1 release file

33.3.0

1 release file

33.2.0

1 release file

33.1.2

1 release file

33.1.1

1 release file

33.1.0

1 release file

33.0.2

1 release file

33.0.1

1 release file

33.0.0

1 release file

32.3.1

1 release file

32.3.0

1 release file

32.2.1

1 release file

32.2.0

1 release file

32.1.0

1 release file

32.0.2

1 release file

32.0.1

1 release file

32.0.0

1 release file

31.1.0

1 release file

31.0.0

1 release file

30.2.0

1 release file

30.1.0

1 release file

29.0.0

1 release file

28.0.0

1 release file

27.14.0

1 release file

27.13.0

1 release file

27.12.0

1 release file

27.11.0

1 release file

27.10.0

1 release file

27.9.3

1 release file

27.9.2

1 release file

27.9.0

1 release file

27.8.0

1 release file

27.7.0

1 release file

27.6.0

1 release file

27.5.0

1 release file

27.4.1

1 release file

27.4.0

1 release file

27.3.1

1 release file

27.2.1

1 release file

27.2.0

1 release file

27.1.3

1 release file

27.1.2

1 release file

27.1.1

1 release file

27.1.0

1 release file

27.0.1

1 release file

27.0.0

1 release file

26.3.0

1 release file

26.2.1

1 release file

26.2.0

1 release file

26.1.1

1 release file

26.1.0

1 release file

26.0.0

1 release file

25.0.1

1 release file

25.0.0

1 release file

24.0.0

1 release file

23.0.0

1 release file

22.0.0

1 release file

21.0.1

1 release file

21.0.0

1 release file

20.3.1

1 release file

20.3.0

1 release file

20.2.0

1 release file

20.1.0

1 release file

20.0.1

1 release file

20.0.0

1 release file

19.0.1

1 release file

19.0.0

1 release file

18.1.0

1 release file

18.0.0

1 release file

17.0.0

1 release file

16.5.0

1 release file

16.4.0

1 release file

16.3.0

1 release file

16.2.0

1 release file

16.1.0

1 release file

16.0.1

1 release file

16.0.0

1 release file

15.2.0

1 release file

15.1.1

1 release file

15.1.0

1 release file

15.0.1

1 release file

15.0.0

1 release file

14.1.0

1 release file

14.0.0

1 release file

13.2.0

1 release file

13.1.0

1 release file

13.0.0

1 release file

12.1.1

1 release file

12.1.0

1 release file

12.0.0

1 release file

11.0.4

1 release file

11.0.3

1 release file

11.0.2

1 release file

11.0.1

1 release file

11.0.0

1 release file

10.9.2

1 release file

10.9.1

1 release file

10.9.0

1 release file

10.8.3

1 release file

10.8.2

1 release file

10.8.1

1 release file

10.8.0

1 release file

10.7.0

1 release file

10.6.0

1 release file

10.5.0

1 release file

10.4.1

1 release file

10.4.0

1 release file

10.3.0

1 release file

10.2.0

1 release file

10.1.0

1 release file

10.0.1

1 release file

10.0.0

1 release file

9.9.0

1 release file

9.8.0

1 release file

9.7.0

1 release file

9.6.0

1 release file

9.5.0

1 release file

9.4.0

1 release file

9.3.1

1 release file

9.3.0

1 release file

9.2.0

1 release file

9.1.0

1 release file

9.0.1

1 release file

9.0.0

1 release file

8.9.0

1 release file

8.8.0

1 release file

8.7.0

1 release file

8.6.0

1 release file

8.5.0

1 release file

8.4.1

1 release file

8.4.0

1 release file

8.3.2

1 release file

8.3.1

1 release file

8.3.0

1 release file

8.2.1

1 release file

8.2.0

1 release file

8.1.1

1 release file

8.1.0

1 release file

8.0.0

1 release file

7.3.0

1 release file

7.2.1

1 release file

7.2.0

1 release file

7.1.2

1 release file

7.1.1

1 release file

7.1.0

1 release file

7.0.4

1 release file

7.0.3

1 release file

7.0.2

1 release file

7.0.1

1 release file

7.0.0

1 release file

6.1.0

1 release file

6.0.0

1 release file

5.0.1

1 release file

5.0.0

1 release file

4.2.0

1 release file

4.1.2

1 release file

4.1.1

1 release file

4.1.0

1 release file

4.0.1

1 release file

4.0.0

1 release file

3.6.1

1 release file

3.6.0

1 release file

3.5.0

1 release file

3.4.0

1 release file

3.3.1

1 release file

3.3.0

1 release file

3.2.0

1 release file

3.1.0

1 release file

3.0.0

1 release file

2.34.0

1 release file

2.33.0

1 release file

2.32.0

1 release file

2.31.0

1 release file

2.30.0

1 release file

2.29.0

1 release file

2.28.0

1 release file

2.27.1

1 release file

2.27.0

1 release file

2.26.1

1 release file

2.26.0

1 release file

2.25.0

1 release file

2.24.0

1 release file

2.23.0

1 release file

2.22.0

1 release file

2.21.1

1 release file

2.21.0

1 release file

2.20.0

1 release file

2.19.0

1 release file

2.18.0

1 release file

2.17.2

1 release file

2.17.1

1 release file

2.17.0

1 release file

2.16.0

1 release file

2.15.1

1 release file

2.15.0

1 release file

2.14.1

1 release file

2.14.0

1 release file

2.13.0

1 release file

2.12.0

1 release file

2.11.0

1 release file

2.10.0

1 release file

2.9.0

1 release file

2.8.1

1 release file

2.8.0

1 release file

2.7.2

1 release file

2.7.1

1 release file

2.7.0

1 release file

2.6.1

1 release file

2.6.0

1 release file

2.5.2

1 release file

2.5.1

1 release file

2.5.0

1 release file

2.4.0

1 release file

2.2.0

1 release file

2.1.1

1 release file

2.1.0

1 release file

2.0.0

1 release file

1.9.0

1 release file

1.8.3

1 release file

1.8.2

1 release file

1.8.1

1 release file

1.8.0

1 release file

1.7.2

1 release file

1.7.1

1 release file

1.7.0

1 release file

1.6.5

1 release file

1.6.4

1 release file

1.6.3

1 release file

1.6.2

1 release file

1.6.1

1 release file

1.6.0

1 release file

1.5.3

1 release file

1.5.2

1 release file

1.5.1

1 release file

1.5.0

1 release file

1.4.0

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.5

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page