Skip to content

Commit 63ec27a

Browse files
committed
Added option to import_into_empd2
1 parent 486c48c commit 63ec27a

1 file changed

Lines changed: 54 additions & 68 deletions

File tree

postgres/scripts/import_into_empd2.py

Lines changed: 54 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import pandas as pd
44
import numpy as np
55
import os
6-
import re
76
import requests
87
import argparse
98
from itertools import product
@@ -36,12 +35,17 @@ def read_empd_meta(fname):
3635
parser.add_argument(
3736
'-db', '--database-url', default=os.getenv('DATABASE_URL'),
3837
help="The url to connect to the database. Default: %(default)s")
38+
parser.add_argument(
39+
'-nd', '--no-dump', action='store_true',
40+
help="Do not update the `meta` file or any associated tables.")
3941

4042
args = parser.parse_args()
4143

4244
meta = args.meta
4345
db_url = args.database_url
4446

47+
dump_tables = not args.no_dump
48+
4549
samples_dir = os.path.join(os.path.dirname(meta), 'samples')
4650
base_meta = os.path.join(os.path.dirname(meta), 'meta.tsv')
4751

@@ -79,9 +83,6 @@ def clean_doi(doi):
7983
return DOI
8084

8185

82-
nan_patt = re.compile(r'(?i)nan')
83-
84-
8586
cursor.execute('SELECT MAX(publiid) FROM publications')
8687
PUBLI_ID = (cursor.fetchall()[0][0] or 0) + 1
8788

@@ -120,7 +121,7 @@ def clean_doi(doi):
120121
orig_METADATA.loc[key, 'okexcept'] = ','.join(row_okexcept)
121122
save_orig = True
122123

123-
if save_orig:
124+
if save_orig and dump_tables:
124125
try:
125126
orig_METADATA.to_csv(meta, sep='\t', index=False, float_format='%1.8g')
126127
except PermissionError:
@@ -149,10 +150,11 @@ def clean_doi(doi):
149150
'({})'.format(', '.join(map(is_null_str, v)))
150151
for v in new_vals)))
151152
conn.commit()
152-
try:
153-
df.to_csv(fname, sep='\t', index=False)
154-
except PermissionError:
155-
pass
153+
if dump_tables:
154+
try:
155+
df.to_csv(fname, sep='\t', index=False)
156+
except PermissionError:
157+
pass
156158

157159

158160
METADATA.replace(np.nan, '', inplace=True)
@@ -362,19 +364,18 @@ def clean_doi(doi):
362364
'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
363365
'oct', 'nov', 'dec', 'djf', 'mam', 'jja', 'son', 'ann']
364366
update_str = ', '.join(
365-
'%s_%s = %s' % (v, s, val) for (v, s), val in zip(
366-
product('tp', seasons), np.r_[
367-
nan_patt.sub('NULL', temperature).split(','),
368-
nan_patt.sub('NULL', precip).split(',')]))
367+
'%s_%s = %s' % (v, s, is_null_str(val)) for (v, s), val in zip(
368+
product('tp', seasons), np.r_[temperature.split(','),
369+
precip.split(',')]))
369370
cursor.execute(
370371
"UPDATE climate SET %s WHERE sampleName = %s" % (
371372
update_str, is_null_str(METADATA.iloc[x]['SampleName'])))
372373
else:
373374
cursor.execute(
374375
"INSERT INTO climate VALUES (%s,%s,%s)" % (
375376
is_null_str(METADATA.iloc[x]['SampleName']),
376-
nan_patt.sub('NULL', temperature),
377-
nan_patt.sub('NULL', precip)))
377+
temperature.replace('nan', 'NULL'),
378+
precip.replace('nan', 'NULL')))
378379
conn.commit()
379380

