jeutil


Namejeutil JSON
Version 1.1.6 PyPI version JSON
download
home_pageNone
SummaryA simple python libs
upload_time2024-04-23 05:07:31
maintainerNone
docs_urlNone
authorjeanku
requires_python>=3
licenseNone
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"
}
        
Elapsed time: 0.23762s