Skip to main content

Generate architecture rules for Python projects.

Project description

Sourcery Rules Generator

This is an experimental project. It might become a part of the Sourcery CLI.

Sourcery Rules Generator creates architecture rules for your project.

The generated rules can be used by Sourcery to review your project's architecture.

Currently, the project can create dependency rules.

Usage

You can create Sourcery rules based on a template with the command:

sourcery-rules <TEMPLATE-NAME> create

Supported templates:

For example:

sourcery-rules dependencies create

gif sourcery-rules dependencies create

Create Dependencies Rules

With the dependencies template, you can create rules to check the dependencies:

  • between the packages of your application
  • to external packages.

Let's say your project has an architecture like this:

dependencies overview

You can create rules to ensure:

  • no other package imports api
  • only api imports core
  • only db import SQLAlchemy
  • etc.

Run the command:

sourcery-rules dependencies create

You'll be prompted to provide:

  • a package name
  • the packages that are allowed to import the package above

The 1st parameter is the fully qualified name of a package or module.
It can be a package within your project or an external dependency.

The 2nd parameter is optional.
You have the following possibilities:

  • 0 allowed importer (e.g. for packages like api, cli). Leave this parameter empty.
  • 1 allowed importer. Provide the importer package's fully qualified name.
  • Multiple allowed importers. Provide multiple fully qualified package names separated by a comma ,

=>

2 rules will be generated:

  • 1 for import statements
  • 1 for from ... import statements

Every generated rule allows imports:

  • within the package itself
  • in tests

Dependencies Use Cases

Internal Dependencies Between the Packages of a Project

  • Law of Demeter: Packages should talk only to their "direct neighbors".
  • A mature package shouldn't depend on a less mature package
  • A core package shouldn't depend on a customer-specific package

Thanks to w_t_payne and hbrn for their input in this HackerNews discussion 😃

External Dependencies

  • Gateway pattern: Ensure that only a dedicated package of your software communicates with an external dependency.
  • Ensure that a deprecated library isn't used

This blog post shows a 3-step method of defining dependency rules:

  1. Draw a diagram showing the optimal dependencies between your packages.
  2. Phrase some rules in a human language based on the diagram: Which package should depend on which?
  3. Translate the rules into code with Sourcery Rules Generator.

Create Voldemort Rules

With a "voldemort" template, you can create rules that ensure that a specific name isn't used in your code.

For example:

  • The word annual shouldn't be used, because the preferred term is yearly.
  • The word util shouldn't be used, because it's overly general.

You can create a "voldemort" rule with the command:

sourcery-rules voldemort create

screenshot sourcery-rules voldemort create

You'll be prompted to provide:

  • the name that you want to avoid

=>

5 rules will be generated:

  • function names
  • function arguments
  • class names
  • variable declarations
  • variable assignments

Using the Generated Rules

The generated rules can be used by Sourcery to review your project. If you copy the generated rules into your project's .sourcery.yaml, Sourcery will use them automatically.

All the generated rules have the tag architecture. Once you've copied them to your .sourcery.yaml, you can run them with:

sourcery review --enable architecture .

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

sourcery_rules_generator-0.5.0.tar.gz (8.5 kB view details)

Uploaded Source

Built Distribution

sourcery_rules_generator-0.5.0-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file sourcery_rules_generator-0.5.0.tar.gz.

File metadata

  • Download URL: sourcery_rules_generator-0.5.0.tar.gz
  • Upload date:
  • Size: 8.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.2.2 CPython/3.11.0 Linux/5.19.0-29-generic

File hashes

Hashes for sourcery_rules_generator-0.5.0.tar.gz
Algorithm Hash digest
SHA256 d62e5b3768f45e46a3dce0d1d90a4b39ad4ca8f1b76381cd17c804e881156f53
MD5 7d2bfb8b824313ad47c60b0e6f35b4c6
BLAKE2b-256 709d13b79471510ecedd9d8304158b79add1c9d3aff82a6605a4ddf6c6a7a9ff

See more details on using hashes here.

File details

Details for the file sourcery_rules_generator-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for sourcery_rules_generator-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d3ad18879460638633e77b7815dc2918408b4b83631827fa431fc514f3324d51
MD5 e98ba1fe2f0afe530e523d49d0f760b1
BLAKE2b-256 29965f4ba460c2c62724e6b2cdd55231bda97974e65628995da094b9b46ba197

See more details on using hashes here.

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