Metadata-Version: 2.1
Name: sourcery-rules-generator
Version: 0.2.0
Summary: Generate architecture rules for Python projects.
Home-page: https://github.com/sourcery-ai/sourcery-rules-generator
License: MIT
Keywords: architecture,development
Author: reka
Author-email: reka@sourcery.ai
Requires-Python: >=3.10,<4.0
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: pydantic (>=1.10.2,<2.0.0)
Requires-Dist: rich (>=12.6.0,<13.0.0)
Requires-Dist: ruamel-yaml (>=0.17.21,<0.18.0)
Requires-Dist: typer[all] (==0.7.0)
Project-URL: Repository, https://github.com/sourcery-ai/sourcery-rules-generator
Description-Content-Type: text/markdown

# Sourcery Rules Generator 

**This is an experimental project. It might become a part of the [Sourcery CLI](https://docs.sourcery.ai/Overview/Products/Command-Line/).**

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:

* dependencies
* naming (coming soon)

For example:

```
sourcery-rules dependencies create
```

![screenshot sourcery-rules create](sourcery-rules_dependencies_create_2022-12-09T09-15-52.png)

### 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](dependencies.png)

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 2nd parameter is optional.  
E.g. it makes sense to say that no other package should import the `api` or `cli` package of your project.

=>

2 rules will be generated:

* 1 for `import` statements
* 1 for `from ... import` statements


### 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 .
```
