summaryrefslogtreecommitdiff
path: root/jfr_playoff/data/match
diff options
context:
space:
mode:
Diffstat (limited to 'jfr_playoff/data/match')
-rw-r--r--jfr_playoff/data/match/__init__.py6
-rw-r--r--jfr_playoff/data/match/jfrdb.py28
-rw-r--r--jfr_playoff/data/match/jfrhtml.py20
-rw-r--r--jfr_playoff/data/match/tcjson.py26
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']