Skip to content

Kalpy

Source Code: https://github.com/kaleidoscope-tech/kalpy


Kalpy is a Python Client library for building applications with the Kaleidoscope platform.

Key features

  • Type-safe API Client: Built with Pydantic models for full type safety and IDE autocomplete support
  • Intuitive Resource Management: Clean, object-oriented interface for programs, activities, records, and more
  • Advanced Search & Filtering: Powerful query capabilities with type-safe filter operators
  • File Upload Support: Direct file upload to record fields with support for multiple file types
  • Comprehensive Coverage: Access all Kaleidoscope platform resources through a unified client
  • Bulk Operations: Import and export capabilities for efficient data management

Requirements

Example

Create it

Create a file main.py with:

from kalpy.client import KaleidoscopeClient

# Initialize the client with your API key
client = KaleidoscopeClient(
    KALEIDOSCOPE_API_CLIENT_ID,
    KALEIDOSCOPE_API_CLIENT_SECRET,
    "https://api.kaleidoscope.bio",
)

# Work with activities
activities = client.activities.get_activities()
for activity in activities:
    print(f"Activity: {activity.title} - Status: {activity.status.value}")

Run it

Run the program with:

python main.py

Output:

Activity: Experiment 1 - Status: to do
Activity: Task 1 - Status: to do
Activity: Drug Tests - Status: in progress

Check it

You now have a fully functional Kaleidoscope API client.

Features

Intuitive API Design

Work with resources naturally:

# Records
record = client.records.get_record_by_id("record-uuid")

if record:
    record.add_value(
        field_id="field-uuid",
        content="Experiment result",
        activity_id="activity-uuid"
    )

# Entity Types
entity_types = client.entity_types.get_types()
compound_type = client.entity_types.get_type_by_name("Compound")

File Upload Support

Upload files directly to records:

# Upload a file to a record field
with open("experiment_data.csv", "rb") as file:
    record.update_field_file(
        field_id="data-field-id",
        file_name="experiment_data.csv",
        file_data=file,
        file_type="text/csv",
        activity_id="activity-uuid"
    )

Comprehensive Resource Management

Kalpy provides services for all Kaleidoscope resources:

  • Programs: Organize your work
  • Activities: Tasks, experiments, and operations
  • Records: Structured data storage
  • Entity Types: Define your data schemas
  • Entity Fields: Manage field definitions
  • Labels: Tag and categorize
  • Imports/Exports: Bulk data operations
  • Workspace: User and group management

Interactive Documentation

Available Services

Once you have a client instance, you have access to:

Service Description
client.programs Program management
client.activities Activities (tasks, experiments, operations)
client.records Record CRUD operations
client.entity_types Entity type definitions
client.entity_fields Field definitions (key fields, data fields)
client.labels Label management
client.imports Import operations and templates
client.exports Export operations
client.workspace Workspace, users, and groups

Activity Management

# Create an activity
new_activity = client.activities.create_activity(
    title="Synthesis Experiment",
    activity_type="operation",
    program_ids=["program-uuid"],
    assigned_user_ids=["user-uuid"]
)

if new_activity:
    # Update activity status
    new_activity.update(task_status=ActivityStatusEnum.IN_PROGRESS)

    # Add records to activity
    new_activity.add_records(["record-uuid-1", "record-uuid-2"])

    # Get activity data
    record_data = new_activity.get_record_data()

Record Operations

# Get record by ID
record = client.records.get_record_by_id("record-uuid")

if record:
    # Add a value
    record.add_value(
        field_id="field-uuid",
        content="High purity sample",
        activity_id="activity-uuid"
    )

    # Get field value
    value = record.get_value_content(field_id="field-uuid")

    # Get values for specific activity
    activity_values = record.get_activity_data(activity_id="activity-uuid")

Full Example

Here's a complete workflow example:

# Initialize client
client = KaleidoscopeClient(
    KALEIDOSCOPE_API_CLIENT_ID,
    KALEIDOSCOPE_API_CLIENT_SECRET,
    "https://api.kaleidoscope.bio",
)

# 1. Get or create a program
programs = client.programs.get_programs()
program = programs[0] if programs else None

if program:
    print(f"Working with program: {program.title}")

    # 2. Get entity types
    entity_types = client.entity_types.get_types()
    compound_type = next(
        (et for et in entity_types if et.slice_name == "Compound"),
        None
    )

    if compound_type:
        # 3. Search for records
        record_ids = client.records.search_records(
            entity_slice_id=compound_type.id,
            limit=10
        )

        print(f"Found {len(record_ids)} compound records")

        # 4. Get detailed record information
        if record_ids:
            record = client.records.get_record_by_id(record_ids[0])
            assert record
            print(f"Record: {record.record_identifier}")

            # 5. Create an activity
            activity = client.activities.create_activity(
                title="Quality Check",
                activity_type="task",
                program_ids=[program.id]
            )
            assert activity

            # 6. Add data to record
            record.add_value(
                field_id="notes-field-id",
                content="Quality check completed successfully",
                activity_id=activity.id
            )

            # 7. Update activity status
            activity.update(status=ActivityStatusEnum.COMPLETE)

            print("Workflow completed successfully!")

Support

For support, email support@kaleidoscope.bio.