This is a set of web service endpoints to support kvadmin.py in the Deno module of PostgreSQL for Everybody (www.pg4e.com)
It is designed to be installed in a developer account on Deno Deploy.
You will need a github account to use Deno Deploy. To create or access your Deno Deploy dashboard, go to:
At the Overview section, create a New Playground. Copy the contents of this file into the new
Deno Playground application:
https://github.com/csev/deno-kv-admin/blob/main/main.ts
Paste it into the code panel of your Deno playground. Before you Save and Deploy,
scroll to the bottom and delete the Deno.cron() method so your data does not get wiped out
every hour. Or you could change the CRON string to something like ""0 0 1 * *" to clear your
data once per month.
Also note the checkToken() code near the end. The autograder will ask you to change the token
to a particular value in order to submit your assignments for evaluation and credit.
Once you have removed the CRON entry, you can Save and Deploy. It can take 30 seconds to get your code
deployed to the Deno Deploy cloud. Check the logs to make sure you did not introduce a syntax error.
Once it is up you will get a URL to access your application like:
https://comfortable-starling-12.deno.dev
If you access this URL, you will (correctly) get a 404 Not Found.
You can test the application by adding /dump to the end of the URL as follows (make sure to change the host
name to match your Deno instance):
https://comfortable-starling-12.deno.dev/dump
You should get an output that looks as follows:
{
"method": "GET",
"url": "https://comfortable-starling-12.deno.dev/dump",
"path": "/dump",
"headers": {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.5",
"host": "comfortable-starling-12.deno.dev",
"priority": "u=0, i",
"sec-fetch-dest": "document",
"sec-fetch-mode": "navigate",
"sec-fetch-site": "none",
"sec-fetch-user": "?1",
"te": "trailers",
"traceparent": "00-ac9e975daac67625527f3a3da6b1dfdd-5274315352c7753c-01",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:140.0) Gecko/20100101 Firefox/140.0"
},
"query": {},
"body": ""
}
The /dump url does not require a token, but the URLs that access Deno KV require a token.
You can test to see if your token works by going to the following URL (make sure to change the host
name and token to match your Deno instance):
https://comfortable-starling-12.deno.dev/kv/list/books?token=123
If it works and you have no books the output will look as follows:
{
"records": [],
"cursor": ""
}
Which means "no records exist with prefix of books". If your token is wrong you should get a
401 response code and a message of
Missing or invalid token
At this point you have verified that your KVAdmin web service end points are up and running.
We have built a simple Python client for this server that allows you to execute simple DENO KV commands
like set, get, list, or delete from the command line on your computer. This is a very simplistic
equivalent of the psql command line client for PostgreSQL.
Download the following files to a folder on your computer. If you you have been taking the PostgreSql for
Everybody course you may already have a folder and a hidden.py with your secrets.
https://www.pg4e.com/code/kvadmin.py
https://www.pg4e.com/code/hidden-dist.py
If you don't already have a hidden.py, copy hidden-dist.py to hidden.py and edit the deno() function
to set your host name and token value:
def denokv():
return { 'token' : '99123',
"url": "https://comfortable-starling-12.deno.dev" }
Then navigate into the folder using terminal, command line, or a shell and run python kvadmin.py or
python3 kvadmin.py. You might see the following:
python kvadmin.py
Verifying connection to https://comfortable-starling-12.deno.dev/dump
Unable to communicate with Deno. Sometimes it takes a while to start the
the Deno instance after it has been idle. You might want to access the url
below in a browser, wait 30 seconds, and then restart kvadmin.
https://comfortable-starling-12.deno.dev/dump
This checks if your denokv() values are correct and being read. Sometimes if your Deno application
has been idle for a while it can take up to 30 seconds to cold start your application. If you pay
for your Deno deployment or if the application is not idle - startup is very quick.
After about 30 seconds, you should start kvadmin.py and get the Enter Command: prompt. The following
are the kvadmin.py commands and a few sample commands:
$ python kvadmin.py
Verifying connection to https://kv-admin-api.pg4e.com/dump
Enter Command: help
quit
samples
set /books/Hamlet
get /books/Hamlet
list /books
delete /books/Hamlet
delete_prefix /books
Enter command: samples
{"author": "Bill", "title": "Hamlet", "isbn": "42", "lang": "ang"}
Enter command: set /books/Hamlet
Enter json (finish with a blank line:
{"author": "Bill", "title": "Hamlet", "isbn": "42", "lang": "ang"}
https://kv-admin-api.pg4e.com/kv/set/books/Hamlet?token=42
{
"ok": true,
"versionstamp": "010000000591ef100000"
}
Enter command: list /books
https://kv-admin-api.pg4e.com/kv/list/books?token=42
200
{
"records": [
{
"key": [
"books",
"Hamlet"
],
"value": {
"author": "Bill",
"title": "Hamlet",
"isbn": "42",
"lang": "ang"
},
"versionstamp": "010000000591ef100000"
}
],
"cursor": ""
}
Enter command: quit
If the auto grader tells you to change your token value, make sure to change it on your
Deploy Playground instance and do a Save and Deploy and then also change your hidden.py so
that your kvadmin.py continues to work.