Skip to main content

pyrefiqda

PyPI version Python Versions License: MIT

A modern Python library mapping REFI-QDA qualitative research files (.qdpx, .qdc) to strict Pydantic models for seamless programmatic integration.

Created to bridge the gap between qualitative coding software (NVivo, MAXQDA, ATLAS.ti) and Python workflows.

📖 Read the Full Documentation and API Reference here

Core Features

  • 100% Type-Hinted: Built entirely on Pydantic BaseModel classes, ensuring perfect IDE autocomplete and seamless integration with frameworks like PydanticAI.
  • Standard Compliant: Reads and writes .qdpx (Project) and .qdc (Codebook) formats.
  • Media Management: Includes helper functions to abstract away REFI-QDA's internal URI structures, making it easy to read transcripts and package media back into archives.

Installation

pip install pyrefiqda

Why this exists

In qualitative studies, researchers use the REFI-QDA standard to exchange data. However, previous Python tools were GUI-heavy or outdated. pyrefiqda uses xsdata to auto-generate pure Pydantic models directly from the official XML schemas. This abstracts away zipped archives and internal URIs, giving you flawless type-hinting and programmatic access to qualitative data.

Showcase

pyrefiqda makes it incredibly easy to programmatically assemble qualitative coding projects from scratch, package media files, and export standard .qdpx files ready for exchange and review.

import uuid
from pyrefiqda.refiproject import RefiProject
from pyrefiqda.models import (
    Project, UsersType, UserType, ProjectCodeBookType, 
    ProjectCodesType, ProjectCodeType, SourcesType, 
    TextSourceType, PlainTextSelectionType, CodingType, CodeRefType
)

# 1. Import a raw transcript into the REFI-QDA working directory
working_dir = "./temp_project"
internal_uri = RefiProject.import_source_file("raw_data/interview.txt", working_dir)

# 2. Define a Coder and an emergent Code
user = UserType(guid=str(uuid.uuid4()), name="Coder 1")
code = ProjectCodeType(
    guid=str(uuid.uuid4()), name="Theme 1", color="#FF0000"
)

# 3. Create a coding selection (e.g., characters 0 through 100)
selection = PlainTextSelectionType(
    guid=str(uuid.uuid4()),
    name="Identified Segment",
    start_position=0,
    end_position=100,
    creating_user=user.guid,
    coding=[CodingType(
        guid=str(uuid.uuid4()), 
        creating_user=user.guid, 
        code_ref=CodeRefType(target_guid=code.guid)
    )]
)

# 4. Assemble the final Pydantic Project
project = Project(
    name="GTM Study",
    users=UsersType(user=[user]),
    code_book=ProjectCodeBookType(codes=ProjectCodesType(code=[code])),
    sources=SourcesType(text_source=[
        TextSourceType(
            guid=str(uuid.uuid4()), 
            name="Interview 1", 
            plain_text_path=internal_uri, 
            plain_text_selection=[selection]
        )
    ])
)

# 5. Export to a standard .qdpx file (zipping the XML and the media files together)
RefiProject.save(project, "study.qdpx", source_media_dir=working_dir + "/sources")

Metadata

Release files for pyrefiqda 0.3.1

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

Source distribution (sdist)

Source distribution for pyrefiqda 0.3.1
File Size Uploaded
pyrefiqda-0.3.1.tar.gz 1.3 MB Details

Built distribution (wheel)

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

Total release size: 1.3 MB

Release files / pyrefiqda-0.3.1.tar.gz

Download URL pyrefiqda-0.3.1.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
e92aab320a3ca9320c17857208dce65c7846f248dfdfeea2b7318bf4198c6526
BLAKE2b-256 checksum
How to use checksums
f0398b9c196bed705bee6ae6f686ec36060d0955eb7235dfa4d697da54bfbe95
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release files / pyrefiqda-0.3.1-py3-none-any.whl

Download URL pyrefiqda-0.3.1-py3-none-any.whl
Size 12.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
97911c35aeb86b3305abd94f358dd75a79dc20ab3693e466c231b8e8685eb1c1
BLAKE2b-256 checksum
How to use checksums
4d9b5275456def1f72dee8a1d692a60fe97005de9145ed77a729204a86cabad8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files

0.3.0

2 release files

0.2.1

2 release files

0.2.0

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