Пример #1
0
    def delete(self):
        """
            Deletes a post or account
        """
        data = administrator_action_parser.parse_args()

        if (data["type"] == "account"):
            if UserModel.find_by_email(data["identifier"]):
                UserModel.find_by_email(data["identifier"]).delete_from_db()
                return {
                    "status": "OK",
                    "message": "User deleted"
                    }
            return {
                    "status": "Error",
                    "message": "User not found"
                    }
        elif (data["type"] == "event"):
            if EventModel.find_by_title(data["identifier"]):
                EventModel.find_by_title(data["identifier"]).delete_from_db()
                return {
                    "status": "OK",
                    "message": "Event deleted"
                    }
            return {
                    "status": "Error",
                    "message": "Event not found"
                    }
        return {
                "status": "Error",
                "message": "Invalid type"
                }
Пример #2
0
    def post(self):

        parser = reqparse.RequestParser(
        )  # create parameters parser from request

        # define al input parameters need and its type
        parser.add_argument('name',
                            type=str,
                            required=True,
                            help="This field cannot be left blank")
        parser.add_argument('place', type=str)
        parser.add_argument('city', type=str)
        parser.add_argument('date', type=str)
        parser.add_argument('price', type=int)
        parser.add_argument('total_available_tickets', type=int)

        data = parser.parse_args()

        for event in EventModel.query.all():
            if (data['name'] == event.name):
                return {
                    'message': 'Event {} already exists'.format(event.name)
                }, 404

        new_event = EventModel(data['name'], data['place'], data['city'],
                               data['date'], data['price'],
                               data['total_available_tickets'])

        new_event.save_to_db()

        return new_event.json(), 200
Пример #3
0
    def put(self, id):
        event = EventModel.find_by_id(id)
        if event:
            parser = reqparse.RequestParser(
            )  # create parameters parser from request
            # define al input parameters need and its type
            parser.add_argument(n.NM,
                                type=str,
                                required=True,
                                help="Name of the event")
            parser.add_argument(
                n.PLC,
                type=str,
                required=True,
                help="Place or area where the event takes place")
            parser.add_argument(n.CTY,
                                type=str,
                                required=True,
                                help="City that holds the event")
            parser.add_argument(n.DATE,
                                type=str,
                                required=True,
                                help="Date when the event takes place")
            parser.add_argument(n.PRC,
                                type=int,
                                required=True,
                                help="Weighted average price of the event")
            parser.add_argument(
                n.TAT,
                type=int,
                required=True,
                help="Number of people that can attend the event")
            data = parser.parse_args()

            with lock.lock:
                if data[n.PRC] < 0:
                    return {n.MSG: "Negative price not allowed"}, 400

                if data[n.TAT] < 0:
                    return {
                        n.MSG: "Negative number of tickets not possible"
                    }, 400

                aux_event = EventModel.find_by_uniqueness(
                    data[n.NM], data[n.DATE], data[n.CTY])
                if aux_event and aux_event.id != id:
                    return {
                        n.MSG: "Event already in the data base with another ID"
                    }, 409

                try:
                    event.modify_from_db(data[n.NM], data[n.PLC], data[n.CTY],
                                         data[n.DATE], data[n.PRC],
                                         data[n.TAT])
                    return event.json(), 200
                except:
                    return {n.MSG: "Error Description"}, 500

        else:
            return {n.MSG: "Event not found"}, 404
Пример #4
0
    def post(self, group_id):
        data = Event.parser.parse_args()

        event = EventModel(data['name'], data['description'], data['location'],
                           data['date_time'], data['is_private'], group_id)

        event.save_to_db()

        return event.json(), 201
    def post(self, id):
        data = self.parser.parse_args()
        event = EventModel(data.name, data.startdate, data.enddate, data.org,
                           data.place, get_jwt_identity())
        try:
            event.save_to_db()
        except:
            return {"message": "An error occurred creating the event."}, 500

        return event.json(), 201
