Example #1
0
 def upload_path(self, instance, filename):
     # file will be uploaded to MEDIA_ROOT/file/<ym>/<stamp>.<ext>
     return '{ym}/{stamp}{ext}'.format(
         ym=tc.local_string(format='%Y%m'),
         stamp=tc.local_timestamp(ms=True),
         ext=os.path.splitext(filename)[1].lower(),
     )
Example #2
0
def djfile_content_storage(content,
                           ext='jpeg',
                           base_path='file',
                           file_path=None):
    if not file_path:
        # Joint File Path
        # Base Path
        base_path = settings.DJANGO_FILE_DOWNLOAD_BASE_PATH if hasattr(
            settings, 'DJANGO_FILE_DOWNLOAD_BASE_PATH') else base_path
        # YM Path
        ym_path = tc.local_string(format='%Y%m') if hasattr(
            settings, 'DJANGO_FILE_DOWNLOAD_USE_YM'
        ) and settings.DJANGO_FILE_DOWNLOAD_USE_YM else ''
        # File Name
        file_name = tc.local_string(format='%Y%m%d%H%M%S') if hasattr(
            settings, 'DJANGO_FILE_DOWNLOAD_USE_DT'
        ) and settings.DJANGO_FILE_DOWNLOAD_USE_DT else hashlib.md5(
            content).hexdigest()
        # File Path
        file_path = '{0}/{1}{2}{3}.{4}'.format(base_path, ym_path, ym_path
                                               and '/', file_name, ext)

    # File Save
    if not default_storage.exists(file_path):
        default_storage.save(file_path, ContentFile(content))

    # File URL
    file_url = '{0}{1}'.format(
        settings.DOMAIN if hasattr(settings, 'DOMAIN') else '',
        default_storage.url(file_path))

    return file_path, file_url
Example #3
0
 def upgrade_data(self):
     return {
         'uid': self.uid,
         'is_upgrade': self.final_is_upgrade,
         'upgrade_time': tc.datetime_to_string(tc.to_local_datetime(self.upgrade_time)) if self.final_is_upgrade and self.upgrade_time else '',
         'expire_time': tc.datetime_to_string(tc.to_local_datetime(self.expire_time)) if self.final_is_upgrade and self.expire_time else '',
         'upgrade_count': self.upgrade_count,
     }
Example #4
0
 def upload_img_path(self, filename):
     '''上传图片的默认路径'''
     # usonpython.JPG
     return 'images/{ym}/{stamp}.{ext}'.format(
         ym=tc.local_string(format='%Y-%m'),
         stamp=tc.local_timestamp(),
         # ext=filename.split('.')[1].lower(),
         ext=os.path.splitext(filename)[1].lower(),
     )
Example #5
0
 def music(self,
           touser=None,
           fromuser=None,
           title=None,
           description=None,
           music_url=None,
           hq_music_url=None,
           media_id=None):
     """
     <xml>
         <ToUserName>< ![CDATA[toUser] ]></ToUserName>
         <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
         <CreateTime>12345678</CreateTime>
         <MsgType>< ![CDATA[music] ]></MsgType>
         <Music>
             <Title>< ![CDATA[TITLE] ]></Title>
             <Description>< ![CDATA[DESCRIPTION] ]></Description>
             <MusicUrl>< ![CDATA[MUSIC_Url] ]></MusicUrl>
             <HQMusicUrl>< ![CDATA[HQ_MUSIC_Url] ]></HQMusicUrl>
             <ThumbMediaId>< ![CDATA[media_id] ]></ThumbMediaId>
         </Music>
     </xml>
     """
     return pair_to_xml([('ToUserName', touser), ('FromUserName', fromuser),
                         ('CreateTime', tc.utc_timestamp()),
                         ('MsgType', 'music'),
                         ('Music', [
                             ('Title', title),
                             ('Description', description),
                             ('MusicUrl', music_url),
                             ('HQMusicUrl', hq_music_url),
                             ('ThumbMediaId', media_id),
                         ])])
Example #6
0
    def Crawl(self, num, date, direct, distance):
        self.rec_id = num
        self.rec_date = date

        self.id_tag = self.rec_id[0:2]
        self.id_num = int(self.rec_id[2:10])
        self.receipt = {}
        cont = 0
        cont2 = 0

        while (abs(int(self.id_num) - int(self.rec_id[2:10])) < distance):
            success = self.Query()
            if success is True:
                self.id_num += direct
                cont = 0
                cont2 = 0
            elif (success is False) and (abs(cont2) < 3):
                print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
                self.id_num += direct
                cont2 += direct
            elif (success is False) and (cont == 0) and (abs(cont2) >= 3):
                self.rec_date = TimeConvert(self.rec_date, direct)
                print "TimeConvert : " + self.rec_date
                self.id_num -= cont2
                cont2 = 0
                cont += 1
            elif (success is False) and (cont != 0) and (abs(cont2) >= 3):
                break
            else:
                log.error('main loop unusually break')
                sys.exit(1)
        return self.receipt
