コード例 #1
0
class HTTPClient(object):
    def __init__(self, url, method='GET', headers=None, cookie=None):
        """

        :param method:
        :param headers: Must be a dict. Such as headers={'Content_Type':'text/html'}
        """
        self.logger = Logger(__name__).get_logger()

        self.url = url
        self.session = requests.session()
        self.method = method.upper()
        self.headers = headers
        self.cookie = cookie

        self._set_header()
        self._set_cookie()

    def _set_header(self):
        """设置header"""
        if self.headers:
            self.session.headers.update(self.headers)
            self.logger.info('Set headers: {0}'.format(self.headers))

    def _set_cookie(self):
        """设置cookie"""
        if self.cookie:
            self.session.cookies.update(self.cookie)
            self.logger.info('Set cookies: {0}'.format(self.cookie))

    def _check_method(self):
        """检查传入的method是否可用。"""
        if self.method not in METHODS:
            self.logger.exception(
                UnSupportMethod(u'不支持的method:{0},请检查传入参数!'.format(
                    self.method)))
        else:
            return True

    def send(self, params=None, data=None, **kwargs):
        """send request to url.If response 200,return response, else return None."""
        if self._check_method():
            response = self.session.request(method=self.method,
                                            url=self.url,
                                            params=params,
                                            data=data,
                                            **kwargs)
            self.logger.info('{0} {1}.'.format(self.method, self.url))
            if response.status_code == 200:
                self.logger.info('request success: {0}\n{1}'.format(
                    response, response.content.strip()))
                return response
            else:
                self.logger.error('request failed: {0} {1}'.format(
                    response, response.reason))
コード例 #2
0
class IndexDatabase:
    def __init__(self):
        db = MongoClient(host=os.getenv('MONGO_HOST', config.MONGO['host']),
                         port=int(
                             os.getenv('MONGO_PORT',
                                       config.MONGO['port']))).inverted_index
        self._constants = db.constants
        self._index = db.index
        self._userdata = db.userdata
        self.__logger = Logger().get_logger(__name__)

    def get(self, word, doc=None):
        query = self._index.find_one({word: {'$exists': True}})
        if query is not None:
            return query[word] if doc is None else query[word][doc]
        else:
            self.__logger.error(f'No such word: {word}')
            raise KeyError

    def get_constant(self, name):
        query = self._constants.find_one({name: {'$exists': True}})
        if query is not None:
            return query[name]
        else:
            self.__logger.error(f'No such constant: {name}')
            raise KeyError

    def get_words_list(self):
        return [
            list(word.keys())[0] for word in self._index.find({}, {'_id': 0})
        ]

    def write_index(self, index, total_docs_count):
        try:
            self._constants.drop()
            self._index.drop()
            self._constants.insert_one({'total_docs_count': total_docs_count})
            for word in index:
                self._index.insert({word: index[word]}, check_keys=False)
        except Exception:
            self.__logger.exception('Error writing index to the database.')

    def insert_api_keys(self, tokens):
        for token in tokens:
            self._userdata.update({'api_key': token},
                                  {"$set": {
                                      'api_key': token
                                  }},
                                  upsert=True)

    def validate_api_key(self, key):
        return self._userdata.find_one({'api_key': key}) is not None
コード例 #3
0
class HTTPClient(object):

    def __init__(self, url, method='GET', headers=None, cookie=None):
        """

        :param method:
        :param headers: Must be a dict. Such as headers={'Content_Type':'text/html'}
        """
        self.logger = Logger(__name__).get_logger()

        self.url = url
        self.session = requests.session()
        self.method = method.upper()
        self.headers = headers
        self.cookie = cookie

        self._set_header()
        self._set_cookie()

    def _set_header(self):
        """设置header"""
        if self.headers:
            self.session.headers.update(self.headers)
            self.logger.info('Set headers: {0}'.format(self.headers))

    def _set_cookie(self):
        """设置cookie"""
        if self.cookie:
            self.session.cookies.update(self.cookie)
            self.logger.info('Set cookies: {0}'.format(self.cookie))

    def _check_method(self):
        """检查传入的method是否可用。"""
        if self.method not in METHODS:
            self.logger.exception(UnSupportMethod(u'不支持的method:{0},请检查传入参数!'.format(self.method)))
        else:
            return True

    def send(self, params=None, data=None, **kwargs):
        """send request to url.If response 200,return response, else return None."""
        if self._check_method():
            response = self.session.request(method=self.method, url=self.url, params=params, data=data, **kwargs)
            self.logger.info('{0} {1}.'.format(self.method, self.url))
            if response.status_code == 200:
                self.logger.info('request success: {0}\n{1}'.format(response, response.content.strip()))
                return response
            else:
                self.logger.error('request failed: {0} {1}'.format(response, response.reason))
