MOA DB connection for billing.
Project description
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)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ucamvrobillpsql-0.1.0.tar.gz
(15.9 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ucamvrobillpsql-0.1.0.tar.gz.
File metadata
- Download URL: ucamvrobillpsql-0.1.0.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.10.12 Linux/6.8.0-52-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5ad775324097632ee0bff7133a37451b206f7ee490d80f2c875bde62e60a16d6
|
|
| MD5 |
5df2e4d620184fbed22e5fc0c81ad012
|
|
| BLAKE2b-256 |
bcc05941bda084e710396f21d2ebc2935e4127ac522b72fab0cfab8a22044668
|
File details
Details for the file ucamvrobillpsql-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ucamvrobillpsql-0.1.0-py3-none-any.whl
- Upload date:
- Size: 16.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.1.1 CPython/3.10.12 Linux/6.8.0-52-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f7d2c2c46a88571834864749dc9d42c60edbb9274183851781d696241f9c425
|
|
| MD5 |
9df55c17854ecf2b112055fcb97eb275
|
|
| BLAKE2b-256 |
94d5740408479ba7ff06c2253072f07241a2f139249cdcd52496faa77872a198
|