IDE的python模板

#!/usr/bin/env python
# encoding: utf-8

"""

@author: zcb

@license: (c) Copytright 2017-2019, zcb

@contact: cbzhan@outlook.com

@software: ${PRODUCT_NAME}

@file: ${NAME}.py

@time: ${DATE} ${TIME}

@desc:

"""

import logging
import os
import socket
import mysql.connector

FILE_NAME = os.path.basename(__file__)
FILENAME = os.path.splitext(FILE_NAME)[0]
LOG_NAME = FILENAME + '.log'
log_dir = os.getcwd() + '/log'

if not os.path.exists(log_dir):
    os.makedirs(log_dir)

logging.basicConfig(level=logging.DEBUG,
                    format='[%(asctime)s] %(filename)s[line:%(lineno)d] %(levelname)s: %(message)s',
                    datefmt='%Y-%b-%d %H:%M:%S %a',
                    filename=log_dir + '/' + LOG_NAME,
                    filemode='w')

console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter('%(levelname)-s: %(message)s')
console.setFormatter(formatter)
logging.getLogger('').addHandler(console)


class ${NAME}:
    # env config
    DEV_ENV = ('10.0.0.*', '10.1.1.*', '10.2.2.*', '10.4.5.6')  # PC, laptop, dev-vm
    TEST_ENV = ('192.168.1.1', '172.1.1.2')  # jenkins
    ONLINE_ENV = ('10.3.4.5', '10.7.8.9')  # online jenkins, online API server

    # mysql config
    DEV_DB = {
        'user': 'root',
        'password': 'root',
        'host': '10.4.5.6',
        'port': '3306',
        'database': 'test',
        'use_unicode': True,
    }

    # DEV_DB = {
    #     'user': 'root',
    #     'password': 'root',
    #     'host': '10.2.2.2',
    #     'port': '3306',
    #     'database': 'test',
    #     'use_unicode': True,
    # }

    TEST_DB = {
        'user': 'root',
        'password': 'root',
        'host': '192.168.1.1',
        'port': '8306',
        'database': 'test',
        'use_unicode': True,
    }

    ONLINE_DB = {
        'user': 'root',
        'password': 'root',
        'host': '10.3.4.5',
        'port': '3306',
        'database': 'test',
        'use_unicode': True,
    }

    db_config = None
    db_connection = None

    def __init__(self):
        host_ip = self.get_host_ip()
        logging.debug('local ip is: %s', host_ip)
        self.db_config = self.get_env(host_ip)
        logging.debug('use db as: %s', self.db_config['host'])

    @staticmethod
    def get_host_ip():
        """ retrieve local host ip address """
        s = socket.socket()
        try:
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            s.connect(('8.8.8.8', 80))
            ip = s.getsockname()[0]
        finally:
            s.close()
        return ip

    @staticmethod
    def get_env(host_ip):
        """ assign env var according to local ip """
        local_host_ip = host_ip
        logging.debug('host ip is: %s', local_host_ip)
        if local_host_ip in ${NAME}.ONLINE_ENV:
            env_db = ${NAME}.ONLINE_DB
        elif local_host_ip in ${NAME}.TEST_ENV:
            env_db = ${NAME}.TEST_DB
        else:
            env_db = ${NAME}.DEV_DB
        return env_db

    def connect_db(self, db_config):
        """ this function is used to connect to mysql db using db_config """
        mysql_host = db_config['host']
        mysql_db = db_config['database']
        logging.debug('connecting to mysql %s', mysql_host)
        # open mysql connection
        self.db_connection = mysql.connector.connect(**db_config)
        logging.debug('connected and use db %s', mysql_db)

    def close_db(self):
        """ this function is used to release db connection after used mysql """
        self.db_connection.close()
        logging.debug('mysql connection closed')


if __name__ == '__main__':
    obj = ${NAME}()
    obj.connect_db(obj.db_config)
    obj.close_db()

评论

此博客中的热门博文

Windows上调试C/C++程序时自动产生coredump的设置方法

利用Gitlab的Jira issue tracker实现Jira issue自动根据Gitlab commit/merge更新状态

go用xorm去update数据库的一个坑