Skip to content

Instantly share code, notes, and snippets.

@dmwyatt
dmwyatt / read_dot_env.py
Created December 25, 2021 19:48
[read dot env] Read a .env file and set the env vars
with suppress(FileNotFoundError):
with open('.env') as f:
line = f.readline()
while line:
k, v = line.split('=', 1)
os.environ[k] = v.strip()
line = f.readline()
@dmwyatt
dmwyatt / setqueue.py
Created October 17, 2021 17:11
[SetQueue] A Queue that behaves like a Set #datastructure
class SetQueue(Queue):
def _init(self, maxsize):
self.queue = set()
def _put(self, item):
self.queue.add(item)
def _get(self):
return self.queue.pop()
@dmwyatt
dmwyatt / monitor.py
Created October 16, 2021 21:13
[monitor windows files] Monitors files and folders or directories. #system #windows
import time
from pathlib import Path
import pywintypes
import win32con
import win32file
import winerror
WATCHED_DIR = str(Path("./").absolute())
@dmwyatt
dmwyatt / docstrings.py
Last active May 25, 2021 20:07
[Sphinx docs as markdown] Parse autodoc as markdown #sphinx
# based on https://stackoverflow.com/a/56428123/23972
import commonmark
def docstring(app, what, name, obj, options, lines):
if len(lines) > 1 and lines[0] == "@&ismd":
md = "\n".join(lines[1:])
ast = commonmark.Parser().parse(md)
rst = commonmark.ReStructuredTextRenderer().render(ast)
lines.clear()
@dmwyatt
dmwyatt / RequireOnlyOne.ts
Created April 12, 2021 20:34
[RequireOnlyOne] Type that requires one and only one of a set of properties #types
// https://stackoverflow.com/a/49725198/23972
// https://www.typescriptlang.org/play?#code/C4TwDgpgBAShCOBXAlgJwgQWAGQgQwGdgB5AOwgB4AVAGigGkIQCoIAPYCUgExYGsmAewBmUKlAC8UASBFiAfJICwAKCjqoABWQBjPtToBRNjoA2ibpRlzaDJgXnzVGqADIoAb2cuNAbXpQyKR2zAC6ALQA-ABcsAgo6NwU2noGDI5uWniowMh4psm6+rbGZhaUjMx09I5OahoAvv72oaqqQZyowng60ACyXIgAkpwAtp7eucCmELFEqEEA5gDc3jqCo2CC5KTAMVCkiKMARhCoq-VmRfuHJ2cX6rrbc8ALpCuqDW0qoJBQAMKmIrEVD-DZbHbASRxJBoTA4fBEMiUAaHEYQUZ0ADkVz0WKgAB8oDjwdsuMAsXVVOtSEQoAB3ZDAAAWYM2ZN2sUBwNBpMh0K89XUUxmsQARJwiGKaN51Ot2ZDYgBWABMMqFgRp4qepDFn2+NLpjJZ3L0XKBehBbIh5IFsqgItmUAlECl6pcuL4yoALO6NDrtTS9Sovipqds6WdUIJUAB1JnMgByEATZ3NPOtHKhUkFLkd4slwGl9oDzp1wdD4dpUNIgkMqGjcYTACFBCz05beQrbTn7fnnYXixrPT6-XK+eTYirfSWtWWg-qwypDVCozH4yzWyzY8yuMiABKEWPR95UcBO018K0T3Z2jX9l1u+0jqBKmfDm-AcUEZmCRCmbgoFOA4jlOVAoF3dAhxcUsxXLRdvl+aA4FhdAyFMEBkTSSoWHYTgeH4IRRHEKRrGIxQJHtFJiiMExzEsCgyLEap7Ece13A8KB-ECYIcIiGJ7RcFCEggJJqOwtiNRcdxNGyXJ8goOB1lQJJSnoip7GqeQ6EQHgIGEIJRMklwmj4xDzygdDMPIS9r27W8pGEuErKw1FhjGbFPXxIkSXsikqWXCMazrBt1wTFzyFiCKIFsrsbQ
@dmwyatt
dmwyatt / RequireAtLeastOne.ts
Created April 12, 2021 20:30
[RequireAtLeastOne] Type that requires at least one of it's properties #types
// https://stackoverflow.com/a/49725198/23972
export type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<
T,
Exclude<keyof T, Keys>
> &
{
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
}[Keys];
@dmwyatt
dmwyatt / ClickOutsideDectector.js
Created April 2, 2021 17:02
[clickOutsideDector] React component to detect if the component it's wrapping is clicked outside of. #React #ui
// https://css-tricks.com/click-outside-detector/
// https://codepen.io/chriscoyier/project/editor/AxPzxn
import React, { useEffect, useRef, forwardRef } from 'https://cdn.skypack.dev/react';
const ClickOutsideDetector = forwardRef(function ClickOutsideDetector(
{ listen, onClickOutside, ignore, ...props },
ref
) {
@dmwyatt
dmwyatt / fakeBaseClass.ts
Created March 31, 2021 15:21
[fakeBaseClass] Make it so TypeScript can handle Proxy traps in a constructor
// https://stackoverflow.com/a/51865579/23972
function fakeBaseClass<T>(): new () => Pick<T, keyof T> {
return class {} as any;
}
// USAGE:
class FooProxy extends fakeBaseClass<Foo>(){
private foo: Foo; // I would make this private as it is not really accessible on what the constructor of FooProxy returns (maybe remove it as I see no use for it)
@dmwyatt
dmwyatt / TailwindConstants.js
Last active March 23, 2021 20:42
Extract color value from tailwind theme.
import resolveConfig from "tailwindcss/resolveConfig";
// Update next import to the location of your tailwind config. If you're using CRA
// and your `tailwind.config.js` is outside of `src`, you might have to do
// Shenanigans™ to import it. (You can use craco and https://stackoverflow.com/a/60353355/23972)
import tailwindConfig from "../../tailwind.config";
const THEME = resolveConfig(tailwindConfig).theme;
@dmwyatt
dmwyatt / nestedGet.js
Created March 23, 2021 20:29
[nestedGet] Given list of strings, access nested properties in object.
/**
* Given list of stings, access nested properties in object.
*
* @param {Object<string, *>} object
* @param {Array<string>} accessors
* @returns {*}
*/
function nestedGet(object, accessors) {
return accessors.reduce((acc, prop) => {
return acc?.[prop];