Skip to main content

p4async

An async extension to p4python (PyPI, GitHub), the Python client for the Perforce (P4) version control server. This package adds awaitable wrappers around p4python operations for asyncio-based applications.

Setup

Use your favorite package manager to install the module into your project

  • pip install p4async
  • uv add p4async

Usage

from p4async import P4Async
p4a = P4Async()
await p4a.aconnect()

All relevant Perforce commands have async counterparts prefixed with a. For example: aconnect(), arun(), arun_clients(), afetch_change(), etc.

Commands are executed with a lock on a worker thread. The way this is done can be customized via subclassing.

Note: Earlier versions of p4python (prior to 2025.2) did not release the Python GIL (global interpreter lock) during connect() calls, which made aconnect() blocking. This was fixed in p4python 2025.2. For optimal async performance, use p4python 2025.2 or later.

Subclassing

P4Async provides core async wrappers, while keeping a few hooks intentionally overridable for custom behavior.

  • Override execute(self, func, *args, **kwargs) to customize how synchronous work is scheduled (for example, custom executors or instrumentation).
  • Override sync_run(self, *args, **kwargs) to wrap the underlying synchronous run() call with extra behavior. This is the primary hook around command execution.
  • Extend simple_wrap_methods and run_wrap_methods in a subclass to add additional auto-generated async wrappers in the a<method> pattern.
from p4async import P4Async


class MyP4Async(P4Async):
    async def execute(self, func, *args, **kwargs):
        # Custom scheduling/telemetry hook
        return await super().execute(func, *args, **kwargs)

    def sync_run(self, *args, **kwargs):
        # Custom behavior around the underlying P4 run()
        return super().sync_run(*args, **kwargs)

    # Example: add async wrappers for extra methods
    simple_wrap_methods = P4Async.simple_wrap_methods | {"my_custom_sync_method"}

Development

  • Use uv for dependency management and virtual environments.
  • Format and lint with ruff:
    • uvx ruff check
    • uvx ruff format --check
    • uvx ruff format
  • Run type checking for the package:
    • uv run mypy src

License

MIT

Metadata

Release files for p4async 0.1.9

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

Source distribution (sdist)

Source distribution for p4async 0.1.9
File Size Uploaded
p4async-0.1.9.tar.gz 32.6 kB Details

Built distribution (wheel)

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

Total release size: 37.9 kB

Release files / p4async-0.1.9.tar.gz

Download URL p4async-0.1.9.tar.gz
Size 32.6 kB
Tags Source
SHA-256 checksum
How to use checksums
bf5c3dd1bf920c60ed6fc87b0fc7a85ef4ae10398d520c1dc853bc9fcfd1518c
BLAKE2b-256 checksum
How to use checksums
e86d48c2454540df694d0846cf643a4b6c051c32ae57d4f42afcfd3db08333f9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / p4async-0.1.9-py3-none-any.whl

Download URL p4async-0.1.9-py3-none-any.whl
Size 5.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9e2be0fc24eb96c0aeccf519ed74f936d23e89aeeddd15dec6569b9f9f117c36
BLAKE2b-256 checksum
How to use checksums
288cc422769a62aa446a477d65b0058c867899670d5a406bd3fab5ec32caf60a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.1.9 This release

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.1

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