Skip to content

Commit

Permalink
chore: Use OpendalFileSystem as entry (#12)
Browse files Browse the repository at this point in the history
Signed-off-by: Xuanwo <github@xuanwo.io>
  • Loading branch information
Xuanwo committed Jul 28, 2024
1 parent 8f41df9 commit 5221bd3
Show file tree
Hide file tree
Showing 20 changed files with 72 additions and 74 deletions.
9 changes: 4 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,12 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
packages:
- "opendalfs"
- "services/memory"
- "services/s3"
service:
- "memory"
- "s3"
steps:
- uses: actions/checkout@v4
- uses: PyO3/maturin-action@v1
with:
command: build
working-directory: ${{ matrix.packages }}
working-directory: "crates/service-${{ matrix.service }}"
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[workspace]
members = ["opendalfs", "services/*"]
members = ["crates/*"]
resolver = "2"

[workspace.package]
Expand All @@ -10,4 +10,4 @@ rust-version = "1.75"
[workspace.dependencies]
pyo3 = { version = "0.22.2", features = ["gil-refs"] }
opendal = { version = "0.47.3", default-features = false }
opendalfs = { path = "opendalfs" }
opendalfs-core = { path = "crates/core" }
6 changes: 1 addition & 5 deletions opendalfs/Cargo.toml → crates/core/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
[package]
name = "opendalfs"
name = "opendalfs-core"
version.workspace = true
edition.workspace = true
rust-version.workspace = true

[lib]
crate-type = ["cdylib", "rlib"]
doc = false

[dependencies]
pyo3.workspace = true
opendal.workspace = true
File renamed without changes.
2 changes: 2 additions & 0 deletions crates/core/src/lib.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
mod fs;
pub use fs::OpendalFileSystem;
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ doc = false
[dependencies]
pyo3.workspace = true
opendal = { workspace = true, features = ["services-memory"]}
opendalfs.workspace = true
opendalfs-core.workspace = true
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ name = "opendalfs_service_memory"
readme = "../../README.md"
# PyO3 doesn't support python 3.13 yet.
requires-python = ">=3.11, < 3.13"
dependencies = [
"fsspec",
]
dependencies = []

[project.urls]
Repository = "https://github.com/fsspec/opendalfs"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use opendal::services::Memory;
use opendal::Operator;
use opendalfs::OpendalFileSystem;
use opendalfs_core::OpendalFileSystem;
use pyo3::prelude::*;

#[derive(Default)]
Expand Down
2 changes: 1 addition & 1 deletion services/s3/Cargo.toml → crates/service-s3/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@ doc = false
[dependencies]
pyo3.workspace = true
opendal = { workspace = true, features = ["services-s3"]}
opendalfs.workspace = true
opendalfs-core.workspace = true
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,7 @@ name = "opendalfs_service_s3"
readme = "../../README.md"
# PyO3 doesn't support python 3.13 yet.
requires-python = ">=3.11, < 3.13"
dependencies = [
"fsspec",
]
dependencies = []

[project.urls]
Repository = "https://github.com/fsspec/opendalfs"
Expand Down
2 changes: 1 addition & 1 deletion services/s3/src/lib.rs → crates/service-s3/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use opendal::services::S3;
use opendal::Operator;
use opendalfs::OpendalFileSystem;
use opendalfs_core::OpendalFileSystem;
use pyo3::prelude::*;

#[derive(Default)]
Expand Down
3 changes: 3 additions & 0 deletions opendalfs/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from .fs import OpendalFileSystem

__all__ = ["OpendalFileSystem"]
27 changes: 27 additions & 0 deletions opendalfs/fs.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import importlib

from fsspec import AbstractFileSystem


class OpendalFileSystem(AbstractFileSystem):
def __init__(self, scheme, *args, **kwargs):
super().__init__(*args, **kwargs)

try:
# Load the module dynamically based on scheme
module = importlib.import_module(f"opendalfs_service_{scheme}")
# Get the file system class based on scheme
fs_class = getattr(module, f"{scheme.capitalize()}FileSystem")
# initialize the file system with the kwargs
self.fs = fs_class(**kwargs)
except ImportError:
raise ImportError(
f"Cannot import opendal_service_{scheme}, please check if the module exists"
)
except AttributeError:
raise AttributeError(
f"Cannot find {scheme.capitalize()}FileSystem in opendal_service_{scheme}"
)

def ls(self, path, **kwargs):
return self.fs.ls(path)
31 changes: 0 additions & 31 deletions opendalfs/pyproject.toml

This file was deleted.

11 changes: 0 additions & 11 deletions opendalfs/src/lib.rs

This file was deleted.

16 changes: 16 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
[project]
name = "opendalfs"
version = "0.0.1"
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: BSD License",
"Operating System :: OS Independent",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]

[project.optional-dependencies]
memory = ["opendalfs_service_memory"]
s3 = ["opendalfs_service_s3"]
test = ["pytest"]
2 changes: 2 additions & 0 deletions pytest.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
[pytest]
pythonpath = .
Empty file added tests/__init__.py
Empty file.
13 changes: 6 additions & 7 deletions tests/test_opendalfs.py
Original file line number Diff line number Diff line change
@@ -1,25 +1,24 @@
import pytest
from opendalfs_service_memory import MemoryFileSystem
from opendalfs_service_s3 import S3FileSystem
from opendalfs import OpendalFileSystem


def test_memory_fs():
# Default
MemoryFileSystem()
OpendalFileSystem("memory")
# With root
MemoryFileSystem(root="/tmp")
OpendalFileSystem("memory", root="/tmp")


def test_s3_fs():
# Default
S3FileSystem(bucket="test", region="us-east-1")
OpendalFileSystem("s3", bucket="test", region="us-east-1")
# With root
S3FileSystem(root="/tmp", bucket="test", region="us-east-1")
OpendalFileSystem("s3", root="/tmp", bucket="test", region="us-east-1")


@pytest.fixture
def opendal_fs():
return MemoryFileSystem(root="/tmp")
return OpendalFileSystem("memory", root="/tmp")


# TODO: we need to find a way to make it work
Expand Down

0 comments on commit 5221bd3

Please sign in to comment.