def setUp(self):
     self.first_schedule = Schedule({
         'begin': '20/11/2016 13:00',
         'end': '20/11/2016 15:00'
     })
     self.second_schedule = Schedule({
         'begin': '20/11/2016 13:00',
         'end': '20/11/2016 16:00'
     })
Exemplo n.º 2
0
def download_and_deliver(self, user):
    try:
        user: User = jsonpickle.loads(user,
                                      classes=[User, User.REMOVED, Schedule])

        # Clear user db entry and downloads
        file_manager.remove_schedule(user.uid)
        if file_manager.does_path_exist(
                file_manager.get_user_download_path(user.uid)):
            file_manager.delete_user_file(user.uid)

        path = ''
        if user.deliver_voicenote:
            path = file_manager.download_user_file(user)

        # Update/create database entry for logging and management
        logger.debug('Scheduled time: %s' % user.REMOVED.scheduled_date)

        schedule_id = file_manager.create_db_schedule(user, path)

        schedule = file_manager.downloads_collection.find_one(
            {"_id": ObjectId(schedule_id)})
        schedule = Schedule(user, schedule['path'])

        user_json = jsonpickle.dumps(user)
        schedule_json = jsonpickle.dumps(schedule)
        deliver.apply_async(args=[user_json, schedule_json], queue='deliver')

        return user, schedule
    except SoftTimeLimitExceeded as e:
        self.retry(exc=e)
Exemplo n.º 3
0
    def add_schedule(self, new_schedule):
        if not hasattr(self, 'schedules'):
            self.schedules = []

        for schedule in self.schedules:
            if(Schedule(schedule).colides_with_other_schedule(new_schedule)):
                raise RoomAlreadyHasScheduleInGivenPeriodError()
                
        self.schedules.append(new_schedule.__dict__)
    def find(self, room_id, schedule_id):
        room = self.room_collection.find_one(
            {
                '_id': ObjectId(room_id),
                'schedules._id': ObjectId(schedule_id)
            }, {'schedules.$': 1})

        if not room or not 'schedules' in room:
            raise ScheduleNotFoundError()

        schedule = room['schedules'][0]
        return Schedule(schedule)
Exemplo n.º 5
0
    def create_db_schedule(self, user: User, path):
        # Create download_collection object for insertion into database
        schedule = Schedule(user, path)

        # Insert object into downloads_collection and log database id
        try:
            schedule_id = self.downloads_collection.insert_one(
                schedule.__dict__).inserted_id
            self.logger.info('Schedule inserted in database with ID ' +
                             str(schedule_id))
            return schedule_id
        except WriteError:
            self.logger.info('Entry exists for user %s & url %s' %
                             (user.uid, user.REMOVED.audio_url))
            return None
    def all(self, room_id, begin_at_or_after=None, begin_at_or_before=None):
        room = Room(self.room_service.find(room_id))
        if not begin_at_or_after and not begin_at_or_before:
            return room.schedules

        result = []
        for entry in room.schedules:
            schedule = Schedule(entry)
            if begin_at_or_after and schedule.begin.date() < begin_at_or_after:
                continue
            if begin_at_or_before and schedule.begin.date(
            ) > begin_at_or_before:
                continue
            result.append(schedule.__dict__)
        return result
Exemplo n.º 7
0
def create_schedule(title, participants, begin, end, room_id):
    schedule = Schedule(request.json)
    schedule_service.add(room_id, schedule)
    return (dumps({'message': 'Created Schedule'}), 201)