Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: minos-framework/minos-templates
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v0.1.1
Choose a base ref
...
head repository: minos-framework/minos-templates
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
Loading
Showing with 249 additions and 164 deletions.
  1. +1 −1 microservice/language/python/deploy/docker-compose/Dockerfile
  2. +11 −3 microservice/language/python/init/_utils.py
  3. +66 −55 microservice/language/python/init/config.yml.jinja
  4. +2 −2 microservice/language/python/init/src/aggregates.py.jinja
  5. +2 −2 microservice/language/python/init/src/commands/services.py.jinja
  6. +1 −1 microservice/language/python/init/src/queries/__init__.py.jinja
  7. +20 −13 microservice/language/python/init/src/queries/repository.py.jinja
  8. +16 −0 microservice/language/python/init/src/queries/services.py.jinja
  9. +2 −2 microservice/language/python/init/tests/test_aggregates.py.jinja
  10. +2 −2 microservice/language/python/init/tests/test_commands/test_services.py.jinja
  11. +2 −2 microservice/language/python/init/tests/test_queries/test_services.py.jinja
  12. +0 −42 microservice/language/python/init/tests/utils.py
  13. +97 −0 microservice/language/python/init/tests/utils.py.jinja
  14. +13 −8 microservice/language/python/package-manager/poetry/pyproject.toml.jinja
  15. +6 −4 project/broker/kafka/deploy/docker-compose/_utils.py
  16. +1 −1 project/database/postgres/deploy/docker-compose/_utils.py
  17. +1 −0 project/database/postgres/deploy/docker-compose/external/postgres/10-create-database.sql
  18. +2 −2 project/database/postgres/deploy/docker-compose/external/postgres/Dockerfile
  19. +0 −22 ...database/postgres/deploy/docker-compose/external/postgres/create-multiple-postgresql-databases.sh
  20. +4 −2 project/database/redis/deploy/docker-compose/_utils.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM ghcr.io/clariteia/minos-microservice:0.1.8 as development
FROM ghcr.io/clariteia/minos-microservice:0.7.0.dev3 as development

COPY ./pyproject.toml ./
RUN poetry install --no-root
14 changes: 11 additions & 3 deletions microservice/language/python/init/_utils.py
Original file line number Diff line number Diff line change
@@ -28,6 +28,14 @@ def build_deploy_playbook(path: Path) -> str:
def build_docker_compose(path: Path, microservice_name: str) -> str:
"""Build Docker Compose file content."""

db_creation_path = path.parent / "external/postgres/10-create-database.sql"
if not db_creation_path.exists():
raise ValueError("external/postgres/10-create-database.sql script must exist")

with db_creation_path.open("a") as db_creation_file:
db_creation_file.write(f"\nCREATE DATABASE {microservice_name}_db;")
db_creation_file.write(f"\nCREATE DATABASE {microservice_name}_query_db;")

if not path.exists():
raise ValueError("A base Compose file must exist.")

@@ -36,9 +44,9 @@ def build_docker_compose(path: Path, microservice_name: str) -> str:

