Source code for airtest.cli.info

# -*- coding: utf-8 -*-
__author__ = 'wjjn3033'

import os
import re
import sys
import six
import json
from io import open
from airtest.utils.compat import EXT


[docs]def get_script_info(script_path): """extract info from script, like basename, __author__, __title__ and __desc__.""" script_path = os.path.normpath(script_path) script_name = os.path.basename(script_path) if script_path.endswith(".py"): pyfilepath = script_path parent_name = os.path.basename(os.path.dirname(script_path)) if parent_name.endswith(EXT): script_name = parent_name else: pyfilename = script_name.replace(EXT, ".py") pyfilepath = os.path.join(script_path, pyfilename) if not os.path.exists(pyfilepath) and six.PY2: pyfilepath = pyfilepath.encode(sys.getfilesystemencoding()) with open(pyfilepath, encoding="utf-8") as pyfile: pyfilecontent = pyfile.read() author, title, desc = get_author_title_desc(pyfilecontent) result_json = {"name": script_name, "path": script_path, "author": author, "title": title, "desc": desc} return json.dumps(result_json)
[docs]def get_author_title_desc(text): """Get author title desc.""" regex1 = r'__(?P<attr>\w+)__\s*=\s*(?P<val>"[^"]+"|"""[^"]+""")' regex2 = r"__(?P<attr>\w+)__\s*=\s*(?P<val>'[^']+'|'''[^']+''')" data1 = re.findall(regex1, text) data2 = re.findall(regex2, text) data1.extend(data2) file_info = dict(data1) author = strip_str(file_info.get("author", "")) title = strip_str(file_info.get("title", "")) desc = strip_str(file_info.get("desc", "")) desc = process_desc(desc) return author, title, desc
[docs]def process_desc(desc): lines = desc.split('\n') lines = [line.strip() for line in lines] return '\n'.join(lines)
[docs]def strip_str(string): """Strip string.""" return string.strip('"').strip("'").strip()