Skip to content

Instantly share code, notes, and snippets.

View meadsteve's full-sized avatar
🌲
stuff

Steve Brazier meadsteve

🌲
stuff
View GitHub Profile
@meadsteve
meadsteve / unique.py
Created June 29, 2022 06:45
Iterate over unique items in a python iterable
from typing import Iterable, Hashable
def iterate_uniquely(items: Iterable[Hashable]):
already_emitted = set()
for item in items:
key = hash(item)
if key not in already_emitted:
yield item
already_emitted.add(key)
CODE = "def say_message(message):;0;1print(message);0say_message('hello')"
exec(CODE.replace(";0", "\n").replace(";1", "\t"))
@meadsteve
meadsteve / collections.py
Last active September 9, 2020 08:13
Constrained types in python
class NonEmptyList(list, Generic[T]):
def __init__(self, *members: T):
super().__init__([*members])
self._validate_constraints()
def _validate_constraints(self):
if len(self) < 1:
raise RuntimeError("NonEmptyList must have at least one member")
class LolDomainString(str):
def __matmul__(self, other):
return LolDomainString(f"{self}@{other}")
def __getattr__(self, item):
return LolDomainString(f"{self}.{item}")
steve = LolDomainString("meadsteve")
@meadsteve
meadsteve / deserialize_pydantic.py
Last active August 1, 2019 14:15 — forked from henriklindgren/deserialize_pydantic.py
Unpack dict based on pydantic BaseModel into model
#This is free and unencumbered software released into the public domain.
#
#Anyone is free to copy, modify, publish, use, compile, sell, or
#distribute this software, either in source code form or as a compiled
#binary, for any purpose, commercial or non-commercial, and by any
#means.
#
#In jurisdictions that recognize copyright laws, the author or authors
#of this software dedicate any and all copyright interest in the
#software to the public domain. We make this dedication for the benefit
@meadsteve
meadsteve / Dockerfile
Last active April 2, 2019 08:11 — forked from philcross/Dockerfile
docker example
#services/php/Dockerfile
FROM php:7.3-fpm
WORKDIR /var/www/html
ENV COMPOSER_ALLOW_SUPERUSER=1
ENV COMPOSER_NO_INTERACTION=1
ENV COMPOSER_HOME=/usr/local/share/composer
@meadsteve
meadsteve / keybase.md
Created June 29, 2018 08:27
keybase.md

Keybase proof

I hereby claim:

  • I am meadsteve on github.
  • I am meadsteve (https://keybase.io/meadsteve) on keybase.
  • I have a public key whose fingerprint is C00A D434 70A0 113C EF31 8E28 6B08 AFC9 C001 CE6F

To claim this, I am signing this object:

var CheckMessageForKeyword = function(message, keyword, hasParameters) {
if (!message.data || !message.data.text) {
return null;
}
var keywordRegex;
if (hasParameters) {
keywordRegex = new RegExp("^\\s*" + keyword + "\\s*(\\S.+?)\\s*$", "i");
var params = message.data.text.match(keywordRegex);
@meadsteve
meadsteve / clock.ex
Created September 30, 2015 19:31 — forked from CrowdHailer/clock.ex
Creating boundary modules for elixir applications. These have their implementation set during the configuration step. In this example we switch clock between system clock and a dummy clock
# This module represents a behaviour and when used picks from the Application configuration which implementation will be used
defmodule Clock do
@callback now() :: Integer.t
defmacro __using__([]) do
module = Application.get_env(:my_app, :Clock)
quote do
alias unquote(module), as: Clock
end
@meadsteve
meadsteve / example.php
Last active August 26, 2015 08:45
Api !== Http
<?
class Api {
const SUCCESS = 0;
const FAILURE = 13;
public function doThingOne($SomeArgument)
{
// do something
return self::SUCCESS;
}