commit 9cdc246ca9ca5e781f359e46586a6ed7da8fffd0 Author: Fantix King Date: Sat Mar 19 17:20:40 2022 -0400 v0.0.1: Initial project structure diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3b664a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +/.idea/ +/.python-version +/build/ +/dist/ +/src/**/__pycache__/ +/tests/**/__pycache__/ +/src/**/*.c +/src/**/*.so +/src/kloop.egg-info/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..12cd002 --- /dev/null +++ b/LICENSE @@ -0,0 +1,155 @@ +版权所有 (c) 2022 王川 http://fantix.pro +Copyright (c) 2022 Fantix King http://fantix.pro + + + 木兰宽松许可证 + 第2版,2020年1月 + http://license.coscl.org.cn/MulanPSL2 + + 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条 + 款的约束: + + 0. 定义 + + “软件” 是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 + + “贡献” 是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 + + “贡献者” 是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 + + “法人实体” 是指提交贡献的机构及其“关联实体”。 + + “关联实体” 是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机 + 构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有 + 价证券。 + + 1. 授予版权许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤 + 销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 + + 2. 授予专利许可 + + 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤 + 销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销 + 售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将 + 来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯 + 的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联 + 实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或 + 交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的 + 专利许可自您提起诉讼或发起维权行动之日终止。 + + 3. 无商标许可 + + “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但 + 您为满足第4条规定的声明义务而必须使用除外。 + + 4. 分发限制 + + 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但 + 您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声 + 明。 + + 5. 免责声明与责任限制 + + “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者” + 或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担 + 责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 + +6. 语言 + + “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲 + 突不一致,以中文版为准。 + + + + Mulan Permissive Software License + Version 2 (Mulan PSL v2), January 2020 + http://license.coscl.org.cn/MulanPSL2 + + + Your reproduction, use, modification and distribution of theSoftware + shall be subject to Mulan PSL v2 (this License) with the following + terms and conditions: + + 0. Definition + + Software means the program and related documents which are + licensed under this License and comprise all Contribution(s). + + Contribution means the copyrightable work licensed by a particular + Contributor under this License. + + Contributor means the Individual or Legal Entity who licenses its + copyrightable work under this License. + + Legal Entity means the entity making a Contribution and all its + Affiliates. + + Affiliates means entities that control, are controlled by, or are + under common control with the acting entity under this License, + ‘control’ means direct or indirect ownership of at least fifty + percent (50%) of the voting power, capital or other securities of + controlled or commonly controlled entity. + + 1. Grant of Copyright License + + Subject to the terms and conditions of this License, each + Contributor hereby grants to you a perpetual, worldwide, + royalty-free, non-exclusive, irrevocable copyright license to + reproduce, use, modify, or distribute its Contribution, with + modification or not. + + 2. Grant of Patent License + + Subject to the terms and conditions of this License, each + Contributor hereby grants to you a perpetual, worldwide, + royalty-free, non-exclusive, irrevocable (except for revocation + under this Section) patent license to make, have made, use, offer + for sale, sell, import or otherwise transfer its Contribution, + where such patent license is only limited to the patent claims + owned or controlled by such Contributor now or in future which + will be necessarily infringed by its Contribution alone, or by + combination of the Contribution with the Software to which the + Contribution was contributed. The patent license shall not apply + to any modification of the Contribution, and any other combination + which includes the Contribution. If you or your Affiliates + directly or indirectly institute patent litigation (including a + cross claim or counterclaim in a litigation) or other patent + enforcement activities against any individual or entity by + alleging that the Software or any Contribution in it infringes + patents, then any patent license granted to you under this License + for the Software shall terminate as of the date such litigation or + activity is filed or taken. + + 3. No Trademark License + + No trademark license is granted to use the trade names, + trademarks, service marks, or product names of Contributor, except + as required to fulfill notice requirements in section 4. + + 4. Distribution Restriction + + You may distribute the Software in any medium with or without + modification, whether in source or executable forms, provided that + you provide recipients with a copy of this License and retain + copyright, patent, trademark and disclaimer statements in the + Software. + + 5. Disclaimer of Warranty and Limitation of Liability + + THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT + WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT + SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY + DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, + SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR + INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER + HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGES. + + 6. Language + + THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE + CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL + EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH + VERSIONS, THE CHINESE VERSION SHALL PREVAIL. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..644c662 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,4 @@ +recursive-include src *.pyx *.pxd +graft tests +global-exclude *.py[cod] *.c + diff --git a/README.md b/README.md new file mode 100644 index 0000000..49a1385 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# kLoop + +kLoop is an implementation of the Python asyncio event loop written in Cython, +using io_uring and kTLS features of the Linux kernel, open-sourced and released +under the MulanPSL - 2.0 license. diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..aea2aa7 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools>=42", "Cython>=0.29"] +build-backend = "setuptools.build_meta" diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..3053ae1 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,24 @@ +[metadata] +name = kLoop +version = 0.0.1 +author = Fantix King +author_email = fantix.king@gmail.com +description = An asyncio event loop using Linux io_uring and kTLS. +long_description = file: README.md +long_description_content_type = text/markdown +url = https://github.com/fantix/kloop +project_urls = + Bug Tracker = https://github.com/fantix/kloop/issues +classifiers = + Programming Language :: Python :: 3 + License :: OSI Approved + Operating System :: POSIX :: Linux + +[options] +package_dir = + = src +packages = find: +python_requires = >=3.8 + +[options.packages.find] +where = src diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..611b2b9 --- /dev/null +++ b/setup.py @@ -0,0 +1,24 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + + +from Cython.Build import cythonize +from Cython.Distutils import Extension +from setuptools import setup + +setup( + ext_modules=cythonize( + [ + Extension("kloop.uring", ["src/kloop/uring.pyx"]), + Extension("kloop.ktls", ["src/kloop/ktls.pyx"]), + ], + language_level="3", + ) +) diff --git a/src/kloop/__init__.py b/src/kloop/__init__.py new file mode 100644 index 0000000..bf73ec7 --- /dev/null +++ b/src/kloop/__init__.py @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + diff --git a/src/kloop/ktls.pxd b/src/kloop/ktls.pxd new file mode 100644 index 0000000..bf73ec7 --- /dev/null +++ b/src/kloop/ktls.pxd @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + diff --git a/src/kloop/ktls.pyx b/src/kloop/ktls.pyx new file mode 100644 index 0000000..bf73ec7 --- /dev/null +++ b/src/kloop/ktls.pyx @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + diff --git a/src/kloop/uring.pxd b/src/kloop/uring.pxd new file mode 100644 index 0000000..bf73ec7 --- /dev/null +++ b/src/kloop/uring.pxd @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + diff --git a/src/kloop/uring.pyx b/src/kloop/uring.pyx new file mode 100644 index 0000000..bf73ec7 --- /dev/null +++ b/src/kloop/uring.pyx @@ -0,0 +1,10 @@ +# Copyright (c) 2022 Fantix King http://fantix.pro +# kLoop is licensed under Mulan PSL v2. +# You can use this software according to the terms and conditions of the Mulan PSL v2. +# You may obtain a copy of Mulan PSL v2 at: +# http://license.coscl.org.cn/MulanPSL2 +# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, +# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, +# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. +# See the Mulan PSL v2 for more details. + diff --git a/tests/test_loop.py b/tests/test_loop.py new file mode 100644 index 0000000..918a8b1 --- /dev/null +++ b/tests/test_loop.py @@ -0,0 +1,9 @@ +import unittest + +from kloop import uring, ktls + + +class TestLoop(unittest.TestCase): + def test_loop(self): + self.assertIsNotNone(uring) + self.assertIsNotNone(ktls)