Example #1
0
def load_table(table,
               filename,
               con,
               delimiter=',',
               format=None,
               encoding='utf-8',
               delete=True):
    import csv
    from uliweb.utils.date import to_date, to_datetime

    table = reflect_table(con, table.name)

    if delete:
        do_(table.delete())

    if not os.path.exists(filename):
        log.info("The table [%s] data is not existed." % table.name)
        return

    f = fin = open(filename, 'rb')
    try:
        first_line = f.readline()
        fields = first_line[1:].strip().split()
        n = 1
        if format:
            fin = csv.reader(f, delimiter=delimiter)

        for line in fin:
            try:
                n += 1
                if not format:
                    line = eval(line.strip())
                record = dict(zip(fields, line))
                params = {}
                for c in table.c:
                    if c.name in record:
                        if not format:
                            params[c.name] = record[c.name]
                        else:
                            if record[c.name] == 'NULL':
                                params[c.name] = None
                            else:
                                if isinstance(c.type, String):
                                    params[c.name] = unicode(
                                        record[c.name], encoding)
                                elif isinstance(c.type, Date):
                                    params[c.name] = to_date(
                                        to_datetime(record[c.name]))
                                elif isinstance(c.type, DateTime):
                                    params[c.name] = to_datetime(
                                        record[c.name])
                                else:
                                    params[c.name] = record[c.name]
                ins = table.insert().values(**params)
                do_(ins)
            except:
                log.error('Error: Line %d' % n)
                raise
    finally:
        f.close()
Example #2
0
def load_table(table, filename, con, delimiter=',', format=None, encoding='utf-8', delete=True):
    import csv
    from uliweb.utils.date import to_date, to_datetime
    
    table = reflect_table(con, table.name)
    
    if delete:
        do_(table.delete())
    
    if not os.path.exists(filename):
        log.info("The table [%s] data is not existed." % table.name)
        return 
    
    f = fin = open(filename, 'rb')
    try:
        first_line = f.readline()
        fields = first_line[1:].strip().split()
        n = 1
        if format:
            fin = csv.reader(f, delimiter=delimiter)
            
        for line in fin:
            try:
                n += 1
                if not format:
                    line = eval(line.strip())
                record = dict(zip(fields, line))
                params = {}
                for c in table.c:
                    if c.name in record:
                        if not format:
                            params[c.name] = record[c.name]
                        else:
                            if record[c.name] == 'NULL':
                                params[c.name] = None
                            else:
                                if isinstance(c.type, String):
                                    params[c.name] = unicode(record[c.name], encoding)
                                elif isinstance(c.type, Date):
                                    params[c.name] = to_date(to_datetime(record[c.name]))
                                elif isinstance(c.type, DateTime):
                                    params[c.name] = to_datetime(record[c.name])
                                else:
                                    params[c.name] = record[c.name]
                ins = table.insert().values(**params)
                do_(ins)
            except:
                log.error('Error: Line %d' % n)
                raise
    finally:
        f.close()
Example #3
0
 def _conver():
     nonlocal v
     if v and col.type.python_type == datetime:
         _v = v
         v = to_datetime(v, tzinfo=getattr(request, "tzinfo", None))
         if v == None:
             raise UliwebError("'%s' cannot convert to datetime" % (_v))
Example #4
0
 def _get_tutorial_chapters(self, tutorial_id):
     from uliweb.utils import date
     User = get_model('user')
     
     query = self.model_chapters.filter((self.model_chapters.c.tutorial == tutorial_id) & 
         (self.model_chapters.c.deleted==False))
     query.values('id', 'title', 'hits', 'parent', 'render', 'order', 'chars_count', 
         'comments_count', 'modified_date', 'modified_user')
     query.order_by(self.model_chapters.c.parent, self.model_chapters.c.order)
     for row in query:
         d = Storage(dict(row))
         d['modified_date'] = date.to_datetime(d.modified_date)
         d['modified_user'] = User.get(d.modified_user)
         yield d
Example #5
0
    def _get_tutorial_chapters(self, tutorial_id):
        from uliweb.utils import date
        User = get_model('user')

        query = self.model_chapters.filter(
            (self.model_chapters.c.tutorial == tutorial_id)
            & (self.model_chapters.c.deleted == False))
        query.values('id', 'title', 'hits', 'parent', 'render', 'order',
                     'chars_count', 'comments_count', 'modified_date',
                     'modified_user')
        query.order_by(self.model_chapters.c.parent,
                       self.model_chapters.c.order)
        for row in query:
            d = Storage(dict(row))
            d['modified_date'] = date.to_datetime(d.modified_date)
            d['modified_user'] = User.get(d.modified_user)
            yield d
