-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake.py
More file actions
140 lines (107 loc) · 4.62 KB
/
Copy pathmake.py
File metadata and controls
140 lines (107 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import click
from config import get_project_templates_library_dir
from jinja2 import Template
from project import has_project_of_type, get_project_config
import prompt
def make_kerberos_auth(ctx):
# Need to go here: https://github.com/OHDSI-JHU/HADES-JHU/blob/main/DatabaseConnector_Kerberos_Auth.R
# Go to crunchr and test the above code, make sure it works
# Look at results, make sure generate a krb5.conf correctly
# Then make sure we generate R code that connects correctly to a scratch
realm = click.prompt("Enter the realm.", default="WIN.AD.JHU.EDU")
kdc = click.prompt(
"Enter the key distribution cluster (KDC.", default="ESGWINMTW6.WIN.AD.JHU.EDU"
)
with open("resources/stubs/kerberos_auth.txt", "r") as f:
template = Template(f.read())
kerberos_auth = template.render(realm=realm, kdc=kdc)
click.secho("✅ Done. Template:\n", fg="green")
click.echo(kerberos_auth)
click.secho(
"\n📁 Copied rendered auth file to /temporary/placeholder/kerberos_auth.txt",
fg="green",
)
click.secho("📁 Copied driver files to /temporary/placeholder/", fg="green")
def make_dbi_connect():
if has_project_of_type("pmap"):
click.secho("\n🗂️ Generate a DBI connection file\n", fg="green", bold=True)
click.secho("(1) Generate for a PMAP project.", fg="white")
click.secho("(2) Enter arbitrary values.", fg="white")
click.secho("(3) Cancel\n", fg="white")
choice = click.prompt("Enter your choice", type=click.Choice(["1", "2", "3"]))
if choice == "1":
return generate_dbi_for_pmap_project()
port = prompt.db_port()
driver = prompt.odbc_db_driver()
server = prompt.db_server("win.jhu.edu")
database = prompt.projection_db_name("table_name")
tds_version = prompt.free_tds_version()
values = {
"port": port,
"driver": f"\"{driver}\"",
"server": f"\"{server}\"",
"database": f"\"{database}\"",
"tds_version": f"\"{tds_version}\"",
}
template = render_dbi_connect_template(values, print=True)
save_template_to_file("DBI Connection", template, f"dbi_connect_{database}.R", print=True)
def generate_dbi_for_pmap_project():
click.secho("\nSelect a PMAP Project\n", fg="green", bold=True)
project_name = prompt.existing_project(project_type="pmap")
values = {
"project_name": project_name,
"port": "project_settings$db_port",
"driver": "project_settings$db_driver",
"server": "project_settings$db_server",
"database": "project_settings$projection_name",
"tds_version": "project_settings$free_tds_version",
}
template = render_dbi_connect_template(values, print=True)
save_template_to_file("DBI Connection", template, f"dbi_connect_{project_name}.R", print=True)
def save_template_to_file(name, template, filename, print=False):
path = f"{get_project_templates_library_dir()}/{filename}"
with open(path, "w") as f:
f.write(template)
if print:
click.secho(f"\n{name} template saved to:\n", fg="green")
click.secho(f"{path}", fg="white")
def render_dbi_connect_template(values, print=False):
with open("resources/stubs/dbi_connection.R.j2", "r") as f:
template = Template(f.read())
template_string = template.render(
project=values["project_name"] if "project_name" in values else None,
port=values["port"],
driver=values["driver"],
server=values["server"],
database=values["database"],
tds_version=values["tds_version"],
)
if print:
click.secho("\nTemplate:\n", fg="green")
click.echo(template_string)
return template_string
def run_select_make_options(ctx, option):
if option:
if option == "dbi-connect":
choice = "1"
elif option == "kerberos":
choice = "2"
else:
click.secho("Invalid option.", fg="red", bold=True)
exit(1)
else:
click.secho("🔨 Generate code from templates\n", fg="green", bold=True)
click.secho("Select from one of the below options:\n", fg="green")
click.secho("(1) Make an ODBC DBI connection file", fg="white")
click.secho("(2) Scaffold Kerberos authentication", fg="white")
click.secho("(3) Cancel\n", fg="white")
choice = click.prompt("Enter your choice", type=click.Choice(["1", "2", "3"]))
if choice == "1":
make_dbi_connect()
elif choice == "2":
make_kerberos_auth()
elif choice == "3":
click.secho("Cancelled.", fg="red", bold=True)
exit(1)
else:
exit(0)