Example #1
0
    def _getinfo(self, params):
        # gets the details of a school and returns a dictionary
        primary_key = params.get(self.param_name_for_primary_key)

        if type(primary_key) == str or type(primary_key) == unicode:
            primary_key = urllib.unquote_plus(primary_key)

        result = dict()
        result['query'] = params

        try:
            EntityModel = get_models(
                params.get('session', '10-11'), self.entity_type)
            filters = dict()
            filters[self.primary_key + '__iexact'] = primary_key

            if hasattr(self, 'secondary_key') and hasattr(self, 'param_name_for_secondary_key'):
                # required in case of a composite key like scenario
                # e.g. cluster_name is not unique. It needs block_name with it
                if self.secondary_key and self.param_name_for_secondary_key and params.get(self.param_name_for_secondary_key):
                    secondary_key = params.get(
                        self.param_name_for_secondary_key)
                    filters[self.secondary_key + '__iexact'] = secondary_key

            entity_obj = EntityModel.objects.get(**filters)

            result[self.entity_type] = self._get_geojson(entity_obj)
        except (EntityModel.DoesNotExist, Exception) as e:
            print 'filters', filters
            traceback.print_exc()
            result['error'] = str(e)
        return result
    def handle(self, *args, **options):
        if len(args) >= 2:
            acyear = args[0]
            filename = args[1]
            SchoolModel = get_models(acyear, 'school')

            with open(filename, 'rb') as fp:
                reader = csv.reader(fp, delimiter=',', quotechar='"')
                first_row = reader.next()
                columns = ['school_code', 'acyear', 'class1_total_enr_boys', 'class2_total_enr_boys', 'class3_total_enr_boys', 'class4_total_enr_boys', 'class5_total_enr_boys', 'class6_total_enr_boys', 'class7_total_enr_boys', 'class8_total_enr_boys', 'class1_total_enr_girls', 'class2_total_enr_girls', 'class3_total_enr_girls', 'class4_total_enr_girls', 'class5_total_enr_girls', 'class6_total_enr_girls', 'class7_total_enr_girls', 'class8_total_enr_girls']

                query = "ALTER TABLE {} \n".format(SchoolModel._meta.db_table)
                for c in columns[2:]:
                    q = query + " ADD COLUMN {} integer;".format(c)
                    self.stdout.write(q)
                q = query + " ADD COLUMN total_boys integer;"
                self.stdout.write(q)
                q = query + " ADD COLUMN total_girls integer;"
                self.stdout.write(q)

                for row in reader:
                    school_code = int(row[columns.index('school_code')])

                    query = "UPDATE {} SET \n".format(SchoolModel._meta.db_table)
                    for c in columns[2:]:
                        query += "\t{}='{}',\n".format(c, int(row[columns.index(c)]))
                    query += '\ttotal_boys = ({}),\n'.format('+'.join(columns[2:10]))
                    query += '\ttotal_girls = ({}),\n'.format('+'.join(columns[10:]))
                    query = query.rstrip(',\n')
                    query += "\nWHERE school_code='{}';".format(school_code)
                    self.stdout.write(query)
    def handle(self, *args, **options):
        if len(args) >= 1:
            filename = args[0]
            SchoolModel = get_models('12-13', 'school')

            with open(filename, 'rb') as fp:
                reader = csv.reader(fp, delimiter=',', quotechar='"')
                first_row = reader.next()
                columns = ['school_code', 'acyear', 'class1_total_enr_boys', 'class2_total_enr_boys', 'class3_total_enr_boys', 'class4_total_enr_boys', 'class5_total_enr_boys', 'class6_total_enr_boys', 'class7_total_enr_boys', 'class8_total_enr_boys', 'class1_total_enr_girls', 'class2_total_enr_girls', 'class3_total_enr_girls', 'class4_total_enr_girls', 'class5_total_enr_girls', 'class6_total_enr_girls', 'class7_total_enr_girls', 'class8_total_enr_girls', 'class1_sc_enr_boys', 'class2_sc_enr_boys', 'class3_sc_enr_boys', 'class4_sc_enr_boys', 'class5_sc_enr_boys', 'class6_sc_enr_boys', 'class7_sc_enr_boys', 'class8_sc_enr_boys', 'class1_sc_enr_girls', 'class2_sc_enr_girls', 'class3_sc_enr_girls', 'class4_sc_enr_girls', 'class5_sc_enr_girls', 'class6_sc_enr_girls', 'class7_sc_enr_girls', 'class8_sc_enr_girls', 'class1_st_enr_boys', 'class2_st_enr_boys', 'class3_st_enr_boys', 'class4_st_enr_boys', 'class5_st_enr_boys', 'class6_st_enr_boys', 'class7_st_enr_boys', 'class8_st_enr_boys', 'class1_st_enr_girls', 'class2_st_enr_girls', 'class3_st_enr_girls', 'class4_st_enr_girls', 'class5_st_enr_girls', 'class6_st_enr_girls', 'class7_st_enr_girls', 'class8_st_enr_girls', 'class1_obc_enr_boys', 'class2_obc_enr_boys', 'class3_obc_enr_boys', 'class4_obc_enr_boys', 'class5_obc_enr_boys', 'class6_obc_enr_boys', 'class7_obc_enr_boys', 'class8_obc_enr_boys', 'class1_obc_enr_girls', 'class2_obc_enr_girls', 'class3_obc_enr_girls', 'class4_obc_enr_girls', 'class5_obc_enr_girls', 'class6_obc_enr_girls', 'class7_obc_enr_girls', 'class8_obc_enr_girls', 'disabled_c1_boys', 'disabled_c2_boys', 'disabled_c3_boys', 'disabled_c4_boys', 'disabled_c5_boys', 'disabled_c6_boys', 'disabled_c7_boys', 'disabled_c8_boys', 'disabled_c1_girls', 'disabled_c2_girls', 'disabled_c3_girls', 'disabled_c4_girls', 'disabled_c5_girls', 'disabled_c6_girls', 'disabled_c7_girls', 'disabled_c8_girls', 'repeaters_c1_boys', 'repeaters_c2_boys', 'repeaters_c3_boys', 'repeaters_c4_boys', 'repeaters_c5_boys', 'repeaters_c6_boys', 'repeaters_c7_boys', 'repeaters_c8_boys', 'repeaters_c1_girls', 'repeaters_c2_girls', 'repeaters_c3_girls', 'repeaters_c4_girls', 'repeaters_c5_girls', 'repeaters_c6_girls', 'repeaters_c7_girls', 'repeaters_c8_girls', 'c5_appeared_boys', 'c5_appeared_girls', 'c5_passed_boys', 'c5_passed_girls', 'c5_passed_with_more_than_60_boys', 'c5_passed_with_more_than_60_girls', 'c7_appeared_boys', 'c7_appeared_girls', 'c7_passed_boys', 'c7_passed_girls', 'c7_passed_with_more_than_60_boys', 'c7_passed_with_more_than_60_girls']

                query = "ALTER TABLE {} \n".format(SchoolModel._meta.db_table)
                for c in columns[2:18]:
                    q = query + " ADD COLUMN {} integer;".format(c)
                    self.stdout.write(q)
                q = query + " ADD COLUMN total_boys integer;"
                self.stdout.write(q)
                q = query + " ADD COLUMN total_girls integer;"
                self.stdout.write(q)

                for row in reader:
                    school_code = int(row[columns.index('school_code')])

                    query = "UPDATE {} SET \n".format(SchoolModel._meta.db_table)
                    for c in columns[2:18]:
                        query += "\t{}='{}',\n".format(c, int(row[columns.index(c)]))
                    query += '\ttotal_boys = ({}),\n'.format('+'.join(columns[2:10]))
                    query += '\ttotal_girls = ({}),\n'.format('+'.join(columns[10:18]))
                    query = query.rstrip(',\n')
                    query += "\nWHERE school_code='{}';".format(school_code)
                    self.stdout.write(query)
Example #4
0
    def _search(self, params):
        # searches clusters and returns list
        result = dict()
        result['query'] = params
        ClusterModel = get_models(params.get('session', '10-11'), 'cluster')

        clusters = ClusterModel.objects.filter()

        if self.param_name_for_primary_key in params:
            clusters = clusters.filter(
                cluster_name__icontains=params.get(self.param_name_for_primary_key)
            )

        if 'block' in params and params.get('block', ''):
            clusters = clusters.filter(
                block_name__icontains=params.get('block'))

        result['total_count'] = clusters.count()

        if 'bbox' in params and params.get('bbox', ''):
            # &bbox="75.73974609375,12.5223906020692,79.4476318359375,13.424352095715332"
            # southwest_lng,southwest_lat,northeast_lng,northeast_lat
            # xmin,ymin,xmax,ymax
            coords_match = re.match(
                r"([\d\.]+),([\d\.]+),([\d\.]+),([\d\.]+)", params.get('bbox'))
            if coords_match and len(coords_match.groups()) == 4:
                bbox = map(lambda x: float(x), coords_match.groups())
                geom = Polygon.from_bbox(bbox)
                clusters = clusters.filter(centroid__contained=geom)

        if 'limit' in params and params.get('limit', 0):
            clusters = clusters[:params.get('limit')]

        print clusters.query
        temp_l = []
        for clst in clusters:
            temp_l.append(self._get_geojson(clst))

        result['results'] = FeatureCollection(temp_l)
        return result
