def update(word_id): # Get the word word = WordsService.get_instance().get(word_id) # Verify the word creation inputs if word: # Get the input validator inputs = UpdateInputs(get_inputs()) combined_inputs = dict(inputs.serialized().items() + {'id': word_id}.items()) if inputs.validate_on_submit(): # If we're only marking the word as active or inactive, pass through to the update if inputs.is_active.data and \ not any([inputs.lexeme_form.data, inputs.lexical_class.data]): try: word.update(**get_mixed_dict_from_multidict(get_inputs(), inputs)) return render_view('words/show', 200, word=word.serialized) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) else: word.update(**{'is_active': False}) lexeme_form = inputs.lexeme_form.data if inputs.lexeme_form.data else word.get_lexeme_form() lexical_class = inputs.lexical_class.data if inputs.lexical_class.data else word.get_lexical_class() is_active = inputs.is_active.data if inputs.is_active.data else word.get_is_active() word = Word(lexeme_form, lexical_class) word.set_is_active(is_active) try: word.save() return render_view( 'words/show', 200, word=word.serialized ) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) return render_view('422', 422, errors=inputs.errors, inputs=combined_inputs) return render_view('422', 422, errors=NOT_FOUND_ERROR, inputs={'id': word_id})
def update(player_id): """ Request: { "auth_token": "auth_token", "username": "******", "password": "******", "email": "email", "avatar_url": "avatar_url", "is_active": "is_active" } Response [422] (unauthenticated): { "errors": { "UnauthorizedAccess": [ "Attempted to access data without an authenticated player" ] } } Response [422] (player with player_id doesn't exist): { "errors": { "PlayerNotFound": [ "Unable to find Player" ] }, "inputs": { "id": "player_id" } } Response [422] (invalid parameters): { "errors": { "name of parameter that failed validation": [ "Reason for validation failure" ], "name of another parameter that failed validation": [ "Reason for validation failure" ], }, "inputs": { "id": "player_id", "username": "******", "password": NULL, "email": "value passed in. empty string if missing", "avatar_url": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure): { "errors": { "IntegrityError": [ "Reason saving to the db failed, such as username/email uniqueness" ] }, "inputs": { "id": "player_id", "username": "******", "password": NULL, "email": "value passed in. empty string if missing", "avatar_url": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [200] (success): { "id": "current value", "date_created": "current value", "date_modified": "current value", "username": "******", "email": "current value", "avatar_url": "current value", "is_active": "current value" } """ # Get the player player = PlayersService.get_instance().get(player_id) # Verify the player creation inputs if player: # Get the input validator inputs = UpdateInputs(get_inputs()) combined_inputs = dict(inputs.obfuscated().items() + {'id': player_id}.items()) if inputs.validate_on_submit(): try: player.update(**get_mixed_dict_from_multidict(get_inputs(), inputs)) return render_view('players/show', 200, player=player.serialized) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) return render_view('422', 422, errors=inputs.errors, inputs=combined_inputs) return render_view('422', 422, errors=NOT_FOUND_ERROR, inputs={'id': player_id})
def update(definition_filler_id): """ Request: { "definition_template_id": "definition_template_id", "filler": "filler", "is_dictionary": "is_dictionary", "is_active": "is_active" } Response [422] (definition_filler with definition_filler_id doesn't exist): { "errors": { "DefinitionFillerNotFound": [ "Unable to find DefinitionFiller" ] }, "inputs": { "id": "definition_filler_id" } } Response [422] (invalid parameters): { "errors": { "name of parameter that failed validation": [ "Reason for validation failure" ], "name of another parameter that failed validation": [ "Reason for validation failure" ], }, "inputs": { "id": "definition_filler_id", "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (definition_template with definition_template_id doesn't exist): { "errors": { "DefinitionTemplateNotFound": [ "Unable to find the specified DefinitionTemplate" ] }, "inputs": { "id": "definition_filler_id", "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure - invalid filler array length): { "errors": { "AttributeError": [ "There are {} filler but {} filler lexical classes. These values must be the same" ] }, "inputs": { "id": "definition_filler_id", "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure): { "errors": { "IntegrityError": [ "Reason saving to the db failed" ] }, "inputs": { "id": "definition_filler_id", "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [200] (success): { "id": "current value", "date_created": "current value", "date_modified": "current value", "definition_template": "current value", "filler": "current value", "is_dictionary": "current value", "is_active": "current value" } """ # Get the definition_filler definition_filler = DefinitionFillersService.get_instance().get(definition_filler_id) # Verify the definition_filler creation inputs if definition_filler: # Get the input validator inputs = UpdateInputs(get_inputs()) combined_inputs = dict(inputs.serialized().items() + {'id': definition_filler_id}.items()) # Hack to deal with WTForms requirement that list inputs be validated against a list of choices filler = get_mixed_dict_from_multidict(get_inputs()).get('filler', []) inputs.filler.choices = [(fill, fill) for fill in filler] if inputs.validate_on_submit(): # If we're only marking the filler as active or inactive, pass through to the update if inputs.is_active.data and \ not any([inputs.definition_template_id.data, inputs.filler.data, inputs.is_dictionary.data]): try: definition_filler.update(**get_mixed_dict_from_multidict(get_inputs(), inputs)) return render_view( 'definition_fillers/show', 200, definition_filler=definition_filler.serialized ) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) # If we're trying to change the filler, mark the old filler # as inactive and create a new one with the new parameters else: definition_filler.update(**{'is_active': False}) definition_template = DefinitionTemplatesService.get_instance().get( inputs.definition_template_id.data ) if inputs.definition_template_id.data else definition_filler.get_definition_template() filler = inputs.filler.data if inputs.filler.data else definition_filler.get_filler() is_dictionary = inputs.is_dictionary.data \ if inputs.is_dictionary.data else definition_filler.get_is_dictionary() is_active = inputs.is_active.data if inputs.is_active.data else definition_filler.get_is_active() if definition_template: try: definition_filler = DefinitionFiller(definition_template, filler, is_dictionary) definition_filler.set_is_active(is_active) definition_filler.save() return render_view( 'definition_fillers/show', 200, definition_filler=definition_filler.serialized ) except Exception as e: return render_view( '422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs ) return render_view('422', 422, errors=DEFINITION_TEMPLATE_NOT_FOUND_ERROR, inputs=inputs.serialized()) return render_view('422', 422, errors=inputs.errors, inputs=combined_inputs) return render_view('422', 422, errors=NOT_FOUND_ERROR, inputs={'id': definition_filler_id})
def create(): """ Request: { "definition_template_id": "definition_template_id", "filler": "filler", "is_dictionary": "is_dictionary" } Response [422] (invalid parameters): { "errors": { "name of parameter that failed validation": [ "Reason for validation failure" ], "name of another parameter that failed validation": [ "Reason for validation failure" ], }, "inputs": { "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing" } } Response [422] (definition_template with definition_template_id doesn't exist): { "errors": { "DefinitionTemplateNotFound": [ "Unable to find the specified DefinitionTemplate" ] }, "inputs": { "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing" } } Response [422] (save failure): { "errors": { "IntegrityError": [ "Reason saving to the db failed" ] }, "inputs": { "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing" } } Response [422] (save failure - invalid filler array length): { "errors": { "AttributeError": [ "There are {} filler but {} filler lexical classes. These values must be the same" ] }, "inputs": { "definition_template_id": "value passed in. empty string if missing", "filler": "value passed in. empty string if missing", "is_dictionary": "value passed in. empty string if missing" } } Response [200] (success): { "id": "current value", "date_created": "current value", "date_modified": "current value", "definition_template": "current value", "filler": "current value", "is_dictionary": "current value", "is_active": "current value" } """ # Get the input validator inputs = CreateInputs(get_inputs()) # Hack to deal with WTForms requirement that list inputs be validated against a list of choices filler = get_mixed_dict_from_multidict(get_inputs()).get('filler', []) inputs.filler.choices = [(fill, fill) for fill in filler] # Verify the definition_filler creation inputs if inputs.validate_on_submit(): definition_template = DefinitionTemplatesService.get_instance().get(inputs.definition_template_id.data) if definition_template: try: definition_filler = DefinitionFiller(definition_template, inputs.filler.data, inputs.is_dictionary.data) definition_filler.save() return render_view('definition_fillers/show', 201, definition_filler=definition_filler.serialized) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=inputs.serialized()) return render_view('422', 422, errors=DEFINITION_TEMPLATE_NOT_FOUND_ERROR, inputs=inputs.serialized()) return render_view('422', 422, errors=inputs.errors, inputs=inputs.serialized())
def update(definition_template_id): """ Request: { "word_id": "word_id", "definition": "definition", "filler_lexical_classes": "filler_lexical_classes", "is_active": "is_active" } Response [422] (definition_template with definition_template_id doesn't exist): { "errors": { "DefinitionTemplateNotFound": [ "Unable to find DefinitionTemplate" ] }, "inputs": { "id": "definition_template_id" } } Response [422] (invalid parameters): { "errors": { "name of parameter that failed validation": [ "Reason for validation failure" ], "name of another parameter that failed validation": [ "Reason for validation failure" ], }, "inputs": { "id": "definition_template_id", "word_id": "value passed in. empty string if missing", "definition": "value passed in. empty string if missing", "filler_lexical_classes": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (word with word_id doesn't exist): { "errors": { "WordNotFound": [ "Unable to find the specified Word" ] }, "inputs": { "id": "definition_template_id", "word_id": "value passed in. empty string if missing", "definition": "value passed in. empty string if missing", "filler_lexical_classes": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure - invalid filler_lexical_classes length): { "errors": { "AttributeError": [ "There are {} filler lexical classes but {} fillers. These values must be the same." ] }, "inputs": { "id": "definition_template_id", "word_id": "value passed in. empty string if missing", "definition": "value passed in. empty string if missing", "filler_lexical_classes": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure - invalid filler_lexical_classes value): { "errors": { "AttributeError": [ "Cannot set the filler lexical classes to a value other than one of: {}" ] }, "inputs": { "id": "definition_template_id", "word_id": "value passed in. empty string if missing", "definition": "value passed in. empty string if missing", "filler_lexical_classes": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure): { "errors": { "IntegrityError": [ "Reason saving to the db failed" ] }, "inputs": { "id": "definition_template_id", "word_id": "value passed in. empty string if missing", "definition": "value passed in. empty string if missing", "filler_lexical_classes": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [200] (success): { "id": "current value", "date_created": "current value", "date_modified": "current value", "word": "current value", "definition": "current value", "filler_lexical_classes": "current value", "is_active": "current value" } """ # Get the definition_template definition_template = DefinitionTemplatesService.get_instance().get(definition_template_id) # Verify the definition_template creation inputs if definition_template: # Get the input validator inputs = UpdateInputs(get_inputs()) combined_inputs = dict(inputs.serialized().items() + {'id': definition_template_id}.items()) if inputs.validate_on_submit(): # If we're only marking the definition as active or inactive, pass through to the update if inputs.is_active.data and \ not any([inputs.word_id.data, inputs.definition.data, inputs.filler_lexical_classes.data]): try: definition_template.update(**get_mixed_dict_from_multidict(get_inputs(), inputs)) return render_view( 'definition_templates/show', 200, definition_template=definition_template.serialized ) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) # Otherwise, if we're trying to change the definition, mark the old # definition as inactive and create a new one with the new parameters else: definition_template.update(**{'is_active': False}) word = WordsService.get_instance().get(inputs.word_id.data) \ if inputs.word_id.data else definition_template.get_word() definition = inputs.definition.data if inputs.definition.data else definition_template.get_definition() filler_lexical_classes = inputs.filler_lexical_classes.data \ if inputs.filler_lexical_classes.data else definition_template.get_filler_lexical_classes() is_active = inputs.is_active.data if inputs.is_active.data else definition_template.get_is_active() if word: try: definition_template = DefinitionTemplate(word, definition, filler_lexical_classes) definition_template.set_is_active(is_active) definition_template.save() return render_view( 'definition_templates/show', 200, definition_template=definition_template.serialized ) except Exception as e: return render_view( '422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs ) return render_view('422', 422, errors=WORD_NOT_FOUND_ERROR, inputs=inputs.serialized()) return render_view('422', 422, errors=inputs.errors, inputs=combined_inputs) return render_view('422', 422, errors=NOT_FOUND_ERROR, inputs={'id': definition_template_id})
def update(game_id): """ Request: { "name": "name", "description": "description", "is_active": "is_active" } Response [422] (game with game_id doesn't exist): { "errors": { "GameNotFound": [ "Unable to find Game" ] }, "inputs": { "id": "game_id" } } Response [422] (invalid parameters): { "errors": { "name of parameter that failed validation": [ "Reason for validation failure" ], "name of another parameter that failed validation": [ "Reason for validation failure" ], }, "inputs": { "id": "game_id", "name": "value passed in. empty string if missing", "description": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (save failure): { "errors": { "IntegrityError": [ "Reason saving to the db failed, such as name uniqueness" ] }, "inputs": { "id": "game_id", "name": "value passed in. empty string if missing", "description": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [422] (illegal update request - protected attribute, like match_size, passed in as input): { "errors": { "AttributeError": [ "Update to Game is not supported with changes to match_size" ] }, "inputs": { "id": "game_id", "name": "value passed in. empty string if missing", "description": "value passed in. empty string if missing", "is_active": "value passed in. empty string if missing" } } Response [200] (success): { "id": "current value", "date_created": "current value", "date_modified": "current value", "name": "current value", "description": "current value", "match_size": "current value", "definition_filler_count": "current value", "is_active": "current value" } """ # Get the game game = GamesService.get_instance().get(game_id) # Verify the game creation inputs if game: # Get the input validator inputs = UpdateInputs(get_inputs()) combined_inputs = dict(inputs.serialized().items() + {'id': game_id}.items()) if inputs.validate_on_submit(): try: game.update(**get_mixed_dict_from_multidict(get_inputs(), inputs)) return render_view('games/show', 200, game=game.serialized) except Exception as e: return render_view('422', 422, errors={e.__class__.__name__: [e.message]}, inputs=combined_inputs) return render_view('422', 422, errors=inputs.errors, inputs=combined_inputs) return render_view('422', 422, errors=NOT_FOUND_ERROR, inputs={'id': game_id})