380381
for _worker in map('Worker{}_'.format, '1234'):
@@ -441,58 +442,43 @@ def clean_doi(doi):
441442
ORIVARNAME, ACCVARNAME, GROUPID))
442443
res = cursor.fetchall()
443444
if len(res) == 0:
444-
try:
445-
cursor.execute(
446-
"INSERT INTO p_vars "
447-
"(var_, acc_var_, acc_varname, original_varname, groupID, "
448-
" notes) VALUES (%d, NULL, '%s', '%s', '%s', '%s')" % (
449-
TAXON_ID, ACCVARNAME, ORIVARNAME, GROUPID,
450-
is_null_str(NOTES)))
451-
VAR_ = TAXON_ID
452-
TAXON_ID += 1
453-
conn.commit()
454-
except psql.IntegrityError as e:
455-
conn = psql.connect(db_url)
456-
cursor = conn.cursor()
457-
list_of_errors.append(
458-
'%s - %s: %s\n%s' % (samplename, VAR_, row['count'], e))
459-
err += 1
460-
else:
461-
VAR_ = res[0][0]
462-
samplename = row.samplename
463-
val = row['count']
464-
val = (('%d' % val if not np.isnan(val) else 'NULL'))
465-
percentage = row['percentage']
466-
percentage = (('%1.8g' % percentage) if not np.isnan(percentage)
467-
else 'NULL')
468-
try:
469445
cursor.execute(
470-
"INSERT INTO p_counts "
471-
"(sampleName, var_, count, percentage) "
472-
"VALUES ('%s', %s, %s, %s)" % (
473-
samplename, VAR_, val, percentage))
446+
"INSERT INTO p_vars "
447+
"(var_, acc_var_, acc_varname, original_varname, groupID, "
448+
" notes) VALUES (%d, NULL, '%s', '%s', '%s', '%s')" % (
449+
TAXON_ID, ACCVARNAME, ORIVARNAME, GROUPID,
450+
is_null_str(NOTES)))
451+
VAR_ = TAXON_ID
452+
TAXON_ID += 1
474453
conn.commit()
475-
except psql.IntegrityError as e:
476-
conn = psql.connect(db_url)
477-
cursor = conn.cursor()
478-
if 'duplicate key value violates unique constraint "p_counts_pkey"' in str(e):
479-
try:
480-
cursor.execute(
481-
"UPDATE p_counts SET count=%s percentage=%s WHERE "
482-
"sampleName = '%s' AND var_ = %d" % (
483-
val, percentage, samplename, VAR_))
484-
conn.commit()
485-
except psql.IntegrityError as e:
486-
conn = psql.connect(db_url)
487-
cursor = conn.cursor()
488-
list_of_errors.append(
489-
'%s - %s: %s\n%s' % (samplename, VAR_,
490-
row['count'], e))
491-
err += 1
492-
else:
493-
list_of_errors.append(
494-
'%s - %s: %s\n%s' % (samplename, VAR_, row['count'], e)
495-
)
496-
err += 1
497-
498-
assert err == 0, ('\n' + '-' * 80 + '\n').join(list_of_errors)
454+
else:
455+
VAR_ = res[0][0]
456+
samplename = row.samplename
457+
try:
458+
if row['count'] > 0:
459+
val = round(row['count'])
460+
try:
461+
cursor.execute(
462+
"INSERT INTO p_counts (sampleName, var_, count) "
463+
"VALUES ('%s', %d, %d)" % (
464+
samplename, VAR_, val))
465+
conn.commit()
466+
except psql.IntegrityError as e:
467+
conn = psql.connect(db_url)
468+
cursor = conn.cursor()
469+
if 'duplicate key value violates unique constraint "p_counts_pkey"' in str(e):
470+
cursor.execute(
471+
"SELECT count FROM p_counts WHERE "
472+
"sampleName = '%s' AND var_ = %d" % (
473+
samplename, VAR_))
474+
new_val = cursor.fetchall()[0][0] + val
475+
cursor.execute(
476+
"UPDATE p_counts SET count=%d WHERE "
477+
"sampleName = '%s' AND var_ = %d" % (
478+
new_val, samplename, VAR_))
479+
conn.commit()
480+
except Exception:
481+
print(samplename, VAR_, "!" + str(row['count']) + "!")
482+
483+
484+
assert err == 0, '\n'.join(list_of_errors)

0 commit comments

Comments
 (0)