Python SDK实现 * 上传下载的示例
作者:王嘉尔学Python 发布时间:2021-11-22 08:14:42
编写Python SDK代码
工程目录结构
├──── easyhttp // SDK目录
│ ├── __init__.py
│ ├── https.py // http工具类
├── tests // 单元测试目录
│ ├── __init__.py
│ ├── test_https.py // http单元测试
├── README.md
├── requirements.txt //依赖包
└── setup.py //setuptools安装
requirements.txt
requests==2.24.0
https.py
# -*- coding:utf8 -*-
"""
@Project: easyhttp
@File: https.py
@Version: v1.0.0
@Time: 2020/6/24 17:22
@Author: guodong.li
@Description: http
"""
from typing import Optional
import requests
import logging
from requests import Response
logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',
level=logging.DEBUG)
class HttpUtils:
headers = {
"Content-Type": "application/json"
}
# http://10.193.199.44:5610/api/v1/manual/sleep?time=0
@staticmethod
def base_get(base_path: str='', detail_path: str='', params: Optional[dict]=None)-> Response:
"""
GET请求
:param base_path: 域名
:param detail_path: 接口详情
:param params: 参数
:return:
"""
logging.info("请求方式:GET, 请求url: %s , 请求参数: %s " % (base_path + detail_path, params))
response = requests.get(base_path + detail_path, params=params)
logging.info("请求方式:GET, 请求url: %s , 请求参数: %s , 结果:%s" % (base_path + detail_path, params, response))
return response
@classmethod
def base_post(cls, base_path: str='', detail_path: str='', params: Optional[dict]=None)-> Response:
"""
POST请求
:param cls:
:param base_path: 域名
:param detail_path: 接口详情
:param params: 参数
:return:
"""
logging.info("请求方式:POST, 请求url: %s ,请求参数: %s " % (base_path + detail_path, params))
response = requests.post(base_path + detail_path, data=params, headers=cls.headers)
logging.info("请求方式:POST, 请求url: %s , 请求参数: %s , 结果:%s" % (base_path + detail_path, params, response))
return response
test_https.py
import requests
import logging
from easyhttp.https import HttpUtils
logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',
level=logging.DEBUG)
r = requests.get("http://xxx.xxx.xxx.xxx:5610/api/v1/manual/sleep?time=0")
logging.info(r) # <Response [200]>
logging.info(type(r)) # <class 'requests.models.Response'>
logging.info(r.status_code) # 200
代码写完了之后,打包并上传到 * 。
打包并上传 *
安装twine包
pip install twine
编写构建工具setup.py进行打包
# -*- coding:utf8 -*-
"""
@author: guodong.li
@email: liguodongiot@163.com
@time: 2019/7/31 14:04
@file: setup.py
@desc:
"""
# 引入构建包信息的模块
from setuptools import setup, find_packages
try: # for pip >= 10
from pip._internal.req import parse_requirements
from pip._internal.network.session import PipSession
except ImportError: # for pip <= 9.0.3
from pip.req import parse_requirements
from pip.download import PipSession
# parse_requirements() returns generator of pip.req.InstallRequirement objects
install_reqs = parse_requirements('requirements.txt', session=PipSession())
# reqs is a list of requirement
# e.g. ['django==1.5.1', 'mezzanine==1.4.6']
reqs = [str(ir.req) for ir in install_reqs]
# 定义发布的包文件的信息
setup(
name="easyhttp", # 发布的包的名称
version="1.0.0", # 发布包的版本序号
description="easy use http", # 发布包的描述信息
author="guodong.li", # 发布包的作者信息
author_email="liguodongiot@163.com", # 作者的联系邮箱
packages=["easyhttp"],
# include_package_data=True, # include everything in source control
# ...but exclude README.txt from all packages
exclude_package_data={'': ['README.md'],
'tests': ['*.py']},
install_requires=reqs,
)
setup.py各参数简单介绍如下:
–name 包名称
–version (-V) 包版本
–author 程序的作者
–author_email 程序的作者的邮箱地址
–maintainer 维护者
–maintainer_email 维护者的邮箱地址
–url 程序的官网地址
–license 程序的授权信息
–description 程序的简单描述
–long_description 程序的详细描述
–platforms 程序适用的软件平台列表
–classifiers 程序的所属分类列表
–keywords 程序的关键字列表
–packages 需要处理的包目录(包含__init__.py的文件夹)
–py_modules 需要打包的python文件列表
–download_url 程序的下载地址
–data_files 打包时需要打包的数据文件,如图片,配置文件等
–scripts 安装时需要执行的脚步列表
–package_dir 告诉setuptools哪些目录下的文件被映射到哪个源码包。一个例子:package_dir = {'': ‘lib'},表示“root package”中的模块都在lib 目录中。
–requires 定义依赖哪些模块
–provides 定义可以为哪些模块提供依赖
–find_packages() 对于简单工程来说,手动增加packages参数很容易,刚刚我们用到了这个函数,它默认在和setup.py同一目录下搜索各个含有 init.py的包。其实我们可以将包统一放在一个src目录中,另外,这个包内可能还有aaa.txt文件和data数据文件夹。还可以排除一些特定的包find_packages(exclude=[".tests", ".tests.", "tests.", “tests”])
–install_requires = [“requests”] 需要安装的依赖包
–entry_points 动态发现服务和插件
新增.pypirc文件
touch ~/.pypirc
在.pypirc文件添加如下配置
[distutils]
index-servers =
pypi
nexus
[pypi]
repository:https://pypi.python.org/pypi
username:your_username
password:your_password
[nexus]
repository=http://192.168.12.196:8081/repository/mypypi-hosted/
username=your_username
password=your_password
打包并上传至 * 仓库nexus
python setup.py sdist bdist_wheel upload -r nexus
或者打包命令和上传命令分开操作
1、打包命令
python setup.py sdist bdist_wheel
2、上传命令
twine upload -r nexus dist/* # -r 可以选择仓库地址
创建虚拟环境,并下载 * 包进行验证
创建虚拟环境
virtualenv -p /usr/bin/python venv
激活虚拟环境
source venv/bin/activate
下载包
pip install easyhttp==1.0.0 -i http://your_username:your_password@192.168.12.196:8081/repository/mypypi-hosted/simple/ --trusted-host 192.168.12.196
进入python shell环境
python
代码验证
>>> from pai.utils.https import HttpUtils
>>> import logging
>>> logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',level=logging.INFO)
>>> r = requests.get("http://10.xxx.xxx.xxx:5610/api/v1/manual/sleep?time=0")
2020-07-02 11:31:50,903 - /root/python/20200702/venv/lib/python3.7/site-packages/urllib3/connectionpool.py[line:230] - DEBUG: Starting new HTTP connection (1): 10.xxx.xxx.xxx:5610
2020-07-02 11:31:51,065 - /root/python/20200702/venv/lib/python3.7/site-packages/urllib3/connectionpool.py[line:442] - DEBUG: http://10.xxx.xxx.xxx:5610 "GET /api/v1/manual/sleep?time=0 HTTP/1.1" 200 None
>>> logging.info(r) # <Response [200]>
2020-07-02 11:32:15,420 - <stdin>[line:1] - INFO: <Response [200]>
>>>
>>> logging.info(type(r)) # <class 'requests.models.Response'>
2020-07-02 11:32:27,371 - <stdin>[line:1] - INFO: <class 'requests.models.Response'>
>>> logging.info(r.status_code) # 200
2020-07-02 11:32:39,069 - <stdin>[line:1] - INFO: 200
至此,一个简单的Python SDK就已经制作完成,并且实现了SDK到 * 的上传与下载。
来源:https://blog.csdn.net/m0_64519234/article/details/121620800


猜你喜欢
- ChatGPT模型是由OpenAI训练的大型语言模型,能够生成类人文本。通过向它提供提示,它可以生成继续对话或扩展给定提示的响应。在此中,您
- 如何做一个检索结果带链接的检索?具体代码和说明如下:<% data=request.form("search_da
- 安装淘宝镜像:要安装Angular4。于是我对着一股浓郁口音的视频开启了Angular4安装之旅。那口音说了,ang哥乐4不是那么好装的,由
- 首先,在数据库中创建一个表,用于存放图片:CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCRE
- python 字符串替换 是python 操作字符串的时候经常会碰到的问题,这里简单介绍下字符串替换方法。python 字符串替换可以用2种
- 关于二分法的定义我就不说了,CSDN很多大牛和前辈都已经阐述的很清楚了,直接上代码。首先,先创建一个名称为 binary_search 的函
- 本文实例为大家分享了Python实现感知器模型、两层神经网络,供大家参考,具体内容如下python 3.4 因为使用了 numpy这里我们首
- 这篇文章主要是用PHP函数实现数字与文字分页,具体实现步骤就不罗嗦了,直接上代码/** * * @param $_sql * @param
- 1.什么是Store?上一篇文章说了,Vuex就是提供一个仓库,Store仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般
- 最近,在项目开发过程中,碰到了数据库死锁问题,在解决问题的过程中,笔者对MySQL InnoDB引擎锁机制的理解逐步加深。案例如下:在使用S
- 本文实例讲述了Python实现的网页截图功能。分享给大家供大家参考,具体如下:方法一、使用PyQt4的QtWebKit组件#!/usr/bi
- 一、mock.js的使用mock.js的使用步骤① 下载依赖 npm install mock -d(开发环境使用)② 引入到main.js
- 本文实例讲述了js判断手机和pc端选择不同执行事件的方法。分享给大家供大家参考。具体如下:判断是否为手机:function isMobile
- vue 百度地图 + 定位 前提需要自己有百度的密钥,如没有可以去百度地图申请一、在主目录下的index.html引入js,例如:
- 题目:利用协程来遍历目录下,所有子文件及子文件夹下的文件是否含有某个字段值,并打印满足条件的文件的绝对路径。#!/user/bin/env
- 摘要:本篇博客将详细介绍如何使用YOLOv5进行车牌识别模型的训练与评估。我们将搭建训练环境、准备数据、配置模型参数、启动训练过程,以及使用
- 用uniapp开发APP时,为了开发方便,经常是H5开发好,然后再弄APP的兼容性问题。所以可能会涉及到跨域,此时也可以让后端同学帮忙,但是
- 本文实例讲述了php实现的美国50个州选择列表。分享给大家供大家参考。具体如下:这里展示的是php生成的美国50个州的选择列表,自动选择当前
- 在使用前必须弄明白JWT的相关知识,可以看我的另一篇博文:https://www.jb51.net/article/166843.htm什么
- 在python中我们可以使用speech模块让计算机进行语音输出,我们需要使用如下代码安装该模块。对于如何在终端中安装python相应模块,