Compare commits
10 Commits
f96a445ae2
...
2ea0138e90
Author | SHA1 | Date | |
---|---|---|---|
2ea0138e90 | |||
4e9a908a97 | |||
55e167d0c1 | |||
47184633de | |||
ef61a42976 | |||
bf3384a76e | |||
d3612685fc | |||
a71e51ed9c | |||
fcff7f5392 | |||
f92ac417de |
39
README.md
39
README.md
@ -6,7 +6,7 @@ A python lib came from [Difficult Rocket](https://github.com/shenjackyuanjie/Dif
|
||||
|
||||
## Information/信息
|
||||
|
||||
- Version/版本: 0.0.2
|
||||
- Version/版本: 0.1.0
|
||||
|
||||
### Author/作者
|
||||
|
||||
@ -26,12 +26,45 @@ pip install lib-not-dr
|
||||
|
||||
### Nuitka Compiler Helper
|
||||
|
||||
> simple example
|
||||
> 简单示例
|
||||
|
||||
```python
|
||||
import subprocess
|
||||
from lib_not_dr.nuitka import CompilerHelper
|
||||
from pathlib import Path
|
||||
from lib_not_dr.nuitka.compile import CompilerHelper
|
||||
|
||||
compiler = CompilerHelper("main.py")
|
||||
compiler = CompilerHelper(src_file = Path("main.py"))
|
||||
|
||||
print(compiler)
|
||||
subprocess.run(compiler.gen_subprocess_cmd())
|
||||
```
|
||||
|
||||
> more complex example
|
||||
> 复杂示例
|
||||
|
||||
```python
|
||||
import sys
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from lib_not_dr.nuitka.compile import CompilerHelper
|
||||
|
||||
compiler = CompilerHelper(src_file = Path("main.py"), run_after_build=True)
|
||||
|
||||
print(compiler)
|
||||
|
||||
if '-y' in sys.argv or '--yes' in sys.argv:
|
||||
do_run = True
|
||||
elif '-n' in sys.argv or '--no' in sys.argv:
|
||||
do_run = False
|
||||
else: # do_run is None
|
||||
while (do_run := input("compile? [y/n]").lower()) not in ["y", "n", "yes", "no"]:
|
||||
pass
|
||||
# 获取用户输入是否编译
|
||||
# get user confirmation to compile or not
|
||||
do_run = True if do_run[0] == "y" else False
|
||||
|
||||
if do_run:
|
||||
subprocess.run(compiler.gen_subprocess_cmd())
|
||||
|
||||
```
|
||||
|
@ -1,4 +1,27 @@
|
||||
# 0.0.1
|
||||
# Change log / 更新日志
|
||||
|
||||
## 0.1.0
|
||||
|
||||
- 添加了一些文档
|
||||
- `CompilerHelper`
|
||||
- 添加了 `run_after_build` 参数
|
||||
- 用于在编译完成后执行程序
|
||||
- 添加了 `compat_nuitka_version` 参数
|
||||
- 用于验证 nuitka 版本是否兼容
|
||||
|
||||
## 0.0.4
|
||||
|
||||
添加了项目的 url
|
||||
|
||||
## 0.0.3
|
||||
|
||||
继续添加了一些文档
|
||||
|
||||
## 0.0.2
|
||||
|
||||
添加了一些文档
|
||||
|
||||
## 0.0.1
|
||||
|
||||
- 添加了
|
||||
- `nuitka.compile`
|
||||
|
88
docs/command.md
Normal file
88
docs/command.md
Normal file
@ -0,0 +1,88 @@
|
||||
# Command parser
|
||||
|
||||
> By shenjackyuanjie And MSDNicrosoft and Harvey Huskey
|
||||
|
||||
## Usage
|
||||
|
||||
```python
|
||||
from typing import Callable, Self, Optional, List
|
||||
|
||||
class Literal:
|
||||
def __init__(self, name: str):
|
||||
self.name = name
|
||||
self.sub = []
|
||||
self._tip = ''
|
||||
|
||||
def __call__(self, *nodes) -> Self:
|
||||
self.sub += nodes
|
||||
return self
|
||||
|
||||
def run(self, func: Callable[[List[str]], None]) -> Self:
|
||||
return self
|
||||
|
||||
def tip(self, tip: str) -> Self:
|
||||
return self
|
||||
|
||||
def arg(self, parse_func: Callable[[str], Optional[type]]) -> Self:
|
||||
return self
|
||||
|
||||
def error(self, callback: Callable[[str], None]) -> Self:
|
||||
return self
|
||||
|
||||
|
||||
builder = Literal('test1')(
|
||||
Literal('a')
|
||||
.run(lambda x: print(x)),
|
||||
Literal('b')
|
||||
.tip('this is b')
|
||||
.run(lambda x: print(x))(
|
||||
Literal('c')
|
||||
.run(lambda x: print(x)),
|
||||
Literal('d')
|
||||
.run(lambda x: print(x)),
|
||||
),
|
||||
)
|
||||
```
|
||||
|
||||
build
|
||||
- test
|
||||
- main
|
||||
- arg:text
|
||||
- go
|
||||
- arg:int
|
||||
- run
|
||||
|
||||
|
||||
- command: 主节点
|
||||
- literal: 字面量节点
|
||||
|
||||
## 设计思路
|
||||
|
||||
```rust
|
||||
pub enum ArgumentType {
|
||||
String(String),
|
||||
Int(i128),
|
||||
Bool(bool),
|
||||
Float(f64),
|
||||
}
|
||||
|
||||
pub type CallBackFunc = Fn(Vec<(String, ArgumentType)>) -> bool;
|
||||
|
||||
pub enum CallBack {
|
||||
Fn(CallBackFunc),
|
||||
Message(String),
|
||||
}
|
||||
|
||||
pub trait Command {
|
||||
fn new(nodes: Vec<Command>) -> Self;
|
||||
// fn parse(&self, input: String) -> Result<Command, Error>;
|
||||
fn literal(&self, name: String, then: Vec<Command>) -> &self;
|
||||
fn argument(&self, name: String, shortcut: List<String>, optional: Option<bool>) -> &self;
|
||||
fn flag(&self, name: String, shortcut: List<String>, ) -> &self;
|
||||
fn error(&self, ret: CallBack) -> &self;
|
||||
fn run(&self, ret: CallBack) -> &self;
|
||||
fn tip(&self, tip: String) -> &self;
|
||||
fn to_doc(&self) -> String;
|
||||
fn exec(&self) -> Option;
|
||||
}
|
||||
```
|
@ -4,5 +4,5 @@
|
||||
# All rights reserved
|
||||
# -------------------------------
|
||||
|
||||
__version__ = '0.0.1'
|
||||
__version__ = '0.1.0'
|
||||
|
||||
|
0
lib_not_dr/command/__init__.py
Normal file
0
lib_not_dr/command/__init__.py
Normal file
40
lib_not_dr/command/data.py
Normal file
40
lib_not_dr/command/data.py
Normal file
@ -0,0 +1,40 @@
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Set, List
|
||||
|
||||
|
||||
class Parsed:
|
||||
...
|
||||
|
||||
|
||||
@dataclass
|
||||
class Option:
|
||||
name: str
|
||||
shortcuts: List[str]
|
||||
optional: bool
|
||||
types: Set[type] = field(default_factory=lambda: {str})
|
||||
|
||||
|
||||
@dataclass
|
||||
class OptionGroup:
|
||||
options: List[Option]
|
||||
optional: bool = True
|
||||
exclusive: bool = False
|
||||
|
||||
|
||||
@dataclass
|
||||
class Argument:
|
||||
name: str
|
||||
types: Set[type] = field(default_factory=lambda: {str})
|
||||
|
||||
|
||||
@dataclass
|
||||
class Flag:
|
||||
name: str
|
||||
shortcuts: List[str]
|
||||
|
||||
|
||||
@dataclass
|
||||
class FlagGroup:
|
||||
flags: List[Flag]
|
||||
exclusive: bool = False
|
||||
|
14
lib_not_dr/command/descriptor.py
Normal file
14
lib_not_dr/command/descriptor.py
Normal file
@ -0,0 +1,14 @@
|
||||
class CallBackDescriptor:
|
||||
def __init__(self, name):
|
||||
self.callback_name = name
|
||||
|
||||
def __set__(self, instance, value):
|
||||
assert getattr(instance, self.callback_name) is None, f"Attribute '{self.callback_name}' has been set."
|
||||
instance.__dict__[self.callback_name] = value
|
||||
|
||||
def __get__(self, instance, owner):
|
||||
return (
|
||||
self
|
||||
if instance is None
|
||||
else instance.__dict__.get(self.callback_name)
|
||||
)
|
2
lib_not_dr/command/exception.py
Normal file
2
lib_not_dr/command/exception.py
Normal file
@ -0,0 +1,2 @@
|
||||
class IllegalName(Exception):
|
||||
"""名称或快捷名不合法"""
|
130
lib_not_dr/command/nodes.py
Normal file
130
lib_not_dr/command/nodes.py
Normal file
@ -0,0 +1,130 @@
|
||||
# -------------------------------
|
||||
# Difficult Rocket
|
||||
# Copyright © 2020-2023 by shenjackyuanjie 3695888@qq.com
|
||||
# All rights reserved
|
||||
# -------------------------------
|
||||
|
||||
import re
|
||||
from typing import Callable, List, Optional, Union, Set
|
||||
|
||||
from .data import Option, Argument, Flag, Parsed
|
||||
from .descriptor import CallBackDescriptor
|
||||
|
||||
try:
|
||||
from typing import Self
|
||||
except ImportError:
|
||||
from typing import TypeVar
|
||||
Self = TypeVar("Self") # NOQA
|
||||
|
||||
from .exception import IllegalName
|
||||
|
||||
CallBack = Union[Callable[[str], None], str] # Equals to `Callable[[str], None] | str`
|
||||
# 可调用对象或字符串作为回调
|
||||
# A callable or str as callback
|
||||
|
||||
ParseArgFunc = Callable[[str], Optional[type]]
|
||||
# 解析参数的函数,返回值为 None 时表示解析失败
|
||||
# function to parse argument, return None when failed
|
||||
|
||||
EMPTY_WORDS = re.compile(r"\s", re.I)
|
||||
|
||||
|
||||
def check_name(name: Union[str, List[str]]) -> None:
|
||||
"""
|
||||
Check the name or shortcuts of argument(s) or flag(s).
|
||||
The name must not be empty str, and must not contains \\t or \\n or \\f or \\r.
|
||||
If that not satisfy the requirements, it will raise exception `IllegalArgumentName`.
|
||||
检查 参数或标记 的 名称或快捷方式 是否符合要求。
|
||||
名称必须是非空的字符串,且不能包含 \\t 或 \\n 或 \\f 或 \\r。
|
||||
如果不符合要求,将会抛出 `IllegalArgumentName` 异常。
|
||||
:param name: arguments
|
||||
:return: None
|
||||
"""
|
||||
if isinstance(name, str) and EMPTY_WORDS.search(name):
|
||||
raise IllegalName("The name of argument must not contains empty words.")
|
||||
elif isinstance(name, list) and all((not isinstance(i, str)) and EMPTY_WORDS.search(i) for i in name):
|
||||
raise IllegalName("The name of shortcut must be 'str', and must not contains empty words.")
|
||||
else:
|
||||
raise TypeError("The type of name must be 'str' or 'list[str]'.")
|
||||
|
||||
|
||||
class Literal:
|
||||
_tip = CallBackDescriptor("_tip")
|
||||
_func = CallBackDescriptor("_func")
|
||||
_err_callback = CallBackDescriptor("_err_callback")
|
||||
|
||||
def __init__(self, name: str):
|
||||
self.name: str = name
|
||||
self.sub: List[Self] = []
|
||||
self._tip: Optional[CallBack] = None
|
||||
self._func: Optional[CallBack] = None
|
||||
self._err_callback: Optional[CallBack] = None
|
||||
|
||||
self._opts: List[Option] = []
|
||||
self._args: List[Argument] = []
|
||||
self._flags: List[Flag] = []
|
||||
|
||||
def __call__(self, *nodes) -> Self:
|
||||
self.sub += nodes
|
||||
return self
|
||||
|
||||
def __repr__(self):
|
||||
attrs = (k for k in self.__dict__ if not (k.startswith("__") and k.endswith("__")))
|
||||
return f"{self.__class__.__name__}({', '.join(f'{k}={v!r}' for k in attrs if (v := self.__dict__[k]))})"
|
||||
|
||||
def arg(self, name: str, types: Optional[Set[type]] = None) -> Self:
|
||||
Argument(name=name, types=types)
|
||||
return self
|
||||
|
||||
def opt(
|
||||
self,
|
||||
name: str,
|
||||
shortcuts: Optional[List[str]] = None,
|
||||
optional: bool = True,
|
||||
types: Optional[Set[type]] = None
|
||||
) -> Self:
|
||||
check_name(name)
|
||||
if shortcuts is not None and len(shortcuts) != 0:
|
||||
check_name(shortcuts)
|
||||
self._opts.append(
|
||||
Option(name=name, shortcuts=shortcuts, optional=optional, types=types)
|
||||
)
|
||||
return self
|
||||
|
||||
def opt_group(self, opts: List[Option], exclusive: bool = False):
|
||||
...
|
||||
|
||||
def flag(self, name: str, shortcuts: Optional[List[str]] = None) -> Self:
|
||||
check_name(name)
|
||||
if shortcuts is not None and len(shortcuts) != 0:
|
||||
check_name(shortcuts)
|
||||
Flag(name=name, shortcuts=shortcuts)
|
||||
...
|
||||
return self
|
||||
|
||||
def flag_group(self, flags: List[Flag], exclusive: bool = False) -> Self:
|
||||
|
||||
...
|
||||
return self
|
||||
|
||||
def error(self, callback: CallBack) -> Self:
|
||||
self._err_callback = callback
|
||||
return self
|
||||
|
||||
def run(self, func: CallBack) -> Self:
|
||||
self._func = func
|
||||
return self
|
||||
|
||||
def tip(self, tip: CallBack) -> Self:
|
||||
self._tip = tip
|
||||
return self
|
||||
|
||||
def parse(self, cmd: Union[str, List[str]]) -> Parsed:
|
||||
...
|
||||
|
||||
def to_doc(self) -> str:
|
||||
...
|
||||
|
||||
|
||||
def builder(node: Literal) -> Literal:
|
||||
...
|
0
lib_not_dr/nuitka/__init__.py
Normal file
0
lib_not_dr/nuitka/__init__.py
Normal file
@ -4,14 +4,12 @@
|
||||
# All rights reserved
|
||||
# -------------------------------
|
||||
|
||||
# 用于使用 nuitka 构建 DR
|
||||
import platform
|
||||
import traceback
|
||||
import warnings
|
||||
from pathlib import Path
|
||||
from typing import List, Tuple, Optional
|
||||
|
||||
from lib_not_dr.types import Options, Version
|
||||
|
||||
from lib_not_dr.types import Options, Version, VersionRequirement
|
||||
|
||||
def _add_cmd(cmd: List[str], string: Optional[str]) -> List[str]:
|
||||
if string is not None and string:
|
||||
@ -31,8 +29,10 @@ class CompilerHelper(Options):
|
||||
src_file: Path
|
||||
|
||||
python_cmd: str = 'python'
|
||||
compat_nuitka_version: VersionRequirement = VersionRequirement("~1.7.1") # STATIC VERSION
|
||||
|
||||
# 以下为 nuitka 的参数
|
||||
# nuitka options below
|
||||
use_lto: bool = False # --lto=yes (no is faster)
|
||||
use_clang: bool = True # --clang
|
||||
use_msvc: bool = True # --msvc=latest
|
||||
@ -47,6 +47,7 @@ class CompilerHelper(Options):
|
||||
xml_path: Path = Path('build/compile_data.xml')
|
||||
|
||||
download_confirm: bool = True # --assume-yes-for-download
|
||||
run_after_build: bool = False # --run
|
||||
|
||||
company_name: Optional[str] = ''
|
||||
product_name: Optional[str] = ''
|
||||
@ -68,6 +69,12 @@ class CompilerHelper(Options):
|
||||
disable_plugin: List[str] = [] # --disable-plugin=xxx,xxx
|
||||
|
||||
def init(self, **kwargs) -> None:
|
||||
if (compat_version := kwargs.get('compat_nuitka_version')) is not None:
|
||||
if not self.compat_nuitka_version.accept(compat_version):
|
||||
warnings.warn(
|
||||
f"Nuitka version may not compat with {compat_version}\n"
|
||||
"requirement: {self.compat_nuitka_version}"
|
||||
)
|
||||
# 非 windows 平台不使用 msvc
|
||||
if platform.system() != 'Windows':
|
||||
self.use_msvc = False
|
||||
@ -126,6 +133,7 @@ class CompilerHelper(Options):
|
||||
_add_cmd(cmd_list, '--show-progress' if self.show_progress else None)
|
||||
_add_cmd(cmd_list, '--show-memory' if self.show_memory else None)
|
||||
_add_cmd(cmd_list, '--assume-yes-for-download' if self.download_confirm else None)
|
||||
_add_cmd(cmd_list, '--run' if self.run_after_build else None)
|
||||
_add_cmd(cmd_list, '--enable-console' if self.enable_console else '--disable-console')
|
||||
|
||||
_add_cmd(cmd_list, f'--xml={self.xml_path.absolute()}' if self.save_xml else None)
|
||||
@ -147,5 +155,5 @@ class CompilerHelper(Options):
|
||||
if self.include_packages:
|
||||
cmd_list += [f"--include-package={package}" for package in self.include_packages]
|
||||
|
||||
cmd_list.append(f"{self.src_file}")
|
||||
cmd_list.append(f"--main={self.src_file}")
|
||||
return cmd_list
|
||||
|
@ -101,7 +101,6 @@ class Options:
|
||||
""" 如果子类定义了这个函数,则会在 __init__ 之后调用这个函数
|
||||
返回值为 True 则不会调用 load_file 函数
|
||||
"""
|
||||
#
|
||||
|
||||
def load_file(self) -> bool:
|
||||
"""如果子类定义了这个函数,则会在 __init__ 和 init 之后再调用这个函数
|
||||
|
83
pdm.lock
Normal file
83
pdm.lock
Normal file
@ -0,0 +1,83 @@
|
||||
# This file is @generated by PDM.
|
||||
# It is not intended for manual editing.
|
||||
|
||||
[[package]]
|
||||
name = "nepattern"
|
||||
version = "0.5.10"
|
||||
requires_python = ">=3.8"
|
||||
summary = "a complex pattern, support typing"
|
||||
dependencies = [
|
||||
"tarina>=0.3.3",
|
||||
"typing-extensions>=4.5.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tarina"
|
||||
version = "0.3.3"
|
||||
requires_python = ">=3.8"
|
||||
summary = "A collection of common utils for Arclet"
|
||||
dependencies = [
|
||||
"typing-extensions>=4.4.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.7.1"
|
||||
requires_python = ">=3.7"
|
||||
summary = "Backported and Experimental Type Hints for Python 3.7+"
|
||||
|
||||
[metadata]
|
||||
lock_version = "4.2"
|
||||
cross_platform = true
|
||||
groups = ["default"]
|
||||
content_hash = "sha256:73e5bcd71ae7bae870ea57f3a7aefed66821d6b549ec2ca2e8cf202e645c2aa3"
|
||||
|
||||
[metadata.files]
|
||||
"nepattern 0.5.10" = [
|
||||
{url = "https://files.pythonhosted.org/packages/5b/07/295a685764d31e171ce0551f1d46c289d5279a80544629e86facaae946b1/nepattern-0.5.10-py3-none-any.whl", hash = "sha256:cfeae4906ed94ed4a5198da102b0f730a1c61793f7d0bfd0e63ca9dbd325e9d6"},
|
||||
{url = "https://files.pythonhosted.org/packages/ec/a3/e3c59a4a4878787913637ac5c3327912fe3bdc3afb997902b55cfcf0eb2a/nepattern-0.5.10.tar.gz", hash = "sha256:70648453e94aee75575e4e4ee13ba876d11ac20d8a80fe5eb7dc7e43573e0918"},
|
||||
]
|
||||
"tarina 0.3.3" = [
|
||||
{url = "https://files.pythonhosted.org/packages/11/37/7948ddeb644212875fe18a8bb4e68dc3f1fc16fc18e4ecf51b79a0036a8d/tarina-0.3.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:934d970d4f355fe0042325f1c50c4ff885fa6d114c9c4b062a293f8d378b70f8"},
|
||||
{url = "https://files.pythonhosted.org/packages/11/d5/d686f2ae369c58c70a0eced645a9e6bd4fb4cf4f38cebb7a5cbd91f878f8/tarina-0.3.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3cfb1cb0b6eabcd745d083d6031bab3319e46da94ca1df62cea1bbcc1abe3159"},
|
||||
{url = "https://files.pythonhosted.org/packages/12/22/a5ef2ad9cec1c23fce161817f10596c03c01af70cf248c7060702dbc7321/tarina-0.3.3.tar.gz", hash = "sha256:ac9faf7569021cfa137a9cee1be5185bae9ff4e4e6a5b93c66abdf056d1e04fa"},
|
||||
{url = "https://files.pythonhosted.org/packages/19/a3/3f79a4afaaac21c52785b60101a89ec79dbb645daa51e3b7f08dffc0c659/tarina-0.3.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d2c3c7808a3984f00b16f101c36443a042d3abc8ff5d5e84b9cb3fabebb330b1"},
|
||||
{url = "https://files.pythonhosted.org/packages/1b/a6/3005c325cdd7ba5eaa9b619b182cf8b75264ea409759dadf6d261d615c6d/tarina-0.3.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e1d28e974fe5915dde245019430f248ddbdd91e8df1dec53306448cc24f4d9a8"},
|
||||
{url = "https://files.pythonhosted.org/packages/1c/ad/376ad6150ad45039876f61984420535cdfe5c5db3433804d68dae995a167/tarina-0.3.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3efce03c7a46118afd009dc56169030dc8b698f6da20fce25cd0139530525d80"},
|
||||
{url = "https://files.pythonhosted.org/packages/20/4f/774bef8e456859529cb1bcabaf1639cc33fb8f5dd4c024f8a27a2f7a5e48/tarina-0.3.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3c4cec6381869116c7a8f7d9b0cb7433967f5b324faa9fc2e4784fdb9bab79f8"},
|
||||
{url = "https://files.pythonhosted.org/packages/2b/2c/2d1501948a95a45187d5add6f468ea46f5ec23e5fb713661fb5a3ed5cc10/tarina-0.3.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5195c7f9fa2313bdf422c24b8ed0b8d9549c4e46afc0c96eeaefdf1d2caa30e9"},
|
||||
{url = "https://files.pythonhosted.org/packages/2c/1f/124aeff1910a9393b9823594f17468fcd591e1e85e60c5f8be27a7f12e07/tarina-0.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:788001d26cb84a752df569aef900387ac4d9b2273b38b9ed26f6d56b4644aa06"},
|
||||
{url = "https://files.pythonhosted.org/packages/2c/f0/bdb27f86f0cb2ece0acb3e626ceaee508dcc261e16722a43f688058dfbe0/tarina-0.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2c643c1e384e206af3ba2eb7142f6b3680d51d0b51e01a61bbf1f3350040c791"},
|
||||
{url = "https://files.pythonhosted.org/packages/2e/07/e03e5fec539279d7cca66f883fc1e13fc4fb188c1df3f107b6b74de98e5c/tarina-0.3.3-py3-none-any.whl", hash = "sha256:0547c75e3e53ca202c420e6d829d5bcf5758e478fc5964b92f9de2f838cfb12a"},
|
||||
{url = "https://files.pythonhosted.org/packages/3a/39/abeb158b7c1b94542b4b68f0a07f7739ca0ff0be7064bfcbb138f85282fa/tarina-0.3.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33bcfaad022214a5a534c065b69c14ad9f2e53aa03198d6de0216e173fec98b"},
|
||||
{url = "https://files.pythonhosted.org/packages/3a/8d/bb611259872326280f5b97fbb864c2739a76399a3c52e4d633d3dbc67b78/tarina-0.3.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa2897e7cad66be833c2e392181ecff33e59038bf85cf18000c3e48c2ee85fde"},
|
||||
{url = "https://files.pythonhosted.org/packages/42/11/97465d907f8b2e26358b07d3b67b568557990efc04995a0e2a303dca6e1b/tarina-0.3.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd778f324c512403afa3973661c480d6529a403435d205ee7bf7fc586894f4c1"},
|
||||
{url = "https://files.pythonhosted.org/packages/51/7a/6cb5efb75d526e72e9846e6fb71dae96e6e27470a965b0770c29a3c5a83a/tarina-0.3.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de2429a632f31b09bdb2d5f668311d7de4882f1ac3ebc5022decf647f900af5a"},
|
||||
{url = "https://files.pythonhosted.org/packages/5b/6a/be6bf22769ef3e55e8afc4c256080613a5ec97d7a6f6787c9414c86b0061/tarina-0.3.3-cp310-cp310-win32.whl", hash = "sha256:ca4b1978614dbb5f30c4378be1ad4f4aa6fb227cdf32740964ee9760d6a8e3a9"},
|
||||
{url = "https://files.pythonhosted.org/packages/5e/32/30fae8ac68095dd919c0435c8ee744ed50a7f4b3942288a3294a8f3fa3f2/tarina-0.3.3-cp39-cp39-win32.whl", hash = "sha256:f6b7fc1799a70cc14548086602a2343562de722c490649c4bf2e74eb7c542c04"},
|
||||
{url = "https://files.pythonhosted.org/packages/62/cd/2f3722c02cf93cf68d92567efa7c5f632af3d15a686127241b52216b207a/tarina-0.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a14079252a54501285956f1e96004477af8b9ae64a575f561b99bfa778c01707"},
|
||||
{url = "https://files.pythonhosted.org/packages/67/67/e4f5bbe1bc4c696ac09a1325bcc3a9a464185914f0a2302e695e68f42757/tarina-0.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4dcc7112b927a023a635528566b62beb7a99f72f2b9e88fde29fafb61136a579"},
|
||||
{url = "https://files.pythonhosted.org/packages/69/ef/b24dc2963cb1b788e3331bc703f7c1d1963fc8b4a8c99b82f78c78fc0528/tarina-0.3.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fbcaa4a6c57528ed23199f778445d20215cc2421c1d494dedbe671164bd29dc5"},
|
||||
{url = "https://files.pythonhosted.org/packages/6e/4b/f0bacb8118a30193150dd7d078a398bac5739ffbc3270652492dd656193d/tarina-0.3.3-cp38-cp38-win32.whl", hash = "sha256:5ec78f0d8bc5b529502e1be20bb8dc628ff1a6c5e31941f9572c105c6fe591b1"},
|
||||
{url = "https://files.pythonhosted.org/packages/72/7f/17d999c886905a0672337adb9501400c8a2ab209feaae0bb3eba7627cba1/tarina-0.3.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35dc66fb6baac12fca363380ff12fd27164481f281f82ac2282e500b53fef961"},
|
||||
{url = "https://files.pythonhosted.org/packages/78/92/b24dddc1b836beaa6733c9b2caf51410a6cce0873ae6d55344f2d22db26b/tarina-0.3.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1f78d6f75da0d34061ade10d0e1aeec3018a4d36836568085a4eb79fef65bb7e"},
|
||||
{url = "https://files.pythonhosted.org/packages/80/20/2c8303ab730af65a79a8cae869b463936bac2236519595c5e4259b72f4b8/tarina-0.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:9f8a0a505a9b226d1d45483fac105c55407c13a95449e15562601128dc2359d1"},
|
||||
{url = "https://files.pythonhosted.org/packages/8c/06/b864bceb1597ba142d729c34798aa6251879bb276d3b3f965b18c673fcad/tarina-0.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:efa6e1ab03c1948e3efd4645b8960dd312407e029462726a9e77822261a6be3d"},
|
||||
{url = "https://files.pythonhosted.org/packages/8f/ca/472e18aa2bbef0bb83526089012f2628a69a8b0213c1bb6cbd51c11f736c/tarina-0.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ccb1090fccd3dea3596bdea5ac80b7379663741dd5023b97840dca968f4081bd"},
|
||||
{url = "https://files.pythonhosted.org/packages/91/1f/1d7a52e8558eac6d5dd9ade3e88a2458e224178e018d9e602896cea20b05/tarina-0.3.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecb4cbe65fe9b4e4c91ededb9d6941aae80b6827f07827e12e7ba3f7c3109c02"},
|
||||
{url = "https://files.pythonhosted.org/packages/c5/55/65ab39d0fd1c6010c7ae874d8c659b7d95ef415b5dd2489cda246ceff669/tarina-0.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f56b904a451e287e6251c1312be628afddf670bfa87841b5b1c32d324a1c7c43"},
|
||||
{url = "https://files.pythonhosted.org/packages/c6/f5/1180b80fe98bf86e0e7e7defdbf6fa7859795b77f7bf91cdb368e8d5b0cf/tarina-0.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:730a8fc6dc71adf09197a73ef1e39978e5fe7ec3b7be9a5060905fe48baf27ec"},
|
||||
{url = "https://files.pythonhosted.org/packages/d2/8a/7a922a79e2f6ae6bf0f3bac63e5f1cdfa39abf987b5a122a70bc327144e6/tarina-0.3.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9b9a99acff1e6391c593f449ae76848471d34688f04eecf7d3ba0725157563c7"},
|
||||
{url = "https://files.pythonhosted.org/packages/d3/eb/bbbc5e5666382a55ab6e5d7c4dc68833af6126db2eb96a2836b8afe86d3c/tarina-0.3.3-cp311-cp311-win32.whl", hash = "sha256:87da7c87f448180712c02f6345c686742d9e755d58bb32f70c1bf680e1ae0684"},
|
||||
{url = "https://files.pythonhosted.org/packages/d8/55/2f96d10417cf96a6667d3a5d68bcfd9cf0dde7452d69a8970694529ae7eb/tarina-0.3.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6471aef032461a6917a24af1fb9952bfb5c9bbe26999ea87455bf43157687097"},
|
||||
{url = "https://files.pythonhosted.org/packages/de/14/2224da3ba13fb3d63d9a1da7747a55c43f4f3436344e03cd91bcdecb2fed/tarina-0.3.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:201e31c7b694132ce67662f63142b33e45835223a753fd5f4d301da5ac021b5e"},
|
||||
{url = "https://files.pythonhosted.org/packages/e6/21/78f9911125401d8256563bd94cb0d8b5a4a63fac1ecbdcfd5c4b9bff9c03/tarina-0.3.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5e2e0f5a3760823b23cc3fe49d01c0a75d482560c60934764e2142d187e553b"},
|
||||
{url = "https://files.pythonhosted.org/packages/ec/d4/9643018bb37a2c4e87331633d7c232d2fab3d6017c1f6fb580c87c10a988/tarina-0.3.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7546e4cefadcc5f163611b0af8af2391b711c337d7a0d32a3977ec0bf3e8c87d"},
|
||||
{url = "https://files.pythonhosted.org/packages/f6/a1/afd77bdf28621f3e9771288a9c866f5685610fc6ae4bdc6b4a34ea74d3e2/tarina-0.3.3-cp38-cp38-win_amd64.whl", hash = "sha256:ff5e49a37d6d72a392f8a84c6808f7cc00494352d9e459a0a3921e587b2ecb3f"},
|
||||
{url = "https://files.pythonhosted.org/packages/f8/b8/a7ab3d3e0281c2135c53ffb43e703653359374a5696057c55fbff8bc779a/tarina-0.3.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae87c40c09a62b0898267fb4cbeaece3ca2d7bd8cd2f50c8ecb19583cca3fa64"},
|
||||
{url = "https://files.pythonhosted.org/packages/f8/cd/be747301ea89ee45b5c38b0144a70ac5ed0abc0c3fe98842f528f8797da5/tarina-0.3.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c1ff19bf0b6e554d2fb3d6db35d74553a02b3781167370d11bc950f92fb33ba"},
|
||||
]
|
||||
"typing-extensions 4.7.1" = [
|
||||
{url = "https://files.pythonhosted.org/packages/3c/8b/0111dd7d6c1478bf83baa1cab85c686426c7a6274119aceb2bd9d35395ad/typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"},
|
||||
{url = "https://files.pythonhosted.org/packages/ec/6b/63cc3df74987c36fe26157ee12e09e8f9db4de771e0f3404263117e75b95/typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"},
|
||||
]
|
@ -1,18 +1,32 @@
|
||||
[project]
|
||||
version = "0.0.2"
|
||||
version = "0.1.0"
|
||||
name = "lib-not-dr"
|
||||
|
||||
description = "A python lib created from Difficult Rocket development"
|
||||
|
||||
readme = "README.md"
|
||||
|
||||
authors = [
|
||||
{name = "shenjackyuanjie", email = "3695888@qq.com"}
|
||||
]
|
||||
requires-python = ">=3.8"
|
||||
|
||||
classifiers = [
|
||||
"Programming Language :: Python :: 3",
|
||||
"Operating System :: OS Independent",
|
||||
]
|
||||
license = { file = "LICENSE" }
|
||||
|
||||
dependencies = [
|
||||
"nepattern>=0.5.10",
|
||||
]
|
||||
|
||||
[project.urls]
|
||||
Homepage = "https://github.com/shenjackyuanjie/lib-not-dr"
|
||||
Repository = "https://github.com/shenjackyuanjie/lib-not-dr"
|
||||
Changelog = "https://github.com/shenjackyuanjie/lib-not-dr/blob/main/docs/change_log.md"
|
||||
|
||||
|
||||
[tool.ruff]
|
||||
target-version = "py38"
|
||||
line-length = 150
|
||||
src = [
|
||||
"lib_not_dr"
|
||||
]
|
||||
format = "grouped"
|
Loading…
Reference in New Issue
Block a user