if "x-microservice-environment" not in data:
data["x-microservice-environment"] = {
"MINOS_BROKER_QUEUE_HOST": "postgres",
"MINOS_BROKER_HOST": "kafka",
"MINOS_REPOSITORY_HOST": "postgres",
"MINOS_INTERFACES_BROKER_COMMON_HOST": "kafka",
"MINOS_DATABASES_DEFAULT_HOST": "postgres",
"MINOS_DATABASES_QUERY_HOST": "postgres",
"MINOS_SNAPSHOT_HOST": "postgres",
"MINOS_DISCOVERY_HOST": "discovery",
}
121 changes: 66 additions & 55 deletions microservice/language/python/init/config.yml.jinja
Original file line number Diff line number Diff line change
@@ -1,65 +1,76 @@
service:
name: {{ name }}
aggregate: src.aggregates.{{ aggregate }}
injections:
lock_pool: minos.common.PostgreSqlLockPool
postgresql_pool: minos.common.PostgreSqlPool
broker_publisher: minos.plugins.kafka.InMemoryQueuedKafkaBrokerPublisher
broker_subscriber_builder: minos.plugins.kafka.InMemoryQueuedKafkaBrokerSubscriberBuilder
broker_pool: minos.networks.BrokerClientPool
transaction_repository: minos.aggregate.PostgreSqlTransactionRepository
event_repository: minos.aggregate.PostgreSqlEventRepository
snapshot_repository: minos.aggregate.PostgreSqlSnapshotRepository
saga_manager: minos.saga.SagaManager
discovery: minos.networks.DiscoveryConnector
services:
- minos.networks.BrokerHandlerService
- minos.networks.RestService
- minos.networks.PeriodicTaskSchedulerService
middleware:
- minos.saga.transactional_command
services:
- minos.aggregate.TransactionService
- minos.aggregate.SnapshotService
- minos.saga.SagaService
- src.queries.{{ aggregate }}QueryService
- src.commands.{{ aggregate }}CommandService
rest:
host: 0.0.0.0
port: 8080
broker:
host: localhost
port: 9092
queue:
version: 2
name: {{ name }}
injections:
- src.{{ aggregate }}QueryServiceRepository
databases:
default:
client: minos.plugins.aiopg.AiopgDatabaseClient
database: {{ name }}_db
user: minos
password: min0s
host: localhost
port: 5432
records: 1000
retry: 2
repository:
database: {{ name }}_db
user: minos
password: min0s
host: localhost
port: 5432
query_repository:
database: {{ name }}_query_db
user: postgres
password: ""
host: localhost
port: 5432
snapshot:
database: {{ name }}_db
user: minos
password: min0s
host: localhost
port: 5432
saga:
storage:
query:
client: minos.plugins.aiopg.AiopgDatabaseClient
database: {{ name }}_query_db
user: minos
password: min0s
host: localhost
port: 5432
saga:
client: minos.plugins.lmdb.LmdbDatabaseClient
path: ./{{ name }}.lmdb
interfaces:
broker:
port: minos.networks.BrokerPort
common:
host: localhost
port: 9092
queue:
records: 1000
retry: 2
publisher:
client: minos.plugins.kafka.KafkaBrokerPublisher
queue: minos.networks.DatabaseBrokerPublisherQueue
subscriber:
client: minos.plugins.kafka.KafkaBrokerSubscriber
queue: minos.networks.DatabaseBrokerSubscriberQueue
validator: minos.networks.DatabaseBrokerSubscriberDuplicateValidator
http:
port: minos.networks.HttpPort
connector:
client: minos.plugins.aiohttp.AioHttpConnector
host: 0.0.0.0
port: 8023
periodic:
port: minos.networks.PeriodicPort
pools:
lock: minos.common.DatabaseLockPool
database: minos.common.DatabaseClientPool
broker: minos.networks.BrokerClientPool
discovery:
connector: minos.networks.DiscoveryConnector
client: minos.plugins.minos_discovery.MinosDiscoveryClient
host: localhost
port: 5567
saga:
manager: minos.saga.SagaManager
aggregate:
entities:
- src.aggregates.{{ aggregate }}
repositories:
transaction: minos.aggregate.DatabaseTransactionRepository
event: minos.aggregate.DatabaseEventRepository
snapshot: minos.aggregate.DatabaseSnapshotRepository
routers:
- minos.networks.BrokerRouter
- minos.networks.PeriodicRouter
- minos.networks.RestHttpRouter
middleware:
- minos.saga.transactional_command
services:
- minos.aggregate.TransactionService
- minos.aggregate.SnapshotService
- minos.saga.SagaService
- src.queries.{{ aggregate }}QueryService
- src.commands.{{ aggregate }}CommandService
4 changes: 2 additions & 2 deletions microservice/language/python/init/src/aggregates.py.jinja
Original file line number Diff line number Diff line change
@@ -18,5 +18,5 @@ class {{ aggregate }}Aggregate(Aggregate[{{ aggregate }}]):
@staticmethod
async def create() -> UUID:
"""Create a new instance."""
root = await {{ aggregate }}.create()
return root.uuid
{{ name }} = await {{ aggregate }}.create()
return {{ name }}
Original file line number Diff line number Diff line change
@@ -25,7 +25,7 @@ class {{ aggregate }}CommandService(CommandService):
:return: A ``Response`` instance.
"""
try:
uuid = await {{ aggregate }}Aggregate.create()
return Response({"uuid": uuid})
{{ name }} = await {{ aggregate }}Aggregate.create()
return Response({{ name }})
except Exception as exc:
raise ResponseException(f"An error occurred during {{ aggregate }} creation: {exc}")
Original file line number Diff line number Diff line change
@@ -4,4 +4,4 @@ from .services import (

from .repository import (
{{ aggregate }}QueryServiceRepository,
)
)
33 changes: 20 additions & 13 deletions microservice/language/python/init/src/queries/repository.py.jinja
Original file line number Diff line number Diff line change
@@ -1,22 +1,29 @@
from minos.common import MinosSetup, MinosConfig
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from src.queries.models import Base
from minos.common import (
Config,
Injectable,
SetupMixin,
)
from sqlalchemy import (
create_engine,
)
from sqlalchemy.orm import (
sessionmaker,
)

from src.queries.models import (
Base,
)

class {{ aggregate }}QueryServiceRepository(MinosSetup):
@Injectable("{{ aggregate.lower() }}_repository")
class {{ aggregate }}QueryServiceRepository(SetupMixin):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.engine = create_engine("postgresql+psycopg2://postgres:@localhost:5432/{{ name }}_query_db".format(**kwargs))
self.session = sessionmaker(bind=self.engine)
self.engine = create_engine("postgresql+psycopg2://{user}:{password}@{host}:{port}/{{ name }}_query_db".format(**kwargs))
self.session = sessionmaker(bind=self.engine)()

async def _setup(self) -> None:
Base.metadata.create_all(self.engine)

@classmethod
def _from_config(cls, *args, config: MinosConfig, **kwargs) -> {{ aggregate }}QueryRepository:
return cls(*args, **(config.query_repository._asdict()) | kwargs)

@property
def session(self):
return self.session
def _from_config(cls, *args, config: Config, **kwargs):
return cls(*args, **(config.get_database_by_name("query")) | kwargs)
16 changes: 16 additions & 0 deletions microservice/language/python/init/src/queries/services.py.jinja
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
from dependency_injector.wiring import (
Provide,
)

from src.queries.repository import (
{{ aggregate }}QueryServiceRepository,
)

from minos.aggregate import (
Event,
)
from minos.common import (
Inject,
)
from minos.cqrs import (
QueryService,
)
@@ -15,6 +26,11 @@ from minos.networks import (
class {{ aggregate }}QueryService(QueryService):
"""{{ aggregate }}QueryService class."""

@Inject()
def __init__(self, repository: {{ aggregate }}QueryServiceRepository, **kwargs):
super().__init__(**kwargs)
self.repository = repository

@enroute.rest.query("/{{ aggregate.lower() }}s", "GET")
async def get_{{ aggregate.lower() }}(self, request: Request) -> Response:
"""Get a {{ aggregate }} instance.
Original file line number Diff line number Diff line change
@@ -16,10 +16,10 @@ class Test{{aggregate}}(unittest.IsolatedAsyncioTestCase):
self.injector = build_dependency_injector()

