geomancy


Namegeomancy JSON
Version 1.2.4 PyPI version JSON
download
home_page
SummaryGeomancy validates deployment and development environments
upload_time2023-08-10 16:48:56
maintainer
docs_urlNone
authorJustin Lorieau
requires_python>=3.11
license
keywords .env dotenv env env var environment environment variable deployment validation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <!-- start logo -->
<img src="https://raw.githubusercontent.com/jlorieau/geomancy/main/docs/_static/geomancy_logo.svg" alt="geomancy logo" height="150px"/>
<!-- end logo -->

<!-- start badges -->
[![pypi version](https://img.shields.io/pypi/v/geomancy.svg)](https://pypi.org/project/geomancy/)
[![python versions](https://img.shields.io/pypi/pyversions/geomancy.svg)](https://pypi.org/project/geomancy/)
[![Black formatting](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![Documentation Status](https://readthedocs.org/projects/geomancy/badge/?version=latest)](https://geomancy.readthedocs.io/en/latest/?badge=latest)
<!-- end badges -->
<!-- start intro -->
Geomancy makes it easy to check and validate environments, such as development,
testing and production.

Environment checks and tests are helpful for testing the correct setting
of environment variables, the installation and versions of installed
executables, the state of external dependencies, like LaTeX packages, or cloud
resources, or for checking environments that use the
[12-factor](http://12factor.net/) principles.
<!-- end intro -->

## Features

<!-- start features -->

### Capabilities

<p>
<details>
<summary>
<strong><u>Validation of layered and combined environments</u></strong>
</summary>

Layered environments could include a _common_ or _base_ environment, with
additional checks for settings of _test_, _development_ and _production_
environments.

In the following checks file, the existence of an environment file and a secrets
file can be checked based on the ``$ENV`` environment variable. (See the
[docker environment variable parameter expansion rules](https://docs.docker.com/compose/environment-variables/env-file/#parameter-expansion))

```yaml
checks:
  Environment:
    desc: Check environment variables in different deployments

    CheckEnvFile:
      desc: Check the existence of the environment file
      checkPath: "deployments/${ENV}/.env"

    CheckSecretsFile:
      desc: Check the existence of the secrets file
      checkPath: "deployments/${ENV}/.secrets"
```

This check file can be used to check multiple environments:

```shell
# check "dev" environment
$ geo -e deployments/base/.env -e deployments/dev/.env checks.yaml
...
# check "test" environment
$ geo -e deployments/base/.env -e deployments/test/.env checks.yaml
...
```
In this case, ``deployments/dev/.env`` is an
[environment file](https://docs.docker.com/compose/environment-variables/env-file/)
that sets ``ENV=dev``, ``deployments/test/.env`` is an
[environment file](https://docs.docker.com/compose/environment-variables/env-file/)
that sets ``ENV=test``.
</details>
</p>

<p>
<details>
<summary>
<strong><u>Full environment file support</u></strong> of the docker
<a href="https://docs.docker.com/compose/environment-variables/env-file/">env file syntax</a>
</summary>

Environment files are loaded using the ``-e/--env`` option,
which can be layered for different environments.

```shell
# Run checks for 'dev' environment
$ geo -e deployments/base/.env -e deployments/dev/.env check
...
# Run checks for 'test' environment
$ geo -e base.env -e test.env run -- echo "Test environment"
```
</details>
</p>

<p>
<details>
<summary>
<strong><u>Concurrent checks with multiple threads</u></strong> to quickly probe
I/O bound resources
</summary>

The following example concurrently checks that the 3 AWS S3 buckets are
accessible using the
[current credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
and are secured.

This example is in yaml format, and checks can be formatted in toml format
as well.

```yaml
AWS:
  TemplateS3:
    checkS3: myproject-cfn-templates
  StaticS3:
    checkS3: myproject-static
  MediaS3:
    checkS3: myproject-media

```
</details>
</p>

<p>
<details>
<summary>
<strong><u>Load checks in multiple formats</u></strong>
</summary>

Including [yaml](https://yaml.org) (e.g. ``.geomancy.yaml``)

```yaml
checks:
  Environment:
    desc: Check environment variables common to all development environments

    Path:
      decs: Search paths for executables
      checkEnv: $PATH
```

or [toml](https://toml.io/en/) (e.g. ``.geomancy.toml``)

```toml
[checks.Environment]
desc = "Check environment variables common to all development environments"

    [checks.Environment.Path]
    desc = "Search paths for executables"
    checkEnv = "$PATH"
```

or [toml](https://toml.io/en/) with each check on 1 line (e.g. ``.geomancy.toml``)

```toml
[Checks.Environment]
Path = {checkEnv = "$PATH", desc = "Search paths for executables"}
```

or [pyproject.toml](https://peps.python.org/pep-0621/)

```toml
[tool.geomancy.checks.Environment]
desc = "Check environment variables common to all development environments"

    [tool.geomancy.checks.Environment.Path]
    desc = "Search paths for executables"
    checkEnv = "$PATH"
```

</details>
</p>

### Available Checks

<p>
<details>
<summary><strong><u>Operating systems</u></strong> meet the minimum required
  versions
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#checkplatform">checkOS</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
OperatingSystem:
  desc: Check the minimum operating system versions
  subchecks: any

  checkMacOS:
    desc: MacOS 10.9 or later (released 2013)
    checkOS: "macOS >= 10.9"
  checkLinuxOS:
    desc: Linux 4.0 or later (released 2015)
    checkOS: "Linux >= 3.0"
  checkWindows:
    desc: Windows 10 or later (released 2015)
    checkOS: "Windows >= 10"
```
</details>
</p>

<p>
<details>
<summary><strong><u>Environment variables</u></strong> are properly set and
  have valid values with regular expressions
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#checkenv">checkEnv</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
Username:
  desc: The current username
  checkEnv: "$USER"
  regex: "[a-z_][a-z0-9_-]*[$]?"
```
</details>
</p>

<p>
<details>
<summary><strong><u>Paths</u></strong> exist and they're the right type
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#checkpath">checkPath</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
PyprojectToml:
  desc: A project's pyprojectfile
  checkPath: ./pyproject.toml
  type: file
```
</details>
</p>

<p>
<details>
<summary><strong><u>Executables</u></strong> are available and meet minimum
  or correct versions
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#checkexec">checkExec</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
Python:
  desc: Python interpreter (version 3.11 or higher)
  checkExec: "python3>=3.11"
```
</details>
</p>

<p>
<details>
<summary><strong><u>Python packages</u></strong> are available minimum or
  correct versions
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#checkpythonpkg">checkPythonPkg</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
PythonPackages:
  geomancy:
    desc: Geomancy python package
    checkPythonPkg: "geomancy>=0.1"
```
</details>
</p>

<p>
<details>
<summary><strong><u>Group checks</u></strong> and specify
  conditional (all or any) pass criteria
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/format.html#check-groups">Groups of Checks</a>)
</summary>

The following shows an example with the ``checks`` group containing 2 groups,
``OperatingSystem``, ``Environment``.

The ``OperatingSystem`` group contains 3 checks: ``checkMacOS``,
``checkLinuxOS``, ``checkWindows``, and the ``OperatingSystem`` group check
passes if any of these 3 checks pass (``subchecks: any``)

The ``Environment`` group contains 1 check, ``Path``, and 1 group, ``Username``,
which itself contains 2 checks: ``UnixUsername`` and ``WindowsUsername``.

This example is in yaml format, and checks can be formatted in toml format
as well.

```yaml
checks:
  OperatingSystem:
    desc: Check the minimum operating system versions
    subchecks: any

    checkMacOS:
      desc: MacOS 10.9 or later (released 2013)
      checkOS: "macOS >= 10.9"
    checkLinuxOS:
      desc: Linux 4.0 or later (released 2015)
      checkOS: "Linux >= 3.0"
    checkWindows:
      desc: Windows 10 or later (released 2015)
      checkOS: "Windows >= 10"

  Environment:
    desc: Check environment variables common to all development environments

    Path:
      decs: Paths to search for executables
      checkEnv: $PATH
    Username:
      subchecks: any

      UnixUsername:  # Username on linux and macOS
        desc: The current username
        checkEnv: $USER
        regex: "[a-z_][a-z0-9_-]*[$]?"
      WindowsUsername:  # Username on Windows
        desc: The current username
        checkEnv: $USERNAME
        regex: "[a-z_][a-z0-9_-]*[$]?"

```
</details>
</p>

<p>
<details>
<summary><strong><u>AWS</u></strong> resources exist and are securely setup
  (<a href="https://geomancy.readthedocs.io/en/latest/usage/checks/aws/index.html">AWS checks</a>)
</summary>

The following shows an example in yaml format. Checks can be formatted in
toml format as well.

```yaml
AWS:
  IAM:
    desc: Check the default authentication and security settings
    checkIAM:

  TemplatesS3Bucket:
    desc: Check the bucket for cloudformation templates
    checkS3: "myproject-cfn-templates"
```
</details>
</p>

<!-- end features -->

## Quickstart
<!-- start quickstart -->
1. Create a ``.geomancy.yaml`` file with checks. See
   [examples/geomancy.yaml](https://github.com/jlorieau/geomancy/blob/main/examples/geomancy.yaml)
   for an example of all checks.

    ```yaml
    Environment:
      desc: Check environment variables common to all development environments

      Username:
        desc: The current username
        checkEnv: "$USER"
        regex: "[a-z_][a-z0-9_-]*[$]?"

    Paths:
      desc: Checks the existence of needed files and directories
      subchecks: "any" # at least one of the files must be present

      Geomancy:
        desc: Check for the 'geomancy.toml' file
        checkPath: examples/geomancy.toml
        type: file
      Pyproject:
        desc: Check for 'pyproject.toml' file
        checkPath: examples/pyproject.toml
        type: file

    Executables:
      desc: Check the availability of commands and their versions

      Python:
        desc: Python interpreter ver 3.11 or higher
        checkExec: python3>=3.11
    ```

2. Use ``geo`` to run the checks.

    ```shell
     [✔] test.yaml...passed
     [✔]   Environment...passed
     [✔]     Check environment variable '$USER'...passed
     [✔]   Paths...passed
     [✔]     Check path 'examples/geomancy.toml'...passed
     [✔]     Check path 'examples/pyproject.toml'...passed
     [✔]   Executables...passed
     [✔]     Check executable 'python3>=3.11'...passed
    ================================= 8 passed in 0.50s ==================================
    ```

    (By default, ``geomancy`` will search ``.geomancy.y[a]ml``, ``geomancy.y[a]ml``
    ``.geomancy.toml``, ``geomancy.toml`` and ``pyproject.toml``.)
<!-- end quickstart -->


## Documentation

For full documentation please see https://geomancy.readthedocs.io/en/latest.


## Bugs or Requests
Please use the [GitHub issue tracker](https://github.com/jlorieau/geomancy/issues)
to submit bugs or request features.

## Similar projects

The following projects share some of the same goals in different contexts:

- [Envalid](https://github.com/af/envalid)
- [AWS Config](https://aws.amazon.com/config/)

## License

Copyright Justin Lorieau and others, 2023.

Distributed under the terms of the [MIT license](LICENSE).
geomancy is free and open source software.

            

Raw data

            {
    "_id": null,
    "home_page": "",
    "name": "geomancy",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": "",
    "keywords": ".env,dotenv,env,env var,environment,environment variable,deployment,validation",
    "author": "Justin Lorieau",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/c3/21/23d5a0f23800d7d7332f9f697bfa272e994a0038252defefec37b16b19c8/geomancy-1.2.4.tar.gz",
    "platform": null,
    "description": "<!-- start logo -->\n<img src=\"https://raw.githubusercontent.com/jlorieau/geomancy/main/docs/_static/geomancy_logo.svg\" alt=\"geomancy logo\" height=\"150px\"/>\n<!-- end logo -->\n\n<!-- start badges -->\n[![pypi version](https://img.shields.io/pypi/v/geomancy.svg)](https://pypi.org/project/geomancy/)\n[![python versions](https://img.shields.io/pypi/pyversions/geomancy.svg)](https://pypi.org/project/geomancy/)\n[![Black formatting](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Documentation Status](https://readthedocs.org/projects/geomancy/badge/?version=latest)](https://geomancy.readthedocs.io/en/latest/?badge=latest)\n<!-- end badges -->\n<!-- start intro -->\nGeomancy makes it easy to check and validate environments, such as development,\ntesting and production.\n\nEnvironment checks and tests are helpful for testing the correct setting\nof environment variables, the installation and versions of installed\nexecutables, the state of external dependencies, like LaTeX packages, or cloud\nresources, or for checking environments that use the\n[12-factor](http://12factor.net/) principles.\n<!-- end intro -->\n\n## Features\n\n<!-- start features -->\n\n### Capabilities\n\n<p>\n<details>\n<summary>\n<strong><u>Validation of layered and combined environments</u></strong>\n</summary>\n\nLayered environments could include a _common_ or _base_ environment, with\nadditional checks for settings of _test_, _development_ and _production_\nenvironments.\n\nIn the following checks file, the existence of an environment file and a secrets\nfile can be checked based on the ``$ENV`` environment variable. (See the\n[docker environment variable parameter expansion rules](https://docs.docker.com/compose/environment-variables/env-file/#parameter-expansion))\n\n```yaml\nchecks:\n  Environment:\n    desc: Check environment variables in different deployments\n\n    CheckEnvFile:\n      desc: Check the existence of the environment file\n      checkPath: \"deployments/${ENV}/.env\"\n\n    CheckSecretsFile:\n      desc: Check the existence of the secrets file\n      checkPath: \"deployments/${ENV}/.secrets\"\n```\n\nThis check file can be used to check multiple environments:\n\n```shell\n# check \"dev\" environment\n$ geo -e deployments/base/.env -e deployments/dev/.env checks.yaml\n...\n# check \"test\" environment\n$ geo -e deployments/base/.env -e deployments/test/.env checks.yaml\n...\n```\nIn this case, ``deployments/dev/.env`` is an\n[environment file](https://docs.docker.com/compose/environment-variables/env-file/)\nthat sets ``ENV=dev``, ``deployments/test/.env`` is an\n[environment file](https://docs.docker.com/compose/environment-variables/env-file/)\nthat sets ``ENV=test``.\n</details>\n</p>\n\n<p>\n<details>\n<summary>\n<strong><u>Full environment file support</u></strong> of the docker\n<a href=\"https://docs.docker.com/compose/environment-variables/env-file/\">env file syntax</a>\n</summary>\n\nEnvironment files are loaded using the ``-e/--env`` option,\nwhich can be layered for different environments.\n\n```shell\n# Run checks for 'dev' environment\n$ geo -e deployments/base/.env -e deployments/dev/.env check\n...\n# Run checks for 'test' environment\n$ geo -e base.env -e test.env run -- echo \"Test environment\"\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary>\n<strong><u>Concurrent checks with multiple threads</u></strong> to quickly probe\nI/O bound resources\n</summary>\n\nThe following example concurrently checks that the 3 AWS S3 buckets are\naccessible using the\n[current credentials](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)\nand are secured.\n\nThis example is in yaml format, and checks can be formatted in toml format\nas well.\n\n```yaml\nAWS:\n  TemplateS3:\n    checkS3: myproject-cfn-templates\n  StaticS3:\n    checkS3: myproject-static\n  MediaS3:\n    checkS3: myproject-media\n\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary>\n<strong><u>Load checks in multiple formats</u></strong>\n</summary>\n\nIncluding [yaml](https://yaml.org) (e.g. ``.geomancy.yaml``)\n\n```yaml\nchecks:\n  Environment:\n    desc: Check environment variables common to all development environments\n\n    Path:\n      decs: Search paths for executables\n      checkEnv: $PATH\n```\n\nor [toml](https://toml.io/en/) (e.g. ``.geomancy.toml``)\n\n```toml\n[checks.Environment]\ndesc = \"Check environment variables common to all development environments\"\n\n    [checks.Environment.Path]\n    desc = \"Search paths for executables\"\n    checkEnv = \"$PATH\"\n```\n\nor [toml](https://toml.io/en/) with each check on 1 line (e.g. ``.geomancy.toml``)\n\n```toml\n[Checks.Environment]\nPath = {checkEnv = \"$PATH\", desc = \"Search paths for executables\"}\n```\n\nor [pyproject.toml](https://peps.python.org/pep-0621/)\n\n```toml\n[tool.geomancy.checks.Environment]\ndesc = \"Check environment variables common to all development environments\"\n\n    [tool.geomancy.checks.Environment.Path]\n    desc = \"Search paths for executables\"\n    checkEnv = \"$PATH\"\n```\n\n</details>\n</p>\n\n### Available Checks\n\n<p>\n<details>\n<summary><strong><u>Operating systems</u></strong> meet the minimum required\n  versions\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#checkplatform\">checkOS</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nOperatingSystem:\n  desc: Check the minimum operating system versions\n  subchecks: any\n\n  checkMacOS:\n    desc: MacOS 10.9 or later (released 2013)\n    checkOS: \"macOS >= 10.9\"\n  checkLinuxOS:\n    desc: Linux 4.0 or later (released 2015)\n    checkOS: \"Linux >= 3.0\"\n  checkWindows:\n    desc: Windows 10 or later (released 2015)\n    checkOS: \"Windows >= 10\"\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>Environment variables</u></strong> are properly set and\n  have valid values with regular expressions\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#checkenv\">checkEnv</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nUsername:\n  desc: The current username\n  checkEnv: \"$USER\"\n  regex: \"[a-z_][a-z0-9_-]*[$]?\"\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>Paths</u></strong> exist and they're the right type\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#checkpath\">checkPath</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nPyprojectToml:\n  desc: A project's pyprojectfile\n  checkPath: ./pyproject.toml\n  type: file\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>Executables</u></strong> are available and meet minimum\n  or correct versions\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#checkexec\">checkExec</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nPython:\n  desc: Python interpreter (version 3.11 or higher)\n  checkExec: \"python3>=3.11\"\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>Python packages</u></strong> are available minimum or\n  correct versions\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#checkpythonpkg\">checkPythonPkg</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nPythonPackages:\n  geomancy:\n    desc: Geomancy python package\n    checkPythonPkg: \"geomancy>=0.1\"\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>Group checks</u></strong> and specify\n  conditional (all or any) pass criteria\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/format.html#check-groups\">Groups of Checks</a>)\n</summary>\n\nThe following shows an example with the ``checks`` group containing 2 groups,\n``OperatingSystem``, ``Environment``.\n\nThe ``OperatingSystem`` group contains 3 checks: ``checkMacOS``,\n``checkLinuxOS``, ``checkWindows``, and the ``OperatingSystem`` group check\npasses if any of these 3 checks pass (``subchecks: any``)\n\nThe ``Environment`` group contains 1 check, ``Path``, and 1 group, ``Username``,\nwhich itself contains 2 checks: ``UnixUsername`` and ``WindowsUsername``.\n\nThis example is in yaml format, and checks can be formatted in toml format\nas well.\n\n```yaml\nchecks:\n  OperatingSystem:\n    desc: Check the minimum operating system versions\n    subchecks: any\n\n    checkMacOS:\n      desc: MacOS 10.9 or later (released 2013)\n      checkOS: \"macOS >= 10.9\"\n    checkLinuxOS:\n      desc: Linux 4.0 or later (released 2015)\n      checkOS: \"Linux >= 3.0\"\n    checkWindows:\n      desc: Windows 10 or later (released 2015)\n      checkOS: \"Windows >= 10\"\n\n  Environment:\n    desc: Check environment variables common to all development environments\n\n    Path:\n      decs: Paths to search for executables\n      checkEnv: $PATH\n    Username:\n      subchecks: any\n\n      UnixUsername:  # Username on linux and macOS\n        desc: The current username\n        checkEnv: $USER\n        regex: \"[a-z_][a-z0-9_-]*[$]?\"\n      WindowsUsername:  # Username on Windows\n        desc: The current username\n        checkEnv: $USERNAME\n        regex: \"[a-z_][a-z0-9_-]*[$]?\"\n\n```\n</details>\n</p>\n\n<p>\n<details>\n<summary><strong><u>AWS</u></strong> resources exist and are securely setup\n  (<a href=\"https://geomancy.readthedocs.io/en/latest/usage/checks/aws/index.html\">AWS checks</a>)\n</summary>\n\nThe following shows an example in yaml format. Checks can be formatted in\ntoml format as well.\n\n```yaml\nAWS:\n  IAM:\n    desc: Check the default authentication and security settings\n    checkIAM:\n\n  TemplatesS3Bucket:\n    desc: Check the bucket for cloudformation templates\n    checkS3: \"myproject-cfn-templates\"\n```\n</details>\n</p>\n\n<!-- end features -->\n\n## Quickstart\n<!-- start quickstart -->\n1. Create a ``.geomancy.yaml`` file with checks. See\n   [examples/geomancy.yaml](https://github.com/jlorieau/geomancy/blob/main/examples/geomancy.yaml)\n   for an example of all checks.\n\n    ```yaml\n    Environment:\n      desc: Check environment variables common to all development environments\n\n      Username:\n        desc: The current username\n        checkEnv: \"$USER\"\n        regex: \"[a-z_][a-z0-9_-]*[$]?\"\n\n    Paths:\n      desc: Checks the existence of needed files and directories\n      subchecks: \"any\" # at least one of the files must be present\n\n      Geomancy:\n        desc: Check for the 'geomancy.toml' file\n        checkPath: examples/geomancy.toml\n        type: file\n      Pyproject:\n        desc: Check for 'pyproject.toml' file\n        checkPath: examples/pyproject.toml\n        type: file\n\n    Executables:\n      desc: Check the availability of commands and their versions\n\n      Python:\n        desc: Python interpreter ver 3.11 or higher\n        checkExec: python3>=3.11\n    ```\n\n2. Use ``geo`` to run the checks.\n\n    ```shell\n     [\u2714] test.yaml...passed\n     [\u2714]   Environment...passed\n     [\u2714]     Check environment variable '$USER'...passed\n     [\u2714]   Paths...passed\n     [\u2714]     Check path 'examples/geomancy.toml'...passed\n     [\u2714]     Check path 'examples/pyproject.toml'...passed\n     [\u2714]   Executables...passed\n     [\u2714]     Check executable 'python3>=3.11'...passed\n    ================================= 8 passed in 0.50s ==================================\n    ```\n\n    (By default, ``geomancy`` will search ``.geomancy.y[a]ml``, ``geomancy.y[a]ml``\n    ``.geomancy.toml``, ``geomancy.toml`` and ``pyproject.toml``.)\n<!-- end quickstart -->\n\n\n## Documentation\n\nFor full documentation please see https://geomancy.readthedocs.io/en/latest.\n\n\n## Bugs or Requests\nPlease use the [GitHub issue tracker](https://github.com/jlorieau/geomancy/issues)\nto submit bugs or request features.\n\n## Similar projects\n\nThe following projects share some of the same goals in different contexts:\n\n- [Envalid](https://github.com/af/envalid)\n- [AWS Config](https://aws.amazon.com/config/)\n\n## License\n\nCopyright Justin Lorieau and others, 2023.\n\nDistributed under the terms of the [MIT license](LICENSE).\ngeomancy is free and open source software.\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Geomancy validates deployment and development environments",
    "version": "1.2.4",
    "project_urls": null,
    "split_keywords": [
        ".env",
        "dotenv",
        "env",
        "env var",
        "environment",
        "environment variable",
        "deployment",
        "validation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5851ee6caba7072d0f1afd02e91c0453fcd18539444231d339ecf92abc70589a",
                "md5": "e1a1e4bc909b16b49b4696a386e47271",
                "sha256": "a2b9d939d603a10a68af2463a7ea6bbd3f631b1b5bd6ae649630957a17dde12d"
            },
            "downloads": -1,
            "filename": "geomancy-1.2.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e1a1e4bc909b16b49b4696a386e47271",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 38073,
            "upload_time": "2023-08-10T16:48:55",
            "upload_time_iso_8601": "2023-08-10T16:48:55.078586Z",
            "url": "https://files.pythonhosted.org/packages/58/51/ee6caba7072d0f1afd02e91c0453fcd18539444231d339ecf92abc70589a/geomancy-1.2.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c32123d5a0f23800d7d7332f9f697bfa272e994a0038252defefec37b16b19c8",
                "md5": "9d5e8014c8b97400ff0d9119cfa2b928",
                "sha256": "c70746f1e7d3be64cc9d9978fa4f5b1db727e5b48a700789ffc56d80f8491b15"
            },
            "downloads": -1,
            "filename": "geomancy-1.2.4.tar.gz",
            "has_sig": false,
            "md5_digest": "9d5e8014c8b97400ff0d9119cfa2b928",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 118751,
            "upload_time": "2023-08-10T16:48:56",
            "upload_time_iso_8601": "2023-08-10T16:48:56.146360Z",
            "url": "https://files.pythonhosted.org/packages/c3/21/23d5a0f23800d7d7332f9f697bfa272e994a0038252defefec37b16b19c8/geomancy-1.2.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-08-10 16:48:56",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "geomancy"
}
        
Elapsed time: 0.43849s