Skip to main content

A Python library for implementing layered architecture with services and dependency injection.

Project description

LayeredPy

LayeredPy is a Python library built to implement a clean, maintainable layered architecture. It offers support for service-oriented programming and includes built-in dependency injection (DI) to improve code modularity and testability.


Features

  • Layered Architecture: Enables a structured and modular separation of concerns.
  • Dependency Injection: Dependencies get injected automatically, improving testability and reducing tight coupling.
  • Service Management: Defines base services with extensible behavior for your application logic.
  • CLI Tool: Generate service boilerplate with the layeredpy tool.

Installation

Install LayeredPy using pip:

pip install layered-py

Getting Started

Here’s how you can use LayeredPy in your projects.


1. Define and Register a Service

Create a service by subclassing the Service class and use the @register decorator to register it.

from layered_py.service import Service
from layered_py.decorators import register


@register(singleton=True)
class GreetingService(Service):
    def say_hello(self):
        print("Hello from LayeredPy!")

2. Inject the Service Where Needed

With the @inject decorator, services can be directly injected as attributes of the class. You don’t need to pass them explicitly.

LayeredPy uses lazy loading with the load_all_modules function to collect all classes with the register annotation. Using this function in a central point in your software is mandatory so classes that use Inject function properly.

from layered_py.decorators import inject
from layered_py.bootstrap import load_all_modules


class MyApp:
    @inject
    def run(self, GreetingService):
        GreetingService.say_hello()  # Directly access the injected service


# Example usage
if __name__ == "__main__":
    load_all_modules()
    
    app = MyApp()
    app.run()

Output:

Hello from LayeredPy!


3. Generate Service Templates with the CLI

You can use the built-in layeredpy CLI tool to create new service boilerplates automatically.

The CLI tool of LayeredPy can create services, repositories, domains and presentation classes

Example Usage:

layeredpy createService MyNewService

This command generates the following services/MyNewService.py file:

from layered_py.service import Service
from layered_py.decorators import register

@register(singleton=True)
class MyNewService(Service):
    def setup(self):
        pass

    def handle(self):
        raise NotImplementedError

The same works with the commands: createDomain, createPresentation, and createRepository

Create complete class sets with layeredpy generate

LayeredPy is capable of creating complete sets of classes for example this command:

layeredpy generate User

will create: UserService, UserRepository, UserModel and UserRoutes with the register annotation so they are DI-ready.

Configuration

To change the paths where the classes will be generated create a layeredpy_config.yml in your project root The .yml File should contain the following:

service_destination: "your_services"
domain_destination: "your_domains"
repository_destination: "your_repositories"
presentation_destination: "your_presentations"

License

This project is licensed under the MIT License.


Support

For questions or support, feel free to open an issue on the GitHub Issues page. You can find more information on the project repository.

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

layered_py-3.0.1.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

layered_py-3.0.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file layered_py-3.0.1.tar.gz.

File metadata

  • Download URL: layered_py-3.0.1.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for layered_py-3.0.1.tar.gz
Algorithm Hash digest
SHA256 fa7e02ca48d81c8518662268e5d4abe5a23cbcb72c304849f371d5a1bff25ba4
MD5 c22677f3e72648484c279c2d55c66aea
BLAKE2b-256 56ba2b6aa1b69cdad33cb457c3bafe81fbba501aa5fcf5f756943967dad12585

See more details on using hashes here.

File details

Details for the file layered_py-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: layered_py-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.2

File hashes

Hashes for layered_py-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 bbc65f7adaea1390abd950dd086bf7202e8b6180b3b8db4c7d5f38eca2053ae3
MD5 ab6a1946e9d32b39cebec44beb1d5b34
BLAKE2b-256 49da2b7371fb755ab90c2c148b2d313f4d88b004dcd5b8ebffba93bf88b6b850

See more details on using hashes here.

Supported by

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