def register_web_hook(self, web_hook_dict, add_by_uid): """ register an web hook and send an initial keep alive event :param web_hook_dict: :param add_by_uid: :return: """ session = SessionManager.Session() try: web_hook = WebHook( name=web_hook_dict.get('name'), description=bleach.clean(web_hook_dict.get('description'), tags=self.ALLOWED_TAGS), url=web_hook_dict.get('url'), shared_secret=web_hook_dict.get('shared_secret'), created_by_uid=add_by_uid, permissions=web_hook_dict.get('permissions')) session.add(web_hook) session.commit() web_hook_id = str(web_hook.id) # send event via rpc rpc_request.send( 'initialize_web_hook', { 'web_hook_id': web_hook_id, 'web_hook_url': web_hook.url, 'shared_secret': web_hook.shared_secret }) return json_resp({'data': web_hook_id}) finally: SessionManager.Session.remove()
def register_web_hook(self, web_hook_dict, add_by_uid): """ register an web hook and send an initial keep alive event :param web_hook_dict: :param add_by_uid: :return: """ session = SessionManager.Session() try: web_hook = WebHook(name=web_hook_dict.get('name'), description=bleach.clean(web_hook_dict.get('description'), tags=self.ALLOWED_TAGS), url=web_hook_dict.get('url'), shared_secret=web_hook_dict.get('shared_secret'), created_by_uid=add_by_uid, permissions=web_hook_dict.get('permissions')) session.add(web_hook) session.commit() web_hook_id = str(web_hook.id) # send event via rpc rpc_request.send('initialize_web_hook', { 'web_hook_id': web_hook_id, 'web_hook_url': web_hook.url, 'shared_secret': web_hook.shared_secret }) return json_resp({'data': web_hook_id}) finally: SessionManager.Session.remove()
def add_web_hook_token(self, token_id, web_hook_id, user): session = SessionManager.Session() try: web_hook = session.query(WebHook).filter( WebHook.id == web_hook_id).one() web_hook_token = WebHookToken(web_hook_id=web_hook_id, user_id=user.id, token_id=token_id) session.add(web_hook_token) session.commit() method_args = { 'web_hook_id': web_hook_id, 'token_id': token_id, 'user_id': user.id, 'email': None } if web_hook.has_permission( WebHook.PERMISSION_EMAIL ) and user.email is not None and user.email_confirmed: method_args['email'] = user.email rpc_request.send('token_add', method_args) return json_resp({'message': 'ok'}) except NoResultFound: raise ClientError('web hook not existed') finally: SessionManager.Session.remove()
def add_web_hook_token(self, token_id, web_hook_id, user): session = SessionManager.Session() try: web_hook = session.query(WebHook).filter(WebHook.id == web_hook_id).one() web_hook_token = WebHookToken(web_hook_id=web_hook_id, user_id=user.id, token_id=token_id) session.add(web_hook_token) session.commit() method_args = { 'web_hook_id': web_hook_id, 'token_id': token_id, 'user_id': user.id, 'email': None } if web_hook.has_permission(WebHook.PERMISSION_EMAIL) and user.email is not None and user.email_confirmed: method_args['email'] = user.email rpc_request.send('token_add', method_args) return json_resp({'message': 'ok'}) except NoResultFound: raise ClientError('web hook not existed') finally: SessionManager.Session.remove()
def delete_episode(self, episode_id): session = SessionManager.Session() try: (episode, bangumi) = session.query(Episode, Bangumi).\ join(Bangumi).\ filter(Episode.id == episode_id).one() # remove files of episode bangumi_folder_path = '{0}/{1}'.format(self.base_path, str(episode.bangumi_id)) video_file_list = session.query(VideoFile). \ filter(VideoFile.episode_id == episode_id). \ all() watch_progress_list = session.query(WatchProgress).filter( WatchProgress.episode_id == episode_id).all() for video_file in video_file_list: # remove torrent try: file_path = '{0}/{1}'.format(bangumi_folder_path, video_file.file_path) os.remove(file_path) except Exception as error: logger.error(error) # remove torrent from deluge rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id}) # remove video_file session.delete(video_file) # remove watch-progress for watch_progress in watch_progress_list: session.delete(watch_progress) # remove image if episode.thumbnail_image_id is not None: image = session.query(Image).filter( Image.id == episode.thumbnail_image_id).one() session.delete(image) # remove episode session.delete(episode) bangumi.eps = bangumi.eps - 1 session.commit() return json_resp({'message': 'ok'}) finally: SessionManager.Session.remove()
def delete_episode(self, episode_id): session = SessionManager.Session() try: (episode, bangumi) = session.query(Episode, Bangumi).\ join(Bangumi).\ filter(Episode.id == episode_id).one() # remove files of episode bangumi_folder_path = '{0}/{1}'.format(self.base_path, str(episode.bangumi_id)) video_file_list = session.query(VideoFile). \ filter(VideoFile.episode_id == episode_id). \ all() watch_progress_list = session.query(WatchProgress).filter( WatchProgress.episode_id == episode_id).all() for video_file in video_file_list: # remove torrent try: file_path = '{0}/{1}'.format(bangumi_folder_path, video_file.file_path) os.remove(file_path) except Exception as error: logger.error(error) # remove torrent from deluge rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id}) # remove video_file session.delete(video_file) # remove watch-progress for watch_progress in watch_progress_list: session.delete(watch_progress) # remove image if episode.thumbnail_image_id is not None: image = session.query(Image).filter(Image.id == episode.thumbnail_image_id).one() session.delete(image) # remove episode session.delete(episode) bangumi.eps = bangumi.eps - 1 session.commit() return json_resp({'message': 'ok'}) finally: SessionManager.Session.remove()
def delete_bangumi_favorite(self, bangumi_id, user_id): session = SessionManager.Session() try: favorite = session.query(Favorites). \ filter(Favorites.bangumi_id == bangumi_id). \ filter(Favorites.user_id == user_id). \ first() if not favorite: raise ClientError(ClientError.NOT_FOUND, 404, {bangumi_id: bangumi_id}) else: session.delete(favorite) session.commit() rpc_request.send('user_favorite_update', {'user_id': str(user_id)}) return json_resp({'message': 'ok', 'status': 0}) finally: SessionManager.Session.remove()
def delete_video_file(self, video_file_id): try: session = SessionManager.Session() video_file = session.query(VideoFile).filter(VideoFile.id == video_file_id).one() if video_file.file_path is not None and video_file.status == VideoFile.STATUS_DOWNLOADED: file_abs_path = u'{0}/{1}/{2}'.format(self.base_path, str(video_file.bangumi_id), video_file.file_path) try: os.remove(file_abs_path) except Exception as error: logger.warn(error) rpc_request.send('delete_deluge_torrent', {'torrent_id': video_file.torrent_id}) session.delete(video_file) session.commit() return json_resp({'msg': 'ok'}) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) finally: SessionManager.Session.remove()
def delete_web_hook_token(self, web_hook_id, user_id): session = SessionManager.Session() try: web_hook_token = session.query(WebHookToken).\ filter(WebHookToken.web_hook_id == web_hook_id).\ filter(WebHookToken.user_id == user_id).\ one() token_id = web_hook_token.token_id session.delete(web_hook_token) session.commit() rpc_request.send('token_remove', {'web_hook_id': web_hook_id, 'token_id': token_id}) return json_resp({'message': 'ok'}) except NoResultFound: raise ClientError(ClientError.NOT_FOUND, 404) finally: SessionManager.Session.remove()
def favorite_bangumi(self, bangumi_id, user_id, status): session = SessionManager.Session() try: favorite = session.query(Favorites).\ filter(Favorites.bangumi_id == bangumi_id).\ filter(Favorites.user_id == user_id).\ first() if not favorite: favorite = Favorites(bangumi_id=bangumi_id, user_id=user_id, status=status) session.add(favorite) else: favorite.status = status favorite.update_time = datetime.utcnow() session.commit() rpc_request.send('user_favorite_update', {'user_id': str(user_id)}) return json_resp({'message': 'ok', 'status': 0}) finally: SessionManager.Session.remove()
def favorite_bangumi(self, bangumi_id, user_id, status): session = SessionManager.Session() try: favorite = session.query(Favorites).\ filter(Favorites.bangumi_id == bangumi_id).\ filter(Favorites.user_id == user_id).\ first() if not favorite: favorite = Favorites(bangumi_id=bangumi_id, user_id=user_id, status=status) session.add(favorite) else: favorite.status = status session.commit() rpc_request.send('user_favorite_update', {'user_id': str(user_id)}) return json_resp({'message': 'ok', 'status': 0}) finally: SessionManager.Session.remove()
def confirm_token(self, token, expiration=3600): from server import app serializer = URLSafeTimedSerializer(app.config['SECRET_KEY']) session = SessionManager.Session() try: email = serializer.loads(token, salt=app.config['SECRET_PASSWORD_SALT'], max_age=expiration) if (email == self.email) and (not self.email_confirmed): self.email_confirmed = True user = session.query(User).filter(User.id == self.id).one() user.email_confirmed = True session.commit() rpc_request.send('email_changed', { 'email': self.email, 'user_id': user.id }) return json_resp({'message': 'ok'}) else: raise ClientError('Invalid Token') except: raise ClientError('Invalid Token') finally: SessionManager.Session.remove()