Skip to content

Instantly share code, notes, and snippets.

@knedlsepp
Last active April 25, 2020 21:44
Show Gist options
  • Save knedlsepp/80705ee23eca91b7e69af4cfb1fcb24d to your computer and use it in GitHub Desktop.
Save knedlsepp/80705ee23eca91b7e69af4cfb1fcb24d to your computer and use it in GitHub Desktop.
Playing our with asyncpg and the hydra build server
let
pkgs = import <nixpkgs> {};
python = pkgs.python3;
sqlacodegen = python.pkgs.buildPythonApplication rec {
pname = "sqlacodegen";
version = "2.1.0";
src = python.pkgs.fetchPypi {
inherit pname version;
sha256 = "0z0hh7lcfhw5n0zjn1v1anmkfkidalsa4d9xakcqvkixdkimiqpa";
};
propagatedBuildInputs = with python.pkgs; [
setuptools_scm
inflect
sqlalchemy
];
};
in
python.pkgs.buildPythonPackage {
name = "asdf";
src = null;
propagatedBuildInputs = with python.pkgs; [
sqlalchemy
psycopg2
asyncpg
];
nativeBuildInputs = with python.pkgs; [
ipython
sqlacodegen
];
}
#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python37Packages.asyncpg
import asyncio
import asyncpg
async def main():
conn = await asyncpg.connect()
for queue in [
"build_finished",
"build_started",
"builds_added",
"builds_bumped",
"builds_cancelled",
"builds_deleted",
"builds_restarted",
"dump_status",
"eval_added",
"eval_cached",
"eval_failed",
"eval_started",
"jobset_scheduling_changed",
"jobset_shares_changed",
"jobsets_added",
"jobsets_deleted",
"status_dumped",
"step_finished",
"step_started",
]:
await conn.add_listener(
queue,
lambda connection, pid, channel, payload: print(channel, payload))
asyncio.get_event_loop().run_until_complete(main())
asyncio.get_event_loop().run_forever()
#! /usr/bin/env nix-shell
#! nix-shell -i python3 -p python3Packages.sqlalchemy python3Packages.psycopg2 python3Packages.asyncpg
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine, MetaData
import warnings
with warnings.catch_warnings():
engine = create_engine("postgresql:///hydra")
warnings.simplefilter("ignore")
metadata = MetaData()
metadata.reflect(engine, only=['builds'])
Base = automap_base(metadata=metadata)
Base.prepare()
session = Session(engine)
asdf = session.query(Base.classes.builds).get(2)
print("SEMPF", asdf)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment