def payload_debug(event_state): """"Debug a GitHub payload.""" res = dict() try: e = Event() e.__setstate__(event_state) res['event'] = e current_app.try_trigger_before_first_request_functions() account = get_account(user_id=e.user_id) res['account'] = account gh = get_api(user_id=e.user_id) res['gh'] = gh access_token = ProviderToken.query.filter_by( id=account.extra_data["tokens"]["internal"] ).first().access_token res['access_token'] = access_token res['is_valid_sender'] = is_valid_sender(account.extra_data, e.payload) res['metadata'] = extract_metadata(gh, e.payload) res['files'] = extract_files(e.payload) finally: pass return res
def handle_inspire_payload(event_state): """ Handle incoming notification from INSPIRE on an imported record. """ e = Event() e.__setstate__(event_state) #e.user_id #e.payload pass
def handle_github_payload(event_state): """ Handle incoming notification from GitHub on a new release """ e = Event() e.__setstate__(event_state) # Ping event if 'hook_id' in e.payload and 'zen' in e.payload: # TODO: record we sucessfully received ping event return # Get account and internal access token account = get_account(user_id=e.user_id) gh = get_api(user_id=e.user_id) access_token = ProviderToken.query.filter_by( id=account.extra_data["tokens"]["internal"] ).first().access_token # Validate payload sender if not is_valid_sender(account.extra_data, e.payload['sender']['login']): raise Exception("Invalid sender for payload %s for user %s" % ( e.payload, e.user_id )) try: # Extra metadata from .zenodo.json and github repository metadata = extract_metadata(gh, e.payload, account.extra_data['name']) # Extract zip snapshot from github files = extract_files(e.payload) # Upload into Zenodo logger.info(metadata) deposition = upload(access_token, metadata, files, publish=True) logger.info(deposition) # TODO: Add step to update metadata of all previous records submitted_deposition( account.extra_data, e.payload['repository']['full_name'], deposition, e.payload['release']['tag_name'] ) account.extra_data.changed() except Exception as e: # Handle errors and possibly send user an email # Send email to user import traceback logger.info(traceback.format_exc(e)) db.session.commit()
def handle_github_payload(event_state, verify_sender=True): """ Handle incoming notification from GitHub on a new release. """ e = Event() e.__setstate__(event_state) # Ping event if 'hook_id' in e.payload and 'zen' in e.payload: # TODO: record we sucessfully received ping event return # Get account and internal access token account = get_account(user_id=e.user_id) gh = get_api(user_id=e.user_id) access_token = ProviderToken.query.filter_by( id=account.extra_data["tokens"]["internal"] ).first().access_token # Validate payload sender if verify_sender and \ not is_valid_sender(account.extra_data, e.payload): raise Exception("Invalid sender for payload %s for user %s" % ( e.payload, e.user_id )) try: # Extra metadata from .zenodo.json and github repository metadata = extract_metadata(gh, e.payload) # Extract zip snapshot from github files = extract_files(e.payload) # Upload into Zenodo deposition = upload(access_token, metadata, files, publish=True) # TODO: Add step to update metadata of all previous records submitted_deposition( account.extra_data, e.payload['repository']['full_name'], deposition, e.payload['release']['tag_name'] ) account.extra_data.changed() db.session.commit() # Send email to user that release was included. except Exception as e: # Handle errors and possibly send user an email # Send email to user current_app.logger.exception("Failed handling GitHub payload") db.session.commit() six.reraise(*sys.exc_info())