Skip to main content

Layer Linter checks that your project follows a custom-defined layered architecture.

Project description

Layer Linter

https://img.shields.io/pypi/v/layer_linter.svg Python versions https://api.travis-ci.org/seddonym/layer_linter.svg?branch=master https://codecov.io/gh/seddonym/layer_linter/branch/master/graph/badge.svg Documentation Status Updates

Layer Linter checks that your project follows a custom-defined layered architecture.

Overview

Layer Linter can be used as part of an automated test suite to check that you are following a self-imposed layered architecture within your Python project. This is particularly useful if you are working on a complex codebase within a team, when you want to enforce a particular architectural style.

To define how layers work within your project, you create a layers.yml file. This file prescribes the order in which different modules within your project may import from each other.

Running the layer-lint command will parse the file, analyse your project’s internal dependencies within your project, and error if you are violating your prescribed architecture.

Quick start

Install Layer Linter:

pip install layer-linter

Create a layers.yml in the root of your project, in this format:

My Layers Contract:
  packages:
    - myproject.packageone
    - myproject.packagetwo
    - myproject.packagethree
  layers:
    - highlevelmodule
    - mediumlevelmodule
    - lowlevelmodule

From your project root, run:

layer-lint myproject

If your code violates the contract, you will see an error message as follows:

============
Layer Linter
============

---------
Contracts
---------

Analyzed 23 files, 44 dependencies.
-----------------------------------

My layer contract BROKEN

Contracts: 0 kept, 1 broken.

----------------
Broken contracts
----------------


My layer contract
-----------------


1. myproject.packagetwo.lowlevelmodule imports myproject.packagetwo.highlevelmodule:

    myproject.packagetwo.lowlevelmodule <-
    myproject.utils <-
    myproject.packagetwo.highlevelmodule

History

0.1.0 (2018-06-20)

  • First release on PyPI.

0.2.0 (2018-06-23)

  • Look for layers.yml in current working directory.

0.3.0 (2018-06-24)

  • Rename command to layer-lint.

  • Changed order of layers in layers.yml to be listed high level to low level.

0.4.0 (2018-07-22)

  • Made dependency analysis more efficient and robust.

  • Improved report formatting.

  • Removed illegal dependencies that were implied by other, more succinct illegal dependencies.

  • Added --debug command line argument.

0.5.0 (2018-08-01)

  • Added count of analysed files and dependencies to report.

  • Fixed issues from running command in a different directory to the package.

  • Increased speed of analysis.

  • Changed --config_directory command line argument to --config-directory.

0.6.0 (2018-08-07)

  • Added ability to whitelist paths.

0.6.1 (2018-08-07)

  • Add current working directory to path.

0.6.2 (2018-08-17)

  • Don’t analyse children of directories that aren’t Python packages.

  • Prevented installing incompatible version of Pydeps (1.6).

0.7.0 (2018-09-04)

  • Complete rewrite of static analysis used to build dependency graph.

  • Added quiet and verbose reporting.

  • Added type annotation and mypy.

  • Build earlier versions of Python using pybackwards.

  • Corrected docs to refer to layers.yml instead of layers.yaml.

0.7.1 (2018-09-04)

  • Fix packaging bug with 0.7.0.

latest

  • Fix bug with not checking all submodules of layer.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

layer-linter-0.7.2.tar.gz (34.2 kB view hashes)

Uploaded Source

Built Distribution

layer_linter-0.7.2-py34,py35,py36-none-any.whl (15.7 kB view hashes)

Uploaded Python 3.4,py35,py36

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page