Skip to content

Instantly share code, notes, and snippets.

View mpkocher's full-sized avatar

M. Kocher mpkocher

View GitHub Profile
@mpkocher
mpkocher / example.py
Created October 26, 2024 06:14
Pydantic Serialization of Complex Keys in Dicts/Maps
"""
https://github.com/pydantic/pydantic/issues/10724
Example of using complex keys in Dict using Pydantic for Serialization
There's a two different approaches
1. Fundamentally hook into the core serialization and map the structure into a list[{Key, Value}] (or similar) to get the Obj -> Json -> Obj working
2. Create an intermediate Object in Pydantic and add `to_X` method and `from_X` classmethod to get the Obj -> Obj2 -> Json -> Obj2 -> Obj
Method 2 is shown below
@mpkocher
mpkocher / example.py
Last active September 21, 2024 20:12
Pydantic Settings. Example of configure a yaml/json file at runtime.
"""
Different workarounds for setting a configuration file path at runtime.
https://github.com/pydantic/pydantic-settings/issues/259
There's an explicit step of validating the file path to make the errors more obvious.
Otherwise, a cryptic pydantic error will be raised.
"""
import argparse
@mpkocher
mpkocher / Makefile
Last active August 6, 2024 01:18
Gibson.com Scraper
.PHONY: compile run extract
default: compile ;
compile:
scala-cli compile gibson.scala
fmt:
scala-cli fmt .
run:
./gibson scraper -o .
@mpkocher
mpkocher / Declined.scala
Last active July 2, 2022 23:46
ZIO 1.x + Decline Example for creating CLI tools and running them with scala-cli.
//> using platform "jvm"
//> using scala "2.13.8"
//> using lib "dev.zio::zio:1.0.14"
//> using lib "com.monovore::decline:2.2.0"
//> using mainClass "DeclinedApp"
// Runnable using `scala-cli run Declined.scala -- --user Ralph --alpha 3.14`
import zio.{ExitCode, ZEnv, ZIO, Task, RIO, IO, UIO, URIO}
import zio.console._
@mpkocher
mpkocher / scrape_gibson.py
Last active March 18, 2021 07:04
Scrape Gibson.com
import sys
import json
import logging
from typing import List, Tuple, Dict, Any
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
log = logging.getLogger(__name__)
@mpkocher
mpkocher / pydantic-cli-sharing-subparse-options.py
Created October 29, 2020 22:54
Sharing Subparser Options in pydantic-cli
"""
Example of Using a Subparser
Demonstration of using two Pydantic data models to
build a subparser and sharing options.
The major friction point and limitation is the order in which the options appear in --help.
For example,
@mpkocher
mpkocher / amzlink.py
Last active September 21, 2021 12:13 — forked from pybites/amzlink.py
import $ivy.`com.zaxxer:nuprocess:2.0.0`, com.zaxxer.nuprocess._
import scala.collection.JavaConverters._
import java.nio.ByteBuffer
import scala.concurrent.{Future, Promise}
class ProcessHandler extends NuAbstractProcessHandler {
private var nuProcess: NuProcess = null
override def onStart(nuProcess: NuProcess): Unit = {
@mpkocher
mpkocher / leap_year.py
Last active March 15, 2020 19:12
Example of a functional-ish centric design encoding logic in a rules based model #LevelUp
#!/usr/bin/env python3
"""
Example of a functional-ish centric design and encoding logic in rules.
This uses determination of a leap year as an simple example.
This approach could be used in more involved cases to encode business logic.
"""
import operator as op
@mpkocher
mpkocher / boiler.py
Last active March 30, 2021 02:55
MK common Python utils
# Common core utils are too small that don't warrant creating a package
from argparse import ArgumentParser, Namespace, ArgumentDefaultsHelpFormatter
import csv
import functools
import logging
import sys
from typing import Callable as F
from typing import List, TypeVar, Type, Iterator
from pydantic import BaseModel