Skip to main content

Schism is an autowiring library that makes modularity simple in monolithes and simplifies code sharing in microservices.

Project description

Schism

Schism is a service framework designed to simplify the process of splitting a single application into multiple services. It provides autowiring capabilities that make modularity straightforward in monolithic applications and facilitates code sharing in microservices architectures.

Installation

pip install schism

Usage

Schism is designed to have the smallest possible API surface area. You just need to create a service type that inherits from schism.Service. You can use Bevy's dependency injection to inject services into any function.

Creating a schism.config.yaml file in the root of your project will allow you to define the services that should be available in your application and how they should be exposed. Bevy then handles injecting the correct client facades into your functions so you can interact with the services as if they are still part of the same application.

To launch individual services you either need to set the SCHISM_ACTIVE_SERVICES environment variable to a comma-separated list of the names of the services you want to run or pass them after the --services flag. Schism will then start the appropriate bridge servers using the configuration in the schism.config.yaml file when you run the schism command. Typically, you should only run a single service per process.

Here's a basic example of a service that provides a simple greeting.

# greetings.py
from bevy import inject, dependency
from schism import Service

class GreetingService(Service):
    async def greet(self, name: str) -> str:
        print("Handling request...")
        return f"Hello, {name}!"


@inject
async def greet(greeting_service: GreetingService = dependency()):
    print(await greeting_service.greet("World"))


async def main():
    await greet()


if __name__ == "__main__":
    import asyncio

    asyncio.run(main())

Here is the corresponding schism.config.yaml file:

services:
  - bridge:
      type: schism.bridges.simple_tcp_bridge.SimpleTCPBridge
      host: localhost
      port: 1234
    name: greeting-service
    service: greetings.GreetingService

To run you must first start the greetings service with this command:

schism -s greeting-service

Then you can run the script and that accesses the service by passing schism.run the entry point coroutine:

schism greetings.main

Alternatively you can run it like a normal Python script and no client facades will be injected and everything will run in a single process.

python greetings.py

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

schism-0.1.2.tar.gz (7.6 kB view hashes)

Uploaded Source

Built Distribution

schism-0.1.2-py3-none-any.whl (9.1 kB view hashes)

Uploaded Python 3

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