-
Make an account on PyPI
-
Make sure you have
twine
andwheel
installed in yourvenv
:pip install twine wheel
-
Make sure you have your
~/.pypirc
file that looks like this:
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 |
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): |
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: |
import boto3 | |
BUCKET = "LOLSOMEBUCKET" | |
KEY = "LOL/SOME/KEY" | |
client = boto3.client("s3") | |
result = client.get_object(Bucket=BUCKET, Key=KEY) | |
compressed = False |
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") |
# 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 | |
# """ |
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": [ | |
{ |
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): |
import io | |
import os | |
from zipfile import ZipFile | |
import pytest | |
@pytest.fixture | |
def archive(): | |
archive_file = io.BytesIO() |