Python SDK for PFS (Plugin-based File System) Server
Project description
pypfs - PFS Python SDK
Python SDK for interacting with PFS (Plugin-based File System) Server API.
See more details at c4pt0r/pfs
Installation
pip install pypfs
For local development:
pip install -e .
Quick Start
from pypfs import PFSClient
# Initialize client
client = PFSClient("http://localhost:8080")
# Check server health
health = client.health()
print(health)
# List directory contents
files = client.ls("/")
for file in files:
print(f"{file['name']} - {'dir' if file['isDir'] else 'file'}")
# Read file content
content = client.cat("/path/to/file.txt")
print(content.decode())
# Write to file
client.write("/path/to/file.txt", b"Hello, PFS!")
# Create directory
client.mkdir("/new/directory")
# Remove file or directory
client.rm("/path/to/file.txt")
client.rm("/path/to/directory", recursive=True)
Advanced Usage
Streaming Operations
# Stream file content
response = client.cat("/large/file.log", stream=True)
for chunk in response.iter_content(chunk_size=8192):
process(chunk)
# Stream grep results
for match in client.grep("/logs", "error", recursive=True, stream=True):
if match.get('type') == 'summary':
print(f"Total matches: {match['count']}")
else:
print(f"{match['file']}:{match['line']}: {match['content']}")
Mount Management
# List mounted plugins
mounts = client.mounts()
# Mount a plugin
client.mount("memfs", "/test/mem", {})
client.mount("sqlfs", "/test/db", {
"backend": "sqlite",
"db_path": "/tmp/test.db"
})
# Unmount a plugin
client.unmount("/test/mem")
Plugin Management
# Load external plugin
result = client.load_plugin("./plugins/myplugin.so")
print(result)
# List loaded plugins
plugins = client.list_plugins()
print(plugins)
# Unload plugin
client.unload_plugin("./plugins/myplugin.so")
Search with Grep
# Simple search
result = client.grep("/local/logs", "error")
print(f"Found {result['count']} matches")
for match in result['matches']:
print(f"{match['file']}:{match['line']}: {match['content']}")
# Recursive case-insensitive search
result = client.grep("/local", "warning|error", recursive=True, case_insensitive=True)
File Operations
# Get file info
info = client.stat("/path/to/file.txt")
print(f"Size: {info['size']}, Mode: {info['mode']}")
# Move/rename file
client.mv("/old/path.txt", "/new/path.txt")
# Change permissions
client.chmod("/path/to/file.txt", 0o644)
# Copy file (read + write)
content = client.cat("/source.txt")
client.write("/destination.txt", content)
Error Handling
from pypfs import PFSClient, PFSClientError
try:
client = PFSClient("http://localhost:8080")
content = client.cat("/nonexistent/file.txt")
except PFSClientError as e:
print(f"Error: {e}")
API Reference
PFSClient
Constructor
PFSClient(api_base_url, timeout=10)- Initialize client with API base URL
File Operations
ls(path="/")- List directory contentscat(path, offset=0, size=-1, stream=False)- Read file contentwrite(path, data)- Write data to filecreate(path)- Create new empty filerm(path, recursive=False)- Remove file or directorystat(path)- Get file/directory informationmv(old_path, new_path)- Move/rename file or directorychmod(path, mode)- Change file permissions
Directory Operations
mkdir(path, mode="755")- Create directory
Search Operations
grep(path, pattern, recursive=False, case_insensitive=False, stream=False)- Search for pattern in files
Mount Operations
mounts()- List all mounted pluginsmount(fstype, path, config)- Mount a plugin dynamicallyunmount(path)- Unmount a plugin
Plugin Operations
list_plugins()- List all loaded external pluginsload_plugin(library_path)- Load an external pluginunload_plugin(library_path)- Unload an external plugin
Health Check
health()- Check server health
Development
Running Tests
pip install -e ".[dev]"
pytest
Code Formatting
black pypfs/
ruff check pypfs/
License
See LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
pypfs-0.1.1.tar.gz
(63.7 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
pypfs-0.1.1-py3-none-any.whl
(8.7 kB
view details)
File details
Details for the file pypfs-0.1.1.tar.gz.
File metadata
- Download URL: pypfs-0.1.1.tar.gz
- Upload date:
- Size: 63.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f2dd78fd16560e372bf6d335f0b49fd76111f5816501d82ead9ab0b49b8e40
|
|
| MD5 |
dced979c52df38f29af19d420fdd4293
|
|
| BLAKE2b-256 |
540da19fd0c9536f27e2230e1681e2b5d816c2510cf0317481adb91f80879ff0
|
File details
Details for the file pypfs-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pypfs-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.6.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e5641231303dc791a024dd18d1cde05106d48e70dda7538257e98b98f11d0fb
|
|
| MD5 |
2c0cd5863ea07ad49727d419c168cd0a
|
|
| BLAKE2b-256 |
6b37ec8db16009ab656c9f3b9cd3d00e0b781ac64e040673d7d846d76a11007d
|