peewee orm

11-24 784 views

http://docs.peewee-orm.com/en/latest/peewee/quickstart.html
https://github.com/coleifer/peewee

https://github.com/coleifer/peewee/blob/master/docs/peewee/querying.rst#query-operators

model

import os
import re
import sys
import peewee
import logging
import datetime
from protocol import typhoon_pb2
from utility import utils
from utility.utils import logger
from playhouse.sqlite_ext import PrimaryKeyAutoIncrementField

dbinstance = peewee.SqliteDatabase(os.path.abspath( os.path.join( utils.curdirWithDecode() , "config/manager.db") ) )

########################################################################

class User(peewee.Model):
    id                         = PrimaryKeyAutoIncrementField(primary_key=True)
    account                    = peewee.CharField(null=False)
    password                   = peewee.CharField(null=False)
    home                       = peewee.CharField(null=True, default='')
    permission                 = peewee.IntegerField(null=False, default=255)
    name                       = peewee.CharField(null=True)
    email                      = peewee.CharField(null=True)
    phone                      = peewee.CharField(null=True)
    company                    = peewee.CharField(null=True)
    address                    = peewee.CharField(null=True)
    remark                     = peewee.CharField(null=True)
    status                     = peewee.IntegerField(null=False, default=0)
    created                    = peewee.DateTimeField(null=False, default=datetime.datetime.now)

    class Meta:
        database       = dbinstance
        db_table       = 't_user'

    def toProtobuf(self, pbuser):
        pbuser.id = self.id
        if self.account != None: pbuser.account = self.account
        if self.password != None: pbuser.password = self.password
        if self.home != None: pbuser.home = self.home
        if self.permission != None: pbuser.permission = self.permission
        if self.name != None: pbuser.name = self.name
        if self.email != None: pbuser.email = self.email
        if self.phone != None: pbuser.phone = self.phone
        if self.company != None: pbuser.company = self.company
        if self.address != None: pbuser.address = self.address
        if self.remark != None: pbuser.remark = self.remark
        if self.status != None: pbuser.status = self.status
        if self.created != None: pbuser.created = 1 #TODO self.created.timestamp()

    def fromProtobuf(self, pbuser):
        self.id = pbuser.id
        if pbuser.account != None: self.account = pbuser.account
        if pbuser.password != None: self.password = pbuser.password
        if pbuser.home != None: self.home = pbuser.home
        if pbuser.permission != None: self.permission = pbuser.permission
        if pbuser.name != None: self.name = pbuser.name
        if pbuser.email != None: self.email = pbuser.email
        if pbuser.phone != None: self.phone = pbuser.phone
        if pbuser.company != None: self.company = pbuser.company
        if pbuser.address != None: self.address = pbuser.address
        if pbuser.remark != None: self.remark = pbuser.remark
        if pbuser.status != None: self.status = pbuser.status
        # if pbuser.created != None:
        #     self.created = 1 #TODO self.created.timestamp()
########################################################################

userPatternName = '^.{1,50}$'
userPatternAccount = '^\w{3,50}$'
userPatternEmail = '^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$'
userPatternPassword = '^[a-zA-Z0-9_~!@#%\$\.\^\&\-\+\*\(\)\{\}\?\\]{6,20}$'
userPatternPhone = '^\+?\d{7,13}$'
notAllowedAccount = ["user", "test", "admin", "download", "upload", "home", "ftp", "ftps", "server", "client", "service", "root"]

def verifyUserFormat(user, checkPassword):

    if not re.match(userPatternAccount, user.account) :
        return typhoon_pb2.WS_IncorrectAccountFormat

    if checkPassword and not re.match(userPatternPassword, user.password) :
        return typhoon_pb2.WS_IncorrectPasswordFormat

    if user.email != "" :
        if len(user.email) > 50 and not re.match(userPatternEmail, user.email):
            return typhoon_pb2.WS_IncorrectEmailFormat

    if user.name != "" and not re.match(userPatternName, user.name) :
        return typhoon_pb2.WS_IncorrectNameFormat

    if user.phone != "" and not re.match(userPatternPhone, user.phone) :
        return typhoon_pb2.WS_IncorrectPhoneFormat

    if user.home != "" and not os.path.exists( os.path.abspath(user.home) ) :
        return typhoon_pb2.WS_DirNotExist

    return typhoon_pb2.OK

