Files
Benjamin Kietzman fd75cbdb38 GH-40342: [C++] move LocalFileSystem to the registry (#40356)
### 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>
2024-04-24 10:27:17 -04:00

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)