Metadata-Version: 2.1
Name: sparrowcloud
Version: 1.0.3
Summary: UNKNOWN
Home-page: UNKNOWN
Author: sparrow
Author-email: 
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django :: 1.9
Classifier: Framework :: Django :: 2.2
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Internet :: WWW/HTTP
Requires-Python: >=3.7
Description-Content-Type: text/markdown
Requires-Dist: requests (>=2.12.1)
Requires-Dist: python-consul (>=1.1.0)
Requires-Dist: coreapi (>=2.3.3)
Requires-Dist: PyJWT (>=1.7.1)
Requires-Dist: sparrow-task-sender (>=0.0.3)
Requires-Dist: sparrow-rabbitmq-consumer (>=0.0.8)

## sparrow cloud ##

## installation ##

    pip install sparrowcloud

## 测试运行 ##

    运行所有测试:
        py.test
    运行单个测试:
        py.test tests/test_rest_client.py

## service_registry ##

> 描述： consul服务发现

```
# 依赖settings配置：

# consul_service 依赖配置
CONSUL_CLIENT_ADDR = {
    "HOST": "127.0.0.1",  # consul host, 必填
    "PORT": 8500  # consul port, 必填
}

使用方法：
from sparrow_cloud.registry.service_registry import consul_service
# host 为默认参数，非必填， 如果传了此项参数， 会直接返回参数， 不过不传，则从consul中找服务地址
service_conf = {
        "SERVICE_REGISTER_NAME": "",  # k8s上的服务名称
        "HOST": "127.0.0.1:8001",  # 服务的真实host， 应用场景，consul服务故障， 或dev/test环境
    }
service_addr = consul_service(service_conf)
# 输出"127.0.0.1:8001"
```

## cache_manager

> 描述 ： cache_manager 会把model的get方法使用缓存

```
依赖settings配置：

import redis
CACHE_REDIS_POOL = redis.ConnectionPool(
    host=REDIS_HOST,
    port=REDIS_PORT,
    password=REDIS_PASSWORD,
    decode_responses=True)


使用方法：
# 在models文件中导入
from sparrow_cloud.sparrow_cloud.cache.cache_manager import CacheManager

# 在需要使用缓存的model中加入
objects = CacheManager()


demo中可查看示例
model 示例路径， sparrow_demo/models.py

```


## JWTMiddleware
> 描述：Token 解析

## 配置 JWTMiddleware 中间件需要的参数

```
注册中间件
MIDDLEWARE = (
    'sparrow_cloud.middleware.jwt_middleware.JWTMiddleware', # 放最上层

将以下参数添加到settings.py
JWT_MIDDLEWARE = {
    "JWT_SECRET": "", # JWT_SECRET, 必填
}
```

## UserIDAuthentication
> 描述： user_id 解析

## 配置 UserIDAuthentication 认证需要的参数(仅兼容django2.2以上版本)

```
SPARROW_AUTHENTICATION = {
    "USER_CLASS_PATH": "sparrow_cloud.auth.user.User",
}

# 参数说明： USER_CLASS_PATH： 路径中的User为中间件的User模版， 可以根据自己的需求重新创建User， 并将自己的User路径按照模版格式放到：USER_CLASS_PATH下

# 注册中间件

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'sparrow_cloud.auth.user_id_authentication.UserIDAuthentication',
    )
}
```

## permission_command  API权限服务
> 描述： 主动注册API到权限服务

## 配置 permission_command 需要的参数

```
# 本服务配置
SERVICE_CONF = {
    "NAME": "",  # 本服务的名称
}


# API 权限服务配置
PERMISSION_SERVICE_CONF = {
    "SERVICE_ADDR_CONF": {
        "SERVICE_REGISTER_NAME": "",  #  权限服务，服务发现的名称
        "HOST": "",  # 默认为""
    },
    "REGISTER_API": ""  # 权限服务的PATH
}

```
## METHOD_MIDDLEWARE
> 兼容阿里不支持 put/delete 请求

## 配置METHOD_MIDDLEWARE需要的参数

```
  # 将以下参数添加到settings.py #
  METHOD_MIDDLEWARE = {
      "METHOD_MAP": ('PUT', 'DELETE',),
  }
  # 注册 METHOD_MIDDLEWARE
  MIDDLEWARE_CLASSES = (
      'sparrow_django_common.middleware.methodconvert.MethodConvertMiddleware',      #兼容阿里请求方式中间件
  )
```

## 权限中间件配置
> 权限中间件

## 配置PERMISSION_MIDDLEWARE需要的参数
```
# 将以下参数添加到settings.py
PERMISSION_MIDDLEWARE = {
    # 权限验证服务的配置
    "PERMISSION_SERVICE":{
        "NAME": "", #服务名称（k8s上的服务名）, 必填
        "HOST": "", #IP, 开发环境必填（开发环境使用转发到本地的host）
        "PORT": 8001, # 服务端口, dev环境需要注意， 配置写的端口需要和转发到本地的端口保持一致, 必填
        "PATH": "", # url, 必填
    },
    "FILTER_PATH" : [''], # 使用权限验证中间件， 如有不需要验证的URL， 可添加到列表中
    "SKIP_PERMISSION": False, # 是否启用权限中间件， SKIP_PERMISSION:True, 则跳过中间件， 如果不配置SKIP_PERMISSION，或者SKIP_PERMISSION:False，则不跳过中间件
}

注册中间件
MIDDLEWARE = [
    'sparrow_cloud.middleware.api_permission.PermissionMiddleware',
]

PS: 如果未配置 CONSUL_CLIENT_ADDR, 需要配置该参数, 权限中间件依赖 consul
```

## restcliet 使用说明 ##

>

```
  from sparrow_cloud.restclient import rest_client
  rest_client.post(service_addr_conf, api_path, json=api_list)
```

    参数说明:
    service_addr_conf:
      {
        "SERVICE_REGISTER_NAME": "服务注册名字(consul)",
        "HOST": "ip 地址(用来覆盖掉 consul 服务)"
      }
    api_path: 请求的服务路径,例如 /api/xx/yy/
    ps:
      剩余参数与 requests.get/post 等方法保持一致


