Example #1
0
def lambda_handler(event, context):
    try:
        # 英語の場合は問題の総数を返す
        if (event['text'] == 'E'):
            return get_english_question()

        # 設定ファイルからcsv名のリストを取得
        csv_name_list = ini.get_csv_name_list()

        # 各csvにあるデータの個数のリストを取得
        file_name_list = ini.get_csv_file_name_list()
        item_list = []
        for ci in file_name_list:
            item_list.append(
                int(client.describe_table(TableName=ci)['Table']['ItemCount']))

        #返り値作成(JSON)
        res = {'statusCode': 200, 'text': csv_name_list, 'item': item_list}

        return res
    except:
        #返り値作成(JSON)
        res = {
            'statusCode': 500,
            'text': [],
            'item': [],
            'error_log': 'Internal Server Error.'
        }

        return res
Example #2
0
def lambda_handler(event, context):
    try:
        # 設定ファイルからcsv名のリストを取得
        csv_name_list = ini.get_csv_name_list()
        # 設定ファイルからcsv名のリストを取得
        csv_file_name_list = ini.get_csv_file_name_list()
    
        #(ファイルID)-(問題番号)の形でリクエスト来るので取り出す
        req=event['text']
        if(req[0]=='E'):
            return get_english_question(req)
        file_id,quiz_id=map(int,req.split('-'))
    
        #テーブル選択
        #設定ファイルからファイルIDをもとにテーブル名を取り出す
        table    = dynamodb.Table(csv_file_name_list[file_id]) 
    
        #指定したテーブルに問題を取得しに行く
        response = table.get_item(
            Key={
                'quiz_num': quiz_id
            }
        )
    
        correct_num=int(response['Item']['clear_count'])
        incorrect_num=int(response['Item']['fail_count'])
        correctrate= "{:.2f}".format(100*correct_num/(correct_num+incorrect_num)) if correct_num+incorrect_num!=0 else "0"
        rate=" (正解率:"+ correctrate + "%)" if correct_num+incorrect_num!=0 else " (未回答)" 
    
        #問題文作成
        accuracy="(正答率:{0:.2f}%)".format(100*correct_num/(correct_num+incorrect_num)) if (correct_num+incorrect_num)>0 else "(未回答)"
        quiz_sentense="["+csv_name_list[file_id]+"-"+str(response['Item']['quiz_num'])+"]:"+response['Item']['quiz_sentense']+accuracy
    
        #答えの文作成
        quiz_answer="["+csv_name_list[file_id]+"-"+str(response['Item']['quiz_num'])+"]答:"+response['Item']['answer']
    
        #返り値作成(JSON)
        res = {
            'statusCode': 200,
            'sentense': quiz_sentense,
            'answer': quiz_answer,
            'question_sentense': str(response['Item']['quiz_sentense']),
            'question_answer': str(response['Item']['answer']),
            'question_category': str(response['Item'].get('category','')),
            'question_img_file_name': str(response['Item'].get('img_file_name',""))
        }
    
        return res
    except:
        #返り値作成(JSON)
        res = {
            'statusCode': 500,
            'sentense': '',
            'answer': '',
            'error_log': 'Internal Server Error.'
        }
    
        return res
Example #3
0
def lambda_handler(event, context):
    try:
        # 設定ファイルからcsv名のリストを取得
        csv_file_name_list = ini.get_csv_file_name_list()
        csv_name_list = ini.get_csv_name_list()

        #(ファイルID)-(問題番号)の形でリクエスト来るので取り出す
        req = event['text']
        file_id = req.split('-')[0] if req[0] == 'E' else int(
            req.split('-')[0])
        quiz_id = int(req.split('-')[1])

        #テーブル名、csv名もここで取り出す
        table_name = 'english_speaking' if file_id == 'E' else csv_file_name_list[
            file_id]
        csv_name = "和文英訳" if file_id == 'E' else csv_name_list[file_id]

        #テーブル選択
        #設定ファイルからファイルIDをもとにテーブル名を取り出す
        table = dynamodb.Table(table_name)

        #指定したテーブルに問題を取得しに行く
        response = table.get_item(Key={'quiz_num': quiz_id})

        #不正解数を取得して+1して更新
        incorrect = int(response['Item']['fail_count'])
        incorrect += 1
        req = table.update_item(Key={'quiz_num': quiz_id},
                                UpdateExpression='SET fail_count = :val1',
                                ExpressionAttributeValues={':val1': incorrect})

        #返り値作成(JSON)
        res = {
            'statusCode': 200,
            'message': "[" + csv_name + "-" + str(quiz_id) + "] Failed.."
        }

        return res
    except:
        #返り値作成(JSON)
        res = {
            'statusCode': 500,
            'message': "",
            'error_log': 'Internal Server Error.'
        }

        return res
Example #4
0
def lambda_handler(event, context):
    # 値取得
    file_num=event['file_num']
    
    #英語版なら分岐
    if(file_num=='E'):
        return update_english_question(event)
    
    # 値取得
    file=event['file']
    number=event['number']
    sentense=event['sentense']
    answer=event['answer']
    category=event['category']
    img_file_name=event['img_file_name']

    # 設定ファイルからcsv名のリストを取得
    csv_name_list = ini.get_csv_name_list()
    file_name_list = ini.get_csv_file_name_list()

    # 選択したcsvファイル名を取得
    file_name = file_name_list[int(file_num)]

    #DynamoDBテーブルを選択
    quiz_table = dynamodb.Table(file_name)

    status_code=""
    message=""
    try:
        # テーブルへのUpdate処理実行
        quiz_table.update_item(
                Key={'quiz_num': int(number)},
                UpdateExpression="set #sentense = :quiz_sentense, #answer = :answer, #category = :category, #img_file_name = :img_file_name",
                ExpressionAttributeNames={
                    '#sentense': 'quiz_sentense',
                    '#answer': 'answer',
                    '#category': 'category',
                    '#img_file_name': 'img_file_name'
                },
                ExpressionAttributeValues={
                    ':quiz_sentense': sentense,
                    ':answer': answer,
                    ':category': category,
                    ':img_file_name': img_file_name
                },
                ReturnValues="UPDATED_NEW"
            )
        status_code = "200"
        message = 'Edited! ['+file+'-'+number+'],'+sentense+','+answer+',0,0,'+category+','+img_file_name
    except ClientError as ce:
        status_code = "500"
        message = 'Error. Pushing Index['+file+'-'+number+'] Data Failed. :'+str(ce)
    except TypeError as e:
        status_code = "500"
        message = 'Error. Pushing Index['+file+'-'+number+'] Data Failed. :'+str(e)
    except Exception as e:
        status_code = "500"
        message = 'Error. Pushing Index['+file+'-'+number+'] Data Failed. :'+str(e)

    return {
        'statusCode': status_code,
        'message': message
    }
Example #5
0
def lambda_handler(event, context):
    #ファイル番号
    file_num=event['file']
    if(file_num!="E"):
        file_num=int(event['file'])
    
    #入力データ
    input_data=event['data'].splitlines()
    
    # 設定ファイルからcsv名のリストを取得
    csv_name_list = ini.get_csv_name_list()
    file_name_list = ini.get_csv_file_name_list()

    # 選択したcsvファイル名を取得
    file_name = "english_speaking" if file_num=="E" else file_name_list[file_num]
    # 現在選択したcsvファイルにあるデータの個数を取得
    data_index=int(client.describe_table(TableName=file_name)['Table']['ItemCount'])
    # 入力データを最初のインデックスにセット
    data_index+=1
    
    #DynamoDBテーブルを選択
    quiz_table = dynamodb.Table(file_name)
    
    log=[]
    for i,di in enumerate(input_data):
        #1行を各要素に分割
        di=list(di.split(','))
        #入力した1行が4項目未満なら入れないで飛ばす
        if(len(di)<4):
            log.append('Input Error. ['+str(i)+'L]: '+str(di))
            continue
        
        try:
            sentense=di[0]
            answer=di[1]
            category=di[2]
            imgfilename=di[3]

            # テーブルへのPut処理実行
            quiz_table.put_item(
                Item = {
                    "quiz_num": data_index, 
                    "quiz_sentense": sentense,
                    "answer": answer,
                    "clear_count": 0, 
                    "fail_count": 0, 
                    "category": category,
                    "img_file_name": imgfilename
                },
                ConditionExpression='attribute_not_exists(quiz_num)'
            )
            log.append('Added! ['+str(data_index)+'],'+sentense+','+answer+',0,0,'+category+','+imgfilename)
        except ClientError as ce:
            log.append('Error. Pushing Index['+str(data_index)+'] Data Failed. :'+str(ce))
            break
        except TypeError as e:
            log.append(str(e))
        except Exception as e:
            log.append(str(e))
        
        #問題番号を+1する
        data_index+=1
        
    
    return {
        'statusCode': 200,
        'log': log
    }