########################################################################

class Server(peewee.Model):
    id                         = PrimaryKeyAutoIncrementField(primary_key=True)
    name                       = peewee.CharField(null=True, default='New Server')
    version                    = peewee.CharField(null=False)
    device                     = peewee.CharField(null=False)
    host                       = peewee.CharField(null=True, default='0.0.0.0')
    port                       = peewee.IntegerField(null=False, default=2121)
    os                         = peewee.CharField(null=True)
    status                     = peewee.IntegerField(null=False, default=0)
    loglevel                   = peewee.IntegerField(null=False, default=1)
    directory                  = peewee.CharField(null=True)
    apiport                    = peewee.IntegerField(null=False, default=8090)
    remark                     = peewee.CharField(null=True)
    created                    = peewee.DateTimeField(null=False, default=datetime.datetime.now)
    maxUserCount               = peewee.IntegerField(null=False, default=0)
    connTimeout                = peewee.IntegerField(null=False, default=120)
    noTransferTimeout          = peewee.IntegerField(null=False, default=600)
    loginTimeout               = peewee.IntegerField(null=False, default=60)
    threadNums                 = peewee.IntegerField(null=False, default=0)
    ipBind                     = peewee.CharField(null=True, default='*')
    ipFilter                   = peewee.CharField(null=True)
    ipFilterExclude            = peewee.CharField(null=True)
    portBegin                  = peewee.IntegerField(null=False, default=1)
    portEnd                    = peewee.IntegerField(null=False, default=65535)
    socketBufSize              = peewee.IntegerField(null=False, default=262144)
    downloadOccupied           = peewee.IntegerField(null=False, default=1)
    speedLimitType             = peewee.IntegerField(null=False, default=0)
    uploadSpeed                = peewee.IntegerField(null=False, default=0)
    downloadSpeed              = peewee.IntegerField(null=False, default=0)
    enableFTPS                 = peewee.IntegerField(null=False, default=0)
    privateKeyFile             = peewee.CharField(null=True)
    certificateFile            = peewee.CharField(null=True)
    keyPassword                = peewee.CharField(null=True)
    # for proxy               
    packageSize                = peewee.IntegerField(null=False, default=1442)
    enableProxy                = peewee.IntegerField(null=False, default=1)
    proxyHost                  = peewee.CharField(null=True, default='0.0.0.0')
    proxyPort                  = peewee.IntegerField(null=False, default=8388)
    license                    = peewee.CharField(null=True, default='')
    compression                = peewee.IntegerField(null=False, default=1)
    outbound                   = peewee.IntegerField(null=False, default=0)
    inbound                    = peewee.IntegerField(null=False, default=0)

    class Meta:
        database       = dbinstance
        db_table       = 't_server'

    def toProtobuf(self, pbserver):
        pbserver.id = self.id
        if self.name != None: pbserver.name = self.name
        if self.version != None: pbserver.version = self.version
        if self.device != None: pbserver.device = self.device
        if self.host != None: pbserver.host = self.host
        if self.port != None: pbserver.port = self.port
        if self.os != None: pbserver.os = self.os
        if self.status != None: pbserver.status = self.status
        if self.loglevel != None: pbserver.loglevel = self.loglevel
        if self.directory != None: pbserver.directory = self.directory
        if self.apiport != None: pbserver.apiport = self.apiport
        if self.remark != None: pbserver.remark = self.remark
        # if self.created != None: pbserver.created = self.created
        if self.maxUserCount != None: pbserver.maxUserCount = self.maxUserCount
        if self.connTimeout != None: pbserver.connTimeout = self.connTimeout
        if self.noTransferTimeout != None: pbserver.noTransferTimeout = self.noTransferTimeout
        if self.loginTimeout != None: pbserver.loginTimeout = self.loginTimeout
        if self.threadNums != None: pbserver.threadNums = self.threadNums
        if self.ipBind != None: pbserver.ipBind = self.ipBind
        if self.ipFilter != None: pbserver.ipFilter = self.ipFilter
        if self.ipFilterExclude != None: pbserver.ipFilterExclude = self.ipFilterExclude
        if self.portBegin != None: pbserver.portBegin = self.portBegin
        if self.portEnd != None: pbserver.portEnd = self.portEnd
        if self.socketBufSize != None: pbserver.socketBufSize = self.socketBufSize
        if self.downloadOccupied != None: pbserver.downloadOccupied = self.downloadOccupied
        if self.speedLimitType != None: pbserver.speedLimitType = self.speedLimitType
        if self.uploadSpeed != None: pbserver.uploadSpeed = self.uploadSpeed
        if self.downloadSpeed != None: pbserver.downloadSpeed = self.downloadSpeed
        if self.enableFTPS != None: pbserver.enableFTPS = self.enableFTPS
        if self.privateKeyFile != None: pbserver.privateKeyFile = self.privateKeyFile
        if self.certificateFile != None: pbserver.certificateFile = self.certificateFile
        if self.keyPassword != None: pbserver.keyPassword = self.keyPassword
        if self.packageSize != None: pbserver.packageSize = self.packageSize
        if self.enableProxy != None: pbserver.enableProxy = self.enableProxy
        if self.proxyHost != None: pbserver.proxyHost = self.proxyHost
        if self.proxyPort != None: pbserver.proxyPort = self.proxyPort
        if self.license != None: pbserver.license = self.license
        if self.compression != None: pbserver.compression = self.compression
        if self.outbound != None: pbserver.outbound = self.outbound
        if self.inbound != None: pbserver.inbound = self.inbound

    def fromProtobuf(self, pbserver):
        self.id = pbserver.id
        if pbserver.name != None: self.name = pbserver.name
        if pbserver.version != None: self.version = pbserver.version
        if pbserver.device != None: self.device = pbserver.device
        if pbserver.host != None: self.host = pbserver.host
        if pbserver.port != None: self.port = pbserver.port
        if pbserver.os != None: self.os = pbserver.os
        if pbserver.status != None: self.status = pbserver.status
        if pbserver.loglevel != None: self.loglevel = pbserver.loglevel
        if pbserver.directory != None: self.directory = pbserver.directory
        if pbserver.apiport != None: self.apiport = pbserver.apiport
        if pbserver.remark != None: self.remark = pbserver.remark
        if pbserver.maxUserCount != None: self.maxUserCount = pbserver.maxUserCount
        if pbserver.connTimeout != None: self.connTimeout = pbserver.connTimeout
        if pbserver.noTransferTimeout != None: self.noTransferTimeout = pbserver.noTransferTimeout
        if pbserver.loginTimeout != None: self.loginTimeout = pbserver.loginTimeout
        if pbserver.threadNums != None: self.threadNums = pbserver.threadNums
        if pbserver.ipBind != None: self.ipBind = pbserver.ipBind
        if pbserver.ipFilter != None: self.ipFilter = pbserver.ipFilter
        if pbserver.ipFilterExclude != None: self.ipFilterExclude = pbserver.ipFilterExclude
        if pbserver.portBegin != None: self.portBegin = pbserver.portBegin
        if pbserver.portEnd != None: self.portEnd = pbserver.portEnd
        if pbserver.socketBufSize != None: self.socketBufSize = pbserver.socketBufSize
        if pbserver.downloadOccupied != None: self.downloadOccupied = pbserver.downloadOccupied
        if pbserver.speedLimitType != None: self.speedLimitType = pbserver.speedLimitType
        if pbserver.uploadSpeed != None: self.uploadSpeed = pbserver.uploadSpeed
        if pbserver.downloadSpeed != None: self.downloadSpeed = pbserver.downloadSpeed
        if pbserver.enableFTPS != None: self.enableFTPS = pbserver.enableFTPS
        if pbserver.privateKeyFile != None: self.privateKeyFile = pbserver.privateKeyFile
        if pbserver.certificateFile != None: self.certificateFile = pbserver.certificateFile
        if pbserver.keyPassword != None: self.keyPassword = pbserver.keyPassword
        if pbserver.packageSize != None: self.packageSize = pbserver.packageSize
        if pbserver.enableProxy != None: self.enableProxy = pbserver.enableProxy
        if pbserver.proxyHost != None: self.proxyHost = pbserver.proxyHost
        if pbserver.proxyPort != None: self.proxyPort = pbserver.proxyPort
        if pbserver.license != None: self.license = pbserver.license
        if pbserver.compression != None: self.compression = pbserver.compression
        if pbserver.outbound != None: self.outbound = pbserver.outbound
        if pbserver.inbound != None: self.inbound = pbserver.inbound

        # if pbserver.created != None: self.created = pbserver.created

