# Path: library/utils/file.py
# def read_file(file, mode=False , sprfmt='\n', outfmt='string'):
#     '''
#     用于读取文件内容或者执行文件
#     :parm
#         file:读取或者执行文件名，支持当前相对路径、~、或者绝对路径
#         mode：是否执行，Flase为普通文件，其他为执行文件
#         sprfmt：换行符
#         outfmt：输出格式
#             bytes：转化为bytes格式，主要是用于解决ansible
#             string：转化为字符串格式
#             raw：原始文档，不作任何处理
#     :return
#         返回一个(执行结果代码，内容)
#         执行结果代码：Flase失败，True成功
#         内容：成功为执行或者读取内容，失败为失败原因
#     '''
#     
#     (code , this_path) = check_fileaccessible(file)
#     if not code :
#         return (code , this_path)
# 
#     if mode:
#         try:
#             p = subprocess.Popen(this_path, stdout=subprocess.PIPE)
#         except Exception as e:
#             return (False, '执行失败，' + str(e))
#             
#         stdout, stderr = p.communicate()
#         resultcode = p.returncode
#         if resultcode != 0:
#             return (False, '执行过程中出现错误，返回错误代码为' + resultcode)
#         
#         if stderr :
#             pass
# 
#         content = stdout
#         sprfmt = b'\n'
#         content = stdout.strip(sprfmt)
#         if outfmt == 'bytes' or outfmt == 'raw' :
#             pass
#         else :
#             content = bytes2string(content)
#     else:
#         try:
#             if outfmt == 'bytes' :
#                 fp = open(this_path, "rb")
#             else :
#                 fp = open(this_path, "r")
#                     
#             content = fp.read().strip()
#             fp.close()
#         except Exception as e:
#             return (False, '读取失败，' + str(e))
# 
#     return (True, content)


import yaml
from library.utils.file import read_file


def yaml_loader(data, data_type='data'):
    
    '''
    解析yaml，把yaml文件或者字符串解析成为yaml列表格式
    :参数
        data：yaml文件或任意类型数据
        data_type：数据类型，目前只能接受file或者data，默认为data
    :返回
        元组：(bool, 列表或者错误信息)
    '''
    
    if data_type not in ('file' , 'data') :
        return (False, 'data_type参数不正确，只能为file或者data')
    
    if data_type == 'file' :

# Path: library/utils/file.py
# def read_file(file, mode=False , sprfmt='\n', outfmt='string'):
#     '''
#     用于读取文件内容或者执行文件
#     :parm
#         file:读取或者执行文件名，支持当前相对路径、~、或者绝对路径
#         mode：是否执行，Flase为普通文件，其他为执行文件
#         sprfmt：换行符
#         outfmt：输出格式
#             bytes：转化为bytes格式，主要是用于解决ansible
#             string：转化为字符串格式
#             raw：原始文档，不作任何处理
#     :return
#         返回一个(执行结果代码，内容)
#         执行结果代码：Flase失败，True成功
#         内容：成功为执行或者读取内容，失败为失败原因
#     '''
#     
#     (code , this_path) = check_fileaccessible(file)
#     if not code :
#         return (code , this_path)
# 
#     if mode:
#         try:
#             p = subprocess.Popen(this_path, stdout=subprocess.PIPE)
#         except Exception as e:
#             return (False, '执行失败，' + str(e))
#             
#         stdout, stderr = p.communicate()
#         resultcode = p.returncode
#         if resultcode != 0:
#             return (False, '执行过程中出现错误，返回错误代码为' + resultcode)
#         
#         if stderr :
#             pass
# 
#         content = stdout
#         sprfmt = b'\n'
#         content = stdout.strip(sprfmt)
#         if outfmt == 'bytes' or outfmt == 'raw' :
#             pass
#         else :
#             content = bytes2string(content)
#     else:
#         try:
#             if outfmt == 'bytes' :
#                 fp = open(this_path, "rb")
#             else :
#                 fp = open(this_path, "r")
#                     
#             content = fp.read().strip()
#             fp.close()
#         except Exception as e:
#             return (False, '读取失败，' + str(e))
# 
#     return (True, content)


# Path: library/utils/yaml.py
import yaml
from library.utils.file import read_file



def yaml_loader(data, data_type='data'):
    
    '''
    解析yaml，把yaml文件或者字符串解析成为yaml列表格式
    :参数
        data：yaml文件或任意类型数据
        data_type：数据类型，目前只能接受file或者data，默认为data
    :返回
        元组：(bool, 列表或者错误信息)
    '''
    
    if data_type not in ('file' , 'data') :
        return (False, 'data_type参数不正确，只能为file或者data')
    
    if data_type == 'file' :

        result = read_file(data)