Skip to content

Instantly share code, notes, and snippets.

View santiagobasulto's full-sized avatar

Santiago Basulto santiagobasulto

View GitHub Profile
import functools
from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor
def check_only_integers(fn):
"""Very simple decorator that prevents other than integers to be passed
to the decorated function. Just for demonstration purposes.
"""
@functools.wraps(fn)
def wrapped(*args):
@santiagobasulto
santiagobasulto / parallel_generators.py
Last active July 16, 2018 07:44
Despite multiple efforts, I couldn't figure out how to evaluate generators in parallel. Ideas are welcome.
def get_repo_stars(org, repo):
url = 'https://api.github.com/repos/{org}/{repo}'.format(
org=org, repo=repo)
print("GET ", url)
resp = requests.get(url)
return resp.json()['stargazers_count']
params = [
('requests', 'requests'),
('requests', 'httpbin'),
"""
This one "Doesn't" work. Seems like `map` doesn't play well with
`as_completed`.
"""
import time
import random
from concurrent.futures import ThreadPoolExecutor, as_completed
def my_sleep(n=1000):
from django.http import HttpResponseForbidden
from django.http import JsonResponse
from pusher import Pusher
class PusherAuthStrategy:
def __init__(self, namespace):
self.namespace = namespace
@santiagobasulto
santiagobasulto / parse_timedeltas.py
Last active September 30, 2024 22:40
A simple script to parse human readable time deltas into Python datetime.timedeltas
import re
TIMEDELTA_REGEX = (r'((?P<days>-?\d+)d)?'
r'((?P<hours>-?\d+)h)?'
r'((?P<minutes>-?\d+)m)?')
TIMEDELTA_PATTERN = re.compile(TIMEDELTA_REGEX, re.IGNORECASE)
def parse_delta(delta):
@santiagobasulto
santiagobasulto / timezone_options.py
Last active February 26, 2018 14:30
Generate time options for different timezones
from datetime import datetime, date, time, timedelta
from pytz import timezone
START_DATE = date(2017, 10, 9)
START_TIME = time(8, 0)
START_DATETIME = datetime.combine(START_DATE, START_TIME)
INTERVAL_IN_HOURS = 2
OPTION_TEMPLATE = "{start} - {end} ({tz})"
class Tuple(tuple):
def __getattr__(self, name):
def _int(val):
try:
return int(val)
except ValueError:
return False
if not name.startswith('_') or not _int(name[1:]):
raise AttributeError("'tuple' object has no attribute '%s'" % name)
def range(x, y=None):
if y is None:
y = x
x = 0
while x < y:
yield x # This is the generator
x += 1
def range(x, y=None):
results = []
if y is None:
y = x
x = 0
while x < y:
results.append(x)
x += 1
return results