Example #6
0
    def _make_data(self):
        from uliweb.utils import date

        return {
            'str':'string',
            'password':'******',
            # 'hidden':'hidden',
            'int':10,
            'float':1.0,
            'bool':True,
            'list':[u'中', u'文'],
            'select1':'F',
            'select2':['F', 'M'],
            'radios1':'F',
            'radios2':'M',
            'checkboxes1':['F'],
            'checkboxes2':['F', 'M'],
            'date':date.to_date('2010-10-12'),
            'datetime':date.to_datetime('2010-10-12 13:23:45'),
            'time':date.to_time('13:23:45'),

            'desc':'<p>abc</p><p>cde</p>',

        }
Example #7
0
def load_table(table,
               filename,
               con,
               delimiter=',',
               format=None,
               encoding='utf-8',
               delete=True,
               bulk=100,
               engine_name=None):
    import csv
    from uliweb.utils.date import to_date, to_datetime

    if not os.path.exists(filename):
        return "Skipped (data not found)"

    table = reflect_table(con, table.name)

    if delete:
        do_(table.delete(), engine_name)

    b = time()
    bulk = max(1, bulk)
    f = fin = open(filename, 'rb')
    try:
        first_line = f.readline()
        if first_line.startswith('#'):
            first_line = first_line[1:]
        n = 0
        count = 0
        if format:
            fields = first_line.strip().split(delimiter)
            fin = csv.reader(f, delimiter=delimiter)
        else:
            fields = first_line.strip().split()

        buf = []
        for line in fin:
            try:
                n += 1
                count += 1
                if not format:
                    line = eval(line.strip())
                record = dict(zip(fields, line))
                params = {}
                for c in table.c:
                    if c.name in record:
                        if not format:
                            params[c.name] = record[c.name]
                        else:
                            if record[c.name] == 'NULL':
                                params[c.name] = None
                            else:
                                if isinstance(c.type, String):
                                    params[c.name] = unicode(
                                        record[c.name], encoding)
                                elif isinstance(c.type, Date):
                                    params[c.name] = to_date(
                                        to_datetime(record[c.name]))
                                elif isinstance(c.type, DateTime):
                                    params[c.name] = to_datetime(
                                        record[c.name])
                                else:
                                    params[c.name] = record[c.name]
                buf.append(params)
                if count >= bulk:
                    do_(table.insert(), engine_name, args=buf)
                    count = 0
                    buf = []
            except:
                log.error('Error: Line %d' % n)
                raise

        if buf:
            do_(table.insert(), engine_name, args=buf)

        return 'OK (%d/%lfs)' % (n, time() - b)
    finally:
        f.close()
Example #8
0
def timesince(d, now=None, pos=True, flag=False):
    """
    pos means calculate which direction, pos = True, now - d, pos = False, d - now
    flag means return value type, True will return since, message and Flase return message
    >>> d = datetime.datetime(2009, 10, 1, 12, 23, 19)
    >>> timesince(d, d, True)
    >>> now = datetime.datetime(2009, 10, 1, 12, 24, 19)
    >>> timesince(d, now, True)
    u'1 minute ago'
    >>> now = datetime.datetime(2009, 10, 1, 12, 24, 30)
    >>> timesince(d, now, True)
    u'1 minute ago'
    >>> now = datetime.datetime(2009, 9, 28, 12, 24, 30)
    >>> timesince(d, now, True)
    u'2 days, 23 hours later'
    >>> now = datetime.datetime(2009, 10, 3, 12, 24, 30)
    >>> timesince(d, now, True)
    u'2 days ago'
    """
    if not d:
        if flag:
            return 0, ''
        else:
            return ''
    chunks = (
      (60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)),
      (60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)),
      (60 * 60 * 24 * 7, lambda n : ungettext('week', 'weeks', n)),
      (60 * 60 * 24, lambda n : ungettext('day', 'days', n)),
      (60 * 60, lambda n: ungettext('hour', 'hours', n)),
      (60, lambda n: ungettext('minute', 'minutes', n))
    )

    if not now:
        now = date.now()
    else:
        now = date.to_datetime(now)
    d = date.to_datetime(d)
    
    delta = now - (d - datetime.timedelta(0, 0, d.microsecond))
    oldsince = since = delta.days * 24 * 60 * 60 + delta.seconds
    
    suffix = ''
    if pos:
        if since >= 0:
            suffix = ugettext(' ago')
        elif since < 0:
            suffix = ugettext(' later')
            since *= -1
    
    for i, (seconds, name) in enumerate(chunks):
        count = since // seconds
        if count != 0:
            break
    s = ('%(number)d %(type)s') % {'number': count, 'type': name(count)}
    if i + 1 < len(chunks):
        # Now get the second item
        seconds2, name2 = chunks[i + 1]
        count2 = (since - (seconds * count)) // seconds2
        if count2 != 0:
            s += (', %(number)d %(type)s') % {'number': count2, 'type': name2(count2)}
    #if flag==True, then return twe elements (since, message) 
    if flag:
        return oldsince, s + suffix
    else:
        return s + suffix