コード例 #4
0
class TCPClient(object):
    def __init__(self, domain, port):
        self.logger = Logger(__name__).return_logger()

        self.domain = domain
        self.port = port
        self.flag = 0  # 连接后置为1
        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def connect(self):
        """连接指定IP、端口"""
        if not self.flag:
            try:
                self._sock.connect((self.domain, self.port))
                self.logger.info(
                    'TcpClient connect to {0}:{1} success.'.format(
                        self.domain, self.port))
                self.flag = 1
            except socket.error as e:
                self.logger.exception(e)

    def send(self, send_string):
        """向服务器端发送send_string,并返回信息,若报错,则返回None"""
        self.connect()

        if self.flag:
            try:
                self._sock.send(send_string)
                self.logger.info(
                    'TcpClient send "{0}" to server.'.format(send_string))
            except socket.error as e:
                self.logger.exception(e)

            try:
                # 没搞清楚 raw-unicode-escape, unicode-escape 区别
                rec = self._sock.recv(10240).decode(
                    'raw-unicode-escape').encode('utf-8')
                self.logger.info(
                    'TcpClient get "{0}" from server.'.format(rec))
                return rec
            except socket.error as e:
                self.logger.exception(e)

    def close(self):
        """关闭连接"""
        if self.flag:
            self._sock.close()
            self.logger.info('TcpClient closed.')
コード例 #5
0
class TCPClient(object):

    def __init__(self, domain, port):
        self.logger = Logger(__name__).get_logger()

        self.domain = domain
        self.port = port
        self.flag = 0  # 连接后置为1
        self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    def connect(self):
        """连接指定IP、端口"""
        if not self.flag:
            try:
                self._sock.connect((self.domain, self.port))
                self.logger.info('TCPClient connect to {0}:{1} success.'.format(self.domain, self.port))
                self.flag = 1
            except socket.error as e:
                self.logger.exception(e)

    def send(self, send_string):
        """向服务器端发送send_string,并返回信息,若报错,则返回None"""
        self.connect()

        if self.flag:
            try:
                self._sock.send(send_string)
                self.logger.info('TCPClient send "{0}" to server.'.format(send_string))
            except socket.error as e:
                self.logger.exception(e)

            try:
                # 没搞清楚 raw-unicode-escape, unicode-escape 区别
                rec = self._sock.recv(10240).decode('raw-unicode-escape').encode('utf-8')
                self.logger.info('TCPClient get "{0}" from server.'.format(rec))
                return rec
            except socket.error as e:
                self.logger.exception(e)

    def close(self):
        """关闭连接"""
        if self.flag:
            self._sock.close()
            self.logger.info('TCPClient closed.')