########################################################################

serverPatternName = '^.{1,50}$'
serverPatternIP = '^((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)(\.((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)){3}$'
serverPatternDomain = '^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62}){0,3}(\.[a-zA-Z][-a-zA-Z]{0,62}){1}$'

def verifyServerFormat(server):
    if server.name != "" and not re.match(serverPatternName, server.name):
        return typhoon_pb2.WS_IncorrectNameFormat

    b1 = re.match(serverPatternIP, server.host)
    b2 = re.match(serverPatternDomain, server.host)

    if not b1 and  not b2 :
        return typhoon_pb2.WS_IncorrectHostFormat

    if server.port < 1 or server.port > 65535 :
        return typhoon_pb2.WS_InvalidTCPPort

    if server.proxyPort < 1 or server.proxyPort > 65535 :
        return typhoon_pb2.WS_InvalidUDPPort

    if server.packageSize < 600 or server.packageSize > 1442 :
        return typhoon_pb2.WS_InvalidPackageSize

    if server.outbound < 0 or server.inbound < 0 :
        return typhoon_pb2.WS_InvalidBandwidth

    if server.directory != "" and not os.path.exists(os.path.abspath(server.directory)):
        return typhoon_pb2.WS_DirNotExist

    return typhoon_pb2.OK

########################################################################

