Skip to main content

Clandestino

banner

By: CenturyBoys

This package provides a migration tool. It includes a command-line interface (CLI) for easy execution and a single asynchronous function that can be imported and used in your code.

Install

The main package does not have any database implementation and uses only the interfaces and abstractions from the clandestino_interfaces package. In other words, you are free to create your own implementations. We will explain the details later.

Database Type Install using extra description Environment parameter
PostgreSQL postgres here CLANDESTINO_POSTGRES_CONNECTION_STRING
Elasticsearch elasticsearch here CLANDESTINO_ELASTICSEARCH_CONNECTION_STRING
MongoDB mongo here CLANDESTINO_MONGO_CONNECTION_STRING
SQLite sqlite here CLANDESTINO_SQLITE_DB_PATH
MinIO minio here CLANDESTINO_BUCKET_CONNECTION_STRING, CLANDESTINO_BUCKET_ACCESS_KEY*, CLANDESTINO_BUCKET_SECRET_KEY*
Qdrant qdrant here CLANDESTINO_QDRANT_CONNECTION_STRING, CLANDESTINO_QDRANT_API_KEY*

[*] Optional parameter

How to install extra packages?

poetry add clandestino -E postgres
OR
pip install 'clandestino[postgres]'

Config

Clandestino has some configurations that you can set as environment variables or in a .env file.

  • CLANDESTINO_MIGRATION_REPO If you are using any of the extra packages, you must set them with their respective values: POSTGRES, ELASTICSEARCH, MONGO, SQLITE, MINIO, QDRANT

CLI

[-h] Help command

$cdt -h         
 Clandestino is a database migration tool
 Migration repository mode is: ELASTICSEARCH
  cldest [-h|-m|-lm|-rm|-cm] [params]

    -h: Display help
    -m: Migrate database
    -lm: List migrations
    -rm: Rollback last migration
    -cm: Create database migration - params [name type]

[-m] Migrate database

Migrate databases using the files within the ./migrations folder. Each migration checks if it's already run. If not, the migration is applied, the information is saved, and the async def up(self) -> None method is called. No migration will be executed twice.

The system will display the migration status:

  • OK = ✅
  • ERROR = ⚠️
  • SKIPPED = ⏭️

[-lm] List migrations

List all migration within the ./migrations folder

[-rm] Rollback migration

Rollback the last database migration using the latest file in the ./migrations folder. The async def down(self) -> None method within the file will be called.

The system will display the rollback status:

  • OK = ✅
  • ERROR = ⚠️
  • SKIPPED = ⏭️

[-cm] Create migration

Create a migration within the ./migrations folder, if the folder not exists create it to.

This command receive two parameters:

  • Migration name
  • Migration type, if not filled will use default migration template.

The migration file will be like this migration_{datetime_reference}_{migration_name}.py

Migration file

The migration file inherit the abstract class AbstractMigration and need declare two fundtions:

  • async def up(self) -> None. This method will be called on migration command
  • async def down(self) -> None. This method will be called on rollback command

See bellow an empty template file

from clandestino_interfaces import AbstractMigration


class Migration(AbstractMigration):
    infra = None

    async def up(self) -> None:
        """Do modifications in database"""
        pass

    async def down(self) -> None:
        """Undo modifications in database"""
        pass

Self Implementation

To create your own Clandestino implementation, simply create a file named repository.py inside the ./migrations folder. This file should contain a class named MigrateRepository that inherits from clandestino_interfaces.IMigrateRepository.

Observation: Your migrations need to handler the database connections by your self.

See bellow the interface:

from abc import ABC, abstractmethod


class IMigrateRepository(ABC):
    @classmethod
    @abstractmethod
    async def create_control_table(cls) -> None:
        pass

    @classmethod
    @abstractmethod
    async def control_table_exists(cls) -> bool:
        pass

    @classmethod
    @abstractmethod
    async def register_migration_execution(cls, migration_name: str) -> None:
        pass

    @classmethod
    @abstractmethod
    async def migration_already_executed(cls, migration_name: str) -> bool:
        pass

    @classmethod
    @abstractmethod
    async def remove_migration_execution(cls, migration_name: str) -> None:
        pass

Metadata

Release files for clandestino 0.1.14

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for clandestino 0.1.14
File Size Uploaded
clandestino-0.1.14.tar.gz 9.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for clandestino 0.1.14
File Interpreter ABI Platform
clandestino-0.1.14-py3-none-any.whl Python 3 none any Details

Total release size: 19.6 kB

Release files / clandestino-0.1.14.tar.gz

Download URL clandestino-0.1.14.tar.gz
Size 9.1 kB
Tags Source
SHA-256 checksum
How to use checksums
fa9e0ccb6035593d948b421ca286e1c6f24404a39775fa020fe1399b486fa87b
BLAKE2b-256 checksum
How to use checksums
7ea7cf329083e6e97a334bee85b0eb0ac42e5b20723044fe0b51a530d92d5140
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.6 Linux/6.1.0-26-amd64

Release files / clandestino-0.1.14-py3-none-any.whl

Download URL clandestino-0.1.14-py3-none-any.whl
Size 10.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91c2118e567f952d78845f02f5bdd1a16d6b0791e75bcc31490914460e1a7296
BLAKE2b-256 checksum
How to use checksums
c4e3f606e932bb8387ee43be74b70d3c1e12644f8a7421d540e666da10aca84f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.8.3 CPython/3.12.6 Linux/6.1.0-26-amd64

Release history Release notifications | RSS feed

This release

0.1.14 This release

2 release files

0.1.13

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page