Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
df-scripts/load-hemembers-origin-as.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
executable file
124 lines (80 sloc)
3.26 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import json, csv, os, sys | |
api_key = "<<insert your API key here>>" | |
# | |
# Get all of the hemembers (index and names) | |
# | |
# Using the easy way for the moment - there is no error checking | |
# | |
# | |
os.system( 'curl https://internet2-2.deepfield.net/dimension/hemembers/positions?api_key=' + api_key + ' -o current-hemembers.json' ) | |
with open('current-hemembers.json') as data_file: | |
current_hemembers = json.load(data_file) | |
data_file.close() | |
os.remove('current-hemembers.json') | |
# for position_id in current_hemembers: | |
# data = current_hemembers[position_id] | |
# print "name: {0}, id: {1}".format(data['name'], data['position_id']) | |
# | |
# Read in source CSV file | |
# | |
reader = csv.reader(open('hemembers-data-origin_as.csv')) | |
source_hemembers = {} | |
for row in reader: | |
key = row[0] | |
if key in source_hemembers: | |
current_origin_ases = source_hemembers[key]["origin_as"] | |
current_origin_ases.append(row[2]) | |
source_hemembers[key]["origin_as"] = current_origin_ases | |
else: | |
source_hemembers[key] = { "description": row[1], "origin_as": [ row[2] ] } | |
# | |
# remove key of 'name' from import - this is from first line of CSV file | |
# | |
source_hemembers.pop('name', None) | |
# for member in hemembers: | |
# print "name: {0}, origin as: {1}".format(member, hemembers[member]) | |
# | |
# loop through the current hemembers and then update based upon 'name' | |
# | |
# this is the only way I can figure out how to update since the other methods appear to not work | |
# | |
for position_id in current_hemembers: | |
data = current_hemembers[position_id] | |
member_name = data['name'] | |
# look up member name in source CSV | |
if member_name in source_hemembers: | |
print( "\n\nUpdating member: {0}".format( member_name ) ) | |
description = source_hemembers[member_name]["description"] | |
origin_as = source_hemembers[member_name]["origin_as"] | |
current_origin_as_file = open("current_origin_as.json", 'w') | |
current_origin_as_file.truncate() | |
payload = {"description": description, "match": {"origin_as_is": origin_as } } | |
#print("name: {0}, payload: {1}".format(member_name, payload)) | |
current_origin_as_file.write(str(json.dumps(payload))) | |
current_origin_as_file.close() | |
url = 'https://internet2-2.deepfield.net/dimension/hemembers/position/' + position_id + '?api_key=' + api_key | |
os.system( 'curl -X PUT --data-binary @current_origin_as.json ' + url ) | |
os.remove( 'current_origin_as.json' ) | |
# | |
# see if there are any entries in source CSV that needs to be added | |
# | |
for name in source_hemembers: | |
found = False | |
for position_id in current_hemembers: | |
data = current_hemembers[position_id] | |
if data['name'] == name: | |
found = True | |
if not found: | |
print( "\n\nAdding member: {0}".format( name ) ) | |
member = source_hemembers[name] | |
description = member['description'] | |
origin_as = member['origin_as'] | |
current_origin_as_file = open("new_member.json", 'w') | |
current_origin_as_file.truncate() | |
payload = {"name": name, "description": description, "match": {"origin_as_is": origin_as} } | |
current_origin_as_file.write(str(json.dumps(payload))) | |
current_origin_as_file.close() | |
url = 'https://internet2-2.deepfield.net/dimension/hemembers/position/create?api_key=' + api_key | |
os.system( 'curl -X POST --data-binary @new_member.json ' + url ) | |
os.remove( 'new_member.json' ) | |