Skip to content

Instantly share code, notes, and snippets.

View santiagobasulto's full-sized avatar

Santiago Basulto santiagobasulto

View GitHub Profile
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)
# !pip install python-hn
import itertools
from hn import search_by_date
results = search_by_date('Who is hiring?', ask_hn=True, author='whoishiring', hits_per_page=1000)
who_is_hiring = (r for r in results if 'ask hn: who is hiring?' in r['title'].lower())
for elem in itertools.islice(who_is_hiring, 10):
print(elem['title'])
# !pip install python-hn
import itertools
from hn import search_by_date
results = search_by_date('Who is hiring?', ask_hn=True, author='whoishiring', hits_per_page=1000)
who_is_hiring = (r for r in results if 'ask hn: who is hiring?' in r['title'].lower())
for elem in itertools.islice(who_is_hiring, 10):
print(elem['title'])
{
"category_name": "General",
"todos": [
{
"task": "My TODO Task",
"due_on": null,
"status": "pending",
"description": null
},
{
@santiagobasulto
santiagobasulto / gist:3251381
Created August 3, 2012 20:49
Django DRY context managers
"""
You find yourself doing this all the time?
>>> car = Car.objects.get(id=1)
>>> if c.user != request.user:
>>> return HttpResponse("This car doesn't belong to you")
>>> c.brand = request.POST.get('brand_name')
>>> c.save()
Better to turn it into:
@santiagobasulto
santiagobasulto / failure.py
Created August 11, 2018 20:05
Pickle limitations for class based decorators.
from concurrent.futures import ProcessPoolExecutor
class CheckOnlyIntegers:
def __init__(self, fn):
self.fn = fn
def __call__(self, *args):
if not all([type(arg) == int for arg in args]):
raise ValueError("Invalid param is not an integer")
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):
@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})"