Skip to content

Instantly share code, notes, and snippets.

@gidgid
gidgid / structured_access_to_dictionaries.py
Last active November 7, 2020 19:34
Nested dictionaries make us coupled to the internal structure
def test_hobbies_names_is_reliant_on_hobbies_to_have_names():
employee = {
"name": "John",
"age": 42,
"hobbies": [
{"name": "Rock Climbing", "_id": "1234"},
{"name": "Acrobatics", "_id": "5678"},
],
}
@gidgid
gidgid / root_with_literals_improved.py
Last active November 14, 2020 18:32
A slightly more concise way to read envs with literal types
import os
from typing import Union
import pytest
from pydantic import BaseSettings, HttpUrl, ValidationError, parse_obj_as
from typing_extensions import Literal
class LocalContext(BaseSettings): # 1
env: Literal["local"] # 1
@gidgid
gidgid / gist.scala
Created December 13, 2020 19:25
adts_users_example.scala
sealed trait User
case class AuthenticatedUser(id: String, email: String, password: String) extends User
case class AnonymousUser(name: String) extends User
@gidgid
gidgid / python_adt_example.py
Last active December 17, 2020 07:48
adts_users_example.py
from dataclasses import dataclass
class User:
pass
@dataclass
class AuthenticatedUser(User):
id_: str
from abc import ABC, abstractmethod
from dataclasses import dataclass
class Bool(ABC):
@abstractmethod
def __bool__(self):
"""True/False depends on the type"""
@dataclass
from dataclasses import dataclass
from typing import Any, Generic, TypeVar
T = TypeVar("T")
class Option(Generic[T]):
pass
from dataclasses import dataclass
class Expression:
"""Represents an ADT expression"""
@dataclass
class Literal(Expression):
value: int
from datetime import datetime
from pydantic import BaseModel
class Event:
"""Represents an event"""
class Login(BaseModel, Event):
from dataclasses import dataclass
class State:
"""Represents a possible Circuit Breaker state"""
@dataclass
class Open(State):
pass
@gidgid
gidgid / evaluating_expression_with_type_checking.py
Last active December 15, 2020 14:52
shows a possible but not very useful way to operate on an expression
from dataclasses import dataclass
class Expression:
"""Represents an ADT expression"""
@dataclass
class Literal(Expression):
value: float