Python SDK实现私服上传下载的示例

目录
  • 编写Python SDK代码
  • 打包并上传私服
  • 创建虚拟环境,并下载私服包进行验证

编写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到私服的上传与下载。

到此这篇关于Python SDK实现私服上传下载的示例的文章就介绍到这了,更多相关Python SDK私服上传下载内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何使用七牛Python SDK写一个同步脚本及使用教程

    七牛云存储的 Python 语言版本 SDK(本文以下称 Python-SDK)是对七牛云存储API协议的一层封装,以提供一套对于 Python 开发者而言简单易用的开发工具.Python 开发者在对接 Python-SDK 时无需理解七牛云存储 API 协议的细节,原则上也不需要对 HTTP 协议和原理做非常深入的了解,但如果拥有基础的 HTTP 知识,对于出错场景的处理可以更加高效. 最近刚搭了个markdown静态博客,想把图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了

  • python项目对接钉钉SDK的实现

    钉钉SDK 对接sdk还是遇到不少问题的 钉钉python版SDK文档地址:https://dingtalk-sdk.readthedocs.io/zh_CN/latest/ 钉钉官方服务端文档:https://open-doc.dingtalk.com/microapp/serverapi2 为了避免调试出现不必要的参数错误,前期钉钉配置要做好,血和泪的教训

  • Idea安装python显示无SDK问题解决方案

    开发工具:IDEA 第一步: 第二步: 第三步: 第四步: Install JetBrains plugin...按钮,安装官网插件 Browse Repositories按钮,通过远程服务器来查询我们要安装的插件 Install plugin from disk按钮,意思是从硬盘安装插件 在这里我没有搭理这三个按钮,直接点击右边下载按钮.接下来等IDEA下载完成会提示重启 1:重启后可能存在问题,应该是有几个插件没有在下plugin勾选,这个问题不大,报错信息一看就明白,过来勾选上就行 2:重

  • Python使用微信SDK实现的微信支付功能示例

    本文实例讲述了Python使用微信SDK实现的微信支付功能.分享给大家供大家参考,具体如下: 最近一段时间一直在搞微信平台开发,v3.37版本微信支付接口变化贼大,所以就看着php的demo移植为Python版,为了保持一致,所以接口方法基本都没有变,这样的好处就是不用写demo了,看着微信官方的demo照葫芦画瓢就可以了. 代码放到github下载地址:https://github.com/Skycrab/wzhifuSDK 还可以点击此处本站下载. 我主要测试了JsApi调用方式,其它的调用

  • 利用django+wechat-python-sdk 创建微信服务器接入的方法

    1.版本说明 :python 2.7.10, Django (1.6.11.6),centos7 2.步骤说明: A.django 建立项目 django-admin.py startproject projtest 之后启动服务器,看看是否正确: cd projtest 配置 projtest子目录下面的setting.py文件,允许外部机器访问 [root@VM_4_128_centos projtest]# vim projtest/settings.py 把其中ALLOWED_HOSTS

  • 七牛云的python sdk 批量删除资源的操作方法

    今天做项目的时候用到七牛云,关于对资源的操作是在后端做的,用的SDK,但是,在网上没找到详细的解析,官方文档也没有太详细的解说,所以无奈只好看下源码 这里做一下简单的记录 from qiniu import build_batch_delete, Auth, BucketManager #需要填写你的 Access Key 和 Secret Key,这个在你的个人中心里有 access_key = 'Access_Key' secret_key = 'Secret_Key' #构建鉴权对象 q

  • Python SDK实现私服上传下载的示例

    目录 编写Python SDK代码 打包并上传私服 创建虚拟环境,并下载私服包进行验证 编写Python SDK代码 工程目录结构 ├──── easyhttp // SDK目录 │ ├── __init__.py │ ├── https.py // http工具类 ├── tests // 单元测试目录 │ ├── __init__.py │ ├── test_https.py // http单元测试 ├── README.md ├── requirements.txt //依赖包 └── s

  • Go Gin实现文件上传下载的示例代码

    Go Gin 实现文件的上传下载流读取 文件上传 router router.POST("/resources/common/upload", service.UploadResource) service type: POST data:{ "saveDir":"保存的路径", "fileName":"文件名称不带后缀" } // 上传文件 func UploadResource(c *gin.Conte

  • Python基于React-Dropzone实现上传组件的示例代码

    目录 实例演示 1. axios上传普通文件: 2. 大文件导入: 结语 这次我要讲述的是在React-Flask框架上开发上传组件的技巧.我目前主要以React开发前端,在这个过程中认识到了许多有趣的前端UI框架--React-Bootstrap.Ant Design.Material UI.Bulma等.而比较流行的上传组件也不少,而目前用户比较多的是jQuery-File-Upload和Dropzone,而成长速度快的新晋有Uppy和filepond.比较惋惜的是Fine-Uploader

  • Spring Cloud Feign实现文件上传下载的示例代码

    目录 独立使用Feign 上传文件 下载文件 使用Spring Cloud Feign 上传文件 下载文件 总结 Feign框架对于文件上传消息体格式并没有做原生支持,需要集成模块feign-form来实现. 独立使用Feign 添加模块依赖: <!-- Feign框架核心 --> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</arti

  • JavaWeb文件上传下载功能示例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 1. 上传简单示例 Jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"&g

  • Koa2 之文件上传下载的示例代码

    前言 上传下载在 web 应用中还是比较常见的,无论是图片还是其他文件等.在 Koa 中,有很多中间件可以帮助我们快速的实现功能. 文件上传 在前端中上传文件,我们都是通过表单来上传,而上传的文件,在服务器端并不能像普通参数一样通过 ctx.request.body 获取.我们可以用 koa-body 中间件来处理文件上传,它可以将请求体拼到 ctx.request 中. // app.js const koa = require('koa'); const app = new koa(); c

  • Python flask使用ajax上传文件的示例代码

    目录 前言 JS Form的enctype属性 Input MIME类型(更多直接百度,类型超乎你的想想) 上传单个文件 html代码部分 javascript代码部分 flask 视图函数部分 上传多个文件 html js 出问题解决方案 前言 JS 为什么要用ajax来提交在使用from提交时,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名. 为安全起见,即file-upload 元素不允许 HTML 作者或 JavaScript 程序员指定一个默认的文件名.HTML value

  • 基于python实现FTP文件上传与下载操作(ftp&sftp协议)

    前言 FTP(File Transfer Protocol)是文件传输协议的简称.用于Internet上的控制文件的双向传输.同时,它也是一个应用程序(Application).用户可以通过它把自己的PC机与世界各地所有运行FTP协议的服务器相连,访问服务器上的大量程序和信息.如果用户需要将文件从自己的计算机上发送到另一台计算机上,可使用FTP上传(upload)或(put)操作,而更多种的情况是用户使用FTP下载(download)或获取(get)操作从FTP服务器上下载文件 在传输文件时我们

  • python实现支持目录FTP上传下载文件的方法

    本文实例讲述了python实现支持目录FTP上传下载文件的方法.分享给大家供大家参考.具体如下: 该程序支持ftp上传下载文件和目录.适用于windows和linux平台. #!/usr/bin/env python # -*- coding: utf-8 -*- import ftplib import os import sys class FTPSync(object): conn = ftplib.FTP() def __init__(self,host,port=21): self.c

  • 用Python实现一个简单的能够上传下载的HTTP服务器

    #!/usr/bin/env python #coding=utf-8 # modifyDate: 20120808 ~ 20120810 # 原作者为:bones7456, http://li2z.cn/ # 修改者为:decli@qq.com # v1.2,changeLog: # +: 文件日期/时间/颜色显示.多线程支持.主页跳转 # -: 解决不同浏览器下上传文件名乱码问题:仅IE,其它浏览器暂时没处理. # -: 一些路径显示的bug,主要是 cgi.escape() 转义问题 #

随机推荐