Skip to content

Commit 7268cef

Browse files
authored
Merge pull request #6 from NCAR/hua-work-common
Hua work common
2 parents c67bccd + 4d0b7b4 commit 7268cef

File tree

3 files changed

+58
-31
lines changed

3 files changed

+58
-31
lines changed

pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ build-backend = "setuptools.build_meta"
44

55
[project]
66
name = "rda_python_common"
7-
version = "1.0.2"
7+
version = "1.0.4"
8+
89
authors = [
910
{ name="Zaihua Ji", email="zji@ucar.edu" },
1011
]

src/rda_python_common/PgDBI.py

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,11 @@
3737

3838
# hard coded db ports for dbnames
3939
DBPORTS = {
40-
'default' : 0 # skip default port number 5432
40+
'default' : 5432
4141
}
4242

43+
DBPASS = {}
44+
4345
# hard coded db names for given schema names
4446
DBNAMES = {
4547
'ivaddb' : 'ivaddb',
@@ -79,7 +81,6 @@
7981
def SETPGDBI(name, value):
8082
PGDBI[name] = PgLOG.get_environment(name, value)
8183

82-
SETPGDBI('CDHOST', 'rda-db.ucar.edu') # common domain for db host for master server
8384
SETPGDBI('DEFDB', 'rdadb')
8485
SETPGDBI("DEFSC", 'dssdb')
8586
SETPGDBI('DEFHOST', PgLOG.PGLOG['PSQLHOST'])
@@ -88,7 +89,7 @@ def SETPGDBI(name, value):
8889
SETPGDBI("DBNAME", PGDBI['DEFDB'])
8990
SETPGDBI("SCNAME", PGDBI['DEFSC'])
9091
SETPGDBI("LNNAME", PGDBI['DEFSC'])
91-
SETPGDBI("PWNAME", PGDBI['DEFSC'])
92+
SETPGDBI("PWNAME", None)
9293
SETPGDBI("DBHOST", (os.environ['DSSDBHOST'] if os.environ.get('DSSDBHOST') else PGDBI['DEFHOST']))
9394
SETPGDBI("DBPORT", 0)
9495
SETPGDBI("ERRLOG", PgLOG.LOGERR) # default error logact
@@ -242,12 +243,12 @@ def set_scname(dbname = None, scname = None, lnname = None, pwname = None, dbhos
242243
PGDBI['DBNAME'] = dbname
243244
changed = 1
244245
if scname and scname != PGDBI['SCNAME']:
245-
PGDBI['PWNAME'] = PGDBI['LNNAME'] = PGDBI['SCNAME'] = scname
246+
PGDBI['LNNAME'] = PGDBI['SCNAME'] = scname
246247
changed = 1
247248
if lnname and lnname != PGDBI['LNNAME']:
248-
PGDBI['PWNAME'] = PGDBI['LNNAME'] = lnname
249+
PGDBI['LNNAME'] = lnname
249250
changed = 1
250-
if pwname and pwname != PGDBI['PWNAME']:
251+
if pwname != PGDBI['PWNAME']:
251252
PGDBI['PWNAME'] = pwname
252253
changed = 1
253254
if dbhost and dbhost != PGDBI['DBHOST']:
@@ -475,7 +476,8 @@ def pgbatch(sqlfile, foreground = 0):
475476

476477
dbhost = 'localhost' if PGDBI['DBSHOST'] == PgLOG.PGLOG['HOSTNAME'] else PGDBI['DBHOST']
477478
options = "-h {} -p {}".format(dbhost, PGDBI['DBPORT'])
478-
os.environ['PGPASSWORD'] = PGDBI['PWNAME']
479+
pwname = get_pgpass_password()
480+
os.environ['PGPASSWORD'] = pwname
479481
options += " -U {} {}".format(PGDBI['LNNAME'], PGDBI['DBNAME'])
480482

481483
if not sqlfile: return options
@@ -512,14 +514,14 @@ def pgconnect(reconnect = 0, pgcnt = 0, autocommit = True):
512514

513515
while True:
514516
config = {'database' : PGDBI['DBNAME'],
515-
'user' : PGDBI['LNNAME'],
516-
'password' : PGDBI['PWNAME']}
517+
'user' : PGDBI['LNNAME']}
517518
if PGDBI['DBSHOST'] == PgLOG.PGLOG['HOSTNAME']:
518519
config['host'] = 'localhost'
519520
else:
520-
config['host'] = PGDBI['DBHOST'] if PGDBI['DBHOST'] else PGDBI['CDHOST']
521+
config['host'] = PGDBI['DBHOST'] if PGDBI['DBHOST'] else PGDBI['DEFHOST']
521522
if not PGDBI['DBPORT']: PGDBI['DBPORT'] = get_dbport(PGDBI['DBNAME'])
522523
if PGDBI['DBPORT']: config['port'] = PGDBI['DBPORT']
524+
config['password'] = get_pgpass_password()
523525

524526
sqlstr = "psycopg2.connect(**{})".format(config)
525527
if PgLOG.PGLOG['DBGLEVEL']: PgLOG.pgdbg(1000, sqlstr)
@@ -2216,3 +2218,27 @@ def pgname(str, sign = None):
22162218
nstr = '"{}"'.format(nstr)
22172219

22182220
return nstr
2221+
2222+
#
2223+
# get a postgres password for given host, port, dbname, usname
2224+
#
2225+
def get_pgpass_password():
2226+
2227+
if PGDBI['PWNAME']: return PGDBI['PWNAME']
2228+
if not DBPASS: read_pgpass()
2229+
return DBPASS.get((PGDBI['DBSHOST'], PGDBI['DBPORT'], PGDBI['DBNAME'], PGDBI['USNAME']))
2230+
2231+
#
2232+
# Reads the .pgpass file and returns a dictionary of credentials.
2233+
#
2234+
def read_pgpass():
2235+
2236+
try:
2237+
with open(PgLOG.PGLOG['DSSHOME'] + '/.pgpass', "r") as f:
2238+
for line in f:
2239+
line = line.strip()
2240+
if not line or line.startswith("#"): continue
2241+
dbhost, dbport, dbname, usname, pwname = line.split(":")
2242+
DBPASS[(dbhost, dbport, dbname, usname)] = pwname
2243+
except FileNotFoundError:
2244+
pass

src/rda_python_common/PgLOG.py

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109
'DSIDCHRS' : "d",
110110
'DOSHELL' : False,
111111
'NEWDSID' : True,
112-
'BCHHOSTS' : "SLURM:PBS",
112+
'BCHHOSTS' : "PBS",
113113
'HOSTTYPE' : 'dav', # default HOSTTYPE
114114
'EMLMAX' : 256, # up limit of email line count
115115
'PGBATCH' : '', # current batch service name, SLURM or PBS
@@ -1219,14 +1219,14 @@ def set_common_pglog():
12191219
PGLOG['NOTAROOT'] = '|'.join([PGLOG['OLDAROOT'], PGLOG['OLDBROOT'], PGLOG['BACKROOT']])
12201220
PGLOG['NOTBROOT'] = '|'.join([PGLOG['OLDAROOT'], PGLOG['OLDBROOT'], PGLOG['ARCHROOT']])
12211221
PGLOG['ALLROOTS'] = '|'.join([PGLOG['OLDAROOT'], PGLOG['OLDBROOT'], PGLOG['ARCHROOT'], PGLOG['BACKROOT']])
1222-
SETPGLOG("USRHOME", "PGUSRHOME")
1223-
SETPGLOG("DSSHOME", "PGDSSHOME")
1224-
SETPGLOG("ADDPATH", "PGADDPATH")
1225-
SETPGLOG("ADDLIB", "PGADDLIB")
1226-
SETPGLOG("OTHPATH", "PGOTHPATH")
1227-
SETPGLOG("PSQLHOME", "PGPSQLHOME")
1228-
SETPGLOG("DSGHOSTS", "PGDSGHOSTS")
1229-
SETPGLOG("DSIDCHRS", "PGDSIDCHRS")
1222+
SETPGLOG("USRHOME", "/glade/u/home")
1223+
SETPGLOG("DSSHOME", "/glade/u/home/rdadata")
1224+
SETPGLOG("ADDPATH", "")
1225+
SETPGLOG("ADDLIB", "")
1226+
SETPGLOG("OTHPATH", "")
1227+
SETPGLOG("PSQLHOME", "/usr/pgsql-15")
1228+
SETPGLOG("DSGHOSTS", "")
1229+
SETPGLOG("DSIDCHRS", "d")
12301230

12311231
if not os.getenv('HOME'): os.environ['HOME'] = "{}/{}".format(PGLOG['USRHOME'], PGLOG['CURUID'])
12321232
SETPGLOG("HOMEBIN", os.environ.get('HOME') + "/bin")
@@ -1279,7 +1279,7 @@ def set_common_pglog():
12791279
SETPGLOG("PUSGDIR", PGLOG['DSSDBHM']+"/prog_usage") # path to program usage files
12801280
SETPGLOG("DSSURL", "https://rda.ucar.edu") # current dss web URL
12811281
SETPGLOG("RQSTURL", "/datasets/request") # request URL path
1282-
SETPGLOG("WEBSERVERS", "PGWEBSERVERS") # webserver names for Web server
1282+
SETPGLOG("WEBSERVERS", "rda-web-prod01.ucar.edu:rda-web-test01.ucar.edu") # webserver names for Web server
12831283
PGLOG['WEBHOSTS'] = PGLOG['WEBSERVERS'].split(':') if PGLOG['WEBSERVERS'] else []
12841284
SETPGLOG("DBMODULE", '')
12851285
SETPGLOG("LOCDATA", "/data")
@@ -1288,21 +1288,21 @@ def set_common_pglog():
12881288
SETPGLOG("DSSWEB", PGLOG['LOCDATA']+"/web")
12891289
SETPGLOG("DSWHOME", PGLOG['DSSWEB']+"/datasets") # datast web root path
12901290
PGLOG['HOMEROOTS'] = "{}|{}".format(PGLOG['DSSHOME'], PGLOG['DSWHOME'])
1291-
SETPGLOG("DSSDATA", "PGDSSDATA") # dss data root path
1291+
SETPGLOG("DSSDATA", "/glade/campaign/collections/rda") # dss data root path
12921292
SETPGLOG("DSDHOME", PGLOG['DSSDATA']+"/data") # dataset data root path
12931293
SETPGLOG("DECSHOME", PGLOG['DSSDATA']+"/decsdata") # dataset decsdata root path
12941294
SETPGLOG("DSHHOME", PGLOG['DECSHOME']+"/helpfiles") # dataset help root path
12951295
SETPGLOG("UPDTWKP", PGLOG['DSSDATA']+"/work") # dsupdt work root path
12961296
SETPGLOG("TRANSFER", PGLOG['DSSDATA']+"/transfer") # dss transfer partition
12971297
SETPGLOG("RQSTHOME", PGLOG['TRANSFER']+"/dsrqst") # dsrqst home
1298-
SETPGLOG("DSAHOME", "PGDSAHOME") # dataset data alternate root path
1299-
SETPGLOG("RQSTALTH", "PGRQSTALTH") # alternate dsrqst path
1300-
SETPGLOG("GPFSHOST", "PGGPFSHOST") # empty if writable to glade
1301-
SETPGLOG("PSQLHOST", "PGPSQLHOST") # host name for postgresql server
1302-
SETPGLOG("SLMHOSTS", "PGSLMHOSTS") # host names for SLURM server
1303-
SETPGLOG("PBSHOSTS", "PGPBSHOSTS") # host names for PBS server
1304-
SETPGLOG("CHKHOSTS", "PGCHKHOSTS") # host names for dscheck daemon
1305-
SETPGLOG("PVIEWHOST", "PGPVIEWHOST") # host name for view only postgresql server
1298+
SETPGLOG("DSAHOME", "") # dataset data alternate root path
1299+
SETPGLOG("RQSTALTH", "") # alternate dsrqst path
1300+
SETPGLOG("GPFSHOST", "") # empty if writable to glade
1301+
SETPGLOG("PSQLHOST", "rda-db.ucar.edu") # host name for postgresql server
1302+
SETPGLOG("SLMHOSTS", "cheyenne:casper") # host names for SLURM server
1303+
SETPGLOG("PBSHOSTS", "cheyenne:casper") # host names for PBS server
1304+
SETPGLOG("CHKHOSTS", "") # host names for dscheck daemon
1305+
SETPGLOG("PVIEWHOST", "rda-pgdb-02.ucar.edu") # host name for view only postgresql server
13061306
SETPGLOG("FTPUPLD", PGLOG['TRANSFER']+"/rossby") # ftp upload path
13071307
PGLOG['GPFSROOTS'] = "{}|{}|{}".format(PGLOG['DSDHOME'], PGLOG['UPDTWKP'], PGLOG['RQSTHOME'])
13081308

@@ -1311,7 +1311,7 @@ def set_common_pglog():
13111311
os.environ['history'] = '0'
13121312

13131313
# set tmp dir
1314-
SETPGLOG("TMPPATH", "PGTMPPATH")
1314+
SETPGLOG("TMPPATH", "/glade/campaign/collections/rda/work/ptmp")
13151315
if not PGLOG['TMPPATH']: PGLOG['TMPPATH'] = "/data/ptmp"
13161316

13171317
SETPGLOG("TMPDIR", '')

0 commit comments

Comments
 (0)