Setting teams up

In the deployment process someone needs to configure the teams.json to represent the organization structure. The best results are achieved when the end selectable team has at least 20 participants with no upper limit.

An example of the teams.json is given below:


In [41]:
sample_content_of_teams_json = """{
  "teams": [
    { "name": "MegaTeam1", "spacer": true,
      "children": [
          { "name": "Team-1"},
          { "name": "Team-2"},
          { "name": "Team 3",
            "children": [
            { "name": "team 3"},
            { "name": "team 121"}]},
          { "name": "Team 4"}]},
    { "name": "Team 5"},
    { "name": "Other"}
  ]
}"""

The code below digests the config and produces unique key for each team.


In [43]:
import json
from hashlib import md5


class TeamConfig(object):
    """Flattens teams.json config into a digestable structure"""
    
    def __init__(self, config_json_string):
        self.prefixes = []
        for root_object in json.loads(config_json_string)["teams"]:
            self.recursive_fix_(root_object)

    def recursive_fix_(self, a, prefix=""):
        """A helper function to navigate the nested teams"""
        prefix = prefix + "." if len(prefix) > 0 else prefix
        self.prefixes.append(dict(
            name=a['name'],
            key=md5(prefix + a["name"]).hexdigest(),
            spacer=True if "spacer" in a else False))
        if "children" in a:
            prefix += a["name"]
            for node in a["children"]:
                self.recursive_fix_(node, prefix)

An example of a flattened config goes below:


In [42]:
team_conf = TeamConfig(json_input)
team_conf.prefixes


Out[42]:
[{'key': '56b27cffe500f954d7fcd98ec895ba02',
  'name': u'MegaTeam1',
  'spacer': True},
 {'key': 'd8f7299d2df7463a2b6febd0bc3554f6',
  'name': u'Team-1',
  'spacer': False},
 {'key': '563bf6e58ebc37552ff540e0ae173c4a',
  'name': u'Team-2',
  'spacer': False},
 {'key': '38f746ae282f0473204e89ed26d6e336',
  'name': u'Team 3',
  'spacer': False},
 {'key': 'fdf2bc5fd5c366ec3bfca9d75f489a5c',
  'name': u'team 3',
  'spacer': False},
 {'key': '16d42d08368a0e2a42ca3179c7bb6c8f',
  'name': u'team 121',
  'spacer': False},
 {'key': '78e853e8d12868a2db2a0c809a50f262',
  'name': u'Team 4',
  'spacer': False},
 {'key': '931a462378ba942054861d2f84abf2d8',
  'name': u'Team 5',
  'spacer': False},
 {'key': '6311ae17c1ee52b36e68aaf4ad066387',
  'name': u'Other',
  'spacer': False}]