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
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
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
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 }
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 }