Пример #6
0
 def get(self, name):
     args = Event.parser.parse_args()
     if safe_str_cmp(name, "events"):
         event = EventModel.find_by_timeline(**args)
         if event:
             return {'events': [x.json() for x in event]}
     else:
         event = EventModel.find_by_name(name)
         if event:
             return {'events': event.json()}
         #return {'events': [x.json() for x in event]}
     return {'message': 'Event not found'}, 404
Пример #7
0
 def get(cls, **kwargs):
     if '_id' in kwargs:
         # get occurrence by id
         event = EventModel.find_by_id(kwargs['_id'])
         if event:
             return event_schema.dump(event), 200
         else:
             return {"message": "Event not found."}, 404
     else:
         event = EventModel.find_by_name(kwargs['name'])
         if event:
             return event_schema.dump(event), 200
         else:
             return {"message": "Event not found."}, 404
    def delete(cls):
        user_id = get_jwt_identity()
        user = UserModel.find_by_id(ObjectId(user_id))
        if not user:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "Current user not found"
            }, 404

        user.delete_from_db()

        events_deleted = 0
        events: List[EventModel] = EventModel.find_all_by_admin_id(
            admin_id=user.id)
        for event in events:
            if len(
                    list(
                        filter(
                            lambda participant: participant.role == Role.ADMIN,
                            event.participants))) == 1:
                event.delete()
                events_deleted += 1

        message = "User deleted" if events_deleted < 1 else f"User deleted with {events_deleted} event[s] with no longer admin left"
        return {"status": Status.SUCCESS, "message": message}, 200
Пример #9
0
 def get(cls, **kwargs):
     # Statistics for a specific event
     if 'event_id' in kwargs:
         event = EventModel.find_by_id(kwargs['event_id'])
         if not event:
             return {"message": "Event not found."}, 404
         else:
             return cls.build_event_response(event), 200
     # Statistics for a specific ticket type
     elif 'ticket_type' in kwargs:
         if not valid_ticket_type(kwargs['ticket_type']):
             return {
                 'message':
                 'That is not a valid ticket type. '
                 'Please choose between {}, {} or {}.'.format(*ticket_types)
             }, 400
         kwargs['ticket_type'] = convert_ticket_type(kwargs['ticket_type'])
         return cls.build_ticket_response(kwargs['ticket_type'])
     else:
         # Statistics for every event in the database
         response = {'events': []}
         for event in EventModel.query.all():
             response['events'].append({
                 event.name: {
                     'id': event.id,
                     **cls.build_event_response(event)
                 }
             })
         return response
Пример #10
0
    def post(self, id_event):
        event = EventModel.find_by_id(id_event)

        if event:

            parser = reqparse.RequestParser(
            )  # create parameters parser from request
            # define al input parameters need and its type
            parser.add_argument(n.NM,
                                type=str,
                                required=True,
                                help="Artistic name of the artist")
            parser.add_argument(n.CTRY,
                                type=str,
                                required=True,
                                help="Country nationality of the artist")
            parser.add_argument(n.GNR,
                                type=str,
                                required=True,
                                help="Main genre of the artist")
            data = parser.parse_args()

            with lock.lock:
                artist = ArtistModel.find_by_name(data[n.NM])

                if artist and artist.country == data[
                        n.CTRY] and artist.genre == data[n.GNR]:
                    event.artists.append(artist)
                    event.save_to_db()
                    return event.json(), 200
                else:
                    return {n.MSG: "Artist not found"}, 409

        else:
            return {n.MSG: "Event not found"}, 404
