ancient.module --- 拓展的IO模块

asyncMysql

class ancient.module.asyncMysql.Component[源代码]

基类:object

该模块参数均来源与madtornado配置文件,并且不支持同时连接多个不同的数据库

异步mysql快速请求模块(基于tormysql),示例:

db = asyncMysql().Component()
await db.on()
result = await db.select_tcw("mt")  # 读取mt表下的所有内容并返回
self.write(result) # 返回给前台页面显示

安全建议:

永远不要相信用户输入内容,sql模块虽然对于value进行了预检测
但是对于key部分还是无能为力,所以一定不要让用户对key的部分有
任何操作,只基于用户提供value值的权限,这样做是安全的。
delete_tw(table: str, where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的删除数据

参数:
  • table -- 数据表名称
  • where -- 如果该项不填,则删除整个表格,一个字符串,代表where条件筛选部分,如id=1 and name=a
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

input_sql(sql, arg_list=None, many=False) → ancient.rig.genSQL.InputResult[源代码]

执行插入,更新,删除等输入系列的sql语句

参数:
  • sql -- 输入系列的sql语句
  • arg_list -- 预处理参数列表,可以是二维数组代表多行插入前提需要设置many参数
  • many -- 是否启用多行输入
返回:

genSQL.InputResult 输入语句查询信息

insert_tc(table, content, many=False) → ancient.rig.genSQL.InputResult[源代码]

简化版的插入数据,只能简单的插入数据

示例内容:

insert_tc("table", [1, 2, 3, 4, 5])
转换内容 : ('insert into table values(%s,%s,%s,%s,%s)', [1, 2, 3, 4, 5])

insert_tc("table", [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], many=True, ph="?")
转换内容 : ('insert into table values(?,?,?,?,?)', [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

insert_tc("table", {"id": 12, "name": "SystemLight"}, many=False, ph="%s")
转换内容 : ('insert into table(name,id) values(%s,%s)', ['SystemLight', 12])

insert_tc("table", {"key": ["id", "name"], "value": [["1", "lisys"], ["2", "sl"]]}, many=True, ph="%s")
转换内容 : ('insert into table(id,name) values(%s,%s)', [['1', 'lisys'], ['2', 'sl']])
参数:
  • table -- 表格的名称
  • content -- 支持四中格式传参,参考示例内容
  • many -- 是否启用多行插入
返回:

genSQL.InputResult结果信息对象

insert_update_tc(table, content, many=False) → ancient.rig.genSQL.InputResult[源代码]

简化版的插入即更新,这是mysql的特性方法,存在则更新数据,不存在则插入一条新数据

参数:
  • table -- 数据表名称
  • content -- 支持dict多行模式{"key":[],"value":[[]]},和dict单行模式传参
  • many -- 是否启用多行模式
返回:

genSQL.InputResult结果信息对象

off() → None[源代码]

关闭一个数据库连接实例

返回:None
on() → None[源代码]

开启一个数据库实例从sql_pool当中

举例:

db=Component()
db.on()
result = await db.select_tw("table")
db.off()

# 与上述使用方法一致
async with Component() as com:
    result = await com.select_tcw("table")

快捷使用方法:

with Component() as db:
    db.select_tw("table")
返回:None
output_sql()[源代码]

输出查询内容,直接传入select的sql语句,用于查询

参数:
  • sql -- select开头的sql语句
  • arg_list -- 预处理参数,如果需要预处理查询,需要在sql语句中使用%s作为占位符
返回:

查询到的结果内容

select_tcw()[源代码]

简化版的查询,用于快捷查询表格内容,不支持连表等高端操作

参数:
  • table -- 查询的表格名称
  • field -- 一个元组,代表要查询的字段名称
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

Tuple 查询到的结果内容

set_return_dict(is_return_dict: bool = True) → None[源代码]

设置是否返回字典格式而非数组格式的数据对象

参数:is_return_dict -- 是否返回字典格式数据
返回:None
sql_pool = <tormysql.pool.ConnectionPool object>
truncate_t(table: str) → ancient.rig.genSQL.InputResult[源代码]

快速清空表格数据

参数:table -- 数据表名称
返回:genSQL.InputResult结果信息对象
update_tcw(table: str, content: Dict[str, Any], where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的更新数据

参数:
  • table -- 数据表名称
  • content -- 字典对象,键值对相对应
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

syncFile

class ancient.module.syncFile.Component(path='', top_path=None)[源代码]

基类:object

文件上下文处理模块

参数:
  • path -- 相对于root_path进行偏移的子文件,该类中通过get_safe_path来获取一个安全偏移的路径,防止输入超出文件路径的地址
  • top_path -- 默认情况从配置文件中获取,核心操作目录,有时需要把一些文件写入静态资源管理的文件夹中,可以修改它
static ajoin(*args) → str[源代码]

合并路径并转换成绝对路径

参数:args -- 多个路径参数
返回:合并后且标准处理的路径
static clear_fragment(path: str) → None[源代码]

清空指定文件夹,用于清理md5碎片文件夹

参数:path -- 碎片路径
返回:None
ensure_dir(path: str = None) → bool[源代码]

确保文件夹存在,不存在则创建它

参数:path -- 文件夹路径
返回:返回判断之前是否存在该文件
get_safe_path(*args) → str[源代码]

获取相对于self.root_path路径进行偏移子路径,如果合成后的子路径超出self.root_path路径 会抛出AssertionError异常,有时希望通过用户传来的参数来构成一个路径,需要 用到该方法,避免用户传递的参数中包含..等内容,最终导致路径位置偏移出限定目录中,接收多个路径合成参数

参数:args -- 多个路径参数
返回:在限定路径下的子路径字符串
static is_exist(path: str) → bool[源代码]

判断文件是否存在

参数:path -- 路径
返回:布尔值,是否存在
is_exist_md5(md5: str, suffix: str) → bool[源代码]

判断是否存在md5文件,用于分片上传的方法,需要[捕获异常]处理

参数:
  • md5 -- md5值
  • suffix -- 文件后缀名称
返回:

布尔值,是否存在

is_safe_exist(file_name: str) → bool[源代码]

判断文件是否存在,需要[捕获异常]处理

参数:file_name -- 文件名称
返回:布尔值,是否存在
static join(*args) → str[源代码]

合并的路径并经过标准化处理,去除..或.等符号

参数:args -- 多个路径参数
返回:合并后且标准处理的路径
md5_to_file(fragment_path: str, md5: str, suffix: str) → Iterable[源代码]

该功能为分片上传功能,用于合并分片上传产生的碎片块,需要[捕获异常]处理

使用案例:

file_context = syncFile.Component()
for i in file_context.md5_to_file(fragment_path , md5, suffix):
    if not i:
        return self.write_json(message="读取文件块产生错误,合并失败", status=1)
    # 提高并发,抛出当前handler控制主线程的权利
    await gen.sleep(0)
self.write_json(message="合并成功")
参数:
  • fragment_path -- 碎片文件夹路径
  • md5 -- md5值
  • suffix -- 文件后缀拓展名
返回:

None

read(path: str, auto_close: bool = True) → Iterable[源代码]

读取文件数据返回生成器

参数:
  • path -- 读取文件的路径
  • auto_close -- 是否及时关闭文件流,如果设置False可以获取read_fp属性手动关闭
返回:

generator

receive_file(files, arg_name='image', is_only=True, file_name=None) → Optional[Tuple[str, str, str]][源代码]

帮助tornado进行文件接收,该方法需要捕捉异常,只接收第一个文件 接收路径会保证文件夹存在,不存在则创建,并且会查看是否为安全路径,不是 安全路径抛出异常,需要[捕获异常]处理

参数:
  • files -- self.requests.files
  • arg_name -- 参数名称
  • is_only -- 是否生成唯一ID文件名
  • file_name -- 当is_only=False时,提供的自定义文件名称,如果不提供则来自上传的文件名,拓展名以上传文件为准无需附加
返回:

(文件名称[不携带拓展名],文件拓展名,文件相对服务器保存路径)

static rollback_receive_file(path: str) → None[源代码]

有时接收文件后将接收的文件名传入到数据库中,如果这时数据库错误需要回退操作,那么你可以使用该方法删除接收的文件,实现回退

参数:path -- 文件路径
返回:None
s_read(path: str, auto_close: bool = True) → bytes[源代码]

不迭代数据,直接读取文件内容

参数:
  • path -- 读取文件的路径
  • auto_close -- 否及时关闭文件流,如果设置False可以获取read_fp属性手动关闭
返回:

bytes 读取到到的文件流

static touch(path: str) → None[源代码]

快速创建一个空文件

参数:path -- 文件路径
返回:None
write(path: str, data: bytes, auto_close: bool = True) → None[源代码]

向文件中写入数据,该方法编码为utf-8

参数:
  • path -- 文件路径
  • data -- 写入数据
  • auto_close -- 是否及时关闭文件流,如果设置False可以获取write_fp属性手动关闭
返回:

None

ancient.module.syncFile.insert2fp(file_path, offset, content, per_size=2048)[源代码]

允许你在文件指定位置进行内容插入

参数:
  • file_path -- 文件路径
  • offset -- 文件偏移位置
  • content -- 插入的内容
  • per_size -- 每片读取大小限制
返回:

None

syncJwt

class ancient.module.syncJwt.Component[源代码]

基类:object

decode(payload: str) → Dict[源代码]

解析jwt加密的token,如果无法解析抛出异常

参数:payload -- 需要解析的负载
返回:dict
encode(payload: dict, exp: Optional[int] = None) → bytes[源代码]

编码dict对象成为jwt二进制对象,当做token使用

参数:
  • payload -- 需要加密的dict对象
  • exp -- 有效时间
返回:

str

syncMemcached

class ancient.module.syncMemcached.Component[源代码]

基类:object

off() → None[源代码]
on() → None[源代码]
spe_set(key: str, value: str, over_time: int) → int[源代码]

syncMysql

class ancient.module.syncMysql.Component[源代码]

基类:object

该模块参数均来源与madtornado配置文件,并且不支持同时连接多个不同的数据库

安全建议:

永远不要相信用户输入内容,sql模块虽然对于value进行了预检测
但是对于key部分还是无能为力,所以一定不要让用户对key的部分有
任何操作,只基于用户提供value值的权限,这样做是安全的。
delete_tw(table: str, where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的删除数据

参数:
  • table -- 数据表名称
  • where -- 如果该项不填,则删除整个表格,一个字符串,代表where条件筛选部分,如id=1 and name=a
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

input_sql(sql, arg_list=None, many=False) → ancient.rig.genSQL.InputResult[源代码]

执行插入,更新,删除等输入系列的sql语句

参数:
  • sql -- 输入系列的sql语句
  • arg_list -- 预处理参数列表,可以是二维数组代表多行插入前提需要设置many参数
  • many -- 是否启用多行输入
返回:

genSQL.InputResult 输入语句查询信息

insert_tc(table, content, many=False) → ancient.rig.genSQL.InputResult[源代码]

简化版的插入数据,只能简单的插入数据

示例内容:

insert_tc("table", [1, 2, 3, 4, 5])
转换内容 : ('insert into table values(%s,%s,%s,%s,%s)', [1, 2, 3, 4, 5])

insert_tc("table", [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], many=True, ph="?")
转换内容 : ('insert into table values(?,?,?,?,?)', [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

insert_tc("table", {"id": 12, "name": "SystemLight"}, many=False, ph="%s")
转换内容 : ('insert into table(name,id) values(%s,%s)', ['SystemLight', 12])

insert_tc("table", {"key": ["id", "name"], "value": [["1", "lisys"], ["2", "sl"]]}, many=True, ph="%s")
转换内容 : ('insert into table(id,name) values(%s,%s)', [['1', 'lisys'], ['2', 'sl']])
参数:
  • table -- 表格的名称
  • content -- 支持四中格式传参,参考示例内容
  • many -- 是否启用多行插入
返回:

genSQL.InputResult结果信息对象

insert_update_tc(table, content, many=False) → ancient.rig.genSQL.InputResult[源代码]

简化版的插入即更新,这是mysql的特性方法,存在则更新数据,不存在则插入一条新数据

参数:
  • table -- 数据表名称
  • content -- 支持dict多行模式{"key":[],"value":[[]]},和dict当行模式传参
  • many -- 是否启用多行模式
返回:

genSQL.InputResult结果信息对象

off() → None[源代码]

关闭一个数据库连接实例

返回:None
on() → None[源代码]

开启一个数据库实例从sql_pool当中

举例:

db=Component()
db.on()
db.select_tw("table")
db.off()

快捷使用方法:

with Component() as db:
    db.select_tw("table")
返回:None
output_sql()[源代码]

输出查询内容,直接传入select的sql语句,用于查询

参数:
  • sql -- select开头的sql语句
  • arg_list -- 预处理参数,如果需要预处理查询,需要在sql语句中使用%s作为占位符
返回:

查询到的结果内容

select_tcw()[源代码]

简化版的查询,用于快捷查询表格内容,不支持连表等高端操作

参数:
  • table -- 查询的表格名称
  • field -- 一个元组,代表要查询的字段名称
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

Tuple 查询到的结果内容

set_cursor_dict(is_return_dict: bool = True) → None[源代码]

设置是否返回字典格式而非数组格式的数据对象

参数:is_return_dict -- 是否返回字典格式数据
返回:None
truncate_t(table: str) → ancient.rig.genSQL.InputResult[源代码]

快速清空表格数据

参数:table -- 数据表名称
返回:genSQL.InputResult结果信息对象
update_tcw(table: str, content: Dict[str, Any], where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的更新数据

参数:
  • table -- 数据表名称
  • content -- 字典对象,键值对相对应
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

syncSqlite

class ancient.module.syncSqlite.Component[源代码]

基类:object

该模块参数均来源与madtornado配置文件,并且不支持同时连接多个不同的数据库

安全建议:

永远不要相信用户输入内容,sql模块虽然对于value进行了预检测
但是对于key部分还是无能为力,所以一定不要让用户对key的部分有
任何操作,只基于用户提供value值的权限,这样做是安全的。
delete_tw(table: str, where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的删除数据

参数:
  • table -- 数据表名称
  • where -- 如果该项不填,则删除整个表格,一个字符串,代表where条件筛选部分,如id=1 and name=a
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

input_sql(sql, arg_list=None, many=False) → ancient.rig.genSQL.InputResult[源代码]

执行插入,更新,删除等输入系列的sql语句

参数:
  • sql -- 输入系列的sql语句
  • arg_list -- 预处理参数列表,可以是二维数组代表多行插入前提需要设置many参数
  • many -- 是否启用多行输入
返回:

genSQL.InputResult 输入语句查询信息

insert_tc(table, content, many=False)[源代码]

简化版的插入数据,只能简单的插入数据

示例内容:

insert_tc("table", [1, 2, 3, 4, 5])
转换内容 : ('insert into table values(%s,%s,%s,%s,%s)', [1, 2, 3, 4, 5])

insert_tc("table", [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]], many=True, ph="?")
转换内容 : ('insert into table values(?,?,?,?,?)', [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])

insert_tc("table", {"id": 12, "name": "SystemLight"}, many=False, ph="%s")
转换内容 : ('insert into table(name,id) values(%s,%s)', ['SystemLight', 12])

insert_tc("table", {"key": ["id", "name"], "value": [["1", "lisys"], ["2", "sl"]]}, many=True, ph="%s")
转换内容 : ('insert into table(id,name) values(%s,%s)', [['1', 'lisys'], ['2', 'sl']])
参数:
  • table -- 表格的名称
  • content -- 支持四中格式传参,参考示例内容
  • many -- 是否启用多行插入
返回:

genSQL.InputResult结果信息对象

off() → None[源代码]

关闭一个数据库连接实例

返回:None
on() → None[源代码]

开启一个数据库实例从sql_pool当中

举例:

db=Component()
db.on()
db.select_tw("table")
db.off()

快捷使用方法:

with Component() as db:
    db.select_tw("table")
返回:None
output_sql()[源代码]

输出查询内容,直接传入select的sql语句,用于查询

参数:
  • sql -- select开头的sql语句
  • arg_list -- 预处理参数,如果需要预处理查询,需要在sql语句中使用%s作为占位符
返回:

查询到的结果内容

select_tcw()[源代码]

简化版的查询,用于快捷查询表格内容,不支持连表等高端操作

参数:
  • table -- 查询的表格名称
  • field -- 一个元组,代表要查询的字段名称
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

Tuple 查询到的结果内容

set_cursor_dict(is_return_dict: bool = True) → None[源代码]

设置是否返回字典格式而非数组格式的数据对象

参数:is_return_dict -- 是否返回字典格式数据
返回:None
show_table()[源代码]

查询表格列表

返回:表格列表数据
update_tcw(table: str, content: Dict[str, Any], where: str = None, where_arg: List[SQL_CONTENT] = None) → ancient.rig.genSQL.InputResult[源代码]

简化版的更新数据

参数:
  • table -- 数据表名称
  • content -- 字典对象,键值对相对应
  • where -- 一个字符串,代表where条件筛选部分,如id=1 and name=a,可以在其中使用占位符,同时要提供where_arg
  • where_arg -- 如果where传入的字符串包括占位符,那么传入参数列表,让sql可以预查询
返回:

genSQL.InputResult结果信息对象

ancient.module.syncSqlite.dict_factory(cursor, row)[源代码]