Skip to main content

Modern Python asyncio Finger protocol (RFC 1288) client library

Project description

Mapilli

Python 3.10+ License: MIT Documentation

Modern async Python client for the Finger protocol (RFC 1288)


What is this?

The Finger protocol was the internet's original social network — a way to check if someone was online, read their status, and learn a bit about them. Think of it as the .plan file era's equivalent of checking someone's profile.

Mapilli brings this classic protocol into modern Python with a clean async API and a simple command-line tool. Whether you're exploring tilde communities, building retro-inspired status pages, or just learning about networking protocols, Mapilli makes it easy.

Features

  • Modern async/await API built on asyncio's Protocol/Transport pattern
  • Full RFC 1288 compliance including query forwarding and verbose output
  • Both CLI and library — use from the terminal or import into your code
  • Type hints throughout for excellent IDE support
  • Flexible query syntaxuser@host, @host, /W verbose prefix
  • Concurrent queries — query multiple hosts in parallel
  • Configurable timeouts — don't wait forever for unresponsive servers

Installation

pip install mapilli

Or with uv:

uv add mapilli

Quick Start

From the Command Line

# Query a user
mapilli alice@example.com

# Verbose output (more details)
mapilli -W alice@example.com

# List all users on a host
mapilli -h example.com

# Custom timeout
mapilli -t 10 alice@example.com

From Python

import asyncio
from mapilli import FingerClient

async def main():
    async with FingerClient() as client:
        # Query a user
        response = await client.query("alice@example.com")
        print(response.body)

        # Or specify host separately
        response = await client.query("alice", host="example.com")
        print(response.body)

asyncio.run(main())

Concurrent Queries

async with FingerClient() as client:
    queries = ["alice@host1.com", "bob@host2.com", "charlie@host3.com"]
    responses = await asyncio.gather(*[client.query(q) for q in queries])

    for response in responses:
        print(f"{response.host}: {response.body[:50]}...")

Documentation

Full documentation is available at mapilli.readthedocs.io:

License

MIT License — see LICENSE.txt for details.

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

mapilli-0.1.1.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mapilli-0.1.1-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file mapilli-0.1.1.tar.gz.

File metadata

  • Download URL: mapilli-0.1.1.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mapilli-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d3cc2a912303cad75022018935c563bd05efd312042fa196711788f5d7464669
MD5 e9ab45bab47cea941a37db134af908e2
BLAKE2b-256 408e89bfdba58ab6e84405ec0e494d0882de0703b7fdacb5cf9c368bb879881c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mapilli-0.1.1.tar.gz:

Publisher: release-pypi.yml on alanbato/mapilli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mapilli-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: mapilli-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for mapilli-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fe31d99cc49a382cc46c93fa2548e194b26eeaba9672f37a9620091f67901830
MD5 ebca798844aa9c6a4e57a4929678b40e
BLAKE2b-256 a9262bca47db866bd782fdc74061ac4652a1b959cd27e106a846bb9a12d1293b

See more details on using hashes here.

Provenance

The following attestation bundles were made for mapilli-0.1.1-py3-none-any.whl:

Publisher: release-pypi.yml on alanbato/mapilli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page