添加日志

This commit is contained in:
root 2024-04-02 21:20:12 +08:00
parent 18981da857
commit 25a651c1e8
9 changed files with 101 additions and 21 deletions

3
.gitignore vendored
View File

@ -2,6 +2,7 @@ build/
dist/
pmpt.egg-info/
*.tar.gz
*.tar.g
*.pyc
*.whl
__pycache__/

View File

@ -4,6 +4,7 @@ from . import util
from moyanlib import jsons
from rich.table import Table
from . import source as sou
from . import environment as environ
from . import install as installs
from . import search as searchs
@ -12,6 +13,7 @@ def cli():
try:
import pip
except ImportError:
util.logger.critical('没有pip')
util.console.print('❌ [red]pip module not found![/red]')
exit(1)
util.init() # 初始化
@ -92,5 +94,9 @@ def removes(*args,**kwargs):
def modifys(*args,**kwargs):
sou.modify(*args,**kwargs)
@cli.command()
def version():
environ.main()
if __name__ == '__main__':
cli()

View File

@ -1,5 +1,7 @@
import subprocess
import re
from . import util
import moyanlib
def get_version(command):
try:
@ -10,9 +12,9 @@ def get_version(command):
if version_match:
return version_match.group(1)
else:
return False
return '[red]False[/red]'
except subprocess.CalledProcessError:
return False
return '[red]False[/red]'
def getGCCver():
# 检查是否能执行 gcc 命令
@ -33,9 +35,18 @@ def getRustVer():
rustVer = stdout.decode().split(' ')[1]
return rustVer
else:
return False
return '[red]False[/red]'
print("GCC 版本:", getGCCver())
print("Clang 版本:", getClangVer())
print("MSVC 版本:", getMSVCver())
print('Rust版本:',getRustVer())
def getPIPver():
return get_version('pip -V')
def main():
info = moyanlib.getInfo()
printText = f'''[white]PMPT {util.__version__}[/white]
{info['OS']['Name']} {info['OS']['Version']}
Python Version: {info['Python']['Version']}
PIP Version: [green]{getPIPver()}[/green]
GCC Version: [green]{getGCCver()}[/green]
Clang Version: [green]{getClangVer()}[/green]
MSVC Version: [green]{getMSVCver()}[/green]
Rust Version: [green]{getRustVer()}[/green]'''
util.console.print(printText)

View File