Example #5
0
    def _getschools(self, params):
        # returns list of schools in a given parliament
        parliament_name = urllib.unquote_plus(params.get(self.param_name_for_primary_key))

        result = dict()
        result['query'] = params

        SchoolModel = get_models(params.get('session', '10-11'), 'school')

        temp_l = []
        school_api = School()
        schools = SchoolModel.objects.filter(
            parliament_name__iexact=parliament_name,
        )

        result['total_count'] = schools.count()

        for sch in schools:
            temp_l.append(school_api._get_geojson(sch))
        result['results'] = FeatureCollection(temp_l)

        return result
Example #6
0
    def _search(self, params):
        # searches districts and returns list
        result = dict()
        result['query'] = params
        DistrictModel = get_models(params.get('session', '10-11'), 'district')

        if len(params.keys()) > 1:
            districts = DistrictModel.objects.only(*self.only_fields).order_by(self.primary_key)

        if self.param_name_for_primary_key in params:
            districts = districts.filter(
                district__icontains=params.get(self.param_name_for_primary_key)
            )

        result['total_count'] = districts.count()

        if 'bbox' in params and params.get('bbox', ''):
            # &bbox="75.73909375,12.52220692,79.447659375,13.424352095"
            # southwest_lng,southwest_lat,northeast_lng,northeast_lat
            # xmin,ymin,xmax,ymax
            coords_match = re.match(
                r"([\d\.]+),([\d\.]+),([\d\.]+),([\d\.]+)", params.get('bbox'))
            if coords_match and len(coords_match.groups()) == 4:
                bbox = map(lambda x: float(x), coords_match.groups())
                geom = Polygon.from_bbox(bbox)
                districts = districts.filter(centroid__contained=geom)

        if 'limit' in params and params.get('limit', 0):
            districts = districts[:params.get('limit')]

        print districts.query
        temp_l = []
        for dist in districts:
            temp_l.append(self._get_geojson(dist))

        result['results'] = FeatureCollection(temp_l)
        return result
