def delete(self, context_gus, *uriargs): """ Request: adminContextDesc Response: None Errors: InvalidInputFormat, ContextGusNotFound """ context_iface = Context() receivertip_iface = ReceiverTip() internaltip_iface = InternalTip() whistlebtip_iface = WhistleblowerTip() comment_iface = Comment() receiver_iface = Receiver() file_iface = File() # This DELETE operation, its permanent, and remove all the reference # a Context has within the system (in example: remove associated Tip, # remove try: context_desc = yield context_iface.get_single(context_gus) tips_related_blocks = yield receivertip_iface.get_tips_by_context(context_gus) print "Tip that need to be deleted, associated with the context",\ context_gus, ":", len(tips_related_blocks) for tip_block in tips_related_blocks: internaltip_id = tip_block.get('internaltip')['internaltip_id'] yield whistlebtip_iface.delete_access_by_itip(internaltip_id) yield receivertip_iface.massive_delete(internaltip_id) yield comment_iface.delete_comment_by_itip(internaltip_id) yield file_iface.delete_file_by_itip(internaltip_id) # and finally, delete the InternalTip yield internaltip_iface.tip_delete(internaltip_id) # (Just consistency check) receivers_associated = yield receiver_iface.get_receivers_by_context(context_gus) print "receiver associated by context POV:", len(receivers_associated),\ "receiver associated by context DB-field:", len(context_desc['receivers']) # Align all the receiver associated to the context, that the context cease to exist yield receiver_iface.align_context_delete(context_desc['receivers'], context_gus) # TODO delete stats associated with context ? # TODO delete profile associated with the context # Finally, delete the context yield context_iface.delete_context(context_gus) self.set_status(200) except ContextGusNotFound, e: self.set_status(e.http_status) self.write({'error_message': e.error_message, 'error_code' : e.error_code})
def put(self, context_gus, *uriargs): """ Request: adminContextDesc Response: adminContextDesc Errors: InvalidInputFormat, ContextGusNotFound, ReceiverGusNotFound """ try: request = validateMessage(self.request.body, requests.adminContextDesc) context_iface = Context() yield context_iface.update(context_gus, request) # 'receivers' it's a relationship between two tables, and is managed # with a separate method of new() receiver_iface = Receiver() yield context_iface.context_align(context_gus, request['receivers']) yield receiver_iface.full_receiver_align(context_gus, request['receivers']) context_description = yield context_iface.get_single(context_gus) self.set_status(200) self.write(context_description) except InvalidInputFormat, e: self.set_status(e.http_status) self.write({'error_message': e.error_message, 'error_code' : e.error_code})
def delete_context(self, context_gus): """ This DELETE operation, its permanent, and remove all the reference a Context has within the system (Tip, File, submission...) """ store = self.getStore() # Get context description, just to verify that context_gus is valid context_iface = Context(store) context_desc = context_iface.get_single(context_gus) # Collect tip by context and iter on the list receivertip_iface = ReceiverTip(store) tips_related_blocks = receivertip_iface.get_tips_by_context(context_gus) internaltip_iface = InternalTip(store) whistlebtip_iface = WhistleblowerTip(store) file_iface = File(store) comment_iface = Comment(store) # For every InternalTip, delete comment, wTip, rTip and Files for tip_block in tips_related_blocks: internaltip_id = tip_block.get('internaltip')['internaltip_id'] whistlebtip_iface.delete_access_by_itip(internaltip_id) receivertip_iface.massive_delete(internaltip_id) comment_iface.delete_comment_by_itip(internaltip_id) file_iface.delete_file_by_itip(internaltip_id) # and finally, delete the InternalTip internaltip_iface.tip_delete(internaltip_id) # (Just a consistency check - need to be removed) receiver_iface = Receiver(store) receivers_associated = receiver_iface.get_receivers_by_context(context_gus) print "receiver associated by context POV:", len(receivers_associated),\ "receiver associated by context DB-field:", len(context_desc['receivers']) # Align all the receiver associated to the context, that the context cease to exist receiver_iface.align_context_delete(context_desc['receivers'], context_gus) # Get the profile list related to context_gus and delete all of them profile_iface = PluginProfiles(store) profile_list = profile_iface.get_profiles_by_contexts([ context_gus ]) for prof in profile_list: profile_iface.delete_profile(prof['profile_gus']) # Get the submission list under the context, and delete all of them submission_iface = Submission(store) submission_list = submission_iface.get_all() for single_sub in submission_list: submission_iface.submission_delete(single_sub['submission_gus'], wb_request=False) # Finally, delete the context context_iface.delete_context(context_gus) self.returnData(context_desc) self.returnCode(200) return self.prepareRetVals()
def get_context(self, context_gus): context_iface = Context(self.getStore()) context_description = context_iface.get_single(context_gus) self.returnData(context_description) self.returnCode(200) return self.prepareRetVals()
def post(self, *uriargs): """ Request: wbSubmissionDesc Response: wbSubmissionDesc Errors: ContextGusNotFound, InvalidInputFormat, SubmissionFailFields This creates an empty submission for the requested context, and returns submissionStatus with empty fields and a Submission Unique String, This is the unique token used during the submission procedure. sessionGUS is used as authentication secret for the next interaction. expire after the time set by Admin (Context dependent setting) """ context_iface = Context() try: request = validateMessage(self.request.body, requests.wbSubmissionDesc) # XXX DUMMY PATCH CLIENT USAGE -- open tiket in GLClient print "Before", request if not request.has_key('wb_fields'): request.update({'wb_fields' : ''}) if not request.has_key('receivers'): request.update({'receivers' : []}) if not request.has_key('files'): request.update({'files' : []}) if not request.has_key('finalize'): request.update({'finalize' : False }) print "After ", request # XXX DUMMY PATCH CLIENT USAGE -- open tiket in GLClient context_desc = yield context_iface.get_single(request['context_gus']) submission_iface = Submission() submission_desc = yield submission_iface.new(request) if not context_desc['selectable_receiver']: submission_iface.receivers = context_iface.receivers if submission_desc['finalize']: internaltip_iface = InternalTip() wb_iface = WhistleblowerTip() internaltip_desc = yield internaltip_iface.new(submission_desc) wbtip_desc = yield wb_iface.new(internaltip_desc) submission_desc.update({'receipt' : wbtip_desc['receipt']}) else: submission_desc.update({'receipt' : ''}) self.set_status(201) # Created # TODO - output processing self.write(submission_desc) except ContextGusNotFound, e: self.set_status(e.http_status) self.write({'error_message': e.error_message, 'error_code' : e.error_code})
def update_context(self, context_gus, request): store = self.getStore() context_iface = Context(store) context_iface.update(context_gus, request) # 'receivers' it's a relationship between two tables, and is managed # with a separate method of update() receiver_iface = Receiver(store) context_iface.context_align(context_gus, request['receivers']) receiver_iface.full_receiver_align(context_gus, request['receivers']) context_description = context_iface.get_single(context_gus) self.returnData(context_description) self.returnCode(200) return self.prepareRetVals()
def get(self, context_gus, *uriargs): """ Parameters: context_gus Response: adminContextDesc Errors: ContextGusNotFound, InvalidInputFormat """ try: # TODO REMIND XXX - context_gus validation - InvalidInputFormat context_iface = Context() context_description = yield context_iface.get_single(context_gus) self.set_status(200) self.write(context_description) except ContextGusNotFound, e: self.set_status(e.http_status) self.write({'error_message': e.error_message, 'error_code' : e.error_code})
def put(self, submission_gus, *uriargs): """ Parameter: submission_gus Request: wbSubmissionDesc Response: wbSubmissionDesc Errors: ContextGusNotFound, InvalidInputFormat, SubmissionFailFields, SubmissionGusNotFound, SubmissionConcluded PUT update the submission and finalize if requested. """ context_iface = Context() try: request = validateMessage(self.request.body, requests.wbSubmissionDesc) context_desc = yield context_iface.get_single(request['context_gus']) submission_iface = Submission() submission_desc = yield submission_iface.update(submission_gus, request) if not context_desc['selectable_receiver']: submission_iface.receivers = context_iface.receivers if submission_desc['finalize']: internaltip_iface = InternalTip() wb_iface = WhistleblowerTip() internaltip_desc = yield internaltip_iface.new(submission_desc) wbtip_desc = yield wb_iface.new(internaltip_desc) submission_desc.update({'receipt' : wbtip_desc['receipt']}) else: submission_desc.update({'receipt' : ''}) self.set_status(202) # Updated # TODO - output processing self.write(submission_desc) except ContextGusNotFound, e: self.set_status(e.http_status) self.write({'error_message': e.error_message, 'error_code' : e.error_code})