Example #1
0
    def get_region_struct(cls):
        """ get City->RegionGroup->Region struct

        :return:
         [{'city_id': <city_id>,
           'city_name': <city_name>,
           'region_groups': {'region_group_id': <>,
                             'region_group_name': <>,
                             'regions': {'region_id': <>,
                                         'region_name': <>,
                                         'region_type': <>,
                                         }
                             }
          }
           ... ...
         ]
        """
        city_pairs = city_base.get_city_id_name_pairs(
            cls.get_user_city_ids())

        city_region_group_map = rg_base.\
            get_city_region_group_map(city_pairs.keys())

        region_ids = [r.id for r in region_base.get_all()]
        region_group_region_map = \
            region_base.get_region_group_region_map(region_ids)

        region_struct = []
        for city_id, city_name in city_pairs.items():
            region_groups = []

            for r_group in city_region_group_map.get(city_id, []):
                regions = []

                for region in region_group_region_map.get(r_group.id, []):
                    regions.append({'region_id': region.id,
                                    'region_name': region.name,
                                    'region_type': region.type_code})

                region_groups.append({'region_group_id': r_group.id,
                                      'region_group_name': r_group.name,
                                      'regions': regions})

            region_struct.append({'city_id': city_id,
                                  'city_name': city_name,
                                  'region_groups': region_groups})
        return region_struct