# only one server
def GetServer():
    s = None
    try:
        s = Server.get(Server.id == 1000)
    except peewee.DoesNotExist as e:
        try:
            s = Server.create(
                id = 1000, 
                name = 'RaySync Server',
                version = '1.2.3', 
                device = utils.macaddr(), 
                host = utils.externalIP(),
                port = 2121,
                os = utils.osversion(),
                enableProxy = 1,
                proxyHost = utils.externalIP(),
                proxyPort = 8388,
                license = '',
                compression = 1,
                outbound = 104857600,
                inbound = 104857600)
        except peewee.OperationalError as e:
            logger.error(e)
            logger.error('Get Server Info Error by get and create')
            sys.exit(2)
    return s

def InitDatabase():
    peeweeLogger = logging.getLogger('peewee')
    peeweeLogger.setLevel(logging.WARN)
    # peeweeLogger.addHandler(logging.StreamHandler())

    try:
        User.create_table()
        Server.create_table()

        User.create(
            id=1000, 
            account='test', 
            password='123456', 
            permission=255, 
            name='Experience Account', 
            email='test@raysync.io')

        # TODO version
        Server.create(
            id = 1000, 
            name = 'RaySync Server',
            version = '1.2.3', 
            device = utils.macaddr(), 
            host = utils.externalIP(),
            port = 2121,
            os = utils.osversion(),
            enableProxy = 1,
            proxyHost = utils.externalIP(),
            proxyPort = 8388,
            license = '',
            compression = 1,
            directory = '',
            outbound = 104857600,
            inbound = 104857600)
        logger.info('Create database successed')
    except peewee.OperationalError as e:
        logger.error(str(sys._getframe().f_code.co_name) + ':' + str(sys._getframe().f_lineno) + str(e))
        logger.info('Database is already exists')
        return
    except Exception as e:
        logger.error(str(sys._getframe().f_code.co_name) + ':' + str(sys._getframe().f_lineno) + str(e))
        sys.exit(2)
        return

########################################################################
'''
    admin is in config.ini
'''

test

import peewee
from handler.models import User
from handler.models import Server

if __name__ == "__main__":
    try:
        # print db.dbinstance
        User.create_table()
        Server.create_table()

    except peewee.OperationalError:
        print "Artist table already exists!"

    User.create(account='鸟', password='123456')
    User.create(account='山明', password='123456')
    Server.create(version='1.2.2', device='ff:00:ff:00:ff:00')

OpenCV-Python

OpenCV-Python OpenCV-Python Installing OpenCV from prebuilt binaries Below Python packages are to be downloaded and installed to their default lo...

阅读全文

Python 乱码解决

''.decode(sys.getfilesystemencoding())

阅读全文

python hideconsole

def hideConcole(): import ctypes kernel32 = ctypes.WinDLL('kernel32') user32 = ctypes.WinDLL('user32') SW_HIDE = 0 hWnd = k...

阅读全文

欢迎留言