コード例 #6
0
ファイル: mail.py プロジェクト: yzdx0000/AutoTestFramework
class Email:
    """Email类,读取配置中的基本配置,初始化要求title必填,message与文件路径可选"""
    def __init__(self,
                 title,
                 message=None,
                 path=None,
                 server=None,
                 sender=None,
                 password=None,
                 receiver=None):
        """初始化Email

        :param title: 邮件标题,必填。
        :param message: 邮件正文,非必填。
        :param path: 附件路径,可传入list(多附件)或str(单个附件),非必填。
        :param server: smtp服务器,如果为空,则读取config.ini中的[email]/server,非必填。
        :param sender: 发件人,如果为空,则读取config.ini中的[email]/from,非必填。
        :param password: 发件人密码,如果为空,则读取config.ini中的[email]/password,如果读取失败,则需手动输入密码,非必填。
        :param receiver: 收件人,如果为空,则读取config.ini中的[email]/to,多收件人用“;”隔开,非必填。
        """
        self.logger = Logger(__name__).get_logger()

        self.title = title
        self.message = message
        self.files = path

        self.msg = MIMEMultipart('related')

        cf = DefaultConfig()
        if server:
            self.server = server
        else:
            self.server = cf.get('email', 'server')

        if sender:
            self.sender = sender
        else:
            self.sender = cf.get('email', 'from')

        if receiver:
            self.receiver = receiver
        else:
            self.receiver = cf.get('email', 'to')

        if password:
            self.password = password
        else:
            try:
                self.password = cf.get('email', 'pass')
            except NoOptionError:
                self.password = getpass(
                    prompt=u'未在config.ini中检测到password,请输入password: ')

    def _attach_file(self, att_file):
        """内部方法,将单个文件添加到附件列表中"""
        att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8')
        att["Content-Type"] = 'application/octet-stream'
        filename = re.split(r'[\\|/]', att_file)
        att["Content-Disposition"] = 'attachment; filename="%s"' % filename[-1]
        self.msg.attach(att)
        self.logger.info('attach file {}'.format(att_file))

    def send(self):
        """组织邮件内容并发送邮件。"""

        self.msg['Subject'] = self.title
        self.msg['From'] = self.sender
        self.msg['To'] = self.receiver

        # 邮件正文
        if self.message:
            self.msg.attach(MIMEText(self.message))

        # 添加附件,支持多个附件(传入list),或者单个附件(传入str)
        if self.files:
            if isinstance(self.files, list):
                for f in self.files:
                    self._attach_file(f)
            elif isinstance(self.files, str):
                self._attach_file(self.files)

        # 连接服务器并发送
        try:
            smtp_server = smtplib.SMTP(self.server)
        except (gaierror and error) as e:
            self.logger.exception(u'发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e)
        else:
            try:
                smtp_server.login(self.sender, self.password)
            except smtplib.SMTPAuthenticationError as e:
                self.logger.exception(u'用户名密码验证失败!%s', e)
            else:
                smtp_server.sendmail(self.sender, self.receiver.split(';'),
                                     self.msg.as_string())
            finally:
                smtp_server.quit()
                self.logger.info(u'发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,'
                                 u'同时检查收件人地址是否正确'.format(
                                     self.title, self.receiver))
コード例 #7
0
ファイル: mail.py プロジェクト: yzdx0000/AutoTestFramework
class Email:
    """Email类,读取配置中的基本配置,初始化要求title必填,message与文件路径可选"""

    def __init__(self, title, message=None, path=None, server=None, sender=None, password=None, receiver=None):
        """初始化Email

        :param title: 邮件标题,必填。
        :param message: 邮件正文,非必填。
        :param path: 附件路径,可传入list(多附件)或str(单个附件),非必填。
        :param server: smtp服务器,如果为空,则读取config.ini中的[email]/server,非必填。
        :param sender: 发件人,如果为空,则读取config.ini中的[email]/from,非必填。
        :param password: 发件人密码,如果为空,则读取config.ini中的[email]/password,如果读取失败,则需手动输入密码,非必填。
        :param receiver: 收件人,如果为空,则读取config.ini中的[email]/to,多收件人用“;”隔开,非必填。
        """
        self.logger = Logger(__name__).get_logger()

        self.title = title
        self.message = message
        self.files = path

        self.msg = MIMEMultipart('related')

        cf = DefaultConfig()
        if server:
            self.server = server
        else:
            self.server = cf.get('email', 'server')

        if sender:
            self.sender = sender
        else:
            self.sender = cf.get('email', 'from')

        if receiver:
            self.receiver = receiver
        else:
            self.receiver = cf.get('email', 'to')

        if password:
            self.password = password
        else:
            try:
                self.password = cf.get('email', 'pass')
            except NoOptionError:
                self.password = getpass(prompt=u'未在config.ini中检测到password,请输入password: ')

    def _attach_file(self, att_file):
        """内部方法,将单个文件添加到附件列表中"""
        att = MIMEText(open('%s' % att_file, 'rb').read(), 'plain', 'utf-8')
        att["Content-Type"] = 'application/octet-stream'
        filename = re.split(r'[\\|/]', att_file)
        att["Content-Disposition"] = 'attachment; filename="%s"' % filename[-1]
        self.msg.attach(att)
        self.logger.info('attach file {}'.format(att_file))

    def send(self):
        """组织邮件内容并发送邮件。"""

        self.msg['Subject'] = self.title
        self.msg['From'] = self.sender
        self.msg['To'] = self.receiver

        # 邮件正文
        if self.message:
            self.msg.attach(MIMEText(self.message))

        # 添加附件,支持多个附件(传入list),或者单个附件(传入str)
        if self.files:
            if isinstance(self.files, list):
                for f in self.files:
                    self._attach_file(f)
            elif isinstance(self.files, str):
                self._attach_file(self.files)

        # 连接服务器并发送
        try:
            smtp_server = smtplib.SMTP(self.server)
        except (gaierror and error) as e:
            self.logger.exception(u'发送邮件失败,无法连接到SMTP服务器,检查网络以及SMTP服务器. %s', e)
        else:
            try:
                smtp_server.login(self.sender, self.password)
            except smtplib.SMTPAuthenticationError as e:
                self.logger.exception(u'用户名密码验证失败!%s', e)
            else:
                smtp_server.sendmail(self.sender, self.receiver.split(';'), self.msg.as_string())
            finally:
                smtp_server.quit()
                self.logger.info(u'发送邮件"{0}"成功! 收件人:{1}。如果没有收到邮件,请检查垃圾箱,'
                                 u'同时检查收件人地址是否正确'.format(self.title, self.receiver))