Skip to content

Instantly share code, notes, and snippets.

@lexelby
Created March 29, 2016 12:52
Show Gist options
  • Select an option

  • Save lexelby/d5aac17471f5a7d12967 to your computer and use it in GitHub Desktop.

Select an option

Save lexelby/d5aac17471f5a7d12967 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
import json
from pimento import menu
import sys
import re
from ansicolor import red
ORG_CHART = '/home/lex/Documents/org_chart.json'
if len(sys.argv) < 2:
print "usage: %s <regex>" % sys.argv[0]
sys.exit(1)
by_name = {}
by_report = {}
def index(person):
by_name[person['name']] = person
for report in person['reports']:
by_report[report['id']] = person
index(report)
with open(ORG_CHART) as f:
org_chart = json.load(f)
index(org_chart)
by_report[org_chart['id']] = None
name_re = re.compile(" ".join(sys.argv[1:]), re.I)
matches = []
for name in by_name:
if name_re.search(name):
matches.append(name)
if not matches:
print "No employee found matching", name_re.pattern
sys.exit(1)
if len(matches) > 1:
choice = menu(matches,
pre_prompt="Multiple employees matched. Please choose one:",
post_prompt="name or number: ",
indexed=True,
insensitive=True,
fuzzy=True)
else:
choice = matches[0]
person = by_name[choice]
# First, print their management chain, top down.
managers = []
def add_managers(employee):
manager = by_report[employee['id']]
if manager:
add_managers(manager)
managers.append(manager['name'])
add_managers(person)
def print_employee(employee, indent_level, spacer=" "):
print "%s* %s - %s" % (spacer * indent_level, employee['name'], employee['title'])
for indent_level, employee in enumerate(managers):
print_employee(by_name[employee], indent_level)
person['name'] = red(person['name'], bold=True)
print_employee(person, indent_level + 1)
# Now print this person's reports, recursively
def print_reports(employee, indent_level):
for report in employee['reports']:
print_employee(report, indent_level)
print_reports(report, indent_level + 1)
print_reports(person, indent_level + 2)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment