Skip to content

Instantly share code, notes, and snippets.

View mikegrima's full-sized avatar

Mike Grima mikegrima

View GitHub Profile
@mikegrima
mikegrima / b64stringencoding.py
Created June 22, 2016 19:19
Base64 Encoding and Decoding to Strings in Python.
import base64
# Convert this to a b64 string:
some_str = "Some string..."
b64string = base64.b64encode(some_str.encode("utf-8")).decode("utf-8")
# ^^ Without this, it's a byte array.
# /nomorehairpulling
@mikegrima
mikegrima / lowercaser.py
Last active October 14, 2016 22:14
Quick and dirty recursive dict lowercaser
import json
"""
This is NOT extensive in any way -- just something quick and dirty. It doesn't handle all datatypes -- use at your own risk.
"""
def lowercase(original):
if isinstance(original, str):
return original.lower()
elif isinstance(original, list):
@mikegrima
mikegrima / key_lowercaser.py
Created October 14, 2016 22:15
Quick and dirty dict key lowercaser
import json
"""
This is NOT extensive in any way -- just something quick and dirty.
"""
def lowercase_keys(original, in_lists=False):
if in_lists and isinstance(original, list):
new_list = []
for item in original:
@mikegrima
mikegrima / read_obj.py
Last active September 14, 2017 17:53
Boto3 Read Object from S3
import boto3
BUCKET = "LOLSOMEBUCKET"
KEY = "LOL/SOME/KEY"
client = boto3.client("s3")
result = client.get_object(Bucket=BUCKET, Key=KEY)
compressed = False
@mikegrima
mikegrima / usable_times.py
Last active February 4, 2019 20:15
Strip timezone and microseconds in Python
from datetime import datetime
# Prints a string that looks like: 2017-08-30T21:19:30 (this is a good standard ISO format)
current_time = datetime.utcnow().replace(tzinfo=None, microsecond=0).isoformat()
print(current_time)
# 2019-02-04T19:44:04
# To read in a string like above
date_obj = datetime.strptime(current_time, "%Y-%m-%dT%H:%M:%S")
@mikegrima
mikegrima / pypiupload.md
Last active December 17, 2019 00:15
Uploading to PyPI

Uploading to PyPI

Initial things:

  1. Make an account on PyPI

  2. Make sure you have twine and wheel installed in your venv: pip install twine wheel

  3. Make sure you have your ~/.pypirc file that looks like this:

@mikegrima
mikegrima / OLD
Last active February 28, 2018 02:09
Assume Role Client
# from botocore.session import Session
# from botocore.credentials import AssumeRoleProvider, CredentialResolver, AssumeRoleCredentialFetcher, \
# DeferredRefreshableCredentials, _local_now
# """
# # Where much of this is referenced:
# https://github.com/aws/aws-cli/blob/f4ea4b682e792eb474e9e3c3a74b16ab34ba95c0/tests/integration/test_cli.py
# https://github.com/boto/botocore/blob/fd6aac245b24dbdbfc6e0c5ecd7530cfe4346794/botocore/session.py
# https://github.com/boto/botocore/blob/fd6aac245b24dbdbfc6e0c5ecd7530cfe4346794/botocore/credentials.py
# """
@mikegrima
mikegrima / instructions.txt
Last active March 19, 2019 00:02
S3 only permit specific bucket object access
Documented here: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/
Yes, it's really shitty.
Example Policy to ONLY allow specific IAM Roles access to the objects (denies all the other roles access to the objects):
{
"Version": "2008-10-17",
"Statement": [
{
@mikegrima
mikegrima / snake_to_camel.py
Created March 19, 2019 22:00
Python snake_case to camelCase
def snake_to_camels(data: object) -> object:
"""Function that recursively converts snake_case to camelCase in a dict."""
if isinstance(data, dict):
data_copy = dict(data)
for key, value in data.items():
# Send the value back:
new_value = snake_to_camels(value)
# In case the key isn't a string (like an Int):
@mikegrima
mikegrima / zip_archive_pytest_fixture.py
Last active April 20, 2023 22:51
pytest fixture for an in-memory zipped archive
import io
import os
from zipfile import ZipFile
import pytest
@pytest.fixture
def archive():
archive_file = io.BytesIO()