async def asyncSetUp(self) -> None:
await self.injector.wire(modules=[sys.modules[__name__]])
await self.injector.wire_and_setup_injections()

async def asyncTearDown(self) -> None:
await self.injector.unwire()
await self.injector.unwire_and_destroy_injections()

def test_constructor(self):
obj = {{ aggregate }}()
Original file line number Diff line number Diff line change
@@ -21,10 +21,10 @@ class Test{{aggregate}}CommandService(unittest.IsolatedAsyncioTestCase):
self.injector = build_dependency_injector()

async def asyncSetUp(self) -> None:
await self.injector.wire(modules=[sys.modules[__name__]])
await self.injector.wire_and_setup_injections()

async def asyncTearDown(self) -> None:
await self.injector.unwire()
await self.injector.unwire_and_destroy_injections()

def test_constructor(self):
service = {{ aggregate }}CommandService()
Original file line number Diff line number Diff line change
@@ -16,10 +16,10 @@ class Test{{aggregate}}QueryService(unittest.IsolatedAsyncioTestCase):
self.injector = build_dependency_injector()

async def asyncSetUp(self) -> None:
await self.injector.wire(modules=[sys.modules[__name__]])
await self.injector.wire_and_setup_injections()

async def asyncTearDown(self) -> None:
await self.injector.unwire()
await self.injector.unwire_and_destroy_injections()

def test_constructor(self):
service = {{ aggregate }}QueryService()
42 changes: 0 additions & 42 deletions microservice/language/python/init/tests/utils.py

This file was deleted.

Loading