Example #7
0
    def _search(self, params):
        # searches blocks and returns list
        result = dict()
        result['query'] = params
        BlockModel = get_models(params.get('session', '10-11'), 'block')

        if len(params.keys()) > 1:
            blocks = BlockModel.objects.only(*self.only_fields)

        if self.param_name_for_primary_key in params:
            blocks = blocks.filter(
                block_name__icontains=params.get(self.param_name_for_primary_key)
            )

        result['total_count'] = blocks.count()

        if 'bbox' in params and params.get('bbox', ''):
            # &bbox="75.73974609375,12.3906020692,79.447631375,13.4243520332"
            # southwest_lng,southwest_lat,northeast_lng,northeast_lat
            # xmin,ymin,xmax,ymax
            coords_match = re.match(
                r"([\d\.]+),([\d\.]+),([\d\.]+),([\d\.]+)", params.get('bbox'))
            if coords_match and len(coords_match.groups()) == 4:
                bbox = map(lambda x: float(x), coords_match.groups())
                geom = Polygon.from_bbox(bbox)
                blocks = blocks.filter(centroid__contained=geom)

        if 'limit' in params and params.get('limit', 0):
            blocks = blocks[:params.get('limit')]

        # print blocks.query
        temp_l = []
        for blk in blocks:
            temp_l.append(self._get_geojson(blk))

        result['results'] = FeatureCollection(temp_l)
        return result
Example #8
0
    def _search(self, params):
        # searches pincodes and returns list
        result = dict()
        result['query'] = params
        AssemblyModel = get_models(params.get('session', '10-11'), 'assembly')

        if len(params.keys()) > 1:
            assemblies = AssemblyModel.objects.filter(centroid__isnull=False)

        if self.param_name_for_primary_key in params:
            assemblies = assemblies.filter(
                assembly_name__icontains=params.get(self.param_name_for_primary_key)
            )

        result['total_count'] = assemblies.count()

        if 'bbox' in params and params.get('bbox', ''):
            # &bbox="75.73909375,12.52220692,79.447659375,13.424352095"
            # southwest_lng,southwest_lat,northeast_lng,northeast_lat
            # xmin,ymin,xmax,ymax
            coords_match = re.match(
                r"([\d\.]+),([\d\.]+),([\d\.]+),([\d\.]+)", params.get('bbox'))
            if coords_match and len(coords_match.groups()) == 4:
                bbox = map(lambda x: float(x), coords_match.groups())
                geom = Polygon.from_bbox(bbox)
                assemblies = assemblies.filter(centroid__contained=geom)

        if 'limit' in params and params.get('limit', 0):
            assemblies = assemblies[:params.get('limit')]

        # print assemblies.query
        temp_l = []
        for mla in assemblies:
            temp_l.append(self._get_geojson(mla))
        result['results'] = FeatureCollection(temp_l)
        return result
Example #9
0
    def _getschools(self, params):
        # returns list of schools in a given pincode
        pincode = params.get('pincode')
        result = dict()
        result['query'] = params

        try:
            SchoolModel = get_models(params.get('session', '10-11'), 'school')

            temp_l = []
            school_api = School()
            schools = SchoolModel.objects.filter(
                pincode__iexact=pincode,
            )

            result['total_count'] = schools.count()

            for sch in schools:
                temp_l.append(school_api._get_geojson(sch))
            result['results'] = FeatureCollection(temp_l)

        except (SchoolModel.DoesNotExist, Exception) as e:
            result['error'] = str(e)
        return result
Example #10
0
    def _getblocks(self, params):
        # returns list of blocks in a given district
        name = urllib.unquote_plus(params.get('name'))
        result = dict()
        result['query'] = params

        try:
            BlockModel = get_models(params.get('session', '10-11'), 'block')

            temp_l = []
            block_api = Block()
            blocks = BlockModel.objects.filter(
                district__iexact=name,
            )

            result['total_count'] = blocks.count()

            for sch in blocks:
                temp_l.append(block_api._get_geojson(sch))
            result['results'] = FeatureCollection(temp_l)

        except (BlockModel.DoesNotExist, Exception) as e:
            result['error'] = str(e)
        return result
