diff options
Diffstat (limited to 'jfr_playoff/data/match')
-rw-r--r-- | jfr_playoff/data/match/__init__.py | 6 | ||||
-rw-r--r-- | jfr_playoff/data/match/jfrdb.py | 28 | ||||
-rw-r--r-- | jfr_playoff/data/match/jfrhtml.py | 20 | ||||
-rw-r--r-- | jfr_playoff/data/match/tcjson.py | 26 |
4 files changed, 80 insertions, 0 deletions
diff --git a/jfr_playoff/data/match/__init__.py b/jfr_playoff/data/match/__init__.py index e69de29..7db05c2 100644 --- a/jfr_playoff/data/match/__init__.py +++ b/jfr_playoff/data/match/__init__.py @@ -0,0 +1,6 @@ +from jfr_playoff.data.info import ResultInfoClient + + +class MatchInfoClient(ResultInfoClient): + def get_match_link(self): + raise NotImplementedError diff --git a/jfr_playoff/data/match/jfrdb.py b/jfr_playoff/data/match/jfrdb.py new file mode 100644 index 0000000..7d9e067 --- /dev/null +++ b/jfr_playoff/data/match/jfrdb.py @@ -0,0 +1,28 @@ +from jfr_playoff.data import TournamentInfo +from jfr_playoff.data.match import MatchInfoClient +from jfr_playoff.logger import PlayoffLogger + + +class JFRDbMatchInfo(MatchInfoClient): + @property + def priority(self): + return 50 + + def is_capable(self): + return (self.database is not None) and ('database' in self.settings) + + def get_exceptions(self, method): + return (IOError, TypeError, IndexError, KeyError) + + def get_match_link(self): + if 'link' in self.settings: + raise NotImplementedError( + 'link specified in config, skipping lookup') + if 'round' not in self.settings: + raise IndexError('round number not specified in match config') + event_info = TournamentInfo(self.settings, self.database) + link = event_info.get_results_link( + 'runda%d.html' % (self.settings['round'])) + PlayoffLogger.get('match.jfrdb').info( + 'match #%d link fetched: %s', self.settings['id'], link) + return link diff --git a/jfr_playoff/data/match/jfrhtml.py b/jfr_playoff/data/match/jfrhtml.py new file mode 100644 index 0000000..40f1395 --- /dev/null +++ b/jfr_playoff/data/match/jfrhtml.py @@ -0,0 +1,20 @@ +from jfr_playoff.data.match import MatchInfoClient +from jfr_playoff.logger import PlayoffLogger + + +class JFRHtmlMatchInfo(MatchInfoClient): + @property + def priority(self): + return 30 + + def is_capable(self): + return ('link' in self.settings) and ('#' not in self.settings['link']) + + def get_exceptions(self, method): + return (TypeError, IndexError, KeyError, IOError, ValueError) + + def get_match_link(self): + PlayoffLogger.get('match.jfrhtml').info( + 'match #%d link pre-defined: %s', + self.settings['id'], self.settings['link']) + return self.settings['link'] diff --git a/jfr_playoff/data/match/tcjson.py b/jfr_playoff/data/match/tcjson.py new file mode 100644 index 0000000..fbc28ce --- /dev/null +++ b/jfr_playoff/data/match/tcjson.py @@ -0,0 +1,26 @@ +import urlparse + +from jfr_playoff.data.match import MatchInfoClient +from jfr_playoff.logger import PlayoffLogger + + +class TCJsonMatchInfo(MatchInfoClient): + @property + def priority(self): + return 20 + + def is_capable(self): + return ('link' in self.settings) and ('#' in self.settings['link']) + + def get_exceptions(self, method): + return (TypeError, IndexError, KeyError, IOError, ValueError) + + def _get_round_from_link(self, link): + fragment = urlparse.urlparse(link).fragment + return fragment[11:14], fragment[14:17] + + def get_match_link(self): + PlayoffLogger.get('match.tcjson').info( + 'match #%d link pre-defined: %s', + self.settings['id'], self.settings['link']) + return self.settings['link'] |