TicketSync — bidirectional ticket synchronization across ITSM systems
Project description
TicketSync
Bidirectional ticket synchronization across ITSM and issue-tracking systems.
Part of the Libre Ticket Suite — a loosely coupled set of open-source Python libraries for automating ticket, alert, and issue handling.
Overview
TicketSync provides a structured IR (Intermediate Representation) and sync engine for moving tickets between ITSM, alerting, and issue-tracking systems. It is designed to be:
- Adapter-based: each system is a pluggable adapter implementing a simple protocol.
- Config-driven: a single YAML file defines sources, destinations, and sync behaviour.
- Type-safe: fully typed with
pydanticv2 models; mypy --strict passes.
Install
pip install ticketsync
Requires Python 3.10+.
Quick start
from ticketsync import SyncEngine, SyncConfig
config = SyncConfig.from_yaml("sync.yaml")
engine = SyncEngine(config)
result = engine.run()
print(f"Synced {result.synced} tickets, {result.skipped} skipped, {result.errors} errors")
Minimal sync.yaml
source:
adapter: local
path: ./tickets/source
destination:
adapter: local
path: ./tickets/destination
Supported adapters
| Adapter | Direction | Status |
|---|---|---|
local |
read / write | stable |
github_issues |
read | stable |
opscenter |
write | stable |
Adapters are importable from ticketsync.adapters:
from ticketsync.adapters import LocalFilesystemAdapter, ADAPTER_REGISTRY
Core data model
Every ticket is normalised to the Ticket IR before being passed between adapters:
from ticketsync import Ticket, SeverityLevel, TicketStatus
ticket = Ticket(
id="acme-42",
title="Disk usage critical on web-01",
severity=SeverityLevel.HIGH,
status=TicketStatus.OPEN,
)
Rich entity types (AccountEntity, HostEntity, IpAddressEntity, UrlEntity, FileEntity, ProcessEntity) can be attached to tickets for richer context.
Writing a custom adapter
from ticketsync import TicketAdapter, Ticket
from typing import Iterator
class MyAdapter(TicketAdapter):
def read(self) -> Iterator[Ticket]:
yield Ticket(id="1", title="example", ...)
def write(self, ticket: Ticket) -> None:
print(f"Writing: {ticket.title}")
License
Apache 2.0
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ticketsync-0.2.0.tar.gz.
File metadata
- Download URL: ticketsync-0.2.0.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
19006ce38e5c81cc56d67081d6039a964d8ebea178f8a2af38dd1cedab6683fc
|
|
| MD5 |
f8a68af911e6a68a80e9a2c1850f7497
|
|
| BLAKE2b-256 |
7cb45b83e6004f4d6a2d2a9dd3f1bfe907df5d0cebbe301bc94f7b6d541d1d1d
|
Provenance
The following attestation bundles were made for ticketsync-0.2.0.tar.gz:
Publisher:
publish.yml on LeonardoSanBenitez/TicketSync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ticketsync-0.2.0.tar.gz -
Subject digest:
19006ce38e5c81cc56d67081d6039a964d8ebea178f8a2af38dd1cedab6683fc - Sigstore transparency entry: 1476770304
- Sigstore integration time:
-
Permalink:
LeonardoSanBenitez/TicketSync@66c71b51f87ccbb9cdf263f812ecf9b5920ea6e3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/LeonardoSanBenitez
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66c71b51f87ccbb9cdf263f812ecf9b5920ea6e3 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ticketsync-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ticketsync-0.2.0-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3078abf3c2795c0114c8dcbbe1100a83fd4a1a407c9665efc29f13052c39a4be
|
|
| MD5 |
34c7cf2b37296314c3a5b1c9f1ec877b
|
|
| BLAKE2b-256 |
02f02fb69d62548e470ede017873f8b360df7330f46a1f90031f95eff4c8fa32
|
Provenance
The following attestation bundles were made for ticketsync-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on LeonardoSanBenitez/TicketSync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ticketsync-0.2.0-py3-none-any.whl -
Subject digest:
3078abf3c2795c0114c8dcbbe1100a83fd4a1a407c9665efc29f13052c39a4be - Sigstore transparency entry: 1476770632
- Sigstore integration time:
-
Permalink:
LeonardoSanBenitez/TicketSync@66c71b51f87ccbb9cdf263f812ecf9b5920ea6e3 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/LeonardoSanBenitez
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@66c71b51f87ccbb9cdf263f812ecf9b5920ea6e3 -
Trigger Event:
release
-
Statement type: