def map_fulfillment_data(data_hash, bounty_id, fulfillment_id): ipfs_hash = data_hash if len(ipfs_hash) != 46 or not ipfs_hash.startswith('Qm'): logger.error( 'Data Hash Incorrect for fulfillment on bounty: {:d} fulfillment: {:d}'.format( bounty_id, fulfillment_id)) data_JSON = "{}" else: data_JSON = ipfs.cat(ipfs_hash) if len(ipfs_hash) == 0: ipfs_hash = 'invalid' data = json.loads(data_JSON) metadata = data.pop('meta', {}) if 'payload' in data: data = data.get('payload') data_fulfiller = data.get('fulfiller', {}) plucked_data = pluck(data, fulfillment_data_keys) return { 'data_json': str(data_JSON), 'data': ipfs_hash, 'data_fulfiller': data_fulfiller, 'fulfiller_name': data_fulfiller.get('name', ''), 'fulfiller_email': data_fulfiller.get('email', '') or data.get('contact', ''), 'fulfiller_githubUsername': data_fulfiller.get('githubUsername', ''), 'fulfiller_address': data_fulfiller.get('address', ''), **plucked_data, **metadata, }
def map_fulfillment_data(data_hash, bounty_id, fulfillment_id, contract_version): ipfs_hash = data_hash if len(ipfs_hash) != 46 or not ipfs_hash.startswith('Qm'): logger.error( 'Data Hash Incorrect for fulfillment on bounty: {:d} fulfillment: {:d}' .format(bounty_id, fulfillment_id)) data_JSON = "{}" else: try: data_JSON = ipfs.cat(ipfs_hash) except StatusError as e: if e.original.response.status_code == 504: logger.warning( 'Timeout for bounty id {}, trying old IPFS Node'.format( bounty_id)) old_ipfs = ipfsapi.connect( host='https://ipfs.bounties.network', port='443') data_JSON = old_ipfs.cat(ipfs_hash) else: raise e if len(ipfs_hash) == 0: ipfs_hash = 'invalid' data = json.loads(data_JSON) metadata = data.pop('meta', {}) if 'payload' in data: data = data.get('payload') data_fulfiller = data.get('fulfiller', {}) plucked_data = pluck(data, fulfillment_data_keys) return { 'data_json': str(data_JSON), 'data': ipfs_hash, 'data_fulfiller': data_fulfiller, 'fulfiller_name': data_fulfiller.get('name', ''), 'fulfiller_email': data_fulfiller.get('email', '') or data.get('contact', ''), 'fulfiller_githubUsername': data_fulfiller.get('githubUsername', ''), 'fulfiller_address': data_fulfiller.get('address', ''), **plucked_data, **metadata, }
def map_bounty_data(data_hash, bounty_id): ipfs_hash = data_hash if len(ipfs_hash) != 46 or not ipfs_hash.startswith('Qm'): logger.error('Data Hash Incorrect for bounty: {:d}'.format(bounty_id)) data_JSON = "{}" else: data_JSON = ipfs.cat(ipfs_hash) if len(ipfs_hash) == 0: ipfs_hash = 'invalid' data = json.loads(data_JSON) metadata = data.get('meta', {}) if 'payload' in data: data = data.get('payload') data_issuer = data.get('issuer', {}) if isinstance(data_issuer, str): logger.error('Issuer schema incorrect for: {:d}'.format(bounty_id)) data_issuer = {} categories = data.get('categories', []) plucked_data = pluck(data, bounty_data_keys) return { **plucked_data, **metadata, 'issuer_name': data_issuer.get('name', ''), 'issuer_email': data_issuer.get('email', '') or data.get('contact', ''), 'issuer_githubUsername': data_issuer.get('githubUsername', ''), 'issuer_address': data_issuer.get('address', ''), 'data_issuer': data_issuer, 'data': ipfs_hash, 'data_json': str(data_JSON), 'data_categories': categories, }
def map_bounty_data(ipfs_hash, bounty_id): if len(ipfs_hash) != 46 or not ipfs_hash.startswith('Qm'): logger.error('Data Hash Incorrect for bounty: {:d}'.format(bounty_id)) return {} raw_ipfs_data = ipfs.cat(ipfs_hash) data = json.loads(raw_ipfs_data) meta = data.get('meta', {}) schema_version = meta.get('schemaVersion', '0.1') if schema_version == '0.1' or schema_version != '1.0': if 'payload' in data: data = data.get('payload') metadata = data.get('metadata', {}) experienceLevel = metadata.get('experienceLevel') or data.get( 'difficulty') or '' experienceLevel = 'Advanced' if experienceLevel == 'Expert' else experienceLevel formattedExperienceLevel = str( experienceLevel).lower().strip().capitalize() metadata.update({ 'experience_level': rev_mapped_difficulties.get(formattedExperienceLevel, BEGINNER) }) data_issuer = data.get('issuer', {}) if isinstance(data_issuer, str): logger.error('Issuer schema incorrect for: {:d}'.format(bounty_id)) data_issuer = {} categories = data.get('categories', []) plucked_data = pluck(data, bounty_v0_data_keys) bounty = { **plucked_data, **meta, **metadata, 'private_fulfillments': data.get('privateFulfillments', True), 'fulfillers_need_approval': data.get('fulfillersNeedApproval', False), 'issuer_name': data_issuer.get('name', ''), 'issuer_email': data_issuer.get('email', '') or data.get('contact', ''), 'issuer_githubUsername': data_issuer.get('githubUsername', ''), 'issuer_address': data_issuer.get('address', ''), 'revisions': data.get('revisions', None), 'attached_filename': data.get('sourceFileName', None), 'attached_data_hash': data.get('sourceDirectoryHash', None), 'attached_url': data.get('webReferenceURL', None), 'data_issuer': data_issuer, 'data': ipfs_hash, 'raw_ipfs_data': str(raw_ipfs_data), 'data_categories': categories, 'schema_version': schema_version, 'schema_name': meta.get('schemaName'), } # if 'platform' is gitcoin, also return deadline if meta.get('platform', '') == 'gitcoin' and 'expire_date' in data: bounty.update({ 'deadline': datetime.utcfromtimestamp(int(data.get('expire_date'))) }) if meta.get('platform', '') == 'gitcoin': bounty.update({'private_fulfillments': False}) elif schema_version == '1.0': payload = data.get('payload') meta = data.get('meta') try: difficulty = int(payload.get('difficulty')) except ValueError: difficulty = 1 if difficulty == 2: difficulty = ADVANCED elif difficulty == 1: difficulty = INTERMEDIATE else: difficulty = BEGINNER print('data') print(data.get('sourceFileName', None)) bounty = { # required 'title': payload.get('title'), 'description': payload.get('description'), 'fulfillment_amount': int(payload.get('fulfillmentAmount')), 'revisions': payload.get('revisions'), 'experience_level': difficulty, 'private_fulfillments': payload.get('privateFulfillments'), 'fulfillers_need_approval': payload.get('fulfillersNeedApproval'), # optional 'raw_ipfs_data': str(raw_ipfs_data), 'data_categories': payload.get('categories', []), 'attached_filename': payload.get('sourceFileName', None), 'attached_data_hash': payload.get('sourceDirectoryHash', None), 'attached_url': payload.get('webReferenceURL', None), # meta 'schema_version': schema_version, 'schema_name': meta.get('schemaname'), 'platform': meta.get('platform'), # db 'data': ipfs_hash, } return bounty
def map_bounty_data(data_hash, bounty_id): ipfs_hash = data_hash if len(ipfs_hash) != 46 or not ipfs_hash.startswith('Qm'): logger.error('Data Hash Incorrect for bounty: {:d}'.format(bounty_id)) data_JSON = '{}' else: data_JSON = ipfs.cat(ipfs_hash) if len(ipfs_hash) == 0: ipfs_hash = 'invalid' data = json.loads(data_JSON) meta = data.get('meta', {}) if 'payload' in data: data = data.get('payload') metadata = data.get('metadata', {}) experienceLevel = metadata.get('experienceLevel') or data.get( 'difficulty') or '' experienceLevel = 'Advanced' if experienceLevel == 'Expert' else experienceLevel formattedExperienceLevel = str( experienceLevel).lower().strip().capitalize() metadata.update({ 'experienceLevel': rev_mapped_difficulties.get(formattedExperienceLevel, BEGINNER) }) data_issuer = data.get('issuer', {}) if isinstance(data_issuer, str): logger.error('Issuer schema incorrect for: {:d}'.format(bounty_id)) data_issuer = {} categories = data.get('categories', []) plucked_data = pluck(data, bounty_data_keys) bounty = { **plucked_data, **meta, **metadata, 'private_fulfillments': data.get('privateFulfillments', True), 'issuer_name': data_issuer.get('name', ''), 'issuer_email': data_issuer.get('email', '') or data.get('contact', ''), 'issuer_githubUsername': data_issuer.get('githubUsername', ''), 'issuer_address': data_issuer.get('address', ''), 'revisions': data.get('revisions', None), 'data_issuer': data_issuer, 'data': ipfs_hash, 'data_json': str(data_JSON), 'data_categories': categories, } # if 'platform' is gitcoin, also return deadline if metadata.get('platform', '') is 'gitcoin': bounty.update({'deadline': data.get('expire_date', '')}) return bounty