Skip to content

Instantly share code, notes, and snippets.

@Bekt
Created August 24, 2014 03:35
Show Gist options
  • Save Bekt/f771278281a8696ddc4f to your computer and use it in GitHub Desktop.
Save Bekt/f771278281a8696ddc4f to your computer and use it in GitHub Desktop.
Jobs,Steve,3/3/1993,Steve Ballmer
Ballmer,Steve,2/2/1992,Bill Gates
Gates,Bill,1/1/1990,
Wozniak,Steve,4/4/1994,Steve Jobs
Bekt,Kanat,5/5/2005,Bill Gates
#!/usr/bin/env python3
class Employee(object):
def __init__(self, first, last, join_date=None, manager=None):
self.first = first
self.last = last
self.join_date = join_date
self.manager = manager
self.reporters = []
@property
def name(self):
return self.first + ' ' + self.last
class OrgChart(object):
def __init__(self, filename):
self._read(filename)
def print_chart(self):
self._print_chart(self._root, 0)
def _print_chart(self, employee, level):
print('>' * level + employee.name)
for r in self.get_reporters(employee):
self._print_chart(r, level + 1)
def get_manager(self, employee):
return employee.manager
def get_all_managers(self, employee):
managers = []
while employee:
m = self.get_manager(employee)
managers.append(m)
employee = m
def get_reporters(self, employee):
return employee.reporters
def get_all_reporters(self, employee):
reporters = []
self._get_all_reporters(employee, reporters)
return reporters
def _get_all_reporters(self, employee, reporters):
r = self.get_reporters(employee)
reporters.extend(r)
for e in r:
self._get_all_reporters(e, reporters)
def _read(self, filename):
with open(filename) as f:
d = {}
for line in f.read().splitlines():
l, f, j, m = line.split(',')
e = d.get(f + ' ' + l)
manager = d.get(m)
if not manager and m:
m_f, m_l = m.split()
manager = Employee(m_f, m_l)
d[manager.name] = manager
if e:
e.manager = manager
e.join_date = j
else:
e = Employee(f, l, j, manager)
d[e.name] = e
if manager:
manager.reporters.append(e)
else:
self._root = e
if __name__ == '__main__':
org = OrgChart('employees.txt')
org.print_chart()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment