Skip to content

Instantly share code, notes, and snippets.

@dwickstrom
Last active September 22, 2016 08:37
Show Gist options
  • Save dwickstrom/6444168a3f04bc9d2727ef1209dae01d to your computer and use it in GitHub Desktop.
Save dwickstrom/6444168a3f04bc9d2727ef1209dae01d to your computer and use it in GitHub Desktop.
# filter_by :: [Kwarg] -> lambda QuerySet
def filter_by(**kwargs):
return lambda qs: qs.filter(**kwargs)
# filter_by_type :: QuerySet -> QuerySet
filter_by_type = lambda x: filter_by(type=x)
# filter_by_project :: QuerySet -> QuerySet
filter_projects = filter_by_type(Account.PROJECT_TYPE)
# filter_by_unit :: QuerySet -> QuerySet
filter_by_unit = filter_by_type(Account.UNIT_TYPE)
# get_descendants :: QuerySet -> QuerySet
get_descendants = lambda qs: qs.get_descendants()
# get_ancestors :: QuerySet -> QuerySet
get_ancestors = lambda qs: qs.get_ancestors()
# distinct :: QuerySet -> QuerySet
distinct = lambda qs: qs.disctinct()
# first_project :: QuerySet -> Account
first_project = compose(head, filter_projects)
first_project = compose(head, filter_by(type='PROJECT'))
get_uppercase_name = compose(upper, prop('name'))
capitalised_names = compose(fmap(get_uppercase_name), filter_by(type=Account.CONSTRUCTION_TYPE))
# first_project_children :: QuerySet -> QuerySet
first_project_children = compose(filter_projects, get_descendants, first_project)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment