mockee


Namemockee JSON
Version 0.4.0 PyPI version JSON
download
home_pagehttps://gitee.com/hyjiacan/mockee
SummaryMock data(JSON) generator for Python3
upload_time2024-04-11 07:25:19
maintainerhyjiacan
docs_urlNone
authorhyjiacan
requires_python>=3.5
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # mockee

Python3 的模拟数据(JSON)生成工具。

## 安装

```shell script
pip install mockee
```

## 用法

```python
from mockee import Mockee
# 加载指定的定义文件
mock = Mockee('/path/to/deffile.json')
# 生成数据
data = mock.make('GET:/api/test', {
    # 当时间/日期数据项表达式为 auto 时的自动计算使用,此情况下必传的
    'date_range': ['2020-01-01', '2020-12-31'],
    # 指定 date_range 中传入的日期格式
    # 不指定时为 %Y-%m-%d %H:%M:%S
    # 不会影响生成的日期数据格式
    'date_fmt': '%Y-%m-%d',
    # 整数自增长的基数(从此数值开始自增),不指定时为 `0`
    'i_base': 0
})
```

- `/path/to/deffile.json` 是模拟数据定义文件
- `GET:path` 叫做数据标识,一般由请求的 method+url 组成
- `data` 生成的数据。当未找到对应的声明时,返回 `None`

## 数据定义语法

在数据定义中,包含以下4类文件:

1. 入口定义文件 数据接口入口,在创建 `Mockee` 实例时应当传入 见 [defs.json](./test/defs.json)
2. 扩展定义文件 用于数据定义的共享 (要注意,不要循环引用) 见 [datetime.json](./test/datetime.json)
3. JSON数据枚举文件 用于提供JSON数据格式的枚举,其内容应该是一个数组 见 [json.json](./test/json.json)
4. 一般数据枚举文件 用于提供除 JSON 格式外的其它数据枚举,每行一项 见 [choices.txt](./test/choices.txt)

```json
{
  "GET:/api/test": {
    "def": {},
    "len": 10
  }
}
```

- `GET:/api/test` 数据标识
- `def` 描述返回的字段集合
- `len` 描述返回的数组长度,值为 `0` 时返回对象

> 包含 `GET:/api/test` 的叫做 **入口定义文件**

### 表达式

格式:`#>(i|f|b|s|j|d|t|dt|ref) exp`

当一个值使用 `#>` 开头,表示这个值应该是一个生成的值(如 `"value": "#>i 1-5"`);否则值为声明的值(如 `"type": 2`)。

`#>i:1-5` 叫做 **值表达式**,用于描述应该如何来生成一个随机的值。

参考 
- [defs.json](./test/defs.json)
- [datetime.json](./test/datetime.json)

#### 数据类型

`#>` 后面,紧跟的是数据类型,可用的数据类型描述如下:

- `i` 整数值
- `f` 小数值
- `b` 布尔值
- `s` 字符串
- `j` JSON
- `d` 日期值
- `t` 时间值
- `dt` 日期时间值
- `ref` 引用外部定义文件(实现相同定义的复用)

如果其值为数组,那么在 key 名称后紧跟 `[3]` 写法,如 `iValue[3]`。

`[3]` 表示此值为数组,且其中包含 `3` 项。 

> 当且仅当值表达式有效

类型后面,应该紧跟一个空白字符。

#### 值描述表达式

再后面,是值描述,其分为两种数据模式,范围和枚举:

范围(随机 **生成** 值):

- 当类型为数值时,使用 `1-5`(包含 `1` 但不包含 `5`) 这样的方式指定范围 `#>i 1-5` `#>f 0.2-0.8`
- 当为日期类型时,使用 `20200101-20201231` 这样的方式指定范围 `#>d 20200101-20201231`
- 当为时间类型时,使用 `000000-235959` 这样的方式指定范围 `#>t 000000-235959`
- 当为日期时间类型时,使用`20200101000000-20201231235959` 这样的方式指定范围 `#>dt 20200101000000-20201231235959`
- 当为字符串时,使用 `l`(小写字母), `L`(大写字母), `n`(数字), `s`(符号) 组合起来描述 `#>s lLns`(包含字母,数值和符号) `#>s lLn`(包含字母,数值)

