OSDN Git Service

bbs type subclass ok.
authorAiwota Programmer <aiwotaprog@tetteke.tk>
Fri, 8 Sep 2006 00:05:44 +0000 (09:05 +0900)
committerAiwota Programmer <aiwotaprog@tetteke.tk>
Fri, 8 Sep 2006 00:05:44 +0000 (09:05 +0900)
src/FukuiNoNamari/BbsType/bbs_type_2ch.py
src/FukuiNoNamari/BbsType/bbs_type_judge_uri.py

index 65533cf..8ca3f2b 100644 (file)
@@ -16,6 +16,7 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
 import re
+import copy
 
 from bbs_type_exception import BbsTypeError
 
@@ -25,37 +26,34 @@ _cgi_reg_expr = re.compile("http://(?P<host>[^./]+\.2ch\.net)/test/read.cgi/(?P<
 
 
 class Type2ch:
+    bbs_type = "2ch"
+    _base_reg = _base_reg_expr
+    _cgi_reg = _cgi_reg_expr
 
-    def __init__(self, host=None, board=None, thread=None, uri=None):
-        if uri:
-            self._parse_uri(uri)
-        else:
-            if not host or not board:
-                raise BbsTypeError, "host and board, or uri must be specified"
-            self.uri = uri
-            self.host = host
-            self.board = board
-            self.thread = thread
-
-    def _parse_uri(self, uri):
+    def __init__(self, uri):
         self.uri = uri
-        self.bbs_type = None
         self.host = None
         self.board = None
         self.thread = None
 
-        m = _base_reg_expr.match(self.uri)
+        self._parse_uri(uri)
+
+    def _parse_uri(self, uri):
+
+        m = self._base_reg.match(self.uri)
         if m:
-            self.bbs_type = "2ch"
             self.host = m.group("host")
             self.board = m.group("board")
         else:
-            m = _cgi_reg_expr.match(self.uri)
+            m = self._cgi_reg.match(self.uri)
             if m:
-                self.bbs_type = "2ch"
                 self.host = m.group("host")
                 self.board = m.group("board")
                 self.thread = m.group("thread")
+            else:
+                raise BbsTypeError, \
+                      "the uri %s does not represent %s" \
+                      % (self.uri, self.bbs_type)
 
     def is_board(self):
         return not self.thread
@@ -66,8 +64,8 @@ class Type2ch:
     def clone_with_thread(self, thread):
         if not thread:
             raise ValueError, "parameter must not be empty"
-        another = Type2ch(self.host, self.board, thread)
-        another.bbs_type = self.bbs_type
+        another = copy.copy(self)
+        another.thread = thread
         another.uri = another.get_thread_uri()
         return another
 
index 709a459..f09e8a2 100644 (file)
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
+import traceback
+
 from bbs_type_2ch import Type2ch
 from bbs_type_exception import BbsTypeError
 
+_typelist = [Type2ch]
+
 def get_type(uri):
-    bbs = Type2ch(uri=uri)
-    if bbs.bbs_type:
-        return bbs
+    for type_class in _typelist:
+        try:
+            bbs = type_class(uri)
+        except BbsTypeError:
+            pass
+        except:
+            traceback.print_exc()
+        else:
+            return bbs
 
     raise BbsTypeError, \
           "Not found a fit bbs type for the uri: " + uri