Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.10.14
3.11.13
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [1.4.0] - 2026-01-15

### Removed
- `pyTigergraph` dependence remove

### Added
- reserved Tigergraph words are modified during automated schema generation

## [1.3.11] - 2026-01-12

### Added
Expand Down
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ A framework for transforming **tabular** (CSV, SQL) and **hierarchical** data (J

> **⚠️ Package Renamed**: This package was formerly known as `graphcast`.

![Python](https://img.shields.io/badge/python-3.10-blue.svg)
![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)
[![PyPI version](https://badge.fury.io/py/graflo.svg)](https://badge.fury.io/py/graflo)
[![PyPI Downloads](https://static.pepy.tech/badge/graflo)](https://pepy.tech/projects/graflo)
[![License: BSL](https://img.shields.io/badge/license-BSL--1.1-green)](https://github.com/growgraph/graflo/blob/main/LICENSE)
Expand Down Expand Up @@ -227,9 +227,11 @@ To run unit tests
pytest test
```

> **Note**: Tests require external database containers (ArangoDB, Neo4j, TigerGraph, FalkorDB, Memgraph) to be running. CI builds intentionally skip test execution. Tests must be run locally with the required database images started (see [Test databases](#test-databases) section above).

## Requirements

- Python 3.10+
- Python 3.11+ (Python 3.11 and 3.12 are officially supported)
- python-arango
- sqlalchemy>=2.0.0 (for PostgreSQL and SQL data sources)

Expand Down
4 changes: 2 additions & 2 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

graflo is a framework for transforming **tabular** data (CSV, SQL) and **hierarchical** data (JSON, XML) into property graphs and ingesting them into graph databases (ArangoDB, Neo4j, TigerGraph, FalkorDB, Memgraph). **Automatically infer schemas from normalized PostgreSQL databases (3NF)** with proper primary keys (PK) and foreign keys (FK) - uses intelligent heuristics to detect vertices and edges!

![Python](https://img.shields.io/badge/python-3.10-blue.svg)
![Python](https://img.shields.io/badge/python-3.11%2B-blue.svg)
[![PyPI version](https://badge.fury.io/py/graflo.svg)](https://badge.fury.io/py/graflo)
[![PyPI Downloads](https://static.pepy.tech/badge/graflo)](https://pepy.tech/projects/graflo)
[![License: BSL](https://img.shields.io/badge/license-BSL--1.1-green)](https://github.com/growgraph/graflo/blob/main/LICENSE)
Expand Down Expand Up @@ -95,7 +95,7 @@ Resources define how data is transformed into a graph (semantic mapping). They w

## Requirements

- Python 3.10 or higher
- Python 3.11 or higher (Python 3.11 and 3.12 are officially supported)
- Graph database (Neo4j, ArangoDB, TigerGraph, FalkorDB, or Memgraph) for storage
- Optional: PostgreSQL or other SQL databases for data sources (with automatic schema inference support)
- Dependencies as specified in pyproject.toml
Expand Down
6 changes: 3 additions & 3 deletions graflo/db/tigergraph/conn.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,11 @@
logger = logging.getLogger(__name__)


# Monkey-patch specific exception classes to add add_note() for Python 3.10 compatibility
# Python 3.11+ already has this, but Python 3.10 doesn't
# Monkey-patch specific exception classes to add add_note() if missing
# Python 3.11+ has this on Exception, but some third-party exception classes may not
# We patch specific classes since the base Exception class is immutable
def _add_note_shim(self, note: str) -> None:
"""Add a note to the exception (Python 3.11+ compatibility shim for Python 3.10)."""
"""Add a note to the exception (compatibility shim for exceptions without add_note())."""
if not hasattr(self, "_notes"):
self._notes = []
self._notes.append(note)
Expand Down
9 changes: 5 additions & 4 deletions graflo/onto.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import dataclasses
from copy import deepcopy
from enum import EnumMeta
from typing import Any
from strenum import StrEnum
from dataclass_wizard import JSONWizard, YAMLWizard
from dataclass_wizard.enums import DateTimeTo
Expand All @@ -42,7 +41,7 @@ class MetaEnum(EnumMeta):
>>> "invalid" in MyEnum # False
"""

def __contains__(self: type[Any], obj: object) -> bool:
def __contains__(self, member: object) -> bool:
"""Check if an item is a valid member of the enum.

Args:
Expand All @@ -51,11 +50,13 @@ def __contains__(self: type[Any], obj: object) -> bool:
Returns:
bool: True if the item is a valid enum member, False otherwise
"""
if isinstance(member, self):
return True
try:
self(obj)
self(member)
return True
except ValueError:
return False
return True


class BaseEnum(StrEnum, metaclass=MetaEnum):
Expand Down
10 changes: 8 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,12 @@ plot = [

[project]
authors = [{email = "alexander@growgraph.dev", name = "Alexander Belikov"}]
classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: Implementation :: CPython"
]
dependencies = [
"click>=8.2.0,<9",
"dataclass-wizard>=0.34.0",
Expand All @@ -48,8 +54,8 @@ dependencies = [
description = "A framework for transforming tabular (CSV, SQL) and hierarchical data (JSON, XML) into property graphs and ingesting them into graph databases (ArangoDB, Neo4j, TigerGraph). Features automatic PostgreSQL schema inference."
name = "graflo"
readme = "README.md"
requires-python = "~=3.10.0"
version = "1.3.13"
requires-python = ">=3.11"
version = "1.4.0"

[project.optional-dependencies]
plot = [
Expand Down
Loading