ucampostgresvro 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ucampostgresvro/DBA.py +792 -0
- ucampostgresvro/__init__.py +1 -0
- ucampostgresvro/__main__.py +134 -0
- ucampostgresvro/ca.crt +19 -0
- ucampostgresvro/exceptions.py +2 -0
- ucampostgresvro/tests/__init__.py +0 -0
- ucampostgresvro/tests/conftest.py +63 -0
- ucampostgresvro/tests/dbconnect.py +10 -0
- ucampostgresvro/tests/test_DB.py +339 -0
- ucampostgresvro/tests/utils.py +116 -0
- ucampostgresvro/tools.py +7 -0
- ucampostgresvro/utils.py +197 -0
- ucampostgresvro-0.1.0.dist-info/LICENSE +21 -0
- ucampostgresvro-0.1.0.dist-info/METADATA +232 -0
- ucampostgresvro-0.1.0.dist-info/RECORD +16 -0
- ucampostgresvro-0.1.0.dist-info/WHEEL +4 -0
ucampostgresvro/tools.py
ADDED
ucampostgresvro/utils.py
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
import logging
|
2
|
+
from typing import Callable, Dict
|
3
|
+
|
4
|
+
from ucampostgresvro.DBA import DB
|
5
|
+
from ucampostgresvro.exceptions import DbException
|
6
|
+
|
7
|
+
LOG = logging.getLogger(__name__)
|
8
|
+
|
9
|
+
|
10
|
+
def create_table(tablename: str, db_params: Dict[str, str], design: str) -> bool:
|
11
|
+
"""Creation of table with provided design
|
12
|
+
|
13
|
+
Args:
|
14
|
+
tablename (str): Name of the table to be created.
|
15
|
+
db_params (Dict[str, str]): provide parameters for DB connection
|
16
|
+
design (str): design to be created.
|
17
|
+
|
18
|
+
Raises:
|
19
|
+
DbException: Exception for the provided inputs.
|
20
|
+
|
21
|
+
Returns:
|
22
|
+
bool: True for the success and False for the failure.
|
23
|
+
"""
|
24
|
+
db = DB(db_params)
|
25
|
+
conn = db.db_connection()
|
26
|
+
cursor = db.db_cursor()
|
27
|
+
with conn:
|
28
|
+
try:
|
29
|
+
cursor.execute(design)
|
30
|
+
LOG.info(f"Creation of the table '{tablename}' has been successful.")
|
31
|
+
return True
|
32
|
+
except Exception as e:
|
33
|
+
LOG.error(f"Error: Creation of table '{tablename}' failed: \n {e}")
|
34
|
+
raise DbException(f"Error: Creation of table '{tablename}' failed: \n {e}")
|
35
|
+
|
36
|
+
|
37
|
+
def drop_table(tablename: str, db_params: Dict[str, str]) -> bool:
|
38
|
+
"""Drop the table.
|
39
|
+
|
40
|
+
Args:
|
41
|
+
tablename (str): Name of the table to be created.
|
42
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
43
|
+
|
44
|
+
Raises:
|
45
|
+
DbException: Exception for the provided inputs.
|
46
|
+
|
47
|
+
Returns:
|
48
|
+
bool: True for the success and False for the failure.
|
49
|
+
"""
|
50
|
+
db = DB(db_params)
|
51
|
+
conn = db.db_connection()
|
52
|
+
cursor = db.db_cursor()
|
53
|
+
with conn:
|
54
|
+
try:
|
55
|
+
cursor.execute(f'DROP TABLE "{tablename}";')
|
56
|
+
LOG.info(f"Drop of the table '{tablename}' has been successful.")
|
57
|
+
return True
|
58
|
+
except Exception as e:
|
59
|
+
LOG.error(f"Error: Drop of table {tablename} failed: \n {e}")
|
60
|
+
raise DbException(f"Error: Drop of table {tablename} failed: \n {e}")
|
61
|
+
|
62
|
+
|
63
|
+
def create_user_table(
|
64
|
+
tablename: str, db_params: Dict[str, str]
|
65
|
+
) -> Callable[[str, Dict[str, str], str], bool]:
|
66
|
+
"""create the user table.
|
67
|
+
|
68
|
+
Args:
|
69
|
+
tablename (str): Name of the table to be created.
|
70
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
71
|
+
|
72
|
+
Returns:
|
73
|
+
Callable[[str, Dict[str, str], str], bool]: Invoke the create table function.
|
74
|
+
"""
|
75
|
+
design = f"CREATE TABLE {tablename} (\
|
76
|
+
id SERIAL PRIMARY KEY, \
|
77
|
+
crsid VARCHAR(255) UNIQUE, \
|
78
|
+
name VARCHAR(255)\
|
79
|
+
);"
|
80
|
+
return create_table(tablename, db_params, design)
|
81
|
+
|
82
|
+
|
83
|
+
def create_deployment_table(tablename: str, db_params: Dict[str, str]) -> Callable:
|
84
|
+
"""create the deployment table.
|
85
|
+
|
86
|
+
Args:
|
87
|
+
tablename (str): Name of the table to be created.
|
88
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
89
|
+
|
90
|
+
Returns:
|
91
|
+
Callable[[str, Dict[str, str], str], bool]: Invoke the create table function.
|
92
|
+
"""
|
93
|
+
design = f"CREATE TABLE {tablename} (id SERIAL PRIMARY KEY, deploymentId VARCHAR(50) UNIQUE);"
|
94
|
+
return create_table(tablename, db_params, design)
|
95
|
+
|
96
|
+
|
97
|
+
def create_project_table(
|
98
|
+
proj_tablename: str, user_tablename: str, db_params: Dict[str, str]
|
99
|
+
) -> Callable[[str, Dict[str, str], str], bool]:
|
100
|
+
"""create the project table.
|
101
|
+
|
102
|
+
Args:
|
103
|
+
proj_tablename (str): Name of the project table to be created.
|
104
|
+
user_tablename (str): Name of the user table to be referred.
|
105
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
106
|
+
|
107
|
+
Returns:
|
108
|
+
Callable[[str, Dict[str, str], str], bool]: Invoke the create table function.
|
109
|
+
"""
|
110
|
+
design = f"CREATE TABLE {proj_tablename} (\
|
111
|
+
id SERIAL PRIMARY KEY, \
|
112
|
+
project_number VARCHAR(255), \
|
113
|
+
paid_by INTEGER REFERENCES {user_tablename}(id), \
|
114
|
+
amount FLOAT NOT NULL \
|
115
|
+
);"
|
116
|
+
return create_table(proj_tablename, db_params, design)
|
117
|
+
|
118
|
+
|
119
|
+
def create_grant_table(
|
120
|
+
grant_tablename: str, user_tablename: str, db_params: Dict[str, str]
|
121
|
+
) -> Callable[[str, Dict[str, str], str], bool]:
|
122
|
+
"""create the grant table.
|
123
|
+
|
124
|
+
Args:
|
125
|
+
grant_tablename (str): Name of the grant table to be created.
|
126
|
+
user_tablename (str): Name of the user table to be referred.
|
127
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
128
|
+
|
129
|
+
Returns:
|
130
|
+
Callable[[str, Dict[str, str], str], bool]: Invoke the create table function.
|
131
|
+
"""
|
132
|
+
design = f"CREATE TABLE {grant_tablename} (\
|
133
|
+
id SERIAL PRIMARY KEY,\
|
134
|
+
grant_number VARCHAR(255),\
|
135
|
+
paid_by INTEGER REFERENCES {user_tablename}(id),\
|
136
|
+
amount FLOAT NOT NULL\
|
137
|
+
);"
|
138
|
+
return create_table(grant_tablename, db_params, design)
|
139
|
+
|
140
|
+
|
141
|
+
def create_costing_table(
|
142
|
+
costing_tablename: str,
|
143
|
+
deploy_tablename: str,
|
144
|
+
proj_tablename: str,
|
145
|
+
grant_tablename: str,
|
146
|
+
db_params: Dict[str, str],
|
147
|
+
) -> Callable[[str, Dict[str, str], str], bool]:
|
148
|
+
"""create the grant table.
|
149
|
+
|
150
|
+
Args:
|
151
|
+
costing_tablename (str): Name of the costing table to be created.
|
152
|
+
deploy_tablename (str): Name of the deploy table to be referred.
|
153
|
+
proj_tablename (str): Name of the project table to be referred.
|
154
|
+
grant_tablename (str): Name of the grant table to be referred.
|
155
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
156
|
+
|
157
|
+
Returns:
|
158
|
+
Callable[[str, Dict[str, str], str], bool]: Invoke the create table function.
|
159
|
+
"""
|
160
|
+
design = f"CREATE TABLE {costing_tablename} (\
|
161
|
+
id SERIAL PRIMARY KEY,\
|
162
|
+
deployment_id INTEGER REFERENCES {deploy_tablename}(id),\
|
163
|
+
type VARCHAR(100) CHECK (type IN ('Resource Expansion', 'Duration Expansion', 'Initial Resource')),\
|
164
|
+
project_id INTEGER REFERENCES {proj_tablename}(id),\
|
165
|
+
grant_id INTEGER REFERENCES {grant_tablename}(id)\
|
166
|
+
);"
|
167
|
+
return create_table(costing_tablename, db_params, design)
|
168
|
+
|
169
|
+
|
170
|
+
def check_table_exists(table_name: str, db_params: Dict[str, str]) -> bool:
|
171
|
+
"""Check the status of the table.
|
172
|
+
|
173
|
+
Args:
|
174
|
+
table_name (str): Name of the table to be checked.
|
175
|
+
db_params (Dict[str, str]): provide parameters for DB connection.
|
176
|
+
|
177
|
+
Raises:
|
178
|
+
DbException: Exception for the provided inputs.
|
179
|
+
|
180
|
+
Returns:
|
181
|
+
bool: True for the success of table search and False for the failing in table search.
|
182
|
+
"""
|
183
|
+
db = DB(db_params)
|
184
|
+
conn = db.db_connection()
|
185
|
+
cursor = db.db_cursor()
|
186
|
+
with conn:
|
187
|
+
try:
|
188
|
+
cursor.execute(
|
189
|
+
f"SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = '{table_name}' \
|
190
|
+
AND table_schema = 'public')"
|
191
|
+
)
|
192
|
+
exists = cursor.fetchone()[0]
|
193
|
+
LOG.info(f"'{table_name}' status : {exists}")
|
194
|
+
return exists
|
195
|
+
except Exception as e:
|
196
|
+
LOG.error(f"Error: checking of table {table_name} failed: \n {e}")
|
197
|
+
raise DbException(f"Error: checking of table '{table_name}' failed: \n {e}")
|
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2025 Information Services / Infrastructure
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
@@ -0,0 +1,232 @@
|
|
1
|
+
Metadata-Version: 2.3
|
2
|
+
Name: ucampostgresvro
|
3
|
+
Version: 0.1.0
|
4
|
+
Summary:
|
5
|
+
Author: Ishan Mahajan
|
6
|
+
Author-email: mahanishanmahajan@gmail.com
|
7
|
+
Requires-Python: >=3.10
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
9
|
+
Classifier: Programming Language :: Python :: 3.10
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
13
|
+
Requires-Dist: psycopg2-binary (>=2.9.10,<3.0.0)
|
14
|
+
Description-Content-Type: text/markdown
|
15
|
+
|
16
|
+
# Script for VRA database for Costing
|
17
|
+
|
18
|
+
# Developing
|
19
|
+
1. [Install docker-compose](https://docs.docker.com/compose/install/).
|
20
|
+
2. Docker will run the postgres on port 5455 so, ensure the system has the port available
|
21
|
+
|
22
|
+
```
|
23
|
+
# run pytest testing
|
24
|
+
./developer.sh pytest start
|
25
|
+
|
26
|
+
# run flake8 testing
|
27
|
+
./developer.sh flake8 start
|
28
|
+
|
29
|
+
# delete the testing environment
|
30
|
+
./developer.sh pytest stop
|
31
|
+
|
32
|
+
# delete the flake8 environment
|
33
|
+
./developer.sh flake8 stop
|
34
|
+
```
|
35
|
+
|
36
|
+
|
37
|
+
## Package usage
|
38
|
+
|
39
|
+
- To setup database
|
40
|
+
```
|
41
|
+
from ucampostgresvro import pre_setupconfig
|
42
|
+
from ucampostgresvro.DB import DB
|
43
|
+
db_params = {
|
44
|
+
"dbname": "vrapricing",
|
45
|
+
"user": "postgres",
|
46
|
+
"password": <1Password: vrapricingpostgres>,
|
47
|
+
"host": "infra-db.srv.uis.cam.ac.uk",
|
48
|
+
"port": "5432",
|
49
|
+
"sslmode": "require",
|
50
|
+
"sslrootcert": "./ca.crt", # path to your client certificate
|
51
|
+
}
|
52
|
+
db = DB(db_params)
|
53
|
+
pre_setupconfig(db_params)
|
54
|
+
```
|
55
|
+
- To perform CRUD operation
|
56
|
+
```
|
57
|
+
from ucampostgresvro.DB import DB
|
58
|
+
db_params = {
|
59
|
+
"dbname": "vrapricing",
|
60
|
+
"user": "postgres",
|
61
|
+
"password": <1Password: vrapricingpostgres>,
|
62
|
+
"host": "infra-db.srv.uis.cam.ac.uk",
|
63
|
+
"port": "5432",
|
64
|
+
"sslmode": "require",
|
65
|
+
"sslrootcert": "./ca.crt", # path to your client certificate
|
66
|
+
}
|
67
|
+
db = DB(db_params)
|
68
|
+
|
69
|
+
# CRUD on user DB./
|
70
|
+
|
71
|
+
# create user
|
72
|
+
db.insert_vrauser("ll220", "Ling-Yan Lau")
|
73
|
+
|
74
|
+
# read user
|
75
|
+
print(db.get_vrauser())
|
76
|
+
|
77
|
+
# update user
|
78
|
+
db.update_vrauser("ll220", "bda20", 'Ben Argyle')
|
79
|
+
|
80
|
+
# delete user
|
81
|
+
db.remove_vrauser('bda20')
|
82
|
+
|
83
|
+
# create vra deploymentid
|
84
|
+
db.insert_deployment_id("1231ee112ad11212")
|
85
|
+
|
86
|
+
# read vra deployment id
|
87
|
+
print(db.get_deployment_id("1231a"))
|
88
|
+
|
89
|
+
# update vra deployment id
|
90
|
+
db.update_deployment_id("1231ee112ad1", "1231a")
|
91
|
+
|
92
|
+
# delete vra deployment id
|
93
|
+
db.remove_deployment_id('1231a')
|
94
|
+
|
95
|
+
# create project
|
96
|
+
db.insert_project("0001",1,100.0)
|
97
|
+
|
98
|
+
# read project
|
99
|
+
print(db.get_project())
|
100
|
+
|
101
|
+
# update project
|
102
|
+
db.update_project("0001", "0002", 4, 200)
|
103
|
+
|
104
|
+
# delete project
|
105
|
+
# db.remove_project("0002")
|
106
|
+
|
107
|
+
# create grant
|
108
|
+
db.insert_grant("0001",1,100.0)
|
109
|
+
|
110
|
+
# read grant
|
111
|
+
print(db.get_grant())
|
112
|
+
|
113
|
+
# update grant
|
114
|
+
db.update_grant("0001", "0002", 4, 200)
|
115
|
+
|
116
|
+
# delete grant
|
117
|
+
db.remove_grant("0002")
|
118
|
+
|
119
|
+
# create costing
|
120
|
+
db.insert_costing(2, "Initial Resource", project_id=4, grant_id=None)
|
121
|
+
|
122
|
+
# read costing
|
123
|
+
print(db.get_costing())
|
124
|
+
|
125
|
+
# update costing
|
126
|
+
db.update_costing(2, "Duration Expansion", old_grant_id=4, old_project_id=None, grant_id=4, project_id=None)
|
127
|
+
|
128
|
+
# delete costing
|
129
|
+
db.remove_costing(2, "Duration Expansion", 4, None)
|
130
|
+
|
131
|
+
# to close db connection
|
132
|
+
db.closedb()
|
133
|
+
```
|
134
|
+
|
135
|
+
---
|
136
|
+
### Design
|
137
|
+
|
138
|
+

|
139
|
+
|
140
|
+
## - VRAUSER table
|
141
|
+
```
|
142
|
+
vrapricing=# \d vrauser;
|
143
|
+
Table "public.vrauser"
|
144
|
+
Column | Type | Collation | Nullable | Default
|
145
|
+
--------+------------------------+-----------+----------+-------------------------------------
|
146
|
+
id | integer | | not null | nextval('vrauser_id_seq'::regclass)
|
147
|
+
crsid | character varying(255) | | |
|
148
|
+
name | character varying(255) | | |
|
149
|
+
Indexes:
|
150
|
+
"vrauser_pkey" PRIMARY KEY, btree (id)
|
151
|
+
"vrauser_crsid_key" UNIQUE CONSTRAINT, btree (crsid)
|
152
|
+
Referenced by:
|
153
|
+
TABLE "purchaseorder" CONSTRAINT "purchaseorder_paid_by_fkey" FOREIGN KEY (paid_by) REFERENCES vrauser(id)
|
154
|
+
TABLE "grant" CONSTRAINT "grant_paid_by_fkey" FOREIGN KEY (paid_by) REFERENCES vrauser(id)
|
155
|
+
|
156
|
+
```
|
157
|
+
|
158
|
+
## - VRA Deployment ID tabel
|
159
|
+
```
|
160
|
+
vrapricing=# \d deploymentid;
|
161
|
+
Table "public.deploymentid"
|
162
|
+
Column | Type | Collation | Nullable | Default
|
163
|
+
--------------+-----------------------+-----------+----------+------------------------------------------
|
164
|
+
id | integer | | not null | nextval('deploymentid_id_seq'::regclass)
|
165
|
+
deploymentid | character varying(50) | | |
|
166
|
+
Indexes:
|
167
|
+
"deploymentid_pkey" PRIMARY KEY, btree (id)
|
168
|
+
"deploymentid_deploymentid_key" UNIQUE CONSTRAINT, btree (deploymentid)
|
169
|
+
Referenced by:
|
170
|
+
TABLE "costing" CONSTRAINT "costing_deployment_id_fkey" FOREIGN KEY (deployment_id) REFERENCES deploymentid(id)
|
171
|
+
|
172
|
+
```
|
173
|
+
|
174
|
+
## - project table
|
175
|
+
```
|
176
|
+
vrapricing=# \d projects;
|
177
|
+
Table "public.projects"
|
178
|
+
Column | Type | Collation | Nullable | Default
|
179
|
+
----------------+------------------------+-----------+----------+--------------------------------------
|
180
|
+
id | integer | | not null | nextval('projects_id_seq'::regclass)
|
181
|
+
project_number | character varying(255) | | |
|
182
|
+
paid_by | integer | | |
|
183
|
+
amount | double precision | | not null |
|
184
|
+
Indexes:
|
185
|
+
"projects_pkey" PRIMARY KEY, btree (id)
|
186
|
+
Foreign-key constraints:
|
187
|
+
"projects_paid_by_fkey" FOREIGN KEY (paid_by) REFERENCES vrauser(id)
|
188
|
+
Referenced by:
|
189
|
+
TABLE "costing" CONSTRAINT "costing_project_id_fkey" FOREIGN KEY (project_id) REFERENCES projects(id)
|
190
|
+
|
191
|
+
```
|
192
|
+
|
193
|
+
## - grants table
|
194
|
+
```
|
195
|
+
vrapricing=# \d grant;
|
196
|
+
Table "public.grant"
|
197
|
+
Column | Type | Collation | Nullable | Default
|
198
|
+
----------------+------------------------+-----------+----------+--------------------------------------
|
199
|
+
id | integer | | not null | nextval('grant_id_seq'::regclass)
|
200
|
+
voucher_number | character varying(255) | | |
|
201
|
+
paid_by | integer | | |
|
202
|
+
amount | double precision | | not null |
|
203
|
+
Indexes:
|
204
|
+
"grant_pkey" PRIMARY KEY, btree (id)
|
205
|
+
Foreign-key constraints:
|
206
|
+
"grant_paid_by_fkey" FOREIGN KEY (paid_by) REFERENCES vrauser(id)
|
207
|
+
Referenced by:
|
208
|
+
TABLE "costing" CONSTRAINT "costing_voucher_id_fkey" FOREIGN KEY (voucher_id) REFERENCES grant(id)
|
209
|
+
```
|
210
|
+
|
211
|
+
## - Costing table
|
212
|
+
```
|
213
|
+
vrapricing=# \d costing;
|
214
|
+
Table "public.costing"
|
215
|
+
Column | Type | Collation | Nullable | Default
|
216
|
+
---------------+------------------------+-----------+----------+-------------------------------------
|
217
|
+
id | integer | | not null | nextval('costing_id_seq'::regclass)
|
218
|
+
deployment_id | integer | | |
|
219
|
+
type | character varying(100) | | |
|
220
|
+
po_number_id | integer | | |
|
221
|
+
voucher_id | integer | | |
|
222
|
+
Indexes:
|
223
|
+
"costing_pkey" PRIMARY KEY, btree (id)
|
224
|
+
Check constraints:
|
225
|
+
"costing_type_check" CHECK (type::text = ANY (ARRAY['Resource Expansion'::character varying, 'Duration Expansion'::character varying, 'Initial Resource'::character varying]::text[]))
|
226
|
+
Foreign-key constraints:
|
227
|
+
"costing_deployment_id_fkey" FOREIGN KEY (deployment_id) REFERENCES deploymentid(id)
|
228
|
+
"costing_po_number_id_fkey" FOREIGN KEY (po_number_id) REFERENCES purchaseorder(id)
|
229
|
+
"costing_voucher_id_fkey" FOREIGN KEY (voucher_id) REFERENCES grant(id)
|
230
|
+
|
231
|
+
```
|
232
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
ucampostgresvro/DBA.py,sha256=LGj2JpP2B-6z7CFV-zloLNmW8dPcIyuItVRi5x0KQT0,30876
|
2
|
+
ucampostgresvro/__init__.py,sha256=CpXi3jGlx23RvRyU7iytOMZrnspdWw4yofS8lpP1AJU,18
|
3
|
+
ucampostgresvro/__main__.py,sha256=bTpOR1L6o5nZhM391sdZA6G3861jdwHQRdgAuXvL_dQ,4395
|
4
|
+
ucampostgresvro/ca.crt,sha256=pVDr3AsvwCqJ36JTifsAzIiS2ve_fWC1CBfVI0cnVmY,1135
|
5
|
+
ucampostgresvro/exceptions.py,sha256=XVi8Sk_gg3VE4ryTtiYOnGbmCPIsfFt2AE5sOoqQDuI,39
|
6
|
+
ucampostgresvro/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
7
|
+
ucampostgresvro/tests/conftest.py,sha256=t89U_SOcWf2q0C_m4Vn89LSLwxnQC-_rUAvt6yNeOWA,1803
|
8
|
+
ucampostgresvro/tests/dbconnect.py,sha256=T2rVoUmG6mHwS-i4h8R4O4GuEhuucCd3zyrFUMMhkE4,240
|
9
|
+
ucampostgresvro/tests/test_DB.py,sha256=SLi5C0NO0dIeIQOfywkAPWKznfANopVEnHOxCD-EZpU,12134
|
10
|
+
ucampostgresvro/tests/utils.py,sha256=lpcvf6HPOOtxAwSwvoAUhil1zQ6Qfr0ZILa0qDVdES0,3722
|
11
|
+
ucampostgresvro/tools.py,sha256=Y8MUK1lIG10A-724yrhve8LfjQUmFwpqi19UIO5DeuI,153
|
12
|
+
ucampostgresvro/utils.py,sha256=d49ecdYfFXHK0H4Huc7x2C9sEc_R_3MG3lyNgBvWSyg,6907
|
13
|
+
ucampostgresvro-0.1.0.dist-info/LICENSE,sha256=CVTj8C-BHEJjzYlYtHnfykxKkfmk-ImXOs5rcMgXebY,1094
|
14
|
+
ucampostgresvro-0.1.0.dist-info/METADATA,sha256=XHjKJPZjynMcdLtamiHaOvc_qPtZFNgUTlhBtUpKnJI,7592
|
15
|
+
ucampostgresvro-0.1.0.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
|
16
|
+
ucampostgresvro-0.1.0.dist-info/RECORD,,
|