Пример #11
0
 def get(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             return {'event': event.json()}, 200
         else:
             return {"message": "Not found"}, 404
Пример #12
0
 def delete(self, id):
     """deletes an event by name"""
     event = EventModel.find_event_by_id(id)
     if event:
         event.delete_from_db()
         return {"message": "Event deleted"}
     return {"message": "Event not found"}
Пример #13
0
    def post(cls, event_id: str):

        event: EventModel = EventModel.find_by_id(ObjectId(event_id))

        current_user_id = get_jwt_identity()

        for participant in event.participants:
            if str(current_user_id) == str(participant.user_id):
                if participant.role == Role.ADMIN:
                    song_ids = RecommendationAlgorithmSVD.run(event_id)
                    event.playlist = song_ids
                    event.save_to_db()

                    songs: List[SongModel] = SongModel.find_all_by_ids(
                        song_ids)
                    return {
                        "status": Status.SUCCESS,
                        "event": event.json_with_playlist(songs)
                    }, 200
                else:
                    return {
                        "status": Status.NO_ADMIN,
                        "message": "User is not an admin"
                    }, 403

        return {
            "status": Status.USER_NOT_FOUND,
            "message": "User is not event participant"
        }, 403
Пример #14
0
 def post(self, **kwargs):
     reservation_json = request.get_json()
     if 'reservation_id' not in kwargs:
         if not valid_ticket_type(reservation_json['ticket_type']):
             return {
                 'message':
                 'That is not a valid ticket type. '
                 'Please choose between {}, {} or {}.'.format(*ticket_types)
             }, 400
         reservation_json['ticket_type'] = convert_ticket_type(
             reservation_json['ticket_type'])
         user_id = get_jwt_identity()
         reservation_json['user_id'] = user_id
         event = EventModel.find_by_id(reservation_json['event_id'])
         if event:
             if not event.check_availability(
                     reservation_json['ticket_type']):
                 return {
                     'message':
                     'We are sorry to inform that {} '
                     'tickets are sold out.'.format(
                         reservation_json['ticket_type'])
                 }, 200
         else:
             return {'message': 'That is not a valid event'}, 404
         if not validate_request(reservation_json, ReservationModel):
             return {
                 'message':
                 'Request invalid, please re-check your parameters.'
             }, 400
         # Unpack the request into a new reservation model
         reservation = ReservationModel(**reservation_json)
         # It is needed to remove one available ticket, since now it is reserved
         reservation.update_event()
         reservation.save_to_db()
         scheduler.add_job(reservation.update_ticket_amount,
                           'date',
                           id=reservation.id,
                           run_date=reservation.expire_at)
         return {"message": "Your reservation was successful."}, 201
     else:
         # Here the user is trying to pay for a reservation, since an ID was passed in the request
         reservation_json['reservation_id'] = kwargs['reservation_id']
         reservation = ReservationModel.find_by_id(kwargs['reservation_id'])
         if reservation:
             if reservation.expired:
                 return {
                     'message':
                     'Sorry, that reservation is already expired. Please make a new reservation and '
                     'pay after.'
                 }, 400
             reservation_json['reservation'] = reservation
             # Popping keys from the dictionary, since this dict will be passed on later to our payment gateway
             reservation_json.pop('reservation_id', None)
             return self.pay(**reservation_json)
         else:
             return {
                 "message": "That reservation was not found on the system."
             }, 404
Пример #15
0
 def delete(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             event.delete_from_db()
             return {n.MSG: "Event deleted successfully"}, 200
         else:
             return {n.MSG: "Event not found"}, 404
Пример #16
0
    def delete(self, event_id):
        event = EventModel.find_by_id(event_id)

        if event:
            event.delete_from_db()
            return {'message': 'Event deleted!'}, 200

        return {'message': 'Event with that ID not found.'}, 404
Пример #17
0
 def get(self, EventID):
     '''
     This method used to an event by a given ID
     '''
     event = EventModel.find_event(EventID)
     if event:
         return event.json()
     return {'message': 'event not found'}, 404
Пример #18
0
 def put(self, query):
     event = EventModel.find_by_id(query)
     if event:
         event = self.update_event(event)
     else:
         event = self.parse_to_new_event(query)
     event.save_to_db()
     return event.json()
Пример #19
0
 def delete(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             event.delete_from_db()
             return {'message': 'Event deleted'}, 200
         else:
             return {'message': "Event not found"}, 404
Пример #20
0
    def get(self):
        dic = {}
        date = request.args.get('date')
        if date:
            dic["date"] = date.split(',')
        adv_origin = request.args.get('adv_origin')
        if adv_origin:
            dic["adv_origin"] = adv_origin.split(',')
        adv_organization = request.args.get('adv_organization')
        if adv_organization:
            dic["adv_organization"] = adv_organization.split(',')
        adv_camp = request.args.get('adv_camp')
        if adv_camp:
            dic["adv_camp"] = adv_camp.split(',')
        target_sector = request.args.get('target_sector')
        if target_sector:
            dic["target_sector"] = target_sector.split(',')
        target_name = request.args.get('target_name')
        if target_name:
            dic["target_name"] = target_name.split(',')
        target_origin = request.args.get('target_origin')
        if target_origin:
            dic["target_origin"] = target_origin.split(',')
        reference = request.args.get('reference')
        if reference:
            dic["reference"] = reference.split(',')
        status = request.args.get('status')
        if status:
            dic["status"] = status.split(',')
        details = request.args.get('details')
        if details:
            dic["details"] = details.split(',')
        type = request.args.get('type')
        if type:
            dic["type"] = type.split(',')
        reporter = request.args.get('reporter')
        if reporter:
            dic["reporter"] = reporter.split(',')

        query = "SELECT * FROM data.Events WHERE "
        for k, v in dic.items():
            if len(v) == 1:
                query += f"{k} = '{v[0]}' AND "
            else:
                query += '('
                for value in v:
                    query += f"{k} = '{value}' OR "
                query = query[:-4]
                query += ") AND "
        query = query[:-5]

        sql_query = text(query)
        result = db.engine.execute(sql_query)
        events = [EventModel.find_by_id(row[0]).json() for row in result]
        headers = {'content-type': 'text/html'}

        return make_response(render_template("events.html", events=events),
                             200, headers)
Пример #21
0
    def put(cls, event_id: str):
        parser = reqparse.RequestParser()
        parser.add_argument('name', type=str, required=False)
        parser.add_argument('description', type=str, required=False)
        parser.add_argument('start_date', type=datetime.fromisoformat, required=False)
        parser.add_argument('end_date', type=datetime.fromisoformat, required=False)
        parser.add_argument('duration_time', type=int, required=False)
        parser.add_argument('image_url', type=str, required=False)
        data = parser.parse_args()

        if not ObjectId.is_valid(event_id):
            return {"status": Status.INVALID_FORMAT, "message": "Id is not valid ObjectId"}, 400

        current_userid = get_jwt_identity()
        current_user = UserModel.find_by_id(current_userid)
        if not current_user:
            return {"status": Status.USER_NOT_FOUND, "message": "Current user not found"}, 403

        event: EventModel = EventModel.find_by_id_and_admin_id(ObjectId(event_id), current_userid)
        if not event:
            return {"status": Status.NOT_FOUND, "message": "Event not found with admin as current user"}, 404

        if data['name']:
            if len(data['name']) < 3:
                return {"status": Status.INVALID_FORMAT, "message": "name must be at least 3 chars long"}, 400
            event.name = data['name']

        if data['description']:
            event.description = data['description']

        start_date: datetime = data['start_date']
        end_date: datetime = data['end_date']

        if start_date and end_date:
            if start_date > end_date:
                return {"status": Status.INVALID_DATA, "message": "End_date cannot be before start_date"}, 403
            event.start_date = start_date
            event.end_date = end_date
        elif end_date:
            if event.start_date and event.start_date > end_date:
                return {"status": Status.INVALID_DATA, "message": "End_date cannot be before start_date"}, 403
            event.end_date = end_date
        elif start_date:
            if event.end_date and event.end_date < start_date:
                return {"status": Status.INVALID_DATA, "message": "End_date cannot be before start_date"}, 403
            event.start_date = start_date

        duration_time = data['duration_time']
        if duration_time and duration_time < 0:
            return {"status": Status.INVALID_DATA, "message": "Duration_time cannot be less than 0"}, 403
        event.duration_time = duration_time

        if data['image_url']:
            event.image_url = data['image_url']

        event.save_to_db()

        return {"status": Status.SUCCESS, "event": event.json()}, 200
Пример #22
0
def rpc_push_job(exec_id, interface_id, job_id, server_host, port, params_value, server_dir, server_script, return_code,
                 status, date_format='%Y%m%d', run_date=''):
    """
    RPC分发任务
    1.替换$date变量
    :param exec_id: 执行id
    :param interface_id: 任务流id
    :param job_id: 任务id
    :param server_host: RPC执行服务器域名
    :param port: RPC执行服务器端口
    :param params_value: 参数值字符串
    :param server_dir: 脚本目录
    :param server_script: 运行脚本
    :param return_code: 状态返回码
    :param status: 任务状态
    :param date_format: 日期格式
    :param run_date: 数据日期
    :return: 
    """""
    try:
        # rpc分发任务
        client = Connection(server_host, port)
        # 任务参数中数据日期变量为T-1
        if not run_date:
            run_time = (date.today() + timedelta(days=-1)).strftime(date_format)
        else:
            run_time = run_date
        params = params_value.split(',') if params_value else []
        client.rpc.event_execute(
            exec_id=exec_id,
            interface_id=interface_id,
            job_id=job_id,
            server_dir=server_dir,
            server_script=server_script,
            return_code=return_code,
            params=[item if item != '$date' else run_time for item in params],
            status=status
        )
        client.disconnect()
        return ''
    except:
        err_msg = 'rpc连接异常: host: %s, port: %s' % (server_host, port)
        # 添加执行任务详情日志
        EventModel.add_event_exec_detail_job(db.etl_db, exec_id, interface_id, job_id, 'ERROR', server_dir,
                                             server_script, err_msg, 3)
        # 修改数据库, 分布式锁
        with MysqlLock(config.mysql.etl, 'event_lock_%s' % exec_id):
            # 修改执行详情表状态[失败]
            EventModel.update_event_exec_job_status(db.etl_db, exec_id, interface_id, job_id, 'failed')
            # 修改执行任务流状态[失败]
            EventModel.update_event_exec_interface_status(db.etl_db, exec_id, interface_id, -1)
            # 修改执行主表状态[失败]
            EventModel.update_event_execute_status(db.etl_db, exec_id, -1)
        log.error(err_msg, exc_info=True)
        return err_msg
Пример #23
0
    def put(self, EventID):
        '''
        This function is used to upate or add an event if it does 
        not exists, we will not go through input check or more details
        this is just an illstration basic project
        '''
        event = EventModel.find_event(EventID)

        if not event:
            # Same case as adding a new event
            data = Event.parser.parse_args()
            #** is used to unpack the dictionnnary
            event = EventModel(EventID, **data)
        # use this to update stop or tags
        else:
            data = Event.parser.parse_args()
            # you may check data compatiblity here
            if data['stop'] is not None: event.stop = data['stop']
            if data['tags']:
                # the format of tags: #tag1##tag2##tag3#
                # if tag exist or empty don't add it
                # you may set another rules of tag length, chars to remove...
                if data['tags'] not in event.tags.split('##'):
                    event.tags += f"#{data['tags']}#"
        try:
            event.add_event()
        except:
            return {'message': 'Server error when trying to update event'}, 500

        return event.json(), 200
Пример #24
0
    def post(cls, event_id: str):
        parser = reqparse.RequestParser()
        parser.add_argument('username', type=str, required=True)
        data = parser.parse_args()

        if not ObjectId.is_valid(event_id):
            return {
                "status": Status.INVALID_FORMAT,
                "message": "Id is not valid ObjectId"
            }, 400

        current_userid = get_jwt_identity()
        current_user = UserModel.find_by_id(ObjectId(current_userid))
        if not current_user:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "Current user not found"
            }, 403

        user_to_update = UserModel.find_by_username(data['username'])
        if not user_to_update:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "User you want to add not found"
            }, 403
        if user_to_update.id == current_user.id:
            return {
                "status": Status.INVALID_DATA,
                "message": "Cannot revoke admin to yourself"
            }, 403

        event = EventModel.find_by_id_and_admin_id(ObjectId(event_id),
                                                   current_user.id)
        if not event:
            return {
                "status": Status.NO_ADMIN,
                "message": "Event with admin as current user not found"
            }, 403

        participant_to_update: ParticipantModel = next(
            filter(
                lambda participant: participant.user_id == user_to_update.id,
                event.participants), None)
        if not participant_to_update:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "User you want to revoke admin is not in the event"
            }, 403

        participant_to_update.role = Role.MEMBER
        event.save()

        return {
            "status": Status.SUCCESS,
            "message": "Admin revoked",
            "participant": participant_to_update.json()
        }, 200
    def delete(self, id):
        event = EventModel.find_by_id(id)
        if event:
            if event.owner == get_jwt_identity():
                event.delete_from_db()
            else:
                return {'message': 'Non autorizzato'}, 403

        return {'message': 'Event deleted'}
