Skip to content

Instantly share code, notes, and snippets.

@monkut
monkut / github_archive_retriever.py
Created August 14, 2017 01:31
parallel retrieve of github arhive data
"""
Retrieve github archieve data from:
https://www.githubarchive.org/
"""
import datetime
from concurrent.futures import ThreadPoolExecutor
from tqdm import tqdm
@monkut
monkut / ec2_metadata_manager.py
Created November 15, 2017 07:24
Provides a simple (top-level only) wrapper around the AWS ec2 instance metadata interface
import requests
METADATA_URL = 'http://169.254.169.254/latest/meta-data/'
class AmiMetaDataManager:
"""
Provides a simple wrapper around the AWS ec2 instance metadata interface
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html
"""
@monkut
monkut / lazy_LRUish_redis_cache_decorator.py
Last active December 22, 2021 23:46
A lazy implementation of an lru-ish redis based cache decorator
import json
from functools import wraps
import redis
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_CONNECTION_POOL = redis.ConnectionPool(host=REDIS_HOST, port=REDIS_PORT)
CACHE_EXPIRE_SECONDS = 5000
VALID_PYTHON_EXTENSIONS = ('.py', )
def get_userdefined_class(directory: str, target_baseclass: object) -> list:
"""
Load Classes that sub-classed the given 'target_baseclass' for modules in the given directory
:param directory: directory containing user-defined classes subclassing 'target_baseclass'
:param target_baseclass: the ABC class that the user class subclasses
:return: (class) [UserDefinedClass, ...]
"""
@monkut
monkut / get_package_subclassed_classes.py
Created May 31, 2018 03:40
Voodoo function to discover classes in given 'package' that subclass the given 'target_baseclass'
def _get_package_defined_classes(package, target_baseclass) -> dict:
"""
Voodoo function to discover classes in given 'package' that subclass the given 'target_baseclass'
:param package: Python Package Object
:param target_baseclass: Python Class Object
:return:
{
CLASS_NAME: CLASS_OBJECT,
...
}
@monkut
monkut / compare_directories.py
Created June 12, 2018 07:23
Compare two directory's content size with percentage
"""
This is a script to compare the content of two directories.
It was used to determine how complete a series of cp commands were done after the cp process was already started
"""
import os
def directory_size(path):
total = 0
for entry in os.scandir(path):
if entry.is_file():
@monkut
monkut / csv_multiprocessing_pool.py
Created July 23, 2018 01:03
A common pattern for processing csv files in parallel
import os
import csv
from multiprocessing import cpu_count, Pool
def process_csv(args):
filepath, encoding = args
unique_ids = set()
with open(filepath, 'r', encoding=encoding) as in_f:
reader = csv.reader(in_f)
@monkut
monkut / update_awslambda_envars.bash
Created January 11, 2020 05:11
update aws lambda environment variables via awscli and jq
# the `update-function-configuration` overwrites the existing set envars.
# In order to *ADD* variables we need to read the existing envars and add to that.
# This command uses `jq` to read and transform the json result to an envar then update the lambda configuration
# create the updated envar set
export YOUR_FUNCTION_NAME={populate this}
export UPDATED_ENVIRONMNET_VARIABLES=$(aws lambda get-function-configuration --function-name ${YOUR_FUNCTION_NAME} | \
jq --compact-output ".Environment + {\"Variables\": (.Environment.Variables + {\"NEW_ENVAR_NAME\": \"NEW_ENVAR_VALUE\"})}")
# check
@monkut
monkut / lambdaenvars.py
Last active June 3, 2021 01:06
Command-line script to get/set environment variables and list existing aws lambda functions
"""
Get/Set lambda environment variables
"""
import os
import pprint
from pathlib import Path
from typing import Tuple, List
from enum import Enum
import boto3
@monkut
monkut / hls_legend_scaling.py
Last active March 11, 2021 09:29
HLS Color Scaling for legends
from colorsys import rgb_to_hls, hls_to_rgb
class ScaledFloatColorManager:
"""
Intended to provide a scaled legend between to colors in the HSL space
"""
def __init__(self, name, minimum_value, maximum_value, hex_color_min="66b219", hex_color_max="cc0000", display_band_count=6):
self.name = name