Script for VRA database for Costing
Developing
- Install docker-compose.
- Docker will run the postgres on port 5455 so, ensure the system has the port available
# run pytest testing
./developer.sh pytest start
# run flake8 testing
./developer.sh flake8 start
# delete the testing environment
./developer.sh pytest stop
# delete the flake8 environment
./developer.sh flake8 stop
Package usage
- To setup database
from ucamvrobillpsql.utils import pre_setupconfig
from ucamvrobillpsql.DBA import DB
db_params = {
"dbname": "vrapricing",
"user": "postgres",
"password": <1Password: vrapricingpostgres>,
"host": "infra-db.srv.uis.cam.ac.uk",
"port": "5432",
"sslmode": "require",
"sslrootcert": "./ca.crt", # path to your client certificate
}
db = DB(db_params)
pre_setupconfig(db_params)
- To perform CRUD operation
from ucamvrobillpsql.DBA import DB
from datetime import datetime
db_params = {
"dbname": "vrapricing",
"user": "postgres",
"password": <1Password: vrapricingpostgres>,
"host": "infra-db.srv.uis.cam.ac.uk",
"port": "5432",
"sslmode": "require",
"sslrootcert": "./ca.crt", # path to your client certificate
}
db = DB(db_params)
# CRUD on user DB./
# create user
db.insert_vrauser("ll220", "Ling-Yan Lau")
# read user
print(db.get_vrauser())
# read user specific user by crsid
print(db.get_vrauser("ll220"))
# read user specific user by user id
print(db.get_vrauser_by_id(1))
# get the primary key of user using crsid
print(db.get_vrauser_primary_key("ll220"))
# update user
db.update_vrauser("ll220", "bda20", 'Ben Argyle')
# delete user
db.remove_vrauser('bda20')
# create project
db.insert_project("Project01","UIS Group")
# read all the projects
print(db.get_project())
# read specific project
print(db.get_project("Project01"))
# read project from the ID
print(db.get_project_by_id(1))
# get the primary key of the project
print(db.get_project_primary_key("Project01"))
# update project with new information 1 is the primary key
db.update_project(1, "Project03", "VET Group")
# delete project using primary key of project
# db.remove_project(1)
# create project source
db.insert_paymentsource("grant",21001)
print(db.insert_paymentsource("project"))
# read all the project source
print(db.get_paymentsource())
# read specific project source
print(db.get_paymentsource("grant","21001"))
# read project source from the ID
print(db.get_paymentsource_by_id(1))
# get the primary key of the project source
print(db.get_paymentsource_primary_key("grant",21001))
# update project source with new information 1 is the primary key of project source
db.update_paymentsource(1, "grant","21001")
# delete project source 1 is the primary key of the project source.
db.remove_paymentsource(1)
# create vra deploymentid
db.insert_deployment_id("1231ee112ad11212", 2)
# read all the vra deployment ids
print(db.get_deployment_id())
# read specific specific deploymentid by deploymentid
print(db.get_deployment_id("1231ee112ad11212"))
# read specific deploymentid by primary key
print(db.get_deployment_id_by_id(1))
# update vra deployment id
db.update_deployment_id(1, "1231ee112ad11212", "1231a")
# read primary key of specific deploymentid
print(db.get_deployment_id_primary_key("1231a"))
# delete vra deployment id
db.remove_deployment_id(1)
# create charges
db.insert_charge(2, "Initial Resource",paymentsrc=2, paidby=1, cpucost=2.0, ramcost=1.0, storagecost=0.3, totalcost=3.3)
# read all the charges
print(db.get_costing())
# read specific charges using primary key of the charge
print(db.get_costing_by_id(1))
# update charges where 1 is the primary key of the charges.
print(db.update_charge(1, 2, "Duration Expansion", new_paymentsrc=2,
new_paidby=1, new_cpucost=2.3, new_ramcost=4.0,
new_storagecost=3.0, new_totalcost=9.3))
# read specific charges for the type "Initial Resource" and deployment_id 2
print(db.get_charge(deployment_id=2, typee="Initial Resource"))
# read specific charges for the type "Initial Resource"
print(db.get_charge(typee="Initial Resource"))
# fetch the charge of specific primary key.
print(db.get_charge_by_id(1))
# get primary key for the specific charge.
print(db.get_charge_primary_key(2, "Duration Expansion",paysource_id=2, paidby_id=1))
# get primary key for the specific charges created on specific date
print(db.get_charge_primary_key(2, "Duration Expansion",paysource_id=2, paidby_id=1, datestmp=datetime(2025, 2, 19, 15, 0, 8, 693705)))
# delete charges where 1 is the primary key
db.remove_charge(3)
# to close db connection
db.closedb()
Design
- VRAUSER table
vrobilling=# \d vrauser
Table "public.vrauser"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+-------------------------------------
id | integer | | not null | nextval('vrauser_id_seq'::regclass)
crsid | character varying(255) | | |
name | character varying(255) | | |
Indexes:
"vrauser_pkey" PRIMARY KEY, btree (id)
"vrauser_crsid_key" UNIQUE CONSTRAINT, btree (crsid)
Referenced by:
TABLE "charges" CONSTRAINT "charges_paidby_fkey" FOREIGN KEY (paidby) REFERENCES vrauser(id)
- VRA Deployment ID tabel
vrobilling=# \d vradeploymentid
Table "public.vradeploymentid"
Column | Type | Collation | Nullable | Default
--------------+-----------------------+-----------+----------+---------------------------------------------
id | integer | | not null | nextval('vradeploymentid_id_seq'::regclass)
deploymentid | character varying(50) | | |
projectid | integer | | |
Indexes:
"vradeploymentid_pkey" PRIMARY KEY, btree (id)
"vradeploymentid_deploymentid_key" UNIQUE CONSTRAINT, btree (deploymentid)
Foreign-key constraints:
"vradeploymentid_projectid_fkey" FOREIGN KEY (projectid) REFERENCES vraproject(id)
Referenced by:
TABLE "charges" CONSTRAINT "charges_deploymentid_fkey" FOREIGN KEY (deploymentid) REFERENCES vradeploymentid(id)
- project table
vrobilling=# \d vraproject
Table "public.vraproject"
Column | Type | Collation | Nullable | Default
-------------------+------------------------+-----------+----------+----------------------------------------
id | integer | | not null | nextval('vraproject_id_seq'::regclass)
projectname | character varying(255) | | |
projectadmingroup | character varying(255) | | |
Indexes:
"vraproject_pkey" PRIMARY KEY, btree (id)
Referenced by:
TABLE "vradeploymentid" CONSTRAINT "vradeploymentid_projectid_fkey" FOREIGN KEY (projectid) REFERENCES vraproject(id)
- payment source table
vrobilling=# \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | charges | table | postgres
public | paymentsources | table | postgres
public | vradeploymentid | table | postgres
public | vraproject | table | postgres
public | vrauser | table | postgres
(5 rows)
vrobilling=# \d paymentsources
Table "public.paymentsources"
Column | Type | Collation | Nullable | Default
--------+------------------------+-----------+----------+--------------------------------------------
id | integer | | not null | nextval('paymentsources_id_seq'::regclass)
type | character varying(255) | | |
code | character varying(255) | | |
Indexes:
"paymentsources_pkey" PRIMARY KEY, btree (id)
"paymentsources_type_code_key" UNIQUE CONSTRAINT, btree (type, code)
"unique_project_grant_code_null" UNIQUE, btree (type) WHERE type::text = 'project'::text OR type::text = 'grant'::text AND code IS NULL
Check constraints:
"paymentsources_type_check" CHECK (type::text = ANY (ARRAY['project'::character varying, 'grant'::character varying]::text[]))
Referenced by:
TABLE "charges" CONSTRAINT "charges_paysource_fkey" FOREIGN KEY (paysource) REFERENCES paymentsources(id)
- Charge table
vrobilling=# \d charges;
Table "public.charges"
Column | Type | Collation | Nullable | Default
---------------+-----------------------------+-----------+----------+-------------------------------------
id | integer | | not null | nextval('charges_id_seq'::regclass)
date | timestamp without time zone | | | CURRENT_TIMESTAMP
type | character varying(100) | | |
deployment_id | integer | | |
paysource | integer | | |
cpucost | double precision | | | 0.0
ramcost | double precision | | | 0.0
storagecost | double precision | | | 0.0
totalcost | double precision | | not null |
paidby | integer | | |
Indexes:
"charges_pkey" PRIMARY KEY, btree (id)
Check constraints:
"charges_type_check" CHECK (type::text = ANY (ARRAY['Resource Expansion'::character varying, 'Duration Expansion'::character varying, 'Initial Resource'::character varying]::text[]))
Foreign-key constraints:
"charges_deployment_id_fkey" FOREIGN KEY (deployment_id) REFERENCES vradeploymentid(id)
"charges_paidby_fkey" FOREIGN KEY (paidby) REFERENCES vrauser(id)
"charges_paysource_fkey" FOREIGN KEY (paysource) REFERENCES paymentsources(id)
Metadata
Release files for ucamvrobillpsql 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ucamvrobillpsql-0.1.0.tar.gz | 15.9 kB | Without provenance | Details for ucamvrobillpsql-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ucamvrobillpsql-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for ucamvrobillpsql-0.1.0-py3-none-any.whl |
Total release size: 32.7 kB
Release files / ucamvrobillpsql-0.1.0.tar.gz
| Download URL | ucamvrobillpsql-0.1.0.tar.gz |
|---|---|
| Size | 15.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ad775324097632ee0bff7133a37451b206f7ee490d80f2c875bde62e60a16d6
|
|
BLAKE2b-256 checksum How to use checksums |
bcc05941bda084e710396f21d2ebc2935e4127ac522b72fab0cfab8a22044668
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.1 CPython/3.10.12 Linux/6.8.0-52-generic
|
Release files / ucamvrobillpsql-0.1.0-py3-none-any.whl
| Download URL | ucamvrobillpsql-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6f7d2c2c46a88571834864749dc9d42c60edbb9274183851781d696241f9c425
|
|
BLAKE2b-256 checksum How to use checksums |
94d5740408479ba7ff06c2253072f07241a2f139249cdcd52496faa77872a198
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.1.1 CPython/3.10.12 Linux/6.8.0-52-generic
|
Security for ucamvrobillpsql 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.