예제 #1
0
 def get(self, uuid):
     """ Query specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     manuals_instance = ManualsModel.query.get_or_404(uuid)
     manuals_dump = ManualsSchema().dump(manuals_instance)
     return pretty_response(200, manuals_dump)
예제 #2
0
 def put(self, uuid):
     """ Update specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     blockset_instance = BlocksetModel.query.get_or_404(uuid)
     jsondata = request.get_json()
     try:
         coordinates = find_coordinates(jsondata.get('description', ''))
         if not coordinates:
             return pretty_response(40001)
         BlocksetSchema().load(jsondata,
                               partial=(
                                   "title",
                                   "description",
                               ),
                               unknown=EXCLUDE)
         for key, val in jsondata.items():
             setattr(blockset_instance, key, val)
         blockset_instance.coordinates = json.dumps(coordinates)
         blockset_instance.centroid = json.dumps(find_centroid(coordinates))
         blockset_instance.area = calculate_area(coordinates)
         blockset_instance.updatetime = datetime.now()
         blockset_instance.update()
         blockset_dump = BlocksetSchema().dump(blockset_instance)
         return pretty_response(200, blockset_dump)
     except ValidationError as e:
         current_app.logger.error(e.messages)
         return pretty_response(40003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(50001)
예제 #3
0
 def get(self):
     """ Query all instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     users_list = UsersModel.query.all()
     users_dump = UsersSchema(many=True).dump(users_list)
     return pretty_response(200, users_dump)
예제 #4
0
 def get(self, uuid):
     """ Query specific instance """
     if current_identity.roless not in ['super'] and \
             uuid != current_identity.id:
         return pretty_response(403)
     users_instance = UsersModel.query.get_or_404(uuid)
     users_dump = UsersSchema().dump(users_instance)
     return pretty_response(200, users_dump)
예제 #5
0
 def get(self, uuid):
     """ Query specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     dataset_instance = DatasetModel.query.get_or_404(uuid)
     dataset_dump = DatasetSchema().dump(dataset_instance)
     result = fetch_collection('T' + dataset_instance.uuid, [])
     dataset_dump['data'] = result
     return pretty_response(200, dataset_dump)
예제 #6
0
 def delete(self, uuid):
     """ Delete specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     blockset_instance = BlocksetModel.query.get_or_404(uuid)
     try:
         blockset_instance.delete(blockset_instance)
         return pretty_response(20003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         pretty_response(50001)
예제 #7
0
 def get(self):
     """ Query all instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     if request.args.get('title'):
         manuals_list = ManualsModel.query.filter_by(
             title=request.args.get('title')).order_by("createtime").all()
     else:
         manuals_list = ManualsModel.query.order_by("createtime").all()
     manuals_dump = ManualsSchema(many=True).dump(manuals_list)
     return pretty_response(200, manuals_dump)
예제 #8
0
 def get(self):
     """ Query all instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     if request.args.get('opt_key'):
         options_list = OptionsModel.query.filter_by(
             opt_key=request.args.get('opt_key')).all()
     else:
         options_list = OptionsModel.query.all()
     options_dump = OptionsSchema(many=True).dump(options_list)
     return pretty_response(200, options_dump)
예제 #9
0
 def get(self, uuid):
     """ Query specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     blockset_instance = BlocksetModel.query.get_or_404(uuid)
     # print(json.loads(blockset_instance.centroid))
     blockset_dump = BlocksetSchema().dump(blockset_instance)
     blockset_dump['centroid'] = json.loads(blockset_instance.centroid)
     blockset_dump['coordinates'] = json.loads(
         blockset_instance.coordinates)
     print(blockset_dump)
     return pretty_response(200, blockset_dump)
예제 #10
0
 def get(self):
     """ Query all instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     title = request.args.get('title', '')
     page = request.args.get('page', 1, type=int)
     per_page = request.args.get('per_page', 10, type=int)
     paginate = DatasetModel.query.filter(DatasetModel.title.like('%' + title + '%')).paginate(
         page, per_page, max_per_page=100)
     data = paginate_parse(paginate)
     data['items'] = DatasetSchema(many=True).dump(paginate.items)
     return pretty_response(200, data)
예제 #11
0
 def put(self, uuid):
     """ Update specific instance """
     dataset_instance = DatasetModel.query.get_or_404(uuid)
     try:
         jsondata = request.get_json()
         DatasetSchema().load(jsondata, unknown=EXCLUDE)
         for key, val in jsondata.items():
             setattr(dataset_instance, key, val)
         dataset_instance.updatetime = datetime.now()
         dataset_instance.update()
         dataset_dump = DatasetSchema().dump(dataset_instance)
         return pretty_response(200, dataset_dump)
     except ValidationError as e:
         current_app.logger.error(e.messages)
         return pretty_response(40003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(50001)
예제 #12
0
 def put(self, uuid):
     """ Update specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     manuals_instance = ManualsModel.query.get_or_404(uuid)
     try:
         jsondata = request.get_json()
         ManualsSchema().load(jsondata)
         for key, val in jsondata.items():
             setattr(manuals_instance, key, val)
         manuals_instance.updatetime = datetime.now()
         manuals_instance.update()
         manuals_dump = ManualsSchema().dump(manuals_instance)
         return pretty_response(200, manuals_dump)
     except ValidationError as e:
         current_app.logger.error(e.messages)
         return pretty_response(40003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(50001)
예제 #13
0
 def post(self):
     """ Insert multi-instances """
     jsondata = request.get_json()
     if not jsondata or jsondata['username'] is None:
         return pretty_response(40001)
     if UsersModel.query.filter_by(username=jsondata['username']).first():
         return pretty_response(40002)
     try:
         users_instance = UsersSchema().load(jsondata)
         users_instance = UsersModel(
             jsondata['username'], jsondata['password'])
         users_instance.add(users_instance)
         users_dump = UsersSchema().dump(users_instance)
         return pretty_response(200, users_dump)
     except ValidationError as e:
         current_app.logger.error(e.messages)
         return pretty_response(40003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(50001)
예제 #14
0
    def post(self):
        """ Insert multi-instances """
        if current_identity.roles not in ['super']:
            return pretty_response(403)
        jsondata = request.get_json()
        if BlocksetModel.query.filter_by(
                title=jsondata.get('title', '')).first():
            return pretty_response(40002)
        try:
            coordinates = find_coordinates(jsondata.get('description', ''))
            if not coordinates:
                return pretty_response(40001)

            blockset_instance = BlocksetSchema().load(jsondata,
                                                      unknown=EXCLUDE)
            blockset_instance.coordinates = json.dumps(coordinates)
            blockset_instance.centroid = json.dumps(find_centroid(coordinates))
            blockset_instance.area = calculate_area(coordinates)
            blockset_instance.add(blockset_instance)
            blockset_dump = BlocksetSchema().dump(blockset_instance)
            return pretty_response(200, blockset_dump)
        except ValidationError as e:
            current_app.logger.error(e.messages)
            return pretty_response(40003)
        except SQLAlchemyError as e:
            current_app.logger.error(e)
            return pretty_response(50001)
예제 #15
0
 def get(self):
     """ Query specific instance """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     options_instance = None
     try:
         if request.args.get('opt_key'):
             options_instance = OptionsModel.query.filter(
                 OptionsModel.opt_key == request.args.get(
                     'opt_key')).first()
         else:
             return StandardResponse(400, 1, u'Invalid Request Parameters')
     except Exception, e:
         return StandardResponse(500, 1, u'SQLAlchemy Error')
예제 #16
0
 def put(self):
     """ Update multi-instances """
     blocksets = BlocksetModel.query.all()
     point_pool = []
     for blockset in blocksets:
         coordinates_temp = []
         coordinates = json.loads(blockset.coordinates)
         for coordinate in coordinates:
             aggregate_flag = False
             for point in point_pool:
                 if abs(coordinate.get('lng') -
                        point.get('lng')) < 0.001 and abs(
                            coordinate.get('lat') -
                            point.get('lat')) < 0.001:
                     coordinates_temp.append(point)
                     aggregate_flag = True
                     break
             if not aggregate_flag:
                 coordinates_temp.append(coordinate)
                 point_pool.append(coordinate)
         blockset.coordinates = json.dumps(coordinates_temp)
         blockset.update()
     return pretty_response(200)
예제 #17
0
 def post(self):
     """ Insert multi-instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     jsondata = request.get_json()
     if not jsondata or 'title' not in jsondata:
         return pretty_response(40001)
     if ManualsModel.query.filter_by(title=jsondata['title']).first():
         return pretty_response(40002)
     try:
         manuals_instance = ManualsSchema().load(jsondata)
         manuals_instance.add(manuals_instance)
         manuals_dump = ManualsSchema().dump(manuals_instance)
         return pretty_response(200, manuals_dump)
     except ValidationError as e:
         current_app.logger.error(e.messages)
         return pretty_response(40003)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(50001)
예제 #18
0
 def post(self):
     """ Insert multi-instances """
     if current_identity.roles not in ['super']:
         return pretty_response(403)
     jsondata = request.get_json()
     if not jsondata or 'opt_key' not in jsondata:
         return pretty_response(400)
     if OptionsModel.query.filter_by(opt_key=jsondata['opt_key']).first():
         return pretty_response(400)
     try:
         options_instance, errors = OptionsSchema().load(jsondata)
         if errors:
             current_app.logger.error(errors)
             return pretty_response(400)
         options_instance.add(options_instance)
         options_dump, errors = OptionsSchema().dump(options_instance)
         return pretty_response(200, options_dump)
     except SQLAlchemyError as e:
         current_app.logger.error(e)
         return pretty_response(500)
예제 #19
0
    def post(self):
        """ Insert multi-instances """
        if current_identity.roles not in ['super']:
            return pretty_response(403)
        jsondata = request.get_json()
        if DatasetModel.query.filter_by(title=jsondata['title']).first():
            return pretty_response(40002)
        headers = jsondata.get('header', [])
        catalog = jsondata.get('catalog', None)
        if '数值' not in headers \
                or (catalog == 'block' and '板块' not in headers) \
                or (catalog == 'point' and '标题' not in headers):
            return pretty_response(40001)
        try:
            dataset_instance = DatasetSchema().load(jsondata, unknown=EXCLUDE)
            dataset_instance.add(dataset_instance)

            blocksets = BlocksetModel.query.all()
            data = json.loads(
                re.sub(r'[\s+]', '', json.dumps(jsondata.get('data', []))))
            if catalog == 'block':
                # 导入板块数据
                t = threading.Thread(target=analysis_dataset_block, args=(
                    'T' + dataset_instance.uuid, data, blocksets, headers))
                t.start()
            else:
                # 导入集合数据
                t = threading.Thread(target=analysis_dataset, args=(
                    'T' + dataset_instance.uuid, data, blocksets, headers))
                t.start()

            dataset_dump = DatasetSchema().dump(dataset_instance)
            return pretty_response(200, dataset_dump)
        except ValidationError as e:
            current_app.logger.error(e.messages)
            return pretty_response(40003)
        except SQLAlchemyError as e:
            current_app.logger.error(e)
            return pretty_response(50001)
예제 #20
0
 def delete(self):
     """ Batch-delete instances """
     return pretty_response(405)
예제 #21
0
 def put(self):
     """ Update multi-instances """
     return pretty_response(405)
예제 #22
0
    def post(self, uuid):
        """ Update specific instance """
        if current_identity.roles not in ['super']:
            return pretty_response(403)
        dataset_instance = DatasetModel.query.get_or_404(uuid)

        jsondata = request.get_json()
        if not jsondata:
            return pretty_response(40001)

        catalog = jsondata.get('catalog', '')
        match = jsondata.get('match', {})

        pipeline = []
        aggregate_items = []
        aggregate_max = 0
        if catalog == 'block':
            pipeline = [{
                '$match': match
            }, {
                '$group': {'_id': "$板块", 'value': {dataset_instance.mode: '$数值'}}
            }]
            result = fetch_collection('T' + dataset_instance.uuid, pipeline)
            blockset_list = BlocksetModel.query.all()
            for blockset in blockset_list:
                temp = {
                    'title': blockset.title,
                    'area': blockset.area,
                    'centroid': json.loads(blockset.centroid),
                    'coordinates': json.loads(blockset.coordinates),
                    'org_value': 0,
                    'value': 0,
                }
                for item in result:
                    if blockset.title == item.get('_id', ''):
                        if not item.get('value', None):
                            break
                        item_value = item.get('value', 0)
                        temp['org_value'] = item_value
                        temp['value'] = round(
                            item_value / float(blockset.area), 4) if dataset_instance.inc_area else item_value
                        if temp['value'] > aggregate_max:
                            aggregate_max = temp['value']
                        break
                aggregate_items.append(temp)
        else:
            pipeline = [{
                '$match': match
            }]
            result = fetch_collection('T' + dataset_instance.uuid, pipeline)
            for item in result:
                aggregate_item = {
                    'title': item.get('标题', ''),
                    'address': item.get('地址', ''),
                    'lng': item.get('经度', ''),
                    'lat': item.get('纬度', ''),
                    'value': item.get('数值', 0),
                }
                if aggregate_item['value'] > aggregate_max:
                    aggregate_max = aggregate_item['value']
                aggregate_items.append(aggregate_item)
        return pretty_response(200, {'max': aggregate_max, 'items': aggregate_items})
예제 #23
0
 def post(self):
     """ Update specific instance """
     return pretty_response(405)
예제 #24
0
 def get(self):
     """ Query specific instance """
     users_dump = UsersSchema().dump(current_identity)
     return pretty_response(200, users_dump)