Пример #26
0
    def delete(self, name):
        if safe_str_cmp(name, "events"):
            [event.delete_from_db() for event in EventModel.query.all()]
        else:
            event = EventModel.find_by_name(name)
            if event:
                event.delete_from_db()

        return {'message': 'Event deleted'}
Пример #27
0
    def post(cls, event_id: str):
        parser = reqparse.RequestParser()
        parser.add_argument('username', type=str, required=True)
        data = parser.parse_args()

        if not ObjectId.is_valid(event_id):
            return {
                "status": Status.INVALID_FORMAT,
                "message": "Id is not valid ObjectId"
            }, 400

        current_userid = get_jwt_identity()
        current_user = UserModel.find_by_id(ObjectId(current_userid))
        if not current_user:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "Current user not found"
            }, 403

        user_to_remove = UserModel.find_by_username(data['username'])
        if not user_to_remove:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "User you want to add not found"
            }, 403

        event = EventModel.find_by_id_and_admin_id(ObjectId(event_id),
                                                   current_user.id)
        if not event:
            return {
                "status": Status.USER_NOT_FOUND,
                "message": "Event with admin as current user not found"
            }, 403

        is_success = event.remove_participant(user_id=user_to_remove.id)
        if not is_success:
            return {
                "status": Status.ERROR,
                "message": "Some error occured"
            }, 400

        event.reload()
        if len(
                list(
                    filter(lambda participant: participant.role == Role.ADMIN,
                           event.participants))) == 0:
            event.delete()
            return {
                "status": Status.SUCCESS,
                "message": "Event removed because last admin was removed"
            }, 200

        return {
            "status": Status.SUCCESS,
            "message": "User removed from an event"
        }, 200
Пример #28
0
 def get(self, id):
     with lock.lock:
         event = EventModel.find_by_id(id)
         if event:
             artists = event.artists
             return {
                 'artists': list(map(lambda x: x.json(), artists))
             }, 200 if artists else 404
         else:
             return {'message': "Event not found"}, 404
Пример #29
0
 def json(self):
     event = EventModel.find_by_id(self.id_event)
     return {
         "Id": self.id_event,
         "Username": self.username,
         "Event_name": event.name,
         "Event_date": event.date,
         "Event_city": event.city,
         "Tickets_bought": self.tickets_bought
     }
Пример #30
0
    def test_event_model_with_blank_values(self):
        with self.assertRaises(ValueError):
            EventModel(
                title='',
                description=
                'Alexander Hamilton was born and spent part of his childhood in Charlestown.',
                occurred_on='1757-01-11')

        with self.assertRaises(ValueError):
            EventModel(title='Birth of a Legend',
                       description='',
                       occurred_on='1757-01-11')

        with self.assertRaises(ValueError):
            EventModel(
                title='',
                description=
                'Alexander Hamilton was born and spent part of his childhood in Charlestown.',
                occurred_on='')