Example #11
0
    def _getclusters(self, params):
        # returns list of clusters in a given district
        name = urllib.unquote_plus(params.get('name'))
        result = dict()
        result['query'] = params

        try:
            ClusterModel = get_models(params.get('session', '10-11'), 'cluster')

            temp_l = []
            cluster_api = Cluster()
            clusters = ClusterModel.objects.filter(
                district__iexact=name,
            )

            result['total_count'] = clusters.count()

            for sch in clusters:
                temp_l.append(cluster_api._get_geojson(sch))
            result['results'] = FeatureCollection(temp_l)

        except (ClusterModel.DoesNotExist, Exception) as e:
            result['error'] = str(e)
        return result
Example #12
0
    def get(self, *args, **kwargs):
        school_api = olap_entities.School()
        params = self.request.GET
        results = []
        json_results = ''

        query = params.get('q')
        session = params.get('filters[academic_year]')
        if session not in settings.VALID_SESSIONS:
            raise ValueError('Session not valid')

        SchoolModel, ClusterModel, BlockModel, DistrictModel, PincodeModel, AssemblyModel, ParliamentModel = get_models(session, "all")

        schools = SchoolModel.objects.filter(
            Q(school_name__icontains=query) | Q(school_code__icontains=query)
        ).order_by('school_name')[:3]

        if schools.count() > 0:
            temp_d = {
                'text': 'Schools',
                'children': []
            }
            for school in schools:
                feature = {}
                if school.centroid is not None:
                    feature = school_api._get_geojson(school)

                temp_d['children'].append({
                    'type': 'school',
                    'id': school.school_code,
                    'text': school.school_name,
                    # 'centroid': [school.centroid.y, school.centroid.x] if school.centroid is not None else []
                    'feature': geojson_dumps(feature)
                })
            results.append(temp_d)

        clusters = ClusterModel.objects.filter(cluster_name__icontains=query).order_by('cluster_name')[:3]
        if clusters.count() > 0:
            temp_d = {
                'text': 'Clusters',
                'children': []
            }
            for cluster in clusters:
                temp_d['children'].append({
                    'type': 'cluster',
                    'id': cluster.cluster_name,
                    'text': cluster.cluster_name,
                })
            results.append(temp_d)

        blocks = BlockModel.objects.filter(block_name__icontains=query).order_by('block_name')[:3]
        if blocks.count() > 0:
            temp_d = {
                'text': 'Blocks',
                'children': []
            }
            for block in blocks:
                temp_d['children'].append({
                    'type': 'block',
                    'id': block.block_name,
                    'text': block.block_name,
                })
            results.append(temp_d)

        districts = DistrictModel.objects.filter(district__icontains=query).order_by('district')[:3]
        if districts.count() > 0:
            temp_d = {
                'text': 'Ed. Dept. Districts',
                'children': []
            }
            for district in districts:
                temp_d['children'].append({
                    'type': 'district',
                    'id': district.district,
                    'text': district.district,
                })
            results.append(temp_d)

        pincodes = PincodeModel.objects.filter(pincode__icontains=query).order_by('pincode')[:3]
        if pincodes.count() > 0:
            temp_d = {
                'text': 'Pincodes',
                'children': []
            }
            for pincode in pincodes:
                temp_d['children'].append({
                    'type': 'pincode',
                    'id': pincode.pincode,
                    'text': str(pincode.pincode),
                })
            results.append(temp_d)

        assemblies = AssemblyModel.objects.filter(assembly_name__icontains=query).order_by('assembly_name')[:3]
        if assemblies.count() > 0:
            temp_d = {
                'text': 'Assembly Constituencies',
                'children': []
            }
            for assembly in assemblies:
                temp_d['children'].append({
                    'type': 'assembly',
                    'id': assembly.assembly_name,
                    'text': str(assembly.assembly_name),
                })
            results.append(temp_d)

        parliaments = ParliamentModel.objects.filter(parliament_name__icontains=query).order_by('parliament_name')[:3]
        if parliaments.count() > 0:
            temp_d = {
                'text': 'Parliamentary Constituencies',
                'children': []
            }
            for parliament in parliaments:
                temp_d['children'].append({
                    'type': 'parliament',
                    'id': parliament.parliament_name,
                    'text': str(parliament.parliament_name),
                })
            results.append(temp_d)

        json_results = json.dumps(results)
        return self.get_json_response(json_results)
