mirror of
https://github.com/apache/arrow.git
synced 2026-10-28 16:47:19 +08:00
### Rationale for this change Moving LocalFileSystem into the registry is a good first usage and will help us hammer out which aspects of built in file systems should remain public. ### What changes are included in this PR? A factory for LocalFileSystem is added to the registry. `FileSystem::MakeUri` ( https://github.com/apache/arrow/issues/18316 ) is added to enable roundtripping filesystems through URIs. `file://` URIs now support a use_mmap query parameter, and `local://` URIs are also supported as an alias. <h6 id="reduce">Reducing the set of bound classes</h6> Some unnecessary bindings to the LocalFileSystem concrete class are removed. This demonstrates that with a registered factory pattern, it is no longer necessary to keep a class hierarchy public for binding. Eventually (if desired), we can move concrete subclasses of FileSystem entirely out of public headers. ### Are these changes tested? Yes, all existing tests for file:// URIs continue to pass ### Are there any user-facing changes? For consistency, local:// URIs will now be considered equivalent to corresponding file:// URIs * GitHub Issue: #40342 Authored-by: Benjamin Kietzman <bengilgit@gmail.com> Signed-off-by: Benjamin Kietzman <bengilgit@gmail.com>
92 lines
2.4 KiB
Cython
92 lines
2.4 KiB
Cython
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
# cython: language_level = 3
|
|
|
|
from pyarrow.includes.common cimport *
|
|
from pyarrow.includes.libarrow_fs cimport *
|
|
from pyarrow.lib import _detect_compression, frombytes, tobytes
|
|
from pyarrow.lib cimport *
|
|
|
|
|
|
cpdef enum FileType:
|
|
NotFound = <int8_t> CFileType_NotFound
|
|
Unknown = <int8_t> CFileType_Unknown
|
|
File = <int8_t> CFileType_File
|
|
Directory = <int8_t> CFileType_Directory
|
|
|
|
|
|
cdef class FileInfo(_Weakrefable):
|
|
cdef:
|
|
CFileInfo info
|
|
|
|
@staticmethod
|
|
cdef wrap(CFileInfo info)
|
|
|
|
cdef inline CFileInfo unwrap(self) nogil
|
|
|
|
@staticmethod
|
|
cdef CFileInfo unwrap_safe(obj)
|
|
|
|
|
|
cdef class FileSelector(_Weakrefable):
|
|
cdef:
|
|
CFileSelector selector
|
|
|
|
@staticmethod
|
|
cdef FileSelector wrap(CFileSelector selector)
|
|
|
|
cdef inline CFileSelector unwrap(self) nogil
|
|
|
|
|
|
cdef class FileSystem(_Weakrefable):
|
|
cdef:
|
|
shared_ptr[CFileSystem] wrapped
|
|
CFileSystem* fs
|
|
|
|
cdef init(self, const shared_ptr[CFileSystem]& wrapped)
|
|
|
|
@staticmethod
|
|
cdef wrap(const shared_ptr[CFileSystem]& sp)
|
|
|
|
cdef inline shared_ptr[CFileSystem] unwrap(self) nogil
|
|
|
|
|
|
cdef class LocalFileSystem(FileSystem):
|
|
cdef init(self, const shared_ptr[CFileSystem]& wrapped)
|
|
|
|
|
|
cdef class SubTreeFileSystem(FileSystem):
|
|
cdef:
|
|
CSubTreeFileSystem* subtreefs
|
|
|
|
cdef init(self, const shared_ptr[CFileSystem]& wrapped)
|
|
|
|
|
|
cdef class _MockFileSystem(FileSystem):
|
|
cdef:
|
|
CMockFileSystem* mockfs
|
|
|
|
cdef init(self, const shared_ptr[CFileSystem]& wrapped)
|
|
|
|
|
|
cdef class PyFileSystem(FileSystem):
|
|
cdef:
|
|
CPyFileSystem* pyfs
|
|
|
|
cdef init(self, const shared_ptr[CFileSystem]& wrapped)
|