Skip to main content

Lightweight Liquibase-style XML changelog executor for Neo4j/MDB updates

Project description

mdb-changelog-runner

Lightweight Python execution for Liquibase-style Neo4j/MDB changelog XML.

This package parses ordered <changeSet> entries and executes their <neo4j:cypher> queries in a single Neo4j transaction. It does not require Java, the JDK, Liquibase, or the Liquibase Neo4j extension at runtime.

Install

uv add mdb-changelog-runner

For local development:

uv sync
uv run pytest

XML format

Existing Liquibase Neo4j changelogs are supported:

<databaseChangeLog
  xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
  xmlns:neo4j="http://www.liquibase.org/xml/ns/dbchangelog-ext"
  xmlns:mdb="https://cbiit.github.io/mdb/changelog">
  <changeSet id="1" author="MDB-runner">
    <neo4j:cypher>CREATE (n:test {handle:'TEST'})</neo4j:cypher>
  </changeSet>
</databaseChangeLog>

Parameterized Cypher can use MDB JSON params:

<changeSet id="2" author="MDB-runner">
  <neo4j:cypher>
    MERGE (n:term {handle: $handle, value: $value})
  </neo4j:cypher>
  <mdb:params>{"handle": "C123", "value": "Example"}</mdb:params>
</changeSet>

Usage

import logging

from neo4j import GraphDatabase
from mdb_changelog_runner import ChangelogExecutor

driver = GraphDatabase.driver(uri, auth=(user, password))
logger = logging.getLogger("mdb_changelog_runner")

executor = ChangelogExecutor(driver, logger=logger)
result = executor.execute(
    "local_changelog.xml",
    "s3://my-bucket/model_changelogs/CTDC/local_changelog.xml",
    # Optional changelog_scope
    changelog_scope="model",
    # Optional changelog_scope_path
    changelog_scope_path="model_changelogs/CTDC",
)

print(result.changesets_executed)

execute() opens a session when given a Neo4j driver. It can also accept an already-open session-like object that provides begin_transaction().

Behavior

  • Each <changeSet> must have an id, author, and <neo4j:cypher> element.
  • Changesets run in XML order.
  • All changesets run inside one transaction.
  • After all changesets succeed, one _changelog metadata node is written in the same transaction. It records the run timestamp, changelog S3 location, optional scope values, number of executed changesets, unique authors, and a deprecate_after timestamp.
  • The new _changelog node links to the previous matching run with :prev_changelog. Matching uses scope values when provided, otherwise location.
  • Empty changelogs do not write _changelog metadata.
  • If any changeset fails, the transaction is rolled back and ChangelogExecutionError is raised. No metadata is written for failed runs.
  • dry_run=True parses the changelog and returns a summary without executing Cypher.
  • By default, deprecate_after is 6 months after the run timestamp. Pass a datetime.timedelta as ChangelogExecutor(..., deprecate_after=...) to override it.

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

mdb_changelog_runner-1.0.0.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

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

mdb_changelog_runner-1.0.0-py3-none-any.whl (7.3 kB view details)

Uploaded Python 3

File details

Details for the file mdb_changelog_runner-1.0.0.tar.gz.

File metadata

  • Download URL: mdb_changelog_runner-1.0.0.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mdb_changelog_runner-1.0.0.tar.gz
Algorithm Hash digest
SHA256 579b18d3c2bcc8ca5de344362bd6c73d33c143b16670f6b395c9fc1ef40ac2d2
MD5 8f3ead4027c6215db17d92bb6484ab05
BLAKE2b-256 88b3db6ed5cea3342ee0abb40be8b1cdc76c40a2c74d8afbd338e5274990118c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdb_changelog_runner-1.0.0.tar.gz:

Publisher: publish.yml on CBIIT/MDB-Changelog-Runner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mdb_changelog_runner-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mdb_changelog_runner-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4b56a8a6240d55c47e811d44c6122564989b808a064f7f7686d12a0b42364915
MD5 7a24112b36aa699dda2e0680415b7e62
BLAKE2b-256 5f56f2d593e0a99bfdd05c06e6ab4ebc0b74cde7f456c55b539e30b8cfa95e24

See more details on using hashes here.

Provenance

The following attestation bundles were made for mdb_changelog_runner-1.0.0-py3-none-any.whl:

Publisher: publish.yml on CBIIT/MDB-Changelog-Runner

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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