def save_in_database(filename, data, tracker): olds = Episode.find().filter_by(filename = filename).all() for key in ['files', 'links', 'previews']: if key not in data: data[key] = [] for old in olds: try: Link.find().filter_by(episode = old.id).delete() File.find().filter_by(episode = old.id).delete() Preview.find().filter_by(episode = old.id).delete() except Exception as e: print(style.red+"errör 1:"+style.default,e) updated = len(olds) if olds: episode = Episode.find().filter_by(id = olds.pop(0).id) episode.update(data['episode']) episode = episode.one() else: episode = Episode(filename=filename, **data['episode']) episode.save() for old in olds: try: Comment.find().filter_by(episode=old.id).update({'episode':episode.id}) Rating.find().filter_by(episode=old.id).update({'episode':episode.id}) Episode.find().filter_by(id = old.id).delete() except Exception as e: print(style.red+"errör 2:"+style.default,e) if updated: print(style.green+"* update db: ",filename,style.default) else: print(style.green+"* add to db: ",filename,style.default) list(map(lambda kwargs: File(episode=episode.id, **kwargs).add(), data['files'])) list(map(lambda kwargs: Preview(episode=episode.id, **kwargs).add(), data['previews'])) list(map(lambda kwargs: Link(episode=episode.id, **kwargs).add(), data['links'])) tracker.check_all(filename, episode, data['links']) session().commit()
def episode(web, site, id, mode, errors=[]): try: # FIXME wrap db queries into one episode = Episode.find().filter_by(link = id).one() files = File.find().filter_by(episode = episode.id).all() links = Link.find().filter_by(episode = episode.id).all() comments = Comment.find().filter_by(episode = episode.id).\ order_by(Comment.date).all() ratings = Rating.find().filter_by(episode = episode.id).all() trackbacks = Trackback.find().filter_by(episode = episode.id).\ order_by(Trackback.date).all() except Exception as e: return notfound(str(e)) if mode is None: mode = "" if len(mode): mode = mode[1:] opts = {} opts.update(create_session(web, mode)) opts.update(do_the_comments(web, mode, comments)) opts.update(do_the_ratings(web, mode, ratings)) return template("episode.tpl", errors = errors, css = "episode", episode = episode, episodes = {episode.id: episode}, site = site, trackbacks = trackbacks, files = files, links = links, csss = [ "../lib/audio-js/audio-js", "../lib/audio-js/skins/vim", "vim"], **opts )