| # 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. | |
| import importlib | |
| import sys | |
| if sys.version_info[:2] < (3, 8): | |
| try: | |
| from pypaimon.manifest import fastavro_py36_compat # noqa: F401 | |
| except ImportError: | |
| pass | |
| if sys.version_info[:2] < (3, 7): | |
| # Module-level __getattr__ is unavailable before Python 3.7. | |
| from pypaimon.catalog.catalog_factory import CatalogFactory | |
| from pypaimon.filesystem.pvfs import PaimonVirtualFileSystem | |
| from pypaimon.schema.schema import Schema | |
| from pypaimon.tag.tag import Tag | |
| from pypaimon.tag.tag_manager import TagManager | |
| __all__ = [ | |
| "PaimonVirtualFileSystem", | |
| "CatalogFactory", | |
| "Schema", | |
| "Tag", | |
| "TagManager", | |
| "SQLContext", | |
| ] | |
| _LAZY_EXPORTS = { | |
| "CatalogFactory": ("pypaimon.catalog.catalog_factory", "CatalogFactory"), | |
| "PaimonVirtualFileSystem": ( | |
| "pypaimon.filesystem.pvfs", "PaimonVirtualFileSystem", | |
| ), | |
| "Schema": ("pypaimon.schema.schema", "Schema"), | |
| "Tag": ("pypaimon.tag.tag", "Tag"), | |
| "TagManager": ("pypaimon.tag.tag_manager", "TagManager"), | |
| "SQLContext": ("pypaimon_rust.datafusion", "SQLContext"), | |
| } | |
| # Resolution stays unlocked: submodules import these names at their top | |
| # level, so a lock here would deadlock against Python's module locks. | |
| def __getattr__(name): | |
| target = _LAZY_EXPORTS.get(name) | |
| if target is None: | |
| raise AttributeError( | |
| "module 'pypaimon' has no attribute {}".format(name)) | |
| module = importlib.import_module(target[0]) | |
| value = getattr(module, target[1]) | |
| globals()[name] = value | |
| return value |