Skip to content

Instantly share code, notes, and snippets.

@bencharb
bencharb / date_range.py
Last active February 6, 2016 07:54
date range class
# coding: utf-8
# In[258]:
import datetime
import operator
import arrow
@bencharb
bencharb / distributetime.py
Created January 27, 2016 03:59
distribute time
def distribute_time(dt, count=-1, step=1, unit='hours', round_time=True):
"""
Examples:
In [01]:
list(distribute_time(dt, -3))
Out[01]:
[datetime.datetime(2016, 1, 26, 22, 0),
datetime.datetime(2016, 1, 26, 21, 0),
@bencharb
bencharb / make_glob.py
Last active December 8, 2015 05:17
make_glob
import re
def make_glob(*parts):
"""
Reverse glob: make a 'glob_pattern_string*' from a list of strings ['glob_pattern_string_1', 'not_a_match', 'glob_pattern_string_1', 'glob_pattern_string_3']
"""
def match_parts(partial_string):
rx = re.compile(partial_string+'.*')
for part in parts:
try:
@bencharb
bencharb / pull_extensions.py
Last active December 4, 2015 15:13
pull_extensions
"""
Pop off extensions by name or by number to pop off
pull_extensions('filenamewith.ext.csv.gz', 2) # 'filenamewith.ext'
pull_extensions('filenamewith.ext.csv.gz', 'csv.gz') # 'filenamewith.ext'
pull_extensions('filenamewith.ext.csv.gz', 'csv') # 'filenamewith.ext.gz'
"""
import itertools
def remove_from_end(list_, val):
@bencharb
bencharb / split_many.py
Created November 10, 2015 14:46
split many
def split_many(astring, *split_on_chars, **kwargs):
"""
Split a string on many values.
:param split_on_chars: string to split
:type split_on_chars: basestring
:param split_on_chars: chars to split on
:type split_on_chars: tuple
:param kwargs: keep_empty: keeps empty strings in result, which happens with two adjacent separators in a string
@bencharb
bencharb / mongo_expression_builder.py
Last active October 13, 2015 11:04
Mongo expression builder with Django style queries
# BUILD A MONGO QUERY WITH DJANGO QUERY STYLE
# THIS WORKS FOR BASIC QUERIES, BUT IS MISSING SEVERAL OPERATORS
#
# In [1083]:
# birds = ME(color__in=('yellow', 'orange',), name='Big Bird')
# feathers = ME(feathers__count__gt=1000)
# In [1084]:
# print birds.expression
# print feathers.expression
@bencharb
bencharb / get_class_attr_names.py
Last active August 21, 2018 10:35
get class attr names
import operator
def get_class_attr_names(c):
if not getattr(mycal, 'mro', None):
return []
return set(reduce(operator.or_, map(set, map(dir, c.mro()[1:])))) ^ set(dir(c))
@bencharb
bencharb / path_helper.py
Last active October 4, 2015 10:53
path helper
import urlparse
import os
class Path(unicode):
def __init__(self, path):
self.parsed_url = urlparse.urlparse(path)
self.split = os.path.split(self.parsed_url.path)
self.splitext = os.path.splitext(self.parsed_url.path)
@bencharb
bencharb / boilclass.py
Last active October 2, 2015 17:15
class boilerplate template
class BoilClass(object):
'''
Print out class definition code. Does not create a class, just writes the code for you to edit.
'''
INDENT = ' '*4
def __init__(self, classname, *attrs, **kwargs):
bases=kwargs.get('bases') or ('object',)
if kwargs.get('init_newlines'):
kwargs['init_sep'] = ',\n'
@bencharb
bencharb / flatten.py
Last active February 23, 2016 17:31 — forked from simonw/flatten.py
flatten()/unflatten()
DEFAULT_DELIM = '.'
NOPREFIX_PREFIX = '__NOPREFIX__'
import itertools
import collections
def is_non_string_sequence(seq):
return isinstance(seq, collections.Sequence) and not isinstance(seq, basestring)
def is_dict(d):
return isinstance(d, collections.Mapping) or hasattr(d, 'iteritems') and not isinstance(d, basestring)