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)
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
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
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
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
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
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
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
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
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)
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