示例#1
0
    def __init__(self, dbname, **keyword):
        """load init

        """
        self._func = {}
        self.dbname = dbname
        self.keyword = keyword
        self.Analy = SourceToAnalysis()[dbname]
        self.point = query(dbname, filter='', limit=100)
        self.query_retry = 0
        self.max_query_retry = 10
        func_name = 'to_%s'
        if keyword.get('UPDATE') == True:
            if isinstance(self.Analy.get('Update'), dict):
                self.Analy = self.Analy['Update']
            else:
                self.Analy['From'] = self.Analy['To']
            func_name = 'to_update_%s'
        elif keyword.get('EDIT') == True:
            if isinstance(self.Analy.get('Edit'), dict):
                self.Analy = self.Analy['Edit']
            func_name = 'to_edit_%s'
        elif keyword.get('QUERY') == True:
            if isinstance(self.Analy.get('Query'), dict):
                sefl.Analy = self.Analy['Query']
            else:
                self.Analy['From'] = self.Analy['To']
            func_name = 'to_query_%s'
        for todat in self.Analy['To']:
            self._func[todat.__name__] = getattr(
                self, func_name % todat.__name__)
示例#2
0
class Process(object):

    """Process"""

    def __init__(self, dbname, **keyword):
        """load init

        """
        self._func = {}
        self.dbname = dbname
        self.keyword = keyword
        self.Analy = SourceToAnalysis()[dbname]
        self.point = query(dbname, filter='', limit=100)
        self.query_retry = 0
        self.max_query_retry = 10
        func_name = 'to_%s'
        if keyword.get('UPDATE') == True:
            if isinstance(self.Analy.get('Update'), dict):
                self.Analy = self.Analy['Update']
            else:
                self.Analy['From'] = self.Analy['To']
            func_name = 'to_update_%s'
        elif keyword.get('EDIT') == True:
            if isinstance(self.Analy.get('Edit'), dict):
                self.Analy = self.Analy['Edit']
            func_name = 'to_edit_%s'
        elif keyword.get('QUERY') == True:
            if isinstance(self.Analy.get('Query'), dict):
                sefl.Analy = self.Analy['Query']
            else:
                self.Analy['From'] = self.Analy['To']
            func_name = 'to_query_%s'
        for todat in self.Analy['To']:
            self._func[todat.__name__] = getattr(
                self, func_name % todat.__name__)

    def set_default_point(self):
        self.point = query(self.dbname, filter='', limit=100)

    def works(self):
        """Create work list 

        """
        count = {}
        index = {}
        for base in self.Analy['From']:
            count[base.__name__] = []
            index[base.__name__] = []
            # self.point.set_tablename(tablename=base.id)

            #import pdb
            # pdb.set_trace()
            if self.keyword.has_key('filter'):
                self.point.set_filter(self.keyword['filter'], limit=None)
            else:
                self.point.set_filter('', limit=None)
            self.point.session_status()
            try:
                result = self.point.session.execute(
                    'select id from %s where %s' % (base.__name__, self.keyword['filter'])).fetchall()
            except SqlQuery_TimeOut:
                self.point.session.close()
                if self.query_retry < self.max_query_retry:
                    time.sleep(1)
                    self.works()
                    self.query_retry += 1
                else:
                    raise OperationalError, "query time Out"

            self.query_retry = 0
            self.point.session.close()
            for item in result:  # self.point.query():
                count[base.__name__].append(item)

        for item in count:
            index[item].extend([count[item][i:i + 50]
                                for i in range(0, len(count[item]), 50)])

        return index

    def runing_works(self):

        data = self.works()
        if not data:
            return
        run = Runing(
            data, self._func, self.point, self.Analy['From'], self.Analy['To'])
        run.run()