@ -1,11 +1,21 @@
from . import util
import requests
from rich.table import Table
from urllib import parse
def search(name):
util.loadIndex() #加载索引
for Index in util.IndexList:
dt = Index.packageList.get(name,None)
if dt:
try:
rurl = parse.urljoin(Index.IndexURL,name)
r = requests.get(rurl)
except:
continue
else:
if r.status_code != 200:
continue
return Index.IndexURL
@ -18,6 +28,7 @@ def main(packlist,upgrade,reads,force_reinstall,ignore_requires_python,yes,comma
packsInfo = {}
with console.status('🚀🔍 Searching for package information...') as status:
# 创建表格
table = Table(show_header=True,header_style='bold')
table.add_column("Package Name", width=20,style='bold')
table.add_column("Package Source", width=20,style='green')

View File

@ -4,20 +4,26 @@ import os
from rich.table import Table
from . import util
def line_search(li, val):
def line_search(li, val,key):
# 线性搜索算法
n = 0
for i in li:
print(i)
if i['id'] == val:
if i[key] == val:
return i,n
n += 1
return None
def add(url,priority):
sourceList = jsons.load(open(os.path.join(util.dirs.user_config_dir,'Source.json')))
if url in sourceList:
'''
添加源
'''
sourceList = jsons.load(open(os.path.join(util.dirs.user_config_dir,'Source.json'))) # 加载source源
if not line_search(sourceList,url,'url'): # 判断源是否存在
util.console.print('❌ [red]The source already exists[/red]')
exit(1)
sourceList.append({
'url':url,
'id':str(uuid.uuid4())[:8],
@ -28,12 +34,17 @@ def add(url,priority):
def lists():
'''
列出所有源
'''
sourceList = jsons.load(open(os.path.join(util.dirs.user_config_dir,'Source.json')))
# 构建table
table = Table(show_header=True)
table.add_column("ID",width=6)
table.add_column('Priority',width=8)
table.add_column('URL',width=25)
# 遍历source列表
for i in sourceList:
table.add_row(
i['id'],
@ -43,12 +54,15 @@ def lists():
util.console.print(table)
def remove(ids,yes):
'''
删除
'''
if not ids:
lists()
ids = util.console.input('Please enter the source sequence number to be deleted:')
sourceList:list = jsons.load(open(os.path.join(util.dirs.user_config_dir,'Source.json')))
source,n = line_search(sourceList,ids)
source,n = line_search(sourceList,ids,'id')
if not source:
util.console.print('❌ [red]The source for this ID does not exist[/red]')
@ -71,11 +85,18 @@ def remove(ids,yes):
jsons.dump(sourceList,open(os.path.join(util.dirs.user_config_dir,'Source.json'),'w'))
def modify(ids,key,val):
'''
修改
'''
sourceList:list = jsons.load(open(os.path.join(util.dirs.user_config_dir,'Source.json')))
source,n = line_search(sourceList,ids)
source,n = line_search(sourceList,ids,'id')
if not source:
util.console.print('❌ [red]The source for this ID does not exist[/red]')
if key not in ['url','priority']:
util.console.print('❌ [red]The item is not allowed to be modified or does not exist.[/red]')
sourceList[n][key] = val
jsons.dump(sourceList,open(os.path.join(util.dirs.user_config_dir,'Source.json'),'w'))

View File

@ -2,10 +2,9 @@
import os
from subprocess import Popen
import sys
import pathlib
import dill
from rich.console import Console
import time
from loguru import logger
import subprocess
from moyanlib import jsons
from platformdirs import PlatformDirs
@ -15,11 +14,35 @@ IndexList = []
console = Console()
def getVer(baseVar):
baseVar = baseVar + '.' + os.environ.get('GITHUB_RUN_ID', str(int(time.time()))[:6])
baseVar = baseVar # + '.' + os.environ.get('GITHUB_RUN_ID', str(int(time.time()))[:6])
logger.info('PMPT '+baseVar)
return baseVar
__version__ = getVer('1.0.1')
def GlobalDecorator(frame, event, arg):
if event == 'call':
try:
func_name = frame.f_code.co_name
module_name = frame.f_globals['__name__']
package_name = module_name.split('.')[0] # 假设包名为模块名的第一部分
if package_name == 'pmpt':
logger.trace(f"调用函数 {module_name}.{func_name}")
except:
pass
return GlobalDecorator
sys.settrace(GlobalDecorator)
logger.remove()
logger.add(
os.path.join(dirs.user_data_dir,'log.log'),
level='TRACE',
)
__version__ = getVer('1.0.3')
def init():
os.makedirs(dirs.user_data_dir,exist_ok=True)
os.makedirs(os.path.join(dirs.user_data_dir,'Index'),exist_ok=True)
os.makedirs(dirs.user_config_dir,exist_ok=True)
@ -41,17 +64,21 @@ def loadIndex():
sourceList = bubbleSort(sourceList)
for source in sourceList:
if not os.path.exists(os.path.join(dirs.user_data_dir,'Index',source['id']+'.pidx')):
logger.warning(source['url']+'没有索引')
console.print(f'⚠️ [yellow]{source["url"]} did not create an index.[/yellow]')
continue
logger.debug(source)
IndexFile = dill.load(open(os.path.join(dirs.user_data_dir,'Index',source['id']+'.pidx'),'rb')) # 加载索引
IndexList.append(IndexFile)
if len(IndexList) == 0:
raise FileNotFoundError('No index. Run "pmpt update" first to update the index')
def runpip(command,other=None,dbg=False,out=True) -> Popen:
'''
运行pip
'''
logger.trace('调用runpip')
if not other:
other = []
baseCommand = [sys.executable,'-m','pip']
@ -60,13 +87,15 @@ def runpip(command,other=None,dbg=False,out=True) -> Popen:
Command = baseCommand + other
if dbg:
console.print('Command to be run:',' '.join(Command))
logger.debug(' ',)
runClass = Popen(Command,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
if out:
for line in iter(runClass.stdout.readline, b''):
# 在这里你可以对每一行输出进行处理
line = line.decode('utf-8').strip() # 将字节转换为字符串并去除换行符
console.print(line)
if runClass.returncode != 0:
console.print(runClass.stderr.read().decode())
runClass.communicate()
else:
runClass.wait()

0
readme.md Normal file
View File

View File

@ -5,3 +5,4 @@ click
dill
tqdm
rich
loguru

View File

@ -22,7 +22,7 @@ setup(
author='MoYan', # 作者
author_email='moyan@moyanjdc.top', # 作者邮箱
description='A Python Package Advanced Manager', # 包的简要描述
long_description='A longer description of your package', # 包的详细描述
long_description=open("readme.md").read(), # 包的详细描述
long_description_content_type='text/markdown', # 描述的内容类型
classifiers=[ # 包的分类信息
'Development Status :: 3 - Alpha',