Skip to content
Snippets Groups Projects
Commit 8bff1f0d authored by Nathan Hertz's avatar Nathan Hertz
Browse files

Updated schema's __init__.py with contents from main branch.

parent ad24b186
No related branches found
No related tags found
No related merge requests found
# publish our behavior-enhanced table classes
import sqlalchemy
from .model import *
from sqlalchemy.orm import sessionmaker
from pycapo import CapoConfig
INSTRUMENT_CAPO_PREFIXES = {
'SDM': 'metadataDatabase.jdbc',
'VLBA': 'metadataDatabase.jdbc',
'ALMA': 'almaMetadataDatabase.jdbc',
'OPT': 'evlaopt.nrao.jdbc.',
'PST': 'my.nrao.jdbc.',
'NGAS': 'ngasDatabase.jdbc',
'NGAS_NAASC': 'almaMetadataDatabase.jdbc',
'VLASS': 'edu.nrao.vlass.config.VlassMngrSettings.jdbc',
'LEGACY': 'oracleMetadataDatabase.jdbc'
}
def create_engine(instrument, **kwargs):
config = CapoConfig(profile=kwargs['profile']) if 'profile' in kwargs else CapoConfig()
prefix = INSTRUMENT_CAPO_PREFIXES[instrument]
user = config[prefix + 'Username']
passwd = config[prefix + 'Password']
url = config[prefix + 'Url']
if 'oracle' in url:
hostport, service_name = url.split('/')[-2:]
if instrument == 'LEGACY':
archiveurl = 'oracle://{}:{}@{}/{}'.format(user, passwd, hostport, service_name)
else:
host, port = hostport.split(':')
import cx_Oracle
dsn = cx_Oracle.makedsn(host, port, service_name=service_name)
archiveurl = 'oracle://{}:{}@{}'.format(user, passwd, dsn)
else:
archiveurl = url.replace('jdbc:', '').replace('://', '://' + user + ':' + passwd + '@')
return sqlalchemy.create_engine(archiveurl)
def create_session(instrument, **kwargs):
engine = create_engine(instrument, **kwargs)
session_mkr = sessionmaker(engine)
session = session_mkr()
return session
class ArchiveDBSession:
"""A class to create context manager around an archive connection."""
def __init__(self, instrument, **kwargs):
config = CapoConfig(profile=kwargs['profile']) if 'profile' in kwargs else CapoConfig()
prefix = INSTRUMENT_CAPO_PREFIXES[instrument]
user = config[prefix + 'Username']
passwd = config[prefix + 'Password']
url = config[prefix + 'Url']
if 'oracle' in url:
hostport, service_name = url.split('/')[-2:]
if instrument == 'LEGACY':
self.archiveurl = 'oracle://{}:{}@{}/{}'.format(user, passwd,
hostport, service_name)
else:
host, port = hostport.split(':')
import cx_Oracle
dsn = cx_Oracle.makedsn(host, port, service_name=service_name)
self.archiveurl = 'oracle://{}:{}@{}'.format(user, passwd, dsn)
else:
self.archiveurl = url.replace('jdbc:', '').replace('://', '://' +
user + ':' + passwd + '@')
self.session = None
def __enter__(self):
engine = sqlalchemy.create_engine(self.archiveurl)
session_mkr = sessionmaker(engine)
self.session = session_mkr(bind=engine)
return self
def __exit__(self, exc_type, exc_val, exc_tb):
self.session.close()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment