aboutsummaryrefslogtreecommitdiffstats
path: root/sync.py
diff options
context:
space:
mode:
authorAsbjørn Sloth Tønnesen <ast@fiberby.net>2019-09-07 13:15:52 +0000
committerAsbjørn Sloth Tønnesen <ast@fiberby.net>2019-09-07 13:15:52 +0000
commitc59f1d55b8942e41f96f868e39edff67c47434e2 (patch)
tree2d15d7f4c8a1e98f8cc2a4a022914f4227cc3988 /sync.py
parenteb381cff50bc45d3072cf005aac07c91e79dcfc6 (diff)
downloadpeeringdb-simplesync-c59f1d55b8942e41f96f868e39edff67c47434e2.tar.gz
peeringdb-simplesync-c59f1d55b8942e41f96f868e39edff67c47434e2.tar.xz
peeringdb-simplesync-c59f1d55b8942e41f96f868e39edff67c47434e2.zip
handle deleted objects
Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Diffstat (limited to 'sync.py')
-rwxr-xr-xsync.py15
1 files changed, 13 insertions, 2 deletions
diff --git a/sync.py b/sync.py
index 5f1c3b3..c256147 100755
--- a/sync.py
+++ b/sync.py
@@ -51,9 +51,16 @@ def test_table(table_name):
raise
def gen_sql(table_name, cols):
- updates = [sql.Identifier(col) + sql.SQL(' = EXCLUDED.') + sql.Identifier(col) for col in cols[1:]]
+ updates = []
+ for col in cols[1:]:
+ if col == 'updated':
+ stmt = sql.SQL('updated = CASE WHEN EXCLUDED.deleted IS NOT NULL THEN t.updated ELSE EXCLUDED.updated END')
+ else:
+ stmt = sql.SQL('{} = EXCLUDED.{}').format(sql.Identifier(col), sql.Identifier(col))
+ updates.append(stmt)
+
comp = sql.SQL("""
- INSERT INTO {}.{}
+ INSERT INTO {}.{} AS t
({})
VALUES ({})
ON CONFLICT ({})
@@ -76,6 +83,8 @@ def update_object(kind, obj):
else:
t[key] = None
t['data'] = json.dumps(obj)
+ if t['status'] == 'deleted':
+ t['deleted'] = t['updated']
cur = conn.cursor()
try:
cur.execute(comp, t)
@@ -96,6 +105,8 @@ def fetch_objects(s, kind, extra_params):
endpoint = f'https://peeringdb.com/api/{kind:s}'
params = {
'depth': 0,
+ 'status__in': 'ok,pending,deleted',
+ 'since': 1,
**extra_params }
r = s.get(endpoint, params=params )