#### 整数类型

对于类型 `i`,可以这样写 `#>i auto`,这表示使用自增长的整数。
此时需要在 `options` 中传入 `i_base` 作为自增长的基数(从此数值开始自增),不指定时为 `0`

> 原则上只允许出现一次 `#>i auto`,当出现多次时,其值相同。

#### 时间/日期类型

对于类型 `d/t/dt` ,有些特殊的写法 `#>dt auto->%Y-%m-%d`:

- 可以使用请求的日期区间自动计算日期值,写法为:`#>dt auto`。
- 在值表达式后部分,可以使用 `->%Y-%m-%d` 的方式指定日期格式化串。其写法遵守 Python 日期格式化 [strftime][strftime] 写法。

#### 枚举值

枚举(随机从给定的值中 **选择** 值),所有类型使用相同的写法:

`#>i (1,2, 4, 6, 8)`

也可以从指定的文件加载枚举值(所有类型都支持):

`#>s (#choices.txt#)`

`enum-filename` 为枚举文件名,其中每行存放一个数据项,其中不允许出现空行。

> 无论是范围还是枚举,值不允许出现空白字符

#### JSON类型

可以使用 `#>j json.json` 这样的写法来指定从一个 JSON 文件中读取所有数据。

- `j` 表示此字段的值是一个JSON结构
- `json.json` 是要读取的文件名。**注意:json文件的扩展名必须为 `.json`**
- `json.json` 文件的根可以是对象或者数组

也可以使用 `#>j (#json.json#)` 这样的写法,指定从一个 JSON 文件(数组)中随机选择数据

- `json.json` 文件的根必须是数组

> 此类型仅支持从文件读取。 

#### 引用类型

使用写法 `#>ref datetime.json` 以引入一个外部的数据结构定义。

外部的数据结构定义(datetime.json)与**入口定义文件**的不同之处在于,其只包含定义部分(值为一个对象),不包含数据长度和入口名称等信息。 

参考 
- [defs.json](./test/defs.json)
- [datetime.json](./test/datetime.json)

> 其文件名应该是一个相对于 **入口定义文件** 的路径。

**入口定义文件** 的 `def` 项的值,也可以使用此处的引用写法。

#### 定义扩展

扩展是在同级别添加数据项。

单个扩展写法:

```json
{
  "#ext#": "ext.json"
}
```

多个扩展写法:

```json
{
  "#ext#": ["ext1.json", "ext2.json"]
}
```

如果扩展中包含的项已经存在于当前定义,那么会被忽略(即当前文件的定义优先于扩展文件内的定义)。 

参考 
- [ext.json](./test/ext.json)

> **引用类型** 和 **定义扩展** 的文件结构是一致的,其差异仅在引入的方式。

## TODO

- [ ] 支持设置数据不能重复 `?` 结尾表示数据不能重复

[strftime]: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes



            