Example #7
0
 def upload_file_path(self, filename):
     '''
     上传模板文件
     :param filename: 模板文件名
     :return: 文件存放路径
     '''
     return "templatefile/{ym}/".format(ym=tc.local_string(
         format='%Y-%m')) + filename
Example #8
0
def get_questions(request):
    """
    获取题目信息接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息;kind_info: 比赛信息;qa_id: 比赛答题记录;questions: 比赛随机后的题目;
    """
    kind_id = request.GET.get('kind_id', '')  # 获取kind_id
    uid = request.GET.get('uid', '')  # 获取uid
    try:  # 获取比赛信息
        kind_info = CompetitionKindInfo.objects.select_for_update().get(
            kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:  # 未获取到,返回错误码100001
        return json_response(*CompetitionError.CompetitionNotFound)
    try:  # 获取题库信息
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:  # 未获取到,返回错误码100004
        return json_response(*CompetitionError.BankInfoNotFound)
    try:  # 获取用户信息
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:  # 未获取到,返回错误码200001
        return json_response(*ProfileError.ProfileNotFound)
    qc = ChoiceInfo.objects.filter(bank_id=kind_info.bank_id)  # 选择题
    qf = FillInBlankInfo.objects.filter(bank_id=kind_info.bank_id)  # 填空题
    questions = []  # 将两种题型放到同一个列表中
    for i in qc.iterator():
        questions.append(i.data)
    for i in qf.iterator():
        questions.append(i.data)
    question_num = kind_info.question_num  # 出题数
    q_count = bank_info.total_question_num  # 总题数
    if q_count < question_num:  # 出题数大于总题数,返回错误码100005
        return json_response(CompetitionError.QuestionNotSufficient)
    qs = random.sample(questions, question_num)  # 随机分配题目
    qa_info = CompetitionQAInfo.objects.select_for_update(
    ).create(  # 创建答题log数据
        kind_id=kind_id,
        uid=uid,
        qsrecord=[q['question'] for q in qs],
        asrecord=[q['answer'] for q in qs],
        total_num=question_num,
        started_stamp=tc.utc_timestamp(ms=True, milli=True),  # 设置开始时间戳
        started=True)
    for i in qs:  # 剔除答案信息
        i.pop('answer')
    return json_response(
        200,
        'OK',
        {  # 返回JSON数据,包括题目信息,答题log信息等
            'kind_info': kind_info.data,
            'user_info': profile.data,
            'qa_id': qa_info.qa_id,
            'questions': qs
        })
Example #9
0
 def test_time_format(self):
     assert tc.format() == tc.TIME_FORMAT
     timeformat = '%Y%m%d%H%M%S'
     tc.__init__(format=timeformat)
     assert tc.TIME_FORMAT == timeformat
     assert tc.format() == timeformat
     tc.__init__(format=tc.BASE_TIME_FORMAT)
Example #10
0
 def text(self, touser=None, fromuser=None, content=None):
     """
     <xml>
         <ToUserName>< ![CDATA[toUser] ]></ToUserName>
         <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
         <CreateTime>12345678</CreateTime>
         <MsgType>< ![CDATA[text] ]></MsgType>
         <Content>< ![CDATA[你好] ]></Content>
     </xml>
     """
     return pair_to_xml([('ToUserName', touser), ('FromUserName', fromuser),
                         ('CreateTime', tc.utc_timestamp()),
                         ('MsgType', 'text'), ('Content', content)])
Example #11
0
def short_url_redirect(request, surl):
    """
    >> Chrome 请求
    ?nickname=姜戈

    >> Django 获取
    u'?nickname=%E5%A7%9C%E6%88%88'

    >> furl(lurl).add(furl(request.get_raw_uri()).query.params).url
    ?nickname=%C3%A5%C2%A7%C2%9C%C3%A6%C2%88%C2%88

    >> furl(lurl).add(furl(cc.Convert2Utf8(request.get_raw_uri())).query.params).url
    ?nickname=%E5%A7%9C%E6%88%88
    """
    try:
        lurl = ShortURL.objects.get(surl=surl).lurl
    except ShortURL.DoesNotExist:
        lurl = None

    # Short URL Not Exists
    if not lurl:
        redirect_url = ''

        if hasattr(settings, 'DJANGO_SHORT_URL_REDIRECT_URL'):
            redirect_url = settings.DJANGO_SHORT_URL_REDIRECT_URL

        if hasattr(settings, 'DJANGO_SHORT_URL_FUNC') and hasattr(
                settings.DJANGO_SHORT_URL_FUNC, '__call__'):
            redirect_url = settings.DJANGO_SHORT_URL_FUNC(request)

        if not redirect_url:
            return render(request, 'django_short_url/errmsg.html', {
                'title': 'Error',
                'errmsg': 'Short URL not Exists'
            })

        return redirect(redirect_url)

    flurl = furl(lurl)
    if hasattr(settings, 'DJANGO_SHORT_URL_ADD_TIMESTAMP') and getattr(
            settings, 'DJANGO_SHORT_URL_ADD_TIMESTAMP'):
        stamp_key = getattr(
            settings, 'DJANGO_SHORT_URL_TIMESTAMP_KEY') if hasattr(
                settings, 'DJANGO_SHORT_URL_TIMESTAMP_KEY') else 't'
        flurl = flurl.remove([stamp_key]).add({stamp_key: tc.utc_timestamp()})

    return redirect(
        flurl.add(furl(cc.Convert2Utf8(
            request.get_raw_uri())).query.params).url)
Example #12
0
 def voice(self, touser=None, fromuser=None, media_id=None):
     """
     <xml>
         <ToUserName>< ![CDATA[toUser] ]></ToUserName>
         <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
         <CreateTime>12345678</CreateTime>
         <MsgType>< ![CDATA[voice] ]></MsgType>
         <Voice>
             <MediaId>< ![CDATA[media_id] ]></MediaId>
         </Voice>
     </xml>
     """
     return pair_to_xml([('ToUserName', touser), ('FromUserName', fromuser),
                         ('CreateTime', tc.utc_timestamp()),
                         ('MsgType', 'voice'),
                         ('Voice', [('MediaId', media_id)])])
Example #13
0
    def news(self, touser=None, fromuser=None, items=[]):
        """
        <xml>
            <ToUserName>< ![CDATA[toUser] ]></ToUserName>
            <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
            <CreateTime>12345678</CreateTime>
            <MsgType>< ![CDATA[news] ]></MsgType>
            <ArticleCount>2</ArticleCount>
            <Articles>
                <item>
                    <Title>< ![CDATA[title1] ]></Title>
                    <Description>< ![CDATA[description1] ]></Description>
                    <PicUrl>< ![CDATA[picurl] ]></PicUrl>
                    <Url>< ![CDATA[url] ]></Url>
                </item>
                <item>
                    <Title>< ![CDATA[title] ]></Title>
                    <Description>< ![CDATA[description] ]></Description>
                    <PicUrl>< ![CDATA[picurl] ]></PicUrl>
                    <Url>< ![CDATA[url] ]></Url>
                </item>
            </Articles>
        </xml>
        """
        articleCount = len(items)

        if not 0 < articleCount < 8:
            return

        return pair_to_xml([
            ('ToUserName', touser), ('FromUserName', fromuser),
            ('CreateTime', tc.utc_timestamp()), ('MsgType', 'news'),
            ('ArticleCount', articleCount),
            ('Articles', [[('Title', item.get('title', '')),
                           ('Description', item.get('description', '')),
                           ('PicUrl', item.get('picurl', '')),
                           ('Url', item.get('url', ''))] for item in items])
        ])
Example #14
0
 def video(self,
           touser=None,
           fromuser=None,
           media_id=None,
           title=None,
           description=None):
     """
     <xml>
         <ToUserName>< ![CDATA[toUser] ]></ToUserName>
         <FromUserName>< ![CDATA[fromUser] ]></FromUserName>
         <CreateTime>12345678</CreateTime>
         <MsgType>< ![CDATA[video] ]></MsgType>
         <Video>
             <MediaId>< ![CDATA[media_id] ]></MediaId>
             <Title>< ![CDATA[title] ]></Title>
             <Description>< ![CDATA[description] ]></Description>
         </Video>
     </xml>
     """
     return pair_to_xml([('ToUserName', touser), ('FromUserName', fromuser),
                         ('CreateTime', tc.utc_timestamp()),
                         ('MsgType', 'video'),
                         ('Video', [('MediaId', media_id), ('Title', title),
                                    ('Description', description)])])
Example #15
0
 def test_remove_microsecond(self):
     dt = tc.remove_microsecond(tc.utc_datetime())
     assert dt.microsecond == 0
Example #16
0
 def test_several_days_ago(self):
     assert isinstance(tc.several_days_ago(days=1), datetime.datetime)
Example #17
0
 def test_validate_string(self):
     assert tc.validate_string('1988-06-15 12:12:12', '%Y-%m-%d %H:%M:%S')
     assert not tc.validate_string('19880615121212', '%Y-%m-%d %H:%M:%S')
def main():

    # Variable

    print(">> tc.TIME_ZONE")
    print("    Exec: {}".format("tc.TIME_ZONE"))
    print("    Result: {}".format(tc.TIME_ZONE))
    print()
    print(">> tc.TIME_FORM")
    print("    Exec: {}".format("tc.TIME_FORMAT"))
    print("    Result: {}".format(tc.TIME_FORMAT))
    print()

    # DATETIME

    print(">> utc_datetime()")
    print("    Exec: {}".format("tc.utc_datetime()"))
    print("    Result: {}".format(tc.utc_datetime()))
    print()
    print(">> local_datetime()")
    print("    Exec: {}".format("tc.local_datetime()"))
    print("    Result: {}".format(tc.local_datetime()))
    print()
    print(">> to_utc_datetime(local_dt, timezone=TIME_ZONE)")
    print("    Exec: {}".format("tc.to_utc_datetime(datetime.datetime.now(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_utc_datetime(datetime.datetime.now(), timezone=TIME_ZONE)))
    print("    Exec: {}".format("tc.to_utc_datetime(tc.local_datetime(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_utc_datetime(tc.local_datetime(), timezone=TIME_ZONE)))
    print("    Exec: {}".format("tc.to_utc_datetime(tc.utc_datetime(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_utc_datetime(tc.utc_datetime(), timezone=TIME_ZONE)))
    print("    Exec: {}".format("tc.to_utc_datetime(tc.make_naive(tc.utc_datetime()), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_utc_datetime(tc.make_naive(tc.utc_datetime()), timezone=TIME_ZONE)))
    print()
    print(">> to_local_datetime(utc_dt, timezone=TIME_ZONE)")
    print("    Exec: {}".format("tc.to_local_datetime(datetime.datetime.utcnow(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_local_datetime(datetime.datetime.utcnow(), timezone=TIME_ZONE)))
    print("    Exec: {}".format("tc.to_local_datetime(tc.utc_datetime(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.to_local_datetime(tc.utc_datetime(), timezone=TIME_ZONE)))
    print()
    print(">> yesterday_utc_datetime()")
    print("    Exec: {}".format("tc.yesterday_utc_datetime()"))
    print("    Result: {}".format(tc.yesterday_utc_datetime()))
    print()
    print(">> tomorrow_utc_datetime()")
    print("    Exec: {}".format("tc.tomorrow_utc_datetime()"))
    print("    Result: {}".format(tc.tomorrow_utc_datetime()))
    print()
    print(">> yesterday_local_datetime()")
    print("    Exec: {}".format("tc.yesterday_local_datetime()"))
    print("    Result: {}".format(tc.yesterday_local_datetime()))
    print()
    print(">> tomorrow_local_datetime()")
    print("    Exec: {}".format("tc.tomorrow_local_datetime()"))
    print("    Result: {}".format(tc.tomorrow_local_datetime()))
    print()

    # STRING

    print(">> utc_string(utc_dt=None, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.utc_string(utc_dt=None, format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.utc_string(utc_dt=None, format=TIME_FORMAT)))
    print()
    print(">> local_string(local_dt=None, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.local_string(local_dt=None, format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.local_string(local_dt=None, format=TIME_FORMAT)))
    print()
    print(">> datetime_to_string(dt, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.datetime_to_string(datetime.datetime.now(), format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.datetime_to_string(datetime.datetime.now(), format=TIME_FORMAT)))
    print()

    # TIMESTAMP

    print(">> utc_timestamp(utc_dt=None)")
    print("    Exec: {}".format("tc.utc_timestamp(utc_dt=None)"))
    print("    Result: {}".format(tc.utc_timestamp(utc_dt=None)))
    print()
    print(">> local_timestamp(local_dt=None)")
    print("    Exec: {}".format("tc.local_timestamp(local_dt=None)"))
    print("    Result: {}".format(tc.local_timestamp(local_dt=None)))
    print()
    print(">> datetime_to_timestamp(dt, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.datetime_to_timestamp(datetime.datetime.now())"))
    print("    Result: {}".format(tc.datetime_to_timestamp(datetime.datetime.now())))
    print()

    # STRING ==> DATETIME

    print(">> string_to_utc_datetime(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_to_utc_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.string_to_utc_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()
    print(">> string_to_local_datetime(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_to_local_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.string_to_local_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()
    print(">> utc_string_to_utc_datetime(utc_string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.utc_string_to_utc_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.utc_string_to_utc_datetime('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()

    # STRING ==> TIMESTAMP

    print(">> string_to_timestamp(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_to_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.string_to_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()
    print(">> string_to_utc_timestamp(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_to_utc_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.string_to_utc_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()
    print(">> string_to_local_timestamp(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_to_local_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)"))
    print("    Result: {}".format(tc.string_to_local_timestamp('2015-10-04 12:12:12', format=TIME_FORMAT)))
    print()

    # TIME_DELTA

    print(">> timestamp_delta(stamp1, stamp2)")
    print("    Exec: {}".format("tc.timestamp_delta(tc.utc_timestamp(), tc.utc_timestamp() + 10000)"))
    print("    Result: {}".format(tc.timestamp_delta(tc.utc_timestamp(), tc.utc_timestamp() + 10000)))
    print()
    print(">> datetime_delta(dt1, dt2)")
    print("    Exec: {}".format("tc.datetime_delta(tc.utc_datetime(), tc.tomorrow_utc_datetime())"))
    print("    Result: {}".format(tc.datetime_delta(tc.utc_datetime(), tc.tomorrow_utc_datetime())))
    print()
    print(">> string_delta(string1, string2, format=TIME_FORMAT, format1='', format2='')")
    print("    Exec: {}".format("tc.string_delta('2015-09-10 10:10:10', '2015-09-09 09:09:09')"))
    print("    Result: {}".format(tc.string_delta('2015-09-10 10:10:10', '2015-09-09 09:09:09')))
    print()

    # TIME_COUNT_DOWN

    print(">> timestamp_countdown(stamp)")
    print("    Exec: {}".format("tc.timestamp_countdown(tc.utc_timestamp() + 10000)"))
    print("    Result: {}".format(tc.timestamp_countdown(tc.utc_timestamp() + 10000)))
    print()
    print(">> datetime_countdown(dt)")
    print("    Exec: {}".format("tc.datetime_countdown(tc.tomorrow_utc_datetime())"))
    print("    Result: {}".format(tc.datetime_countdown(tc.tomorrow_utc_datetime())))
    print()
    print(">> string_countdown(string, format=TIME_FORMAT)")
    print("    Exec: {}".format("tc.string_countdown('2999-09-09 09:09:09')"))
    print("    Result: {}".format(tc.string_countdown('2999-09-09 09:09:09')))
    print()

    # AWARE vs NAIVE

    print(">> is_aware(value)")
    print("    Exec: {}".format("tc.is_aware(tc.utc_datetime())"))
    print("    Result: {}".format(tc.is_aware(tc.utc_datetime())))
    print()
    print(">> make_naive(value, timezone=TIME_ZONE)")
    print("    Exec: {}".format("tc.make_naive(tc.utc_datetime(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.make_naive(tc.utc_datetime(), timezone=TIME_ZONE)))
    print()
    print(">> is_naive(value)")
    print("    Exec: {}".format("tc.is_naive(datetime.datetime.now())"))
    print("    Result: {}".format(tc.is_naive(datetime.datetime.now())))
    print()
    print(">> make_aware(value, timezone=TIME_ZONE)")
    print("    Exec: {}".format("tc.make_aware(datetime.datetime.now(), timezone=TIME_ZONE)"))
    print("    Result: {}".format(tc.make_aware(datetime.datetime.now(), timezone=TIME_ZONE)))
    print()
Example #19
0
def get_questions(request):
    """
    获取题目信息接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息;kind_info: 比赛信息;qa_id: 比赛答题记录;questions: 比赛随机后的题目;
    """

    kind_id = request.GET.get('kind_id', '')
    uid = request.GET.get('uid', '')

    try:
        kind_info = CompetitionKindInfo.objects.select_for_update().get(kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:
        return json_response(*CompetitionError.CompetitionNotFound)

    try:
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:
        return json_response(*CompetitionError.BankInfoNotFound)

    try:
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:
        return json_response(*ProfileError.ProfileNotFound)

    qc = ChoiceInfo.objects.filter(bank_id=kind_info.bank_id)
    qf = FillInBlankInfo.objects.filter(bank_id=kind_info.bank_id)

    questions = []
    for i in qc.iterator():
        questions.append(i.data)
    for i in qf.iterator():
        questions.append(i.data)

    question_num = kind_info.question_num
    q_count = bank_info.total_question_num

    if q_count < question_num:
        return json_response(CompetitionError.QuestionNotSufficient)

    qs = random.sample(questions, question_num)

    qa_info = CompetitionQAInfo.objects.select_for_update().create(
        kind_id=kind_id,
        uid=uid,
        qsrecord=[q['question'] for q in qs],
        asrecord=[q['answer'] for q in qs],
        total_num=question_num,
        started_stamp=tc.utc_timestamp(ms=True, milli=True),
        started=True
    )

    for i in qs:
        i.pop('answer')

    return json_response(200, 'OK', {
        'kind_info': kind_info.data,
        'user_info': profile.data,
        'qa_id': qa_info.qa_id,
        'questions': qs
    })
Example #20
0
 def test_utc_datetime(self):
     dt = tc.utc_datetime()
     assert dt.tzinfo == pytz.utc
     dt = tc.utc_datetime(ms=False)
     assert dt.microsecond == 0
Example #21
0
 def test_is_local_datetime(self):
     assert tc.is_local_datetime(tc.local_datetime())
     assert tc.is_local_datetime(tc.local_datetime(), local_tz=tc.TIME_ZONE)
     assert not tc.is_local_datetime(tc.utc_datetime())
Example #22
0
 def test_time_zone(self):
     assert tc.timezone() == tc.TIME_ZONE
     timezone = 'UTC'
     tc.__init__(timezone=timezone)
     assert tc.TIME_ZONE == timezone
     assert tc.timezone() == timezone
Example #23
0
 def test_local_date(self):
     assert tc.local_date() == datetime.datetime.date(
         datetime.datetime.now())
Example #24
0
 def test_utc_date(self):
     assert isinstance(tc.local_date(), datetime.date)
Example #25
0
 def test_local_datetime(self):
     dt = tc.local_datetime()
     assert str(dt.tzinfo) == tc.TIME_ZONE
     dt = tc.local_datetime(ms=False)
     assert dt.microsecond == 0
Example #26
0
 def test_to_local_datetime(self):
     assert tc.is_local_datetime(tc.to_local_datetime(tc.utc_datetime()))
     assert tc.is_local_datetime(tc.to_local_datetime(tc.local_datetime()))
Example #27
0
def get_questions(request):
    """
    获取题目信息接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息;kind_info: 比赛信息;qa_id: 比赛答题记录;questions: 比赛随机后的题目;
    """
    kind_id = request.GET.get('kind_id', '')  # 获取kind_id
    uid = request.GET.get('uid', '')  # 获取uid
    #一次只有一条在测试的记录,提交之后的测试不会被删除
    CompetitionQAInfo.objects.filter(
        kind_id=kind_id,
        uid=uid,
        started=True,
        finished=False,
    ).delete()

    try:  # 获取比赛信息
        kind_info = CompetitionKindInfo.objects.select_for_update().get(
            kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:  # 未获取到,返回错误码100001
        return json_response(*CompetitionError.CompetitionNotFound)
    try:  # 获取题库信息
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:  # 未获取到,返回错误码100004
        return json_response(*CompetitionError.BankInfoNotFound)
    try:  # 获取用户信息
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:  # 未获取到,返回错误码200001
        return json_response(*ProfileError.ProfileNotFound)

    A3QuestionGroup = QuestionGroupInfo.objects.filter(
        bank_id=kind_info.bank_id).filter(question_group_type=1)  # A3选择题
    BQuestionGroup = QuestionGroupInfo.objects.filter(
        bank_id=kind_info.bank_id).filter(question_group_type=2)  # B选择题

    A3QuestionGroups = []
    for i in A3QuestionGroup.iterator():
        A3QuestionGroups.append(i.data)
    A3QuestionGroups = random.sample(A3QuestionGroups, kind_info.A3_choice_num)

    BQuestionGroups = []
    for i in BQuestionGroup.iterator():
        BQuestionGroups.append(i.data)
    BQuestionGroups = random.sample(BQuestionGroups, kind_info.B_choice_num)

    A3QuestionNum = 0
    A3qs = []
    for i in A3QuestionGroups:
        A3chioces = ChoiceInfo.objects.filter(question_group_id=i["pk"])
        for j in A3chioces.iterator():
            A3QuestionNum += 1
            A3data = j.data
            A3data.update({"group_question_txt": i["group_question_txt"]})
            A3data.update({"group_question_count": i["group_question_count"]})
            A3qs.append(A3data)

    BQuestionNum = 0
    Bqs = []
    for i in BQuestionGroups:
        Bchioces = ChoiceInfo.objects.filter(question_group_id=i["pk"])
        for j in Bchioces.iterator():
            BQuestionNum += 1
            Bdata = j.data
            Bdata.update({"group_question_count": i["group_question_count"]})
            Bqs.append(Bdata)

    actualQuestionNum = kind_info.A1_choice_num + kind_info.A2_choice_num + A3QuestionNum + BQuestionNum

    newA1ChoiceNum = kind_info.A1_choice_num
    newA2ChoiceNum = kind_info.A2_choice_num
    if actualQuestionNum < kind_info.question_num:
        diff = kind_info.question_num - actualQuestionNum
        newA1ChoiceNum = newA1ChoiceNum + diff // 2
        newA2ChoiceNum = newA2ChoiceNum + diff // 2
        newA1ChoiceNum = newA1ChoiceNum + diff % 2

    # qf = FillInBlankInfo.objects.filter(bank_id=kind_info.bank_id)  # 填空题

    A1qc = ChoiceInfo.objects.filter(bank_id=kind_info.bank_id).filter(
        ctype=1)  # A1选择题
    A2qc = ChoiceInfo.objects.filter(bank_id=kind_info.bank_id).filter(
        ctype=2)  # A2选择题

    A1questions = []
    for i in A1qc.iterator():
        A1questions.append(i.data)
    A1qs = random.sample(A1questions, newA1ChoiceNum)

    A2questions = []
    for i in A2qc.iterator():
        A2questions.append(i.data)
    A2qs = random.sample(A2questions, newA2ChoiceNum)

    qs = A1qs + A2qs + A3qs + Bqs  # 将两种题型放到同一个列表中
    # for i in qc.iterator():
    #     questions.append(i.data)

    # for i in qf.iterator():
    #     questions.append(i.data)
    question_num = kind_info.question_num  # 出题数
    q_count = bank_info.total_question_num  # 总题数
    if q_count < question_num:  # 出题数大于总题数,返回错误码100005
        return json_response(CompetitionError.QuestionNotSufficient)
    # qs = random.sample(questions, question_num)  # 随机分配题目
    qa_info = CompetitionQAInfo.objects.select_for_update(
    ).create(  # 创建答题log数据
        kind_id=kind_id,
        uid=uid,
        qsrecord=[q['question'] for q in qs],
        asrecord=[q['answer'] for q in qs],
        total_num=question_num,
        started_stamp=tc.utc_timestamp(ms=True, milli=True),  # 设置开始时间戳
        started=True)
    for i in qs:  # 剔除答案信息
        tAnswers = i['answer'].split("|")
        if len(tAnswers) > 1:
            i['multiChoice'] = True
        else:
            i['multiChoice'] = False
        # i.pop('answer')
    return json_response(
        200,
        'OK',
        {  # 返回JSON数据,包括题目信息,答题log信息等
            'kind_info': kind_info.data,
            'user_info': profile.data,
            'qa_id': qa_info.qa_id,
            'questions': qs
        })
Example #28
0
 def test_utc_datetime(self):
     dt = tc.utc_datetime()
     assert dt.tzinfo == pytz.utc
     dt = tc.utc_datetime(ms=False)
     assert dt.microsecond == 0
Example #29
0
 def test_is_utc_datetime(self):
     assert tc.is_utc_datetime(tc.utc_datetime())
     assert not tc.is_utc_datetime(tc.local_datetime())
Example #30
0
 def test_local_datetime(self):
     dt = tc.local_datetime()
     assert str(dt.tzinfo) == tc.TIME_ZONE
     dt = tc.local_datetime(ms=False)
     assert dt.microsecond == 0
Example #31
0
 def test_time_format(self):
     assert tc.format() == tc.TIME_FORMAT
     timeformat = '%Y%m%d%H%M%S'
     tc.__init__(format=timeformat)
     assert tc.TIME_FORMAT == timeformat
     assert tc.format() == timeformat
Example #32
0
def submit_answer(request):
    """
    提交答案接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息; qa_id: 比赛答题记录标识; kind_id: 比赛唯一标识
    """
    stop_stamp = tc.utc_timestamp(ms=True, milli=True)  # 结束时间戳
    qa_id = request.POST.get('qa_id', '')  # 获取qa_id
    uid = request.POST.get('uid', '')  # 获取uid
    kind_id = request.POST.get('kind_id', '')  # 获取kind_id
    answer = request.POST.get('answer', '')  # 获取answer

    try:  # 获取比赛信息
        kind_info = CompetitionKindInfo.objects.get(kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:  # 未获取到,返回错误码100001
        return json_response(*CompetitionError.CompetitionNotFound)
    try:  # 获取题库信息
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:  # 未获取到返回错误码100004
        return json_response(*CompetitionError.BankInfoNotFound)
    try:  # 获取用户信息
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:  # 未获取到,返回错误码200001
        return json_response(*ProfileError.ProfileNotFound)
    try:  # 获取答题log信息
        qa_info = CompetitionQAInfo.objects.select_for_update().get(
            qa_id=qa_id)
    except CompetitionQAInfo.DoesNotExist:  # 未获取到,返回错误码100006
        return json_response(*CompetitionError.QuestionNotFound)

    answer = answer.rstrip('#').split('#')  # 处理答案数据
    # print(answer)
    total, correct, wrong, correct_list, wrong_list = check_correct_num(
        answer)  # 检查答题情况

    # print(total)
    # print(correct)
    # print(wrong)
    # print(correct_list)
    # print(wrong_list)

    # return json_response(300, 'OK', {  # 返回JSON数据
    #     'qa_id': qa_id,
    #     'user_info': profile.data,
    #     'kind_id': kind_id,
    # })

    qa_info.aslogrecord = answer
    qa_info.correct_list = correct_list
    qa_info.wrong_list = wrong_list
    qa_info.finished_stamp = stop_stamp
    qa_info.expend_time = stop_stamp - qa_info.started_stamp
    qa_info.finished = True
    qa_info.correct_num = correct  # if total == qa_info.total_num else 0
    qa_info.incorrect_num = wrong  #if total == qa_info.total_num else qa_info.total_num
    qa_info.save()  # 保存答题log
    if qa_info.correct_num == kind_info.question_num:  # 得分处理
        score = kind_info.total_score
    elif not qa_info.correct_num:
        score = 0
    else:
        score = round(
            (kind_info.total_score / kind_info.question_num) * correct, 3)
    qa_info.score = score  # 继续保存答题log
    qa_info.save()
    kind_info.total_partin_num += 1  # 保存比赛数据
    kind_info.save()  # 比赛答题次数
    bank_info.partin_num += 1
    bank_info.save()  # 题库答题次数
    if (kind_info.period_time >
            0) and (qa_info.expend_time >
                    kind_info.period_time * 60 * 1000):  # 超时,不加入排行榜
        qa_info.status = CompetitionQAInfo.OVERTIME
        qa_info.save()
    else:  # 正常完成,加入排行榜
        # add_to_rank(uid, kind_id, qa_info.score, qa_info.expend_time, qa_info.qa_id)
        qa_info.status = CompetitionQAInfo.COMPLETED
        qa_info.save()
    return json_response(200, 'OK', {  # 返回JSON数据
        'qa_id': qa_id,
        'user_info': profile.data,
        'kind_id': kind_id,
    })
Example #33
0
 def test_is_local_datetime(self):
     assert tc.is_local_datetime(tc.local_datetime())
     assert tc.is_local_datetime(tc.local_datetime(), local_tz=tc.TIME_ZONE)
     assert not tc.is_local_datetime(tc.utc_datetime())
Example #34
0
 def final_is_upgrade(self):
     return int(self.is_upgrade and tc.utc_datetime() < self.expire_time)
Example #35
0
 def test_to_local_datetime(self):
     assert tc.is_local_datetime(tc.to_local_datetime(tc.utc_datetime()))
     assert tc.is_local_datetime(tc.to_local_datetime(tc.local_datetime()))
Example #36
0
# -*- coding:utf-8 -*-
import os
import RBCS as aiml
import re
from CustomDesigns import CustomDesign
import CustomConfig as cf

# cd = CustomDesign(verbose=True)

# 列举规则 测试

# cd.listRule(cf.custom_designColl, userID="alice")

# 添加规则 测试。
# cd.setRuleFromFile(cf.custom_designColl, "bot", "alice", "rule_file")
# cd.setSingleRule(cf.custom_designColl, "alice", "bob", "^.*你好呀$", "你好吗")
# ruleList = [("^.*你好    $", "你好"), ("^.*你好吗$","你好吗"), ("^.*你好\?$#","你好?"),("^.*你好china\?$", " 你好?")]
# cd.setRuleBatch(cf.custom_designColl, "alice", "bob", ruleList)
def chain():
    res = "我要出发"
    return res,""
if __name__ == "__main__":
    from TimeConvert import TimeConvert

    tn = TimeConvert(isPreferFuture=True)
    res = tn.parse(u'明天早晨')
    print res

Example #37
0
 def test_yesterday_local_datetime(self):
     assert isinstance(tc.yesterday_local_datetime(), datetime.datetime)
Example #38
0
def submit_answer(request):
    """
    提交答案接口
    :param request: 请求对象
    :return: 返回json数据: user_info: 用户信息; qa_id: 比赛答题记录标识; kind_id: 比赛唯一标识
    """

    stop_stamp = tc.utc_timestamp(ms=True, milli=True)

    qa_id = request.POST.get('qa_id', '')
    uid = request.POST.get('uid', '')
    kind_id = request.POST.get('kind_id', '')
    answer = request.POST.get('answer', '')

    try:
        kind_info = CompetitionKindInfo.objects.get(kind_id=kind_id)
    except CompetitionKindInfo.DoesNotExist:
        return json_response(*CompetitionError.CompetitionNotFound)

    try:
        bank_info = BankInfo.objects.get(bank_id=kind_info.bank_id)
    except BankInfo.DoesNotExist:
        return json_response(*CompetitionError.BankInfoNotFound)

    try:
        profile = Profile.objects.get(uid=uid)
    except Profile.DoesNotExist:
        return json_response(*ProfileError.ProfileNotFound)

    try:
        qa_info = CompetitionQAInfo.objects.select_for_update().get(qa_id=qa_id)
    except CompetitionQAInfo.DoesNotExist:
        return json_response(*CompetitionError.QuestionNotFound)

    answer = answer.rstrip('#').split('#')

    total, correct, wrong, correct_list, wrong_list = check_correct_num(answer)

    qa_info.aslogrecord = answer
    qa_info.finished_stamp = stop_stamp
    qa_info.expend_time = stop_stamp - qa_info.started_stamp
    qa_info.finished = True
    qa_info.correct_num = correct if total == qa_info.total_num else 0
    qa_info.incorrect_num = wrong if total == qa_info.total_num else qa_info.total_num
    qa_info.correct_list = correct_list
    qa_info.wrong_list = wrong_list
    qa_info.save()

    if qa_info.correct_num == kind_info.question_num:
        score = kind_info.total_score
    elif not qa_info.correct_num:
        score = 0
    else:
        score = round((kind_info.total_score / kind_info.question_num) * correct, 3)

    qa_info.score = score
    qa_info.save()

    kind_info.total_partin_num += 1
    kind_info.save()  # 比赛答题次数
    bank_info.partin_num += 1
    bank_info.save()  # 题库答题次数
    if (kind_info.period_time > 0) and (qa_info.expend_time > kind_info.period_time * 60 * 1000):  # 超时,不加入排行榜
        qa_info.status = CompetitionQAInfo.OVERTIME
        qa_info.save()
    else:  # 正常完成,加入排行榜
        add_to_rank(uid, kind_id, qa_info.score, qa_info.expend_time)
        qa_info.status = CompetitionQAInfo.COMPLETED
        qa_info.save()

    return json_response(200, 'OK', {
        'qa_id': qa_id,
        'user_info': profile.data,
        'kind_id': kind_id,
    })
Example #39
0
 def test_tomorrow_local_datetime(self):
     assert isinstance(tc.tomorrow_local_datetime(), datetime.datetime)
Example #40
0
 def test_is_utc_datetime(self):
     assert tc.is_utc_datetime(tc.utc_datetime())
     assert not tc.is_utc_datetime(tc.local_datetime())
Example #41
0
 def test_offset(self):
     assert tc.offset() == datetime.timedelta(0, 28800)