def post(self, request, *args, **kwargs): data = request.data user = data['creator'] code = eval(data['code']) code = Code(title=code['title'], content=code['content'], language=code['language'], creator_id=user) try: code.clean_fields() code.save() except Exception as error: return Response(error, status=status.HTTP_400_BAD_REQUEST) smells = eval(data['smells']) for s in smells: smell = CodeSmell(code_id=code.id, user_id=user, line=s['line'], smell=s['smell']) try: smell.clean_fields() smell.save() except Exception as error: return Response(error, status=status.HTTP_400_BAD_REQUEST) return Response(CodeSerializer(code).data, status=status.HTTP_201_CREATED)
def post(self, request, *args, **kwargs): """ Submit a new code snippet with a list of codesmells together. Example POST body: <code> { "creator" : 18, "code" : "{'title' : 'Third Code Snippet!', 'content' : 'sum = 3+4', 'language' : 'Python'}", "smells" : "[{'line': 1, 'smell': 'Vague string'}, {'line': 2, 'smell': 'Bad variable name'}]" } </code> --- parameters: - name: body paramType: body description: See example POST body above consumes: - application/json """ data = request.data user = data['creator'] code = eval(data['code']) code = Code(title=code['title'], content=code['content'], language=code['language'], creator_id=user) try: code.clean_fields() code.save() except Exception as error: return Response(error, status=status.HTTP_400_BAD_REQUEST) smells = eval(data['smells']) for s in smells: smell = CodeSmell(code_id=code.id, user_id=user, line=s['line'], smell=s['smell']) try: smell.clean_fields() smell.save() except Exception as error: return Response(error, status=status.HTTP_400_BAD_REQUEST) return Response(CodeSerializer(code).data, status=status.HTTP_201_CREATED)
# parse and save code samples from file 'codesamples.txt' title = '' content = '' num_lines = 0 smells = map(lambda x:x.name, Smell.objects.all()) flag = False with open('codesamples.txt') as f: for line in f: # '==' followed by a title denotes the start of a new code sample if line[:2] == '==': # skip saving if on first code sample if flag: # save previous code sample with admin as creator code = Code(title=title, content=content, language='Python', creator=admin) code.save() used_lines = [] origsmells = [] usersmells = [] # randomly select codesmells to be assigned to code sample by admin for i in range(num_lines/2): newsmell = (randint(1, num_lines), smells[randint(0, len(smells) - 1)]) if newsmell[0] in used_lines: continue used_lines.append(newsmell[0]) origsmells.append(newsmell) codesmell = CodeSmell(code=code, user=admin, line=newsmell[0], smell=newsmell[1]) codesmell.save() # select random number of codesmells for test to answer correctly correct = randint(0, len(origsmells)) usersmells = sample(origsmells, correct)