Raw data

            {
    "_id": null,
    "home_page": "https://gitee.com/hyjiacan/mockee",
    "name": "mockee",
    "maintainer": "hyjiacan",
    "docs_url": null,
    "requires_python": ">=3.5",
    "maintainer_email": "hyjiacan@163.com",
    "keywords": null,
    "author": "hyjiacan",
    "author_email": "hyjiacan@163.com",
    "download_url": "https://files.pythonhosted.org/packages/88/47/5eabbabd18e09ace3f5902147a4d6cac35dd3f307652206ff87e5d9ed758/mockee-0.4.0.tar.gz",
    "platform": null,
    "description": "# mockee\n\nPython3 \u7684\u6a21\u62df\u6570\u636e(JSON)\u751f\u6210\u5de5\u5177\u3002\n\n## \u5b89\u88c5\n\n```shell script\npip install mockee\n```\n\n## \u7528\u6cd5\n\n```python\nfrom mockee import Mockee\n# \u52a0\u8f7d\u6307\u5b9a\u7684\u5b9a\u4e49\u6587\u4ef6\nmock = Mockee('/path/to/deffile.json')\n# \u751f\u6210\u6570\u636e\ndata = mock.make('GET:/api/test', {\n    # \u5f53\u65f6\u95f4/\u65e5\u671f\u6570\u636e\u9879\u8868\u8fbe\u5f0f\u4e3a auto \u65f6\u7684\u81ea\u52a8\u8ba1\u7b97\u4f7f\u7528\uff0c\u6b64\u60c5\u51b5\u4e0b\u5fc5\u4f20\u7684\n    'date_range': ['2020-01-01', '2020-12-31'],\n    # \u6307\u5b9a date_range \u4e2d\u4f20\u5165\u7684\u65e5\u671f\u683c\u5f0f\n    # \u4e0d\u6307\u5b9a\u65f6\u4e3a %Y-%m-%d %H:%M:%S\n    # \u4e0d\u4f1a\u5f71\u54cd\u751f\u6210\u7684\u65e5\u671f\u6570\u636e\u683c\u5f0f\n    'date_fmt': '%Y-%m-%d',\n    # \u6574\u6570\u81ea\u589e\u957f\u7684\u57fa\u6570\uff08\u4ece\u6b64\u6570\u503c\u5f00\u59cb\u81ea\u589e\uff09\uff0c\u4e0d\u6307\u5b9a\u65f6\u4e3a `0`\n    'i_base': 0\n})\n```\n\n- `/path/to/deffile.json` \u662f\u6a21\u62df\u6570\u636e\u5b9a\u4e49\u6587\u4ef6\n- `GET:path` \u53eb\u505a\u6570\u636e\u6807\u8bc6\uff0c\u4e00\u822c\u7531\u8bf7\u6c42\u7684 method+url \u7ec4\u6210\n- `data` \u751f\u6210\u7684\u6570\u636e\u3002\u5f53\u672a\u627e\u5230\u5bf9\u5e94\u7684\u58f0\u660e\u65f6\uff0c\u8fd4\u56de `None`\n\n## \u6570\u636e\u5b9a\u4e49\u8bed\u6cd5\n\n\u5728\u6570\u636e\u5b9a\u4e49\u4e2d\uff0c\u5305\u542b\u4ee5\u4e0b4\u7c7b\u6587\u4ef6\uff1a\n\n1. \u5165\u53e3\u5b9a\u4e49\u6587\u4ef6 \u6570\u636e\u63a5\u53e3\u5165\u53e3\uff0c\u5728\u521b\u5efa `Mockee` \u5b9e\u4f8b\u65f6\u5e94\u5f53\u4f20\u5165 \u89c1 [defs.json](./test/defs.json)\n2. \u6269\u5c55\u5b9a\u4e49\u6587\u4ef6 \u7528\u4e8e\u6570\u636e\u5b9a\u4e49\u7684\u5171\u4eab \uff08\u8981\u6ce8\u610f\uff0c\u4e0d\u8981\u5faa\u73af\u5f15\u7528\uff09 \u89c1 [datetime.json](./test/datetime.json)\n3. JSON\u6570\u636e\u679a\u4e3e\u6587\u4ef6 \u7528\u4e8e\u63d0\u4f9bJSON\u6570\u636e\u683c\u5f0f\u7684\u679a\u4e3e\uff0c\u5176\u5185\u5bb9\u5e94\u8be5\u662f\u4e00\u4e2a\u6570\u7ec4 \u89c1 [json.json](./test/json.json)\n4. \u4e00\u822c\u6570\u636e\u679a\u4e3e\u6587\u4ef6 \u7528\u4e8e\u63d0\u4f9b\u9664 JSON \u683c\u5f0f\u5916\u7684\u5176\u5b83\u6570\u636e\u679a\u4e3e\uff0c\u6bcf\u884c\u4e00\u9879 \u89c1 [choices.txt](./test/choices.txt)\n\n```json\n{\n  \"GET:/api/test\": {\n    \"def\": {},\n    \"len\": 10\n  }\n}\n```\n\n- `GET:/api/test` \u6570\u636e\u6807\u8bc6\n- `def` \u63cf\u8ff0\u8fd4\u56de\u7684\u5b57\u6bb5\u96c6\u5408\n- `len` \u63cf\u8ff0\u8fd4\u56de\u7684\u6570\u7ec4\u957f\u5ea6\uff0c\u503c\u4e3a `0` \u65f6\u8fd4\u56de\u5bf9\u8c61\n\n> \u5305\u542b `GET:/api/test` \u7684\u53eb\u505a **\u5165\u53e3\u5b9a\u4e49\u6587\u4ef6**\n\n### \u8868\u8fbe\u5f0f\n\n\u683c\u5f0f\uff1a`#>(i|f|b|s|j|d|t|dt|ref) exp`\n\n\u5f53\u4e00\u4e2a\u503c\u4f7f\u7528 `#>` \u5f00\u5934\uff0c\u8868\u793a\u8fd9\u4e2a\u503c\u5e94\u8be5\u662f\u4e00\u4e2a\u751f\u6210\u7684\u503c(\u5982 `\"value\": \"#>i 1-5\"`)\uff1b\u5426\u5219\u503c\u4e3a\u58f0\u660e\u7684\u503c(\u5982 `\"type\": 2`)\u3002\n\n`#>i:1-5` \u53eb\u505a **\u503c\u8868\u8fbe\u5f0f**\uff0c\u7528\u4e8e\u63cf\u8ff0\u5e94\u8be5\u5982\u4f55\u6765\u751f\u6210\u4e00\u4e2a\u968f\u673a\u7684\u503c\u3002\n\n\u53c2\u8003 \n- [defs.json](./test/defs.json)\n- [datetime.json](./test/datetime.json)\n\n#### \u6570\u636e\u7c7b\u578b\n\n`#>` \u540e\u9762\uff0c\u7d27\u8ddf\u7684\u662f\u6570\u636e\u7c7b\u578b\uff0c\u53ef\u7528\u7684\u6570\u636e\u7c7b\u578b\u63cf\u8ff0\u5982\u4e0b\uff1a\n\n- `i` \u6574\u6570\u503c\n- `f` \u5c0f\u6570\u503c\n- `b` \u5e03\u5c14\u503c\n- `s` \u5b57\u7b26\u4e32\n- `j` JSON\n- `d` \u65e5\u671f\u503c\n- `t` \u65f6\u95f4\u503c\n- `dt` \u65e5\u671f\u65f6\u95f4\u503c\n- `ref` \u5f15\u7528\u5916\u90e8\u5b9a\u4e49\u6587\u4ef6(\u5b9e\u73b0\u76f8\u540c\u5b9a\u4e49\u7684\u590d\u7528)\n\n\u5982\u679c\u5176\u503c\u4e3a\u6570\u7ec4\uff0c\u90a3\u4e48\u5728 key \u540d\u79f0\u540e\u7d27\u8ddf `[3]` \u5199\u6cd5\uff0c\u5982 `iValue[3]`\u3002\n\n`[3]` \u8868\u793a\u6b64\u503c\u4e3a\u6570\u7ec4\uff0c\u4e14\u5176\u4e2d\u5305\u542b `3` \u9879\u3002 \n\n> \u5f53\u4e14\u4ec5\u5f53\u503c\u8868\u8fbe\u5f0f\u6709\u6548\n\n\u7c7b\u578b\u540e\u9762\uff0c\u5e94\u8be5\u7d27\u8ddf\u4e00\u4e2a\u7a7a\u767d\u5b57\u7b26\u3002\n\n#### \u503c\u63cf\u8ff0\u8868\u8fbe\u5f0f\n\n\u518d\u540e\u9762\uff0c\u662f\u503c\u63cf\u8ff0\uff0c\u5176\u5206\u4e3a\u4e24\u79cd\u6570\u636e\u6a21\u5f0f\uff0c\u8303\u56f4\u548c\u679a\u4e3e\uff1a\n\n\u8303\u56f4(\u968f\u673a **\u751f\u6210** \u503c)\uff1a\n\n- \u5f53\u7c7b\u578b\u4e3a\u6570\u503c\u65f6\uff0c\u4f7f\u7528 `1-5`(\u5305\u542b `1` \u4f46\u4e0d\u5305\u542b `5`) \u8fd9\u6837\u7684\u65b9\u5f0f\u6307\u5b9a\u8303\u56f4 `#>i 1-5` `#>f 0.2-0.8`\n- \u5f53\u4e3a\u65e5\u671f\u7c7b\u578b\u65f6\uff0c\u4f7f\u7528 `20200101-20201231` \u8fd9\u6837\u7684\u65b9\u5f0f\u6307\u5b9a\u8303\u56f4 `#>d 20200101-20201231`\n- \u5f53\u4e3a\u65f6\u95f4\u7c7b\u578b\u65f6\uff0c\u4f7f\u7528 `000000-235959` \u8fd9\u6837\u7684\u65b9\u5f0f\u6307\u5b9a\u8303\u56f4 `#>t 000000-235959`\n- \u5f53\u4e3a\u65e5\u671f\u65f6\u95f4\u7c7b\u578b\u65f6\uff0c\u4f7f\u7528`20200101000000-20201231235959` \u8fd9\u6837\u7684\u65b9\u5f0f\u6307\u5b9a\u8303\u56f4 `#>dt 20200101000000-20201231235959`\n- \u5f53\u4e3a\u5b57\u7b26\u4e32\u65f6\uff0c\u4f7f\u7528 `l`(\u5c0f\u5199\u5b57\u6bcd), `L`(\u5927\u5199\u5b57\u6bcd), `n`(\u6570\u5b57), `s`(\u7b26\u53f7) \u7ec4\u5408\u8d77\u6765\u63cf\u8ff0 `#>s lLns`(\u5305\u542b\u5b57\u6bcd\uff0c\u6570\u503c\u548c\u7b26\u53f7) `#>s lLn`(\u5305\u542b\u5b57\u6bcd\uff0c\u6570\u503c)\n\n#### \u6574\u6570\u7c7b\u578b\n\n\u5bf9\u4e8e\u7c7b\u578b `i`\uff0c\u53ef\u4ee5\u8fd9\u6837\u5199 `#>i auto`\uff0c\u8fd9\u8868\u793a\u4f7f\u7528\u81ea\u589e\u957f\u7684\u6574\u6570\u3002\n\u6b64\u65f6\u9700\u8981\u5728 `options` \u4e2d\u4f20\u5165 `i_base` \u4f5c\u4e3a\u81ea\u589e\u957f\u7684\u57fa\u6570\uff08\u4ece\u6b64\u6570\u503c\u5f00\u59cb\u81ea\u589e\uff09\uff0c\u4e0d\u6307\u5b9a\u65f6\u4e3a `0`\n\n> \u539f\u5219\u4e0a\u53ea\u5141\u8bb8\u51fa\u73b0\u4e00\u6b21 `#>i auto`\uff0c\u5f53\u51fa\u73b0\u591a\u6b21\u65f6\uff0c\u5176\u503c\u76f8\u540c\u3002\n\n#### \u65f6\u95f4/\u65e5\u671f\u7c7b\u578b\n\n\u5bf9\u4e8e\u7c7b\u578b `d/t/dt` \uff0c\u6709\u4e9b\u7279\u6b8a\u7684\u5199\u6cd5 `#>dt auto->%Y-%m-%d`\uff1a\n\n- \u53ef\u4ee5\u4f7f\u7528\u8bf7\u6c42\u7684\u65e5\u671f\u533a\u95f4\u81ea\u52a8\u8ba1\u7b97\u65e5\u671f\u503c\uff0c\u5199\u6cd5\u4e3a\uff1a`#>dt auto`\u3002\n- \u5728\u503c\u8868\u8fbe\u5f0f\u540e\u90e8\u5206\uff0c\u53ef\u4ee5\u4f7f\u7528 `->%Y-%m-%d` \u7684\u65b9\u5f0f\u6307\u5b9a\u65e5\u671f\u683c\u5f0f\u5316\u4e32\u3002\u5176\u5199\u6cd5\u9075\u5b88 Python \u65e5\u671f\u683c\u5f0f\u5316 [strftime][strftime] \u5199\u6cd5\u3002\n\n#### \u679a\u4e3e\u503c\n\n\u679a\u4e3e(\u968f\u673a\u4ece\u7ed9\u5b9a\u7684\u503c\u4e2d **\u9009\u62e9** \u503c)\uff0c\u6240\u6709\u7c7b\u578b\u4f7f\u7528\u76f8\u540c\u7684\u5199\u6cd5\uff1a\n\n`#>i (1,2, 4, 6, 8)`\n\n\u4e5f\u53ef\u4ee5\u4ece\u6307\u5b9a\u7684\u6587\u4ef6\u52a0\u8f7d\u679a\u4e3e\u503c(\u6240\u6709\u7c7b\u578b\u90fd\u652f\u6301):\n\n`#>s (#choices.txt#)`\n\n`enum-filename` \u4e3a\u679a\u4e3e\u6587\u4ef6\u540d\uff0c\u5176\u4e2d\u6bcf\u884c\u5b58\u653e\u4e00\u4e2a\u6570\u636e\u9879\uff0c\u5176\u4e2d\u4e0d\u5141\u8bb8\u51fa\u73b0\u7a7a\u884c\u3002\n\n> \u65e0\u8bba\u662f\u8303\u56f4\u8fd8\u662f\u679a\u4e3e\uff0c\u503c\u4e0d\u5141\u8bb8\u51fa\u73b0\u7a7a\u767d\u5b57\u7b26\n\n#### JSON\u7c7b\u578b\n\n\u53ef\u4ee5\u4f7f\u7528 `#>j json.json` \u8fd9\u6837\u7684\u5199\u6cd5\u6765\u6307\u5b9a\u4ece\u4e00\u4e2a JSON \u6587\u4ef6\u4e2d\u8bfb\u53d6\u6240\u6709\u6570\u636e\u3002\n\n- `j` \u8868\u793a\u6b64\u5b57\u6bb5\u7684\u503c\u662f\u4e00\u4e2aJSON\u7ed3\u6784\n- `json.json` \u662f\u8981\u8bfb\u53d6\u7684\u6587\u4ef6\u540d\u3002**\u6ce8\u610f\uff1ajson\u6587\u4ef6\u7684\u6269\u5c55\u540d\u5fc5\u987b\u4e3a `.json`**\n- `json.json` \u6587\u4ef6\u7684\u6839\u53ef\u4ee5\u662f\u5bf9\u8c61\u6216\u8005\u6570\u7ec4\n\n\u4e5f\u53ef\u4ee5\u4f7f\u7528 `#>j (#json.json#)` \u8fd9\u6837\u7684\u5199\u6cd5\uff0c\u6307\u5b9a\u4ece\u4e00\u4e2a JSON \u6587\u4ef6(\u6570\u7ec4)\u4e2d\u968f\u673a\u9009\u62e9\u6570\u636e\n\n- `json.json` \u6587\u4ef6\u7684\u6839\u5fc5\u987b\u662f\u6570\u7ec4\n\n> \u6b64\u7c7b\u578b\u4ec5\u652f\u6301\u4ece\u6587\u4ef6\u8bfb\u53d6\u3002 \n\n#### \u5f15\u7528\u7c7b\u578b\n\n\u4f7f\u7528\u5199\u6cd5 `#>ref datetime.json` \u4ee5\u5f15\u5165\u4e00\u4e2a\u5916\u90e8\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49\u3002\n\n\u5916\u90e8\u7684\u6570\u636e\u7ed3\u6784\u5b9a\u4e49(datetime.json)\u4e0e**\u5165\u53e3\u5b9a\u4e49\u6587\u4ef6**\u7684\u4e0d\u540c\u4e4b\u5904\u5728\u4e8e\uff0c\u5176\u53ea\u5305\u542b\u5b9a\u4e49\u90e8\u5206(\u503c\u4e3a\u4e00\u4e2a\u5bf9\u8c61)\uff0c\u4e0d\u5305\u542b\u6570\u636e\u957f\u5ea6\u548c\u5165\u53e3\u540d\u79f0\u7b49\u4fe1\u606f\u3002 \n\n\u53c2\u8003 \n- [defs.json](./test/defs.json)\n- [datetime.json](./test/datetime.json)\n\n> \u5176\u6587\u4ef6\u540d\u5e94\u8be5\u662f\u4e00\u4e2a\u76f8\u5bf9\u4e8e **\u5165\u53e3\u5b9a\u4e49\u6587\u4ef6** \u7684\u8def\u5f84\u3002\n\n**\u5165\u53e3\u5b9a\u4e49\u6587\u4ef6** \u7684 `def` \u9879\u7684\u503c\uff0c\u4e5f\u53ef\u4ee5\u4f7f\u7528\u6b64\u5904\u7684\u5f15\u7528\u5199\u6cd5\u3002\n\n#### \u5b9a\u4e49\u6269\u5c55\n\n\u6269\u5c55\u662f\u5728\u540c\u7ea7\u522b\u6dfb\u52a0\u6570\u636e\u9879\u3002\n\n\u5355\u4e2a\u6269\u5c55\u5199\u6cd5:\n\n```json\n{\n  \"#ext#\": \"ext.json\"\n}\n```\n\n\u591a\u4e2a\u6269\u5c55\u5199\u6cd5:\n\n```json\n{\n  \"#ext#\": [\"ext1.json\", \"ext2.json\"]\n}\n```\n\n\u5982\u679c\u6269\u5c55\u4e2d\u5305\u542b\u7684\u9879\u5df2\u7ecf\u5b58\u5728\u4e8e\u5f53\u524d\u5b9a\u4e49\uff0c\u90a3\u4e48\u4f1a\u88ab\u5ffd\u7565(\u5373\u5f53\u524d\u6587\u4ef6\u7684\u5b9a\u4e49\u4f18\u5148\u4e8e\u6269\u5c55\u6587\u4ef6\u5185\u7684\u5b9a\u4e49)\u3002 \n\n\u53c2\u8003 \n- [ext.json](./test/ext.json)\n\n> **\u5f15\u7528\u7c7b\u578b** \u548c **\u5b9a\u4e49\u6269\u5c55** \u7684\u6587\u4ef6\u7ed3\u6784\u662f\u4e00\u81f4\u7684\uff0c\u5176\u5dee\u5f02\u4ec5\u5728\u5f15\u5165\u7684\u65b9\u5f0f\u3002\n\n## TODO\n\n- [ ] \u652f\u6301\u8bbe\u7f6e\u6570\u636e\u4e0d\u80fd\u91cd\u590d `?` \u7ed3\u5c3e\u8868\u793a\u6570\u636e\u4e0d\u80fd\u91cd\u590d\n\n[strftime]: https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes\n\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Mock data(JSON) generator for Python3",
    "version": "0.4.0",
    "project_urls": {
        "Code": "https://gitee.com/hyjiacan/mockee",
        "Documention": "https://gitee.com/hyjiacan/mockee/wikis",
        "Homepage": "https://gitee.com/hyjiacan/mockee",
        "Issue tracker": "https://gitee.com/hyjiacan/mockee/issues"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "240213e86a93a65cc4fe241490d28c7afa98683aaae7241188ee96ebdb479a59",
                "md5": "ac97afde098666bce720f8e793199d66",
                "sha256": "1dbaeee0b110cc1f571010fe1e31084c60b8ee4e51fcf7a62bbf4703b05712e2"
            },
            "downloads": -1,
            "filename": "mockee-0.4.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "ac97afde098666bce720f8e793199d66",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.5",
            "size": 8728,
            "upload_time": "2024-04-11T07:25:18",
            "upload_time_iso_8601": "2024-04-11T07:25:18.668442Z",
            "url": "https://files.pythonhosted.org/packages/24/02/13e86a93a65cc4fe241490d28c7afa98683aaae7241188ee96ebdb479a59/mockee-0.4.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "88475eabbabd18e09ace3f5902147a4d6cac35dd3f307652206ff87e5d9ed758",
                "md5": "7150aed5d07db79fd7ac4a403bb16db1",
                "sha256": "ffb8ac82c2d95e208bf9946cc98742b30a84f599be897c6a5ade1b709b0b5775"
            },
            "downloads": -1,
            "filename": "mockee-0.4.0.tar.gz",
            "has_sig": false,
            "md5_digest": "7150aed5d07db79fd7ac4a403bb16db1",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.5",
            "size": 8532,
            "upload_time": "2024-04-11T07:25:19",
            "upload_time_iso_8601": "2024-04-11T07:25:19.816752Z",
            "url": "https://files.pythonhosted.org/packages/88/47/5eabbabd18e09ace3f5902147a4d6cac35dd3f307652206ff87e5d9ed758/mockee-0.4.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-11 07:25:19",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "mockee"
}
        
Elapsed time: 0.22826s