From a36bb9985b84b9133cd466875ceefc9aa7fdde17 Mon Sep 17 00:00:00 2001 From: <> Date: Sun, 2 Jul 2023 14:55:07 +0000 Subject: [PATCH] Deployed 313aa13 with MkDocs version: 1.4.3 --- .nojekyll | 0 404.html | 402 + assets/color_scheme.css | 6 + assets/favicon.png | Bin 0 -> 868 bytes assets/images/favicon.png | Bin 0 -> 1870 bytes assets/javascripts/bundle.b425cdc4.min.js | 29 + assets/javascripts/bundle.b425cdc4.min.js.map | 8 + assets/javascripts/lunr/min/lunr.ar.min.js | 1 + assets/javascripts/lunr/min/lunr.da.min.js | 18 + assets/javascripts/lunr/min/lunr.de.min.js | 18 + assets/javascripts/lunr/min/lunr.du.min.js | 18 + assets/javascripts/lunr/min/lunr.es.min.js | 18 + assets/javascripts/lunr/min/lunr.fi.min.js | 18 + assets/javascripts/lunr/min/lunr.fr.min.js | 18 + assets/javascripts/lunr/min/lunr.hi.min.js | 1 + assets/javascripts/lunr/min/lunr.hu.min.js | 18 + assets/javascripts/lunr/min/lunr.hy.min.js | 1 + assets/javascripts/lunr/min/lunr.it.min.js | 18 + assets/javascripts/lunr/min/lunr.ja.min.js | 1 + assets/javascripts/lunr/min/lunr.jp.min.js | 1 + assets/javascripts/lunr/min/lunr.kn.min.js | 1 + assets/javascripts/lunr/min/lunr.ko.min.js | 1 + assets/javascripts/lunr/min/lunr.multi.min.js | 1 + assets/javascripts/lunr/min/lunr.nl.min.js | 18 + assets/javascripts/lunr/min/lunr.no.min.js | 18 + assets/javascripts/lunr/min/lunr.pt.min.js | 18 + assets/javascripts/lunr/min/lunr.ro.min.js | 18 + assets/javascripts/lunr/min/lunr.ru.min.js | 18 + assets/javascripts/lunr/min/lunr.sa.min.js | 1 + .../lunr/min/lunr.stemmer.support.min.js | 1 + assets/javascripts/lunr/min/lunr.sv.min.js | 18 + assets/javascripts/lunr/min/lunr.ta.min.js | 1 + assets/javascripts/lunr/min/lunr.te.min.js | 1 + assets/javascripts/lunr/min/lunr.th.min.js | 1 + assets/javascripts/lunr/min/lunr.tr.min.js | 18 + assets/javascripts/lunr/min/lunr.vi.min.js | 1 + assets/javascripts/lunr/min/lunr.zh.min.js | 1 + assets/javascripts/lunr/tinyseg.js | 206 + assets/javascripts/lunr/wordcut.js | 6708 +++++++++++++++++ .../workers/search.208ed371.min.js | 42 + .../workers/search.208ed371.min.js.map | 8 + assets/logo.png | Bin 0 -> 15222 bytes assets/stylesheets/main.26e3688c.min.css | 1 + assets/stylesheets/main.26e3688c.min.css.map | 1 + assets/stylesheets/palette.ecc896b0.min.css | 1 + .../stylesheets/palette.ecc896b0.min.css.map | 1 + index.html | 437 ++ search/search_index.json | 1 + sitemap.xml | 28 + sitemap.xml.gz | Bin 0 -> 248 bytes tutorial/init-hnhm/index.html | 450 ++ tutorial/intro/index.html | 438 ++ tutorial/raw-data/index.html | 492 ++ tutorial/setup/index.html | 580 ++ 54 files changed, 10124 insertions(+) create mode 100644 .nojekyll create mode 100644 404.html create mode 100644 assets/color_scheme.css create mode 100644 assets/favicon.png create mode 100644 assets/images/favicon.png create mode 100644 assets/javascripts/bundle.b425cdc4.min.js create mode 100644 assets/javascripts/bundle.b425cdc4.min.js.map create mode 100644 assets/javascripts/lunr/min/lunr.ar.min.js create mode 100644 assets/javascripts/lunr/min/lunr.da.min.js create mode 100644 assets/javascripts/lunr/min/lunr.de.min.js create mode 100644 assets/javascripts/lunr/min/lunr.du.min.js create mode 100644 assets/javascripts/lunr/min/lunr.es.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.fr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hu.min.js create mode 100644 assets/javascripts/lunr/min/lunr.hy.min.js create mode 100644 assets/javascripts/lunr/min/lunr.it.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ja.min.js create mode 100644 assets/javascripts/lunr/min/lunr.jp.min.js create mode 100644 assets/javascripts/lunr/min/lunr.kn.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ko.min.js create mode 100644 assets/javascripts/lunr/min/lunr.multi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.nl.min.js create mode 100644 assets/javascripts/lunr/min/lunr.no.min.js create mode 100644 assets/javascripts/lunr/min/lunr.pt.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ro.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ru.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sa.min.js create mode 100644 assets/javascripts/lunr/min/lunr.stemmer.support.min.js create mode 100644 assets/javascripts/lunr/min/lunr.sv.min.js create mode 100644 assets/javascripts/lunr/min/lunr.ta.min.js create mode 100644 assets/javascripts/lunr/min/lunr.te.min.js create mode 100644 assets/javascripts/lunr/min/lunr.th.min.js create mode 100644 assets/javascripts/lunr/min/lunr.tr.min.js create mode 100644 assets/javascripts/lunr/min/lunr.vi.min.js create mode 100644 assets/javascripts/lunr/min/lunr.zh.min.js create mode 100644 assets/javascripts/lunr/tinyseg.js create mode 100644 assets/javascripts/lunr/wordcut.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js create mode 100644 assets/javascripts/workers/search.208ed371.min.js.map create mode 100644 assets/logo.png create mode 100644 assets/stylesheets/main.26e3688c.min.css create mode 100644 assets/stylesheets/main.26e3688c.min.css.map create mode 100644 assets/stylesheets/palette.ecc896b0.min.css create mode 100644 assets/stylesheets/palette.ecc896b0.min.css.map create mode 100644 index.html create mode 100644 search/search_index.json create mode 100644 sitemap.xml create mode 100644 sitemap.xml.gz create mode 100644 tutorial/init-hnhm/index.html create mode 100644 tutorial/intro/index.html create mode 100644 tutorial/raw-data/index.html create mode 100644 tutorial/setup/index.html diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/404.html b/404.html new file mode 100644 index 0000000..0941eb9 --- /dev/null +++ b/404.html @@ -0,0 +1,402 @@ + + + +
+ + + + + + + + + + + + + +hNhM(highly Normalized hybrid Model) – data modeling methodology based on Anchor modeling and Data Vault. Implementation of this package is based on report "How we implemented our data storage model — highly Normalized hybrid Model" by Evgeny Ermakov and Nikolai Grebenshchikov. +1) Yandex Report, habr.com. 2) SmartData Conference, youtube.com
+ + + + + + +hNhM(highly Normalized hybrid Model) \u2013 data modeling methodology based on Anchor modeling and Data Vault. Implementation of this package is based on report \"How we implemented our data storage model \u2014 highly Normalized hybrid Model\" by Evgeny Ermakov and Nikolai Grebenshchikov. 1) Yandex Report, habr.com. 2) SmartData Conference, youtube.com
"},{"location":"tutorial/init-hnhm/","title":"Init hNhM","text":"Create the __hnhm__.py
file with the following contents:
# __hnhm__.py\nfrom hnhm import PostgresPsycopgSql\n\nsql = PostgresPsycopgSql(\n database=\"coinmarket\",\n user=\"hnhm\",\n password=\"123\", # replace it with an environment variable in the future :)\n port=5433,\n)\n
This sql
object will help us to generate and execute SQL queries in the database.
Create the etl__raw.py
file. It does the following: - Fetch the latest currencies - Create the table in the database - Insert data
# etl__raw.py\nimport os\n\nimport requests\nfrom psycopg2.extras import Json\n\nfrom tutorial.__hnhm__ import sql\n\nCOINMARKET_TOKEN = os.environ[\"COINMARKET_TOKEN\"]\n\n\ndef get_listings() -> list[dict]:\n r = requests.get(\n \"https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest\",\n headers={\"X-CMC_PRO_API_KEY\": COINMARKET_TOKEN},\n )\n assert r.status_code == 200\n\n data = r.json()\n\n return [\n {\"timestamp\": data[\"status\"][\"timestamp\"], \"listing\": listing}\n for listing in data[\"data\"]\n ]\n\n\ndef save_listings(listings: list[dict]):\n sql.execute(\n\"\"\"\n CREATE TABLE IF NOT EXISTS raw_listings(\n id SERIAL PRIMARY KEY,\n data JSONB\n )\n \"\"\"\n )\n\n sql.execute_many(\n\"\"\"\n INSERT INTO\n raw_listings(data)\n VALUES\n (%s)\n \"\"\",\n ((Json(listing),) for listing in listings),\n )\n\n\nif __name__ == \"__main__\":\n listings = get_listings()\n save_listings(listings)\n print(f\"Successfully saved: {len(listings)} listings!\")\n
"},{"location":"tutorial/setup/","title":"Setup","text":""},{"location":"tutorial/setup/#setup-coinmarket-account","title":"Setup CoinMarket account","text":"Create free account to work with the CoinMarket API.
"},{"location":"tutorial/setup/#setup-python","title":"Setup Python","text":"mkdir hnhm_guide\ncd hnhm_guide\n
>= 3.10
.python3.10 -m virtualenv venv\nsource ./venv/bin/activate\n
requirements.txt
: # requirements.txt\nrequests==2.31.0\nhnhm\n
pip install -r requirements.txt\n
File layout at the end of current step:
.\n\u251c\u2500\u2500 requirements.txt\n\u2514\u2500\u2500 venv\n
"},{"location":"tutorial/setup/#setup-postgres","title":"Setup Postgres","text":"Let's set up Postgres database. You could use the following docker-compose.yml
file to run Postgres:
# docker-compose.yml \nversion: \"3.9\"\n\nvolumes:\npostgres_data: { }\n\nservices:\npostgres:\nimage: postgres:15\nvolumes:\n- \"postgres_data:/var/lib/postgresql/data\"\nports:\n- \"5433:5432\"\nenvironment:\nPOSTGRES_DB: coinmarket\nPOSTGRES_USER: hnhm\nPOSTGRES_PASSWORD: 123\n
Run Postgres with the following command:
docker-compose up -d\n\n# [+] Running 3/3\n# \u2714 Network hnhm_guide_default Created 0.1s \n# \u2714 Volume \"hnhm_guide_postgres_data\" Created 0.0s \n# \u2714 Container hnhm_guide-postgres-1 Started\n
Now you should have access to the coinmarket
database:
psql -h localhost -p 5433 -U hnhm coinmarket\n# Password for user hnhm: 123\n\n~# \\dt\n# Did not find any relations.\n
File layout at the end of current step:
.\n\u251c\u2500\u2500 docker-compose.yml\n\u251c\u2500\u2500 requirements.txt\n\u2514\u2500\u2500 venv\n
"}]}
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..66c4d29
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1,28 @@
+
+Create the __hnhm__.py
file with the following contents:
+
# __hnhm__.py
+from hnhm import PostgresPsycopgSql
+
+sql = PostgresPsycopgSql(
+ database="coinmarket",
+ user="hnhm",
+ password="123", # replace it with an environment variable in the future :)
+ port=5433,
+)
+
This sql
object will help us to generate and execute SQL queries in the database.
Create the etl__raw.py
file. It does the following:
+- Fetch the latest currencies
+- Create the table in the database
+- Insert data
# etl__raw.py
+import os
+
+import requests
+from psycopg2.extras import Json
+
+from tutorial.__hnhm__ import sql
+
+COINMARKET_TOKEN = os.environ["COINMARKET_TOKEN"]
+
+
+def get_listings() -> list[dict]:
+ r = requests.get(
+ "https://pro-api.coinmarketcap.com/v1/cryptocurrency/listings/latest",
+ headers={"X-CMC_PRO_API_KEY": COINMARKET_TOKEN},
+ )
+ assert r.status_code == 200
+
+ data = r.json()
+
+ return [
+ {"timestamp": data["status"]["timestamp"], "listing": listing}
+ for listing in data["data"]
+ ]
+
+
+def save_listings(listings: list[dict]):
+ sql.execute(
+ """
+ CREATE TABLE IF NOT EXISTS raw_listings(
+ id SERIAL PRIMARY KEY,
+ data JSONB
+ )
+ """
+ )
+
+ sql.execute_many(
+ """
+ INSERT INTO
+ raw_listings(data)
+ VALUES
+ (%s)
+ """,
+ ((Json(listing),) for listing in listings),
+ )
+
+
+if __name__ == "__main__":
+ listings = get_listings()
+ save_listings(listings)
+ print(f"Successfully saved: {len(listings)} listings!")
+
Create free account to work with the CoinMarket API.
+mkdir hnhm_guide
+cd hnhm_guide
+
>= 3.10
.python3.10 -m virtualenv venv
+source ./venv/bin/activate
+
requirements.txt
:
+ # requirements.txt
+requests==2.31.0
+hnhm
+
pip install -r requirements.txt
+
File layout at the end of current step: +
.
+├── requirements.txt
+└── venv
+
Let's set up Postgres database. You could use the following docker-compose.yml
file to run Postgres:
# docker-compose.yml
+version: "3.9"
+
+volumes:
+ postgres_data: { }
+
+services:
+ postgres:
+ image: postgres:15
+ volumes:
+ - "postgres_data:/var/lib/postgresql/data"
+ ports:
+ - "5433:5432"
+ environment:
+ POSTGRES_DB: coinmarket
+ POSTGRES_USER: hnhm
+ POSTGRES_PASSWORD: 123
+
Run Postgres with the following command: +
docker-compose up -d
+
+# [+] Running 3/3
+# ✔ Network hnhm_guide_default Created 0.1s
+# ✔ Volume "hnhm_guide_postgres_data" Created 0.0s
+# ✔ Container hnhm_guide-postgres-1 Started
+
Now you should have access to the coinmarket
database:
+
psql -h localhost -p 5433 -U hnhm coinmarket
+# Password for user hnhm: 123
+
+~# \dt
+# Did not find any relations.
+
File layout at the end of current step: +
.
+├── docker-compose.yml
+├── requirements.txt
+└── venv
+