Name | jeutil JSON |
Version |
1.1.6
JSON |
| download |
home_page | None |
Summary | A simple python libs |
upload_time | 2024-04-23 05:07:31 |
maintainer | None |
docs_url | None |
author | jeanku |
requires_python | >=3 |
license | None |
keywords |
util
libs
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# SimUtil
python容器& libs
# 1. 安装
```
pip install jeutil
```
# 2. 添加配置文件
你需要在你的项目根目录下创建一个.env文件,内容如下:
``` python
[environment] # 环境变量 环境变量的配置一定要放在[environment]下, 否则读取不到
ENVIRONMENT = dev # 项目环境
#日志配置
# LOG_DEBUG:日志调试模式
LOG_DEBUG = true
# LOG_LEVEL:DEBUG|
LOG_LEVEL = DEBUG
# 日志路径: 每天产生一个新文件
# 日志具体文件名: 一直记录到该文件中
LOG_PATH = /Users/**/
# redis配置
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_PASSWORD =
REDIS_DB=0
# rabbitmq 配置
RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
RABBITMQ_USER=test
RABBITMQ_PASSWORD=12345
# oss配置
OSS_ACCESS_DOMAIN=**
OSS_ACCESS_KEY=key
OSS_ACCESS_SECRET=secret
OSS_BUCKET_NAME=bucket_name
OSS_END_POINT=endpoint
[default.mysql] # 数据库等其他配置
DB_TYPE=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_NAME=dev
DB_USER=root
DB_PASSWORD=password
DB_CHARSET=utf8mb4
```
# 3. 初始化
容器BASE_PATH注册
``` python
from jeutil.App import app
import os
base_path = os.path.dirname(os.path.dirname(__file__))
app.register("BASE_PATH", os.path.dirname(os.path.dirname(__file__)))
# 注册完成之后, 你可以在代码任何地方引入app并使用
```
# 读取env配置
``` python
app('env')('LOG_PATH') # 方法式读取
app('env')('LOG_PATH1', "hahaha") # 方法式读取(娶不到舍默认值)
app('env').LOG_PATH # 属性读取
app('env')['LOG_PATH'] # 字典读取
app('env').items('default.mysql') # 模块读取
app('env').items('sqlserver', 'DB_HOST') # 读取default.mysql中的DB_HOST
app('env').items('sqlserver', 'DB_HOST1', "123") # 读取default.mysql中的DB_HOST(带默认值)
```
# log日志
``` python
app('log').debug(("status", 0)) # 记录tuple
app('log').info([1, 2, 3, 4, 5]) # 记录list
app('log').error({'name':'jemes'}) # 记录dict
app('log').warning("123444") # 记录string
app('log').critical(5) # 记录number
try:
a = 100 / 0 # error
raise Exception("i am a Exception") # Exception
except Exception as e:
app('log').info(e) # 记录error or exception
```
# 网络请求request
``` python
# 同步request get
rep = app('request').get('https://api.longhash.com/', params={}, header={})
text = rep.text
json = rep.json()
# 同步request post
rep = app('request').post('https://api.longhash.com', params={}, header={})
text = rep.text
json = rep.json()
# 异步request get
async def test(url, param={}):
res = await app('request').aiogett(url, param)
text = res.text
json = res.json()
app('async').run([test('https://api.longhash.com/')]) # 异步方法调用
# 异步request post
async def test(url, param={}):
res = await app('request').aiopost(url, param)
text = res.text
json = res.json()
app('async').run([test('https://api.longhash.com/')]) # 异步方法调用
```
# 读取项目中配置文件信息
``` python
# config 读取app 注册的BASE_PATH下文件配置
app('config')('Config.setting.test_str') # {BASE_PATH}/Config/setting.py test_str值
app('config')('Config.setting.test_str', 'default') # {BASE_PATH}/Config/setting.py test_str值 取不到则用默认值default
app('config').get('Config.setting.test_str', 'default') # {BASE_PATH}/Config/setting.py test_str值 字典方式读取
```
# redis
``` python
# redis
app('redis').set('name', 123) # 设置key
app('redis').get('name') # 读取key
app('redis').select(1).get('name') # 切换redis DB: 1
# 如果想使用其他非 .env中的配置的redis, 建议使用app.register 注册新的redis实例
from simutil.Redis import Redis
redis = Redis(app('env').REDIS_HOST, app('env').REDIS_PORT)
app.register('redis1', redis)
app('redis1').get('testname')
```
# async方法
``` python
# 异步方法
import asyncio
async def hello(index): # 自定义的async方法
print("number:{}, Hello world!".format(index))
await asyncio.sleep(1)
print("end!")
app('async').run([hello(index) for index in range(5)]) # 执行
```
# 阿里OSS
``` python
# oss
rep = app('request').get('https://api.***.com/index', params={}, header={})
# 上传读取的内容(从内存中)
app('oss').push('oss/api.json', rep.text) # oss/api.json为上传到oss的文件路径名称
# 设置referer
app('oss').referer(["http://api.longhash.com"]).push('test/api.json', rep.text, {'Content-Encoding': 'utf-8'})
# 取消referer 或设置为空
app('oss').referer().push('test/api.json', rep.text, {'Content-Encoding': 'utf-8'})
# 上传本地文件
filepath = /Users/jemes/workspace/simutil/Storage/Logs/20200528.log
app('oss').push_file('test/api.json', filepath, {'Content-Encoding': 'utf-8'})
# rule规则设置
app('oss').rule(allowed_origins=['*'], allowed_methods=['GET'], allowed_headers=['*'], max_age_seconds=100)\
.push_file('test/api.json', '/Users/jemes/workspace/simutil/Storage/Logs/20200528.log')
```
# Path路径
``` python
rep = app('path') # 指向BASE_PATH的Pathlib对象
base_path = app('path').resolve() # = app('BASE_PATH')
config_path = rep.joinpath('Config') # {BASE_PATH}/Config
logs_path = rep.joinpath('Storage/Logs') # {BASE_PATH}/Storage/Logs
# 其他操作和Pathlib一致
```
# rabbitMQ
``` python
rab = app('rabbitmq') # 指向BASE_PATH的Pathlib对象
conn = rab.connection() # rabbitmq connection
channel = rab.channel() # rabbitmq channel
```
# App容器
``` python
# 为了实现代码结偶和复用, 延时加载
# 说明: app('keyname') 拿出来的都是单例, App本身也是单例模式
# 注册class
class DemoA:
def hello(self):
return 'DemoA say hello'
demo1 = app.register('demo1', DemoA) # 类名注册
demo2 = app.register('demo2', '__main__.DemoA') # 类路径注册(我在main函数中执行的,所以路径为__main__.DemoA)
demo3 = app.register('demo', DemoA()) # 实例注册
res = app('demo1').hello() # print: DemoA say hello
res = app('demo2').hello() # print: DemoA say hello
res = app('demo3').hello() # print: DemoA say hello
# 注册function
def add(a, b):
return a + b
app.register('add', add) # 方法注册
res = app('add')(4, 5) # print: 9
# 注册数据
app.register('listdata', [1, 3, 22, 21, 39])
app.register('dictdata', {'name': 'jemes'})
app.register('tupledata', ('name', 'jemes'))
app.register('base_path', str(os.path.dirname(__file__)))
res = app('listdata') # print: [1, 3, 22, 21, 39]
res = app('dictdata') # print: {'name': 'jemes'}
res = app('tupledata') # print: ('name', 'jemes')
res = app('base_path') # print: /Users/jemes/workspace/simutil
```
Raw data
{
"_id": null,
"home_page": null,
"name": "jeutil",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3",
"maintainer_email": null,
"keywords": "util, libs",
"author": "jeanku",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/15/03/1268ec2458edd239a67a115102b55ff25eb9da529436b40288f1ba1b9273/jeutil-1.1.6.tar.gz",
"platform": null,
"description": "# SimUtil\n\npython\u5bb9\u5668& libs\n\n\n# 1. \u5b89\u88c5\n```\npip install jeutil\n```\n\n# 2. \u6dfb\u52a0\u914d\u7f6e\u6587\u4ef6\n\u4f60\u9700\u8981\u5728\u4f60\u7684\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a.env\u6587\u4ef6\uff0c\u5185\u5bb9\u5982\u4e0b:\n\n``` python\n[environment] # \u73af\u5883\u53d8\u91cf \u73af\u5883\u53d8\u91cf\u7684\u914d\u7f6e\u4e00\u5b9a\u8981\u653e\u5728[environment]\u4e0b, \u5426\u5219\u8bfb\u53d6\u4e0d\u5230 \nENVIRONMENT = dev # \u9879\u76ee\u73af\u5883\n\n#\u65e5\u5fd7\u914d\u7f6e \n# LOG_DEBUG:\u65e5\u5fd7\u8c03\u8bd5\u6a21\u5f0f \nLOG_DEBUG = true \n# LOG_LEVEL:DEBUG| \nLOG_LEVEL = DEBUG\n# \u65e5\u5fd7\u8def\u5f84: \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65b0\u6587\u4ef6 \n# \u65e5\u5fd7\u5177\u4f53\u6587\u4ef6\u540d: \u4e00\u76f4\u8bb0\u5f55\u5230\u8be5\u6587\u4ef6\u4e2d\nLOG_PATH = /Users/**/\n\n# redis\u914d\u7f6e\nREDIS_HOST=127.0.0.1 \nREDIS_PORT=6379 \nREDIS_PASSWORD = \nREDIS_DB=0 \n\n# rabbitmq \u914d\u7f6e\nRABBITMQ_HOST=127.0.0.1\nRABBITMQ_PORT=5672\nRABBITMQ_USER=test\nRABBITMQ_PASSWORD=12345\n\n# oss\u914d\u7f6e\nOSS_ACCESS_DOMAIN=** \nOSS_ACCESS_KEY=key \nOSS_ACCESS_SECRET=secret \nOSS_BUCKET_NAME=bucket_name \nOSS_END_POINT=endpoint\n\n[default.mysql] # \u6570\u636e\u5e93\u7b49\u5176\u4ed6\u914d\u7f6e\nDB_TYPE=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_NAME=dev\nDB_USER=root\nDB_PASSWORD=password\nDB_CHARSET=utf8mb4\n```\n\n# 3. \u521d\u59cb\u5316\n\n\u5bb9\u5668BASE_PATH\u6ce8\u518c\n\n``` python\nfrom jeutil.App import app\nimport os\n\nbase_path = os.path.dirname(os.path.dirname(__file__))\napp.register(\"BASE_PATH\", os.path.dirname(os.path.dirname(__file__)))\n\n# \u6ce8\u518c\u5b8c\u6210\u4e4b\u540e, \u4f60\u53ef\u4ee5\u5728\u4ee3\u7801\u4efb\u4f55\u5730\u65b9\u5f15\u5165app\u5e76\u4f7f\u7528\n```\n\n# \u8bfb\u53d6env\u914d\u7f6e\n``` python\napp('env')('LOG_PATH') # \u65b9\u6cd5\u5f0f\u8bfb\u53d6\napp('env')('LOG_PATH1', \"hahaha\") # \u65b9\u6cd5\u5f0f\u8bfb\u53d6(\u5a36\u4e0d\u5230\u820d\u9ed8\u8ba4\u503c\uff09\napp('env').LOG_PATH # \u5c5e\u6027\u8bfb\u53d6\napp('env')['LOG_PATH'] # \u5b57\u5178\u8bfb\u53d6\napp('env').items('default.mysql') # \u6a21\u5757\u8bfb\u53d6 \napp('env').items('sqlserver', 'DB_HOST') # \u8bfb\u53d6default.mysql\u4e2d\u7684DB_HOST \napp('env').items('sqlserver', 'DB_HOST1', \"123\") # \u8bfb\u53d6default.mysql\u4e2d\u7684DB_HOST(\u5e26\u9ed8\u8ba4\u503c)\n```\n\n# log\u65e5\u5fd7\n``` python\napp('log').debug((\"status\", 0)) # \u8bb0\u5f55tuple\napp('log').info([1, 2, 3, 4, 5]) # \u8bb0\u5f55list\napp('log').error({'name':'jemes'}) # \u8bb0\u5f55dict\napp('log').warning(\"123444\") # \u8bb0\u5f55string \napp('log').critical(5) # \u8bb0\u5f55number\ntry:\n a = 100 / 0 # error\n raise Exception(\"i am a Exception\") # Exception\nexcept Exception as e:\n app('log').info(e) # \u8bb0\u5f55error or exception\n```\n\n# \u7f51\u7edc\u8bf7\u6c42request\n``` python\n# \u540c\u6b65request get\nrep = app('request').get('https://api.longhash.com/', params={}, header={})\ntext = rep.text\njson = rep.json()\n\n# \u540c\u6b65request post\nrep = app('request').post('https://api.longhash.com', params={}, header={})\ntext = rep.text\njson = rep.json()\n\n# \u5f02\u6b65request get\nasync def test(url, param={}):\n res = await app('request').aiogett(url, param)\n text = res.text\n json = res.json()\napp('async').run([test('https://api.longhash.com/')]) # \u5f02\u6b65\u65b9\u6cd5\u8c03\u7528\n\n# \u5f02\u6b65request post\nasync def test(url, param={}):\n res = await app('request').aiopost(url, param)\n text = res.text\n json = res.json()\napp('async').run([test('https://api.longhash.com/')]) # \u5f02\u6b65\u65b9\u6cd5\u8c03\u7528\n```\n\n\n# \u8bfb\u53d6\u9879\u76ee\u4e2d\u914d\u7f6e\u6587\u4ef6\u4fe1\u606f\n``` python\n# config \u8bfb\u53d6app \u6ce8\u518c\u7684BASE_PATH\u4e0b\u6587\u4ef6\u914d\u7f6e\napp('config')('Config.setting.test_str') # {BASE_PATH}/Config/setting.py test_str\u503c\napp('config')('Config.setting.test_str', 'default') # {BASE_PATH}/Config/setting.py test_str\u503c \u53d6\u4e0d\u5230\u5219\u7528\u9ed8\u8ba4\u503cdefault\napp('config').get('Config.setting.test_str', 'default') # {BASE_PATH}/Config/setting.py test_str\u503c \u5b57\u5178\u65b9\u5f0f\u8bfb\u53d6\n```\n\n\n# redis\n``` python\n# redis\napp('redis').set('name', 123) # \u8bbe\u7f6ekey \napp('redis').get('name') # \u8bfb\u53d6key\napp('redis').select(1).get('name') # \u5207\u6362redis DB: 1\n\n# \u5982\u679c\u60f3\u4f7f\u7528\u5176\u4ed6\u975e .env\u4e2d\u7684\u914d\u7f6e\u7684redis\uff0c \u5efa\u8bae\u4f7f\u7528app.register \u6ce8\u518c\u65b0\u7684redis\u5b9e\u4f8b\nfrom simutil.Redis import Redis\nredis = Redis(app('env').REDIS_HOST, app('env').REDIS_PORT)\napp.register('redis1', redis)\napp('redis1').get('testname')\n```\n\n\n# async\u65b9\u6cd5\n``` python\n# \u5f02\u6b65\u65b9\u6cd5\nimport asyncio\nasync def hello(index): # \u81ea\u5b9a\u4e49\u7684async\u65b9\u6cd5\n print(\"number:{}, Hello world!\".format(index))\n await asyncio.sleep(1)\n print(\"end!\")\napp('async').run([hello(index) for index in range(5)]) # \u6267\u884c\n\n```\n\n# \u963f\u91ccOSS\n``` python\n# oss\nrep = app('request').get('https://api.***.com/index', params={}, header={})\n\n# \u4e0a\u4f20\u8bfb\u53d6\u7684\u5185\u5bb9(\u4ece\u5185\u5b58\u4e2d)\napp('oss').push('oss/api.json', rep.text) # oss/api.json\u4e3a\u4e0a\u4f20\u5230oss\u7684\u6587\u4ef6\u8def\u5f84\u540d\u79f0 \n\n# \u8bbe\u7f6ereferer\napp('oss').referer([\"http://api.longhash.com\"]).push('test/api.json', rep.text, {'Content-Encoding': 'utf-8'})\n\n# \u53d6\u6d88referer \u6216\u8bbe\u7f6e\u4e3a\u7a7a\napp('oss').referer().push('test/api.json', rep.text, {'Content-Encoding': 'utf-8'})\n\n# \u4e0a\u4f20\u672c\u5730\u6587\u4ef6\nfilepath = /Users/jemes/workspace/simutil/Storage/Logs/20200528.log\napp('oss').push_file('test/api.json', filepath, {'Content-Encoding': 'utf-8'})\n\n# rule\u89c4\u5219\u8bbe\u7f6e\napp('oss').rule(allowed_origins=['*'], allowed_methods=['GET'], allowed_headers=['*'], max_age_seconds=100)\\\n .push_file('test/api.json', '/Users/jemes/workspace/simutil/Storage/Logs/20200528.log')\n```\n\n# Path\u8def\u5f84\n``` python\nrep = app('path') # \u6307\u5411BASE_PATH\u7684Pathlib\u5bf9\u8c61\nbase_path = app('path').resolve() # = app('BASE_PATH')\nconfig_path = rep.joinpath('Config') # {BASE_PATH}/Config\nlogs_path = rep.joinpath('Storage/Logs') # {BASE_PATH}/Storage/Logs\n# \u5176\u4ed6\u64cd\u4f5c\u548cPathlib\u4e00\u81f4 \n```\n\n# rabbitMQ\n``` python\nrab = app('rabbitmq') # \u6307\u5411BASE_PATH\u7684Pathlib\u5bf9\u8c61\nconn = rab.connection() # rabbitmq connection\nchannel = rab.channel() # rabbitmq channel \n```\n\n# App\u5bb9\u5668\n``` python\n# \u4e3a\u4e86\u5b9e\u73b0\u4ee3\u7801\u7ed3\u5076\u548c\u590d\u7528, \u5ef6\u65f6\u52a0\u8f7d\n# \u8bf4\u660e: app('keyname') \u62ff\u51fa\u6765\u7684\u90fd\u662f\u5355\u4f8b, App\u672c\u8eab\u4e5f\u662f\u5355\u4f8b\u6a21\u5f0f\n\n# \u6ce8\u518cclass\nclass DemoA:\n def hello(self):\n return 'DemoA say hello'\ndemo1 = app.register('demo1', DemoA) # \u7c7b\u540d\u6ce8\u518c\ndemo2 = app.register('demo2', '__main__.DemoA') # \u7c7b\u8def\u5f84\u6ce8\u518c(\u6211\u5728main\u51fd\u6570\u4e2d\u6267\u884c\u7684\uff0c\u6240\u4ee5\u8def\u5f84\u4e3a__main__.DemoA)\ndemo3 = app.register('demo', DemoA()) # \u5b9e\u4f8b\u6ce8\u518c\nres = app('demo1').hello() # print: DemoA say hello\nres = app('demo2').hello() # print: DemoA say hello\nres = app('demo3').hello() # print: DemoA say hello\n\n\n# \u6ce8\u518cfunction\ndef add(a, b):\n return a + b\napp.register('add', add) # \u65b9\u6cd5\u6ce8\u518c\nres = app('add')(4, 5) # print: 9\n\n# \u6ce8\u518c\u6570\u636e\napp.register('listdata', [1, 3, 22, 21, 39]) \napp.register('dictdata', {'name': 'jemes'})\napp.register('tupledata', ('name', 'jemes'))\napp.register('base_path', str(os.path.dirname(__file__)))\nres = app('listdata') # print: [1, 3, 22, 21, 39]\nres = app('dictdata') # print: {'name': 'jemes'}\nres = app('tupledata') # print: ('name', 'jemes')\nres = app('base_path') # print: /Users/jemes/workspace/simutil\n```\n\n",
"bugtrack_url": null,
"license": null,
"summary": "A simple python libs",
"version": "1.1.6",
"project_urls": null,
"split_keywords": [
"util",
" libs"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "53e31a9097092a7b958a42b3adf4fc36c971c2a54ece8fa86fc1a965a2f01f17",
"md5": "65863fbaec7ec74a6ccf73778cc77dd0",
"sha256": "34620dee6c734f7a778c10618bc0794aec6d457c0240b028be2d0f9aaf01191c"
},
"downloads": -1,
"filename": "jeutil-1.1.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "65863fbaec7ec74a6ccf73778cc77dd0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 12839,
"upload_time": "2024-04-23T05:07:29",
"upload_time_iso_8601": "2024-04-23T05:07:29.682822Z",
"url": "https://files.pythonhosted.org/packages/53/e3/1a9097092a7b958a42b3adf4fc36c971c2a54ece8fa86fc1a965a2f01f17/jeutil-1.1.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "15031268ec2458edd239a67a115102b55ff25eb9da529436b40288f1ba1b9273",
"md5": "181c89c751bff555d90d1e26b95943de",
"sha256": "ab02855da0d455f55c1d44c4864ba03d7a939465b3e90d556860a15abebee828"
},
"downloads": -1,
"filename": "jeutil-1.1.6.tar.gz",
"has_sig": false,
"md5_digest": "181c89c751bff555d90d1e26b95943de",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 11377,
"upload_time": "2024-04-23T05:07:31",
"upload_time_iso_8601": "2024-04-23T05:07:31.591482Z",
"url": "https://files.pythonhosted.org/packages/15/03/1268ec2458edd239a67a115102b55ff25eb9da529436b40288f1ba1b9273/jeutil-1.1.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-04-23 05:07:31",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "jeutil"
}