def filter_by_metadata(self, series=None, season=None, episode=None):
     filters = List(
         Maybe(series) / (lambda a: Release.name == a),
         Maybe(season) / str / (lambda a: Release.season == a),
         Maybe(episode) / str / (lambda a: Release.episode == a),
     )
     return self.filter_release(*filters.join)
Beispiel #2
0
    def add_season(self, id, num):
        def handle_show(show):
            season = List.wrap(self.tvdb.season(show.etvdb_id, num))
            if season:
                now = datetime.now().strftime('%F')
                aired = (season.filter(_['date'] < now).map(_['episode']).max)
                aired % L(self._releases.add_season)(
                    show.canonical_name, num, _, search_name=show.search_name)
                return 'Done'
            else:
                return 'No such season: {} s{}'.format(show, num)

        return (Maybe(self._shows.find_by_id(id)) / handle_show
                | self._no_show(id))
Beispiel #3
0
 def m(self, params, skip=1):
     return Maybe(self(params, skip))
Beispiel #4
0
 def _current(self):
     return Maybe(Job(self._candidates))
Beispiel #5
0
 def find(self, fa: List[A], f: Callable[[A], bool]):
     return Maybe(_find(fa, f))
Beispiel #6
0
def format_cause(exc: Exception, **kw) -> List[str]:
    from amino import Maybe
    return Maybe(exc.__cause__) / (lambda a: format_exception(a, **kw)) / (lambda a: a.cons('Cause:')) | List()
Beispiel #7
0
 def latest_episode_m(self):
     return Maybe(self.latest_episode)
Beispiel #8
0
 def search(self, data: str, *a: Any, **kw: Any) -> Either[str, 'Match']:
     return (Maybe(self.rex.search(data, *a, **kw)).to_either(
         '`{}` does not contain `{}`'.format(data, self.spec)) /
             L(Match)(self, _, data))
 def http_link_by_id(self, id):
     return Maybe(self._db.query(Link).filter_by(id=id).first())
Beispiel #10
0
 def torrent_by_id(self, id):
     return Maybe(self._db.query(Torrent).filter_by(id=id).first())
Beispiel #11
0
 def latest_for_season(self, name, season):
     q = (self._db.query(func.max(Release.episode)).filter_by(
         name=name, season=season).join(ReleaseMonitor))
     return Maybe(*q.first())
Beispiel #12
0
 def match(self, data: str, *a: Any, **kw: Any) -> Maybe['Match']:
     return (Maybe(self.rex.match(data, *a, **kw)).to_either(
         '`{}` does not match `{}`'.format(data, self.spec)) /
             L(Match)(self, _, data))
Beispiel #13
0
 def find_by_metadata(self, **data):
     return Maybe(self.filter_by(**data).first())
Beispiel #14
0
 def find_by_name(self, name):
     return Maybe(self.filter_by(canonical_name=name).first())
Beispiel #15
0
def format_exception(exc: Exception) -> List[str]:
    tb = sanitize_tb(Lists.wrap(format_tb(exc.__traceback__)))
    main = tb.cat(f'{exc.__class__.__name__}: {exc}')
    cause = Maybe(exc.__cause__) / format_exception / (
        lambda a: a.cons('Cause:')) | List()
    return main + cause