Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
3f075ee
Modernize package metadata
nvictus Aug 17, 2025
2c2e4fb
refactor: Change file size inference for http, and set default s3 to …
nvictus Aug 17, 2025
948fbb3
Mostly style changes
nvictus Aug 17, 2025
3ac2637
Replace fetcher implementations with obstore
nvictus Aug 20, 2025
4d2bec3
Disable Apple turd files on Mac OS
nvictus Aug 20, 2025
a2b5fba
refactor: Complete refactor based on obspec and obstore
nvictus Aug 24, 2025
9138ece
Update dependencies and use importlib to get version
nvictus Aug 24, 2025
30a52bf
Add pytest infrastructure and test dependencies
nvictus Aug 25, 2025
940bab7
Refactor FTPStore implementation and fix list_with_delimiter
nvictus Aug 25, 2025
796e50d
Add tests for FTPStore
nvictus Aug 25, 2025
d9e1aad
Code formatting and minor fixes
nvictus Aug 25, 2025
bd3c4a8
Update lockfile
nvictus Aug 25, 2025
480e4cf
Add docstring to FTPStore
nvictus Aug 25, 2025
1f0d534
Fix FTP implementation bugs and improve documentation
nvictus Aug 28, 2025
6e18df2
Add comprehensive test suite for caching and HttpFs
nvictus Aug 28, 2025
668301c
Update caching layer with scheme-based cache keys
nvictus Aug 28, 2025
41d3559
Improve HttpFs error handling and FUSE operations
nvictus Aug 28, 2025
2d44701
Add smoke tests for manual FUSE verification
nvictus Aug 28, 2025
18313d7
Add mypy and type checking
nvictus Aug 31, 2025
3d4f4c3
Add type hints and cache monitoring
nvictus Aug 31, 2025
b9c39cf
Update tests
nvictus Aug 31, 2025
467a8f7
Update smoke test script
nvictus Aug 31, 2025
ec5aa90
Add sentinel cli arg
nvictus Aug 31, 2025
4476e8b
Update gitignore
nvictus Aug 31, 2025
4704117
Consolidate dev and test extras
nvictus Aug 31, 2025
eef037d
Update action workflows
nvictus Aug 31, 2025
946aa2f
Bump minor version
nvictus Aug 31, 2025
4c005b2
Update pyproject.toml
nvictus Aug 31, 2025
f548714
Fix typing issue in __main__
nvictus Aug 31, 2025
02a6a52
Install fuse in CI
nvictus Aug 31, 2025
5964e3d
Update readme
nvictus Aug 31, 2025
432964a
Update simple_httpfs/httpfs.py
nvictus Sep 8, 2025
e17c7f3
Update simple_httpfs/httpfs.py
nvictus Sep 8, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 0 additions & 9 deletions .bumpversion.cfg

This file was deleted.

48 changes: 26 additions & 22 deletions .github/workflows/python-package.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
# This workflow will install Python dependencies, run tests and lint with a variety of Python versions
# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Python package
name: CI

on:
push:
Expand All @@ -10,30 +7,37 @@ on:
branches: [ master ]

jobs:
build:

test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.5, 3.6, 3.7, 3.8]
python-version: ["3.10", "3.11", "3.12", "3.13"]

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install system dependencies
run: sudo apt-get update && sudo apt-get install -y libfuse-dev

- name: Install uv
uses: astral-sh/setup-uv@v3

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8 pytest
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
# - name: Test with pytest
# run: |
# pytest
run: uv sync --extra dev

- name: Lint with ruff
run: uv run ruff check .
- name: Check formatting with ruff
run: uv run ruff format --check .

- name: Type check with mypy
run: uv run mypy simple_httpfs/
- name: Test with pytest
run: uv run pytest
43 changes: 21 additions & 22 deletions .github/workflows/python-publish.yml
Original file line number Diff line number Diff line change
@@ -1,32 +1,31 @@
# This workflows will upload a Python Package using Twine when a release is created
# For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries

name: Upload Python Package
name: Publish Python Package to PyPI

on:
push:
tags:
- 'v*'
release:
types: [published]
workflow_dispatch:

jobs:
deploy:
publish:
name: Publish to PyPI

runs-on: ubuntu-latest
permissions:
id-token: write

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v2
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install setuptools wheel twine
- name: Build and publish
env:
TWINE_USERNAME: ${{ secrets.PYPI_USERNAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_PASSWORD }}
run: |
python setup.py sdist bdist_wheel
twine upload dist/*
python-version: '3.10'

- name: Install uv
uses: astral-sh/setup-uv@v3

- name: Build package
run: uv build

- name: Publish distribution 📦 to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ __pycache__/
.py[cod]
/build
/dist
.coverage
coverage.xml
2 changes: 0 additions & 2 deletions MANIFEST.in

This file was deleted.

14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
# simple-httpfs

A simple FUSE-based http file system. Read http files as if they were on
the local filesystem.
A simple FUSE-based http/object storage file system. Read remote files as if they were on the local filesystem.

## Usage

```
simple-http /my/mount/dir
curl /my/mount/dir/http/slashdot.org/country.js..
simple-httpfs /my/mount/dir
cat /my/mount/dir/http://slashdot.org/country.js...
```

URLs are referenced relative to the mount directory and suffixed with `..` in
the style of [Daniel Rozenbergs
httpfs](https://github.com/danielrozenberg/httpfs).
Fully qualified URLs are referenced relative to the mount directory and distinguished from directories by appending a shell-safe trailing sentinel string (default: `...`) in
the style of [Daniel Rozenbergs httpfs](https://github.com/danielrozenberg/httpfs).

## Unmounting

Use `umount` or `fusermount`.

```
umount /my/mount/dir
```
88 changes: 88 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[project]
name = "simple-httpfs"
version = "0.5.0"
description = "A simple FUSE filesystem for reading http files"
readme = "README.md"
license = {text = "MIT"}
authors = [
{name = "Peter Kerpedjiev", email = "[email protected]"}
]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
requires-python = ">=3.10"
dependencies = [
"diskcache",
"fusepy",
"obstore",
"obspec",
"typing-extensions; python_version < '3.12'",
]

[project.optional-dependencies]
dev = [
"mypy>=1.0",
"pytest>=6.0",
"pytest-cov",
"ruff>=0.12.11",
]

[project.urls]
Homepage = "https://github.com/higlass/simple-httpfs"
Repository = "https://github.com/higlass/simple-httpfs"

[project.scripts]
simple-httpfs = "simple_httpfs.__main__:main"

[tool.ruff]
src = ["simple_httpfs"]
target-version = "py310"

[tool.ruff.lint]
select = [
"B", # bugbear
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"RUF", # ruff-specific rules
"UP", # pyupgrade
]

[tool.ruff.lint.isort]
known-first-party = ["simple_httpfs"]

[tool.pytest.ini_options]
addopts = [
"--strict-markers",
"--strict-config",
"--verbose",
]

[tool.mypy]
python_version = "3.12"
strict = true
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true

# Third party libraries without type stubs
[[tool.mypy.overrides]]
module = [
"diskcache.*",
"fuse.*",
]
ignore_missing_imports = true
14 changes: 0 additions & 14 deletions setup.cfg

This file was deleted.

17 changes: 0 additions & 17 deletions setup.py

This file was deleted.

8 changes: 7 additions & 1 deletion simple_httpfs/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
from importlib.metadata import version

from .httpfs import HttpFs

__version__ = "0.4.12"
__version__ = version("simple-httpfs")

__all__ = ["HttpFs", "__version__"]

del version
Loading