OSDN Git Service

Reduce submit window using bbs type.
[fukui-no-namari/fukui-no-namari.git] / src / FukuiNoNamari / BbsType / bbs_type_base.py
1 # Copyright (C) 2006 by Aiwota Programmer
2 # aiwotaprog@tetteke.tk
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18 import re
19 import copy
20 import time
21
22 from bbs_type_exception import BbsTypeError
23
24
25 class BaseType:
26     """Base of bbs type. Do not instantiate directly"""
27
28     bbs_type = "other"
29     _base_reg = None
30     _cgi_reg = None
31
32     def __init__(self, uri):
33         self.uri = uri
34         self.host = None
35         self.board = None
36         self.thread = None
37
38         self._parse_uri(uri)
39
40     def _parse_uri(self, uri):
41
42         m = self._base_reg.match(self.uri)
43         if m:
44             self.host = m.group("host")
45             self.board = m.group("board")
46         else:
47             m = self._cgi_reg.match(self.uri)
48             if m:
49                 self.host = m.group("host")
50                 self.board = m.group("board")
51                 self.thread = m.group("thread")
52             else:
53                 raise BbsTypeError, \
54                       "the uri %s does not represent %s" \
55                       % (self.uri, self.bbs_type)
56
57     def is_board(self):
58         return not self.thread
59
60     def is_thread(self):
61         return self.thread
62
63     def is_same_board(self, another):
64         return self.bbs_type == another.bbs_type \
65                and self.host == another.host \
66                and self.board == another.board
67
68     def clone_with_thread(self, thread):
69         if not thread:
70             raise ValueError, "parameter must not be empty"
71         another = copy.copy(self)
72         another.thread = thread
73         another.uri = another.get_thread_uri()
74         return another
75
76     def get_uri_base(self):
77         return "http://" + self.host + "/" + self.board + "/"
78
79     def get_subject_txt_uri(self):
80         return self.get_uri_base() + "subject.txt"
81
82     def get_dat_uri(self):
83         if not self.thread:
84             raise BbsTypeError, "not specified thread"
85         return self.get_uri_base() + "dat/" + self.thread + ".dat"
86
87     def get_thread_uri(self):
88         if not self.thread:
89             raise BbsTypeError, "not specified thread"
90         return "http://" + self.host + "/test/read.cgi/" + \
91                   self.board + "/" + self.thread + "/"
92
93     def get_post_uri(self):
94         return "http://" + self.host + "/test/bbs.cgi"
95
96     def build_post_dict(self, name, mail, msg):
97         post_dict = {}
98         post_dict["bbs"] = self.board
99         post_dict["key"] = self.thread
100         post_dict["time"] = str(int(time.time()))
101         post_dict["submit"] = u"\u66f8\u304d\u8fbc\u3080".encode(
102             "cp932", "replace")
103         post_dict["FROM"] = name.encode("cp932", "replace")
104         post_dict["mail"] = mail.encode("cp932", "replace")
105         post_dict["MESSAGE"] = msg.encode("cp932", "replace")
106         return post_dict
107
108     def set_extra_post(self, post_dict):
109         return post_dict
110
111     def get_board_dir_path(self):
112         """Returns board dir path from logs dir downward, not full path"""
113
114         return self.bbs_type + "/" + self.host + "/" + self.board