Example #9
0
def load_table(table, filename, con, delimiter=',', format=None, 
    encoding='utf-8', delete=True, bulk=100, engine_name=None):
    import csv
    from uliweb.utils.date import to_date, to_datetime

    if not os.path.exists(filename):
        return "Skipped (data not found)"

    table = reflect_table(con, table.name)
    
    if delete:
        table.drop(con)
        table.create(con)
        # do_(table.drop(), engine_name)
        # do_(table.create(), engine_name)

    b = time()
    bulk = max(1, bulk)
    f = fin = open(filename, 'rb')

    try:
        first_line = f.readline()
        if first_line.startswith('#'):
            first_line = first_line[1:]
        n = 0
        count = 0
        if format:
            fields = first_line.strip().split(delimiter)
            fin = csv.reader(f, delimiter=delimiter)
        else:
            fields = first_line.strip().split()

        buf = []
        for line in fin:
            try:
                n += 1
                count += 1
                if not format:
                    line = eval(line.strip())
                record = dict(zip(fields, line))
                params = {}
                for c in table.c:
                    if c.name in record:
                        if not format:
                            params[c.name] = record[c.name]
                        else:
                            if record[c.name] == 'NULL':
                                params[c.name] = None
                            else:
                                if isinstance(c.type, String):
                                    params[c.name] = unicode(record[c.name], encoding)
                                elif isinstance(c.type, Date):
                                    params[c.name] = to_date(to_datetime(record[c.name]))
                                elif isinstance(c.type, DateTime):
                                    params[c.name] = to_datetime(record[c.name])
                                else:
                                    params[c.name] = record[c.name]
                buf.append(params)
                if count >= bulk:
                    do_(table.insert(), engine_name, args=buf)
                    count = 0
                    buf = []
            except:
                log.error('Error: Line %d of %s' % (n, filename))
                raise
        
        if buf:
            do_(table.insert(), engine_name, args=buf)

        return 'OK (%d/%lfs)' % (n, time()-b)
    finally:
        f.close()
Example #10
0
 def validate(self, data, all_data=None):
     return bool(date.to_datetime(data))
Example #11
0
def timesince(d, now=None, pos=True, flag=False):
    """
    pos means calculate which direction, pos = True, now - d, pos = False, d - now
    flag means return value type, True will return since, message and Flase return message
    >>> d = datetime.datetime(2009, 10, 1, 12, 23, 19)
    >>> timesince(d, d, True)
    >>> now = datetime.datetime(2009, 10, 1, 12, 24, 19)
    >>> timesince(d, now, True)
    u'1 minute ago'
    >>> now = datetime.datetime(2009, 10, 1, 12, 24, 30)
    >>> timesince(d, now, True)
    u'1 minute ago'
    >>> now = datetime.datetime(2009, 9, 28, 12, 24, 30)
    >>> timesince(d, now, True)
    u'2 days, 23 hours later'
    >>> now = datetime.datetime(2009, 10, 3, 12, 24, 30)
    >>> timesince(d, now, True)
    u'2 days ago'
    """
    if not d:
        if flag:
            return 0, ''
        else:
            return ''
    chunks = ((60 * 60 * 24 * 365, lambda n: ungettext('year', 'years', n)),
              (60 * 60 * 24 * 30, lambda n: ungettext('month', 'months', n)),
              (60 * 60 * 24 * 7, lambda n: ungettext('week', 'weeks', n)),
              (60 * 60 * 24, lambda n: ungettext('day', 'days', n)),
              (60 * 60, lambda n: ungettext('hour', 'hours', n)),
              (60, lambda n: ungettext('minute', 'minutes', n)))

    if not now:
        now = date.now()
    else:
        now = date.to_datetime(now)
    d = date.to_datetime(d)

    delta = now - (d - datetime.timedelta(0, 0, d.microsecond))
    oldsince = since = delta.days * 24 * 60 * 60 + delta.seconds

    suffix = ''
    if pos:
        if since >= 0:
            suffix = ugettext(' ago')
        elif since < 0:
            suffix = ugettext(' later')
            since *= -1

    for i, (seconds, name) in enumerate(chunks):
        count = since // seconds
        if count != 0:
            break
    s = ('%(number)d %(type)s') % {'number': count, 'type': name(count)}
    if i + 1 < len(chunks):
        # Now get the second item
        seconds2, name2 = chunks[i + 1]
        count2 = (since - (seconds * count)) // seconds2
        if count2 != 0:
            s += (', %(number)d %(type)s') % {
                'number': count2,
                'type': name2(count2)
            }
    #if flag==True, then return twe elements (since, message)
    if flag:
        return oldsince, s + suffix
    else:
        return s + suffix
Example #12
0
 def validate(self, data, all_data=None):
     return bool(date.to_datetime(data))