Example #13
0
    def _search(self, params):
        # This seaches all the base models, depending on the session and retuns
        # list of schools
        result = dict()
        result['query'] = params
        SchoolModel = get_models(params.get('session', '10-11'), 'school')

        if len(params.keys()) > 1:
            schools = SchoolModel.objects.only(*self.only_fields)

        if 'name' in params and params.get('name', ''):
            schools = schools.filter(school_name__icontains=params.get('name'))

        if 'cluster' in params and params.get('cluster', ''):
            schools = schools.filter(
                cluster_name__icontains=params.get('cluster'))

        if 'block' in params and params.get('block', ''):
            schools = schools.filter(
                block_name__icontains=params.get('block'))

        if 'district' in params and params.get('district', ''):
            schools = schools.filter(
                district__icontains=params.get('district'))

        if 'limit' in params and params.get('limit', 0):
            schools = schools[:params.get('limit')]

        if 'area' in params and params.get('area', ''):
            schools = schools.filter(
                rural_urban=search_choices(AREA, params.get('area').title())
            )

        if 'management' in params and params.get('management', ''):
            if params.get('management') == 'govt':
                schools = schools.filter(
                    sch_management__in=[1, 7]
                )
            elif params.get('management') == 'pvt':
                schools = schools.exclude(
                    sch_management__in=[1, 7]
                )

        if 'f' in params and params.get('f', ''):
            f = params.get('f')
            f = json.loads(urllib2.unquote(f).decode('utf8'))

            for filt in f.get('facilities', []):
                if filt == 'repair':
                    schools = schools.filter(
                        classrooms_require_minor_repair=search_choices(YESNO, 'Yes'),
                        classrooms_require_major_repair=search_choices(YESNO, 'Yes')
                    )
                elif filt == 'toilet':
                    schools = schools.filter(
                        toilet_common=0,
                        toilet_boys=0,
                        toilet_girls=0
                    )
                elif filt == 'toilet_for_girls':
                    schools = schools.filter(
                        toilet_girls=0
                    )
                elif filt == 'electricity':
                    schools = schools.filter(
                        electricity=search_choices(YESNO, 'No')
                    )
                elif filt == 'secure_wall':
                    schools = schools.exclude(
                        boundary_wall__in=[
                            search_choices(BOUNDARY_WALL, "Pucca"),
                            search_choices(BOUNDARY_WALL, "Barbed wire fencing"),
                        ]
                    )
                elif filt == 'library':
                    schools = schools.filter(
                        library_yn=search_choices(YESNO, 'No')
                    )
                elif filt == 'ramp':
                    schools = schools.filter(
                        ramps=search_choices(YESNO, 'No')
                    )
                elif filt == 'blackboard':
                    schools = schools.filter(
                        blackboard=search_choices(YESNO, 'No')
                    )
                elif filt == 'playground':
                    schools = schools.filter(
                        playground=search_choices(YESNO, 'No')
                    )
                elif filt == 'drinking_water':
                    schools = schools.filter(
                        drinking_water=search_choices(YESNO, 'No')
                    )

        result['total_count'] = schools.count()

        if 'bbox' in params and params.get('bbox', ''):
            # &bbox="75.73974609375,12.5223906020692,79.4476318359375,13.424352095715332"
            # southwest_lng,southwest_lat,northeast_lng,northeast_lat
            # xmin,ymin,xmax,ymax
            coords_match = re.match(
                r"([\d\.]+),([\d\.]+),([\d\.]+),([\d\.]+)", params.get('bbox'))
            if coords_match and len(coords_match.groups()) == 4:
                bbox = map(lambda x: float(x), coords_match.groups())
                geom = Polygon.from_bbox(bbox)
                schools = schools.filter(centroid__contained=geom)

        print schools.query
        temp_l = []
        for sch in schools:
            temp_l.append(self._get_geojson(sch))
        result['results'] = FeatureCollection(temp_l)
        return result