PyPtt 1.2.3__tar.gz → 1.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PKG-INFO +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/__init__.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_board_info.py +8 -8
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_newest_index.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_post.py +13 -13
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_time.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_has_new_mail.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_loginout.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_mail.py +4 -4
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_util.py +7 -7
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/connect_core.py +5 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lib_util.py +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/screens.py +3 -9
- PyPtt-1.2.4/PyPtt/ssl/cert.pem +20 -0
- PyPtt-1.2.4/PyPtt/ssl/key.pem +28 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/PKG-INFO +1 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/SOURCES.txt +3 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/setup.py +4 -1
- {PyPtt-1.2.3 → PyPtt-1.2.4}/LICENSE +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/MANIFEST.in +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/PTT.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_bucket.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_call_status.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_change_pw.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_comment.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_del_post.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_board_list.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_bottom_post_list.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_favourite_board.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_post_index.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_user.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_give_money.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_mark_post.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_post.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_reply_post.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_search_user.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_set_board_title.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/check_value.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/command.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/config.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/data_type.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/exceptions.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/i18n.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lang/en_US.yaml +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lang/zh_TW.yaml +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/log.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/service.py +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/dependency_links.txt +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/requires.txt +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/top_level.txt +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/README.md +0 -0
- {PyPtt-1.2.3 → PyPtt-1.2.4}/setup.cfg +0 -0
|
@@ -53,7 +53,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
53
53
|
else:
|
|
54
54
|
if '編號' not in nuser or '人氣' not in nuser:
|
|
55
55
|
raise exceptions.NoSuchBoard(api.config, board)
|
|
56
|
-
pattern = re.compile('[\d]+')
|
|
56
|
+
pattern = re.compile(r'[\d]+')
|
|
57
57
|
r = pattern.search(nuser)
|
|
58
58
|
if r is None:
|
|
59
59
|
raise exceptions.NoSuchBoard(api.config, board)
|
|
@@ -74,7 +74,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
74
74
|
ori_screen = api.connect_core.get_screen_queue()[-1]
|
|
75
75
|
# print(ori_screen)
|
|
76
76
|
|
|
77
|
-
p = re.compile('《(.+)》看板設定')
|
|
77
|
+
p = re.compile(r'《(.+)》看板設定')
|
|
78
78
|
r = p.search(ori_screen)
|
|
79
79
|
if r is not None:
|
|
80
80
|
boardname = r.group(0)[1:-5].strip()
|
|
@@ -84,13 +84,13 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
84
84
|
if boardname.lower() != board.lower():
|
|
85
85
|
raise exceptions.NoSuchBoard(api.config, board)
|
|
86
86
|
|
|
87
|
-
p = re.compile('中文敘述: (.+)')
|
|
87
|
+
p = re.compile(r'中文敘述: (.+)')
|
|
88
88
|
r = p.search(ori_screen)
|
|
89
89
|
if r is not None:
|
|
90
90
|
chinese_des = r.group(0)[5:].strip()
|
|
91
91
|
logger.debug('中文敘述', chinese_des)
|
|
92
92
|
|
|
93
|
-
p = re.compile('板主名單: (.+)')
|
|
93
|
+
p = re.compile(r'板主名單: (.+)')
|
|
94
94
|
r = p.search(ori_screen)
|
|
95
95
|
if r is not None:
|
|
96
96
|
moderator_line = r.group(0)[5:].strip()
|
|
@@ -131,7 +131,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
131
131
|
logger.debug('快速連推文章', fast_push)
|
|
132
132
|
|
|
133
133
|
if not fast_push:
|
|
134
|
-
p = re.compile('最低間隔時間: [\d]+')
|
|
134
|
+
p = re.compile(r'最低間隔時間: [\d]+')
|
|
135
135
|
r = p.search(ori_screen)
|
|
136
136
|
if r is not None:
|
|
137
137
|
min_interval = r.group(0)[7:].strip()
|
|
@@ -166,7 +166,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
166
166
|
require18 = ('禁止 未滿十八歲進入' in ori_screen)
|
|
167
167
|
logger.debug('禁止未滿十八歲進入', require18)
|
|
168
168
|
|
|
169
|
-
p = re.compile('登入次數 [\d]+ 次以上')
|
|
169
|
+
p = re.compile(r'登入次數 [\d]+ 次以上')
|
|
170
170
|
r = p.search(ori_screen)
|
|
171
171
|
if r is not None:
|
|
172
172
|
require_login_time = r.group(0).split(' ')[1]
|
|
@@ -175,7 +175,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
175
175
|
require_login_time = 0
|
|
176
176
|
logger.debug('發文限制登入次數', require_login_time)
|
|
177
177
|
|
|
178
|
-
p = re.compile('退文篇數 [\d]+ 篇以下')
|
|
178
|
+
p = re.compile(r'退文篇數 [\d]+ 篇以下')
|
|
179
179
|
r = p.search(ori_screen)
|
|
180
180
|
if r is not None:
|
|
181
181
|
require_illegal_post = r.group(0).split(' ')[1]
|
|
@@ -212,7 +212,7 @@ def get_board_info(api, board: str, get_post_kind: bool, call_by_others: bool) -
|
|
|
212
212
|
|
|
213
213
|
for i in screen_lines:
|
|
214
214
|
if '種類:' in i:
|
|
215
|
-
type_pattern = re.compile('\d\.([^\ ]*)')
|
|
215
|
+
type_pattern = re.compile(r'\d\.([^\ ]*)')
|
|
216
216
|
# 0 is not present any type that the key hold None object
|
|
217
217
|
kind_list = type_pattern.findall(i)
|
|
218
218
|
break
|
|
@@ -166,7 +166,7 @@ def get_newest_index(api, index_type: data_type.NewIndex, board: Optional[str] =
|
|
|
166
166
|
last_screen = api.connect_core.get_screen_queue()[-1]
|
|
167
167
|
cursor_line = [x for x in last_screen.split('\n') if x.strip().startswith(api.cursor)][0]
|
|
168
168
|
|
|
169
|
-
list_index = int(re.compile('(\d+)').search(cursor_line).group(0))
|
|
169
|
+
list_index = int(re.compile(r'(\d+)').search(cursor_line).group(0))
|
|
170
170
|
|
|
171
171
|
if search_type == 0 and search_list is None:
|
|
172
172
|
if list_index > current_capacity:
|
|
@@ -165,7 +165,7 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
165
165
|
cursor_line = cursor_line[0]
|
|
166
166
|
log.logger.debug('CursorLine', cursor_line)
|
|
167
167
|
|
|
168
|
-
pattern = re.compile('[\d]+\/[\d]+')
|
|
168
|
+
pattern = re.compile(r'[\d]+\/[\d]+')
|
|
169
169
|
pattern_result = pattern.search(cursor_line)
|
|
170
170
|
if pattern_result is None:
|
|
171
171
|
list_date = None
|
|
@@ -173,12 +173,12 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
173
173
|
list_date = pattern_result.group(0)
|
|
174
174
|
list_date = list_date[-5:]
|
|
175
175
|
|
|
176
|
-
pattern = re.compile('\[[\w]+\]')
|
|
176
|
+
pattern = re.compile(r'\[[\w]+\]')
|
|
177
177
|
pattern_result = pattern.search(cursor_line)
|
|
178
178
|
if pattern_result is not None:
|
|
179
179
|
post_del_status = data_type.PostStatus.DELETED_BY_AUTHOR
|
|
180
180
|
else:
|
|
181
|
-
pattern = re.compile('<[\w]+>')
|
|
181
|
+
pattern = re.compile(r'<[\w]+>')
|
|
182
182
|
pattern_result = pattern.search(cursor_line)
|
|
183
183
|
post_del_status = data_type.PostStatus.DELETED_BY_MODERATOR
|
|
184
184
|
|
|
@@ -262,9 +262,9 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
262
262
|
})
|
|
263
263
|
return post
|
|
264
264
|
|
|
265
|
-
post_author_pattern_new = re.compile('作者 (.+) 看板')
|
|
266
|
-
post_author_pattern_old = re.compile('作者 (.+)')
|
|
267
|
-
board_pattern = re.compile('看板 (.+)')
|
|
265
|
+
post_author_pattern_new = re.compile(r'作者 (.+) 看板')
|
|
266
|
+
post_author_pattern_old = re.compile(r'作者 (.+)')
|
|
267
|
+
board_pattern = re.compile(r'看板 (.+)')
|
|
268
268
|
|
|
269
269
|
post_date = None
|
|
270
270
|
post_content = None
|
|
@@ -323,7 +323,7 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
323
323
|
|
|
324
324
|
log.logger.debug(i18n.author, post_author)
|
|
325
325
|
|
|
326
|
-
post_title_pattern = re.compile('標題 (.+)')
|
|
326
|
+
post_title_pattern = re.compile(r'標題 (.+)')
|
|
327
327
|
|
|
328
328
|
title_line = origin_post_lines[1]
|
|
329
329
|
pattern_result = post_title_pattern.search(title_line)
|
|
@@ -356,7 +356,7 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
356
356
|
|
|
357
357
|
log.logger.debug(i18n.title, post_title)
|
|
358
358
|
|
|
359
|
-
post_date_pattern = re.compile('時間 .{24}')
|
|
359
|
+
post_date_pattern = re.compile(r'時間 .{24}')
|
|
360
360
|
date_line = origin_post_lines[2]
|
|
361
361
|
pattern_result = post_date_pattern.search(date_line)
|
|
362
362
|
if pattern_result is None:
|
|
@@ -439,8 +439,8 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
439
439
|
|
|
440
440
|
info_lines = [line for line in origin_post_lines if line.startswith('※') or line.startswith('◆')]
|
|
441
441
|
|
|
442
|
-
pattern = re.compile('[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
443
|
-
pattern_p2 = re.compile('[\d]+-[\d]+-[\d]+-[\d]+')
|
|
442
|
+
pattern = re.compile(r'[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
443
|
+
pattern_p2 = re.compile(r'[\d]+-[\d]+-[\d]+-[\d]+')
|
|
444
444
|
for line in reversed(info_lines):
|
|
445
445
|
|
|
446
446
|
log.logger.debug('IP Line', line)
|
|
@@ -506,9 +506,9 @@ def _get_post(api, board: str, post_aid: Optional[str] = None, post_index: int =
|
|
|
506
506
|
return post
|
|
507
507
|
log.logger.debug('IP', ip)
|
|
508
508
|
|
|
509
|
-
push_author_pattern = re.compile('[推|噓|→] [\w| ]+:')
|
|
510
|
-
push_date_pattern = re.compile('[\d]+/[\d]+ [\d]+:[\d]+')
|
|
511
|
-
push_ip_pattern = re.compile('[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
509
|
+
push_author_pattern = re.compile(r'[推|噓|→] [\w| ]+:')
|
|
510
|
+
push_date_pattern = re.compile(r'[\d]+/[\d]+ [\d]+:[\d]+')
|
|
511
|
+
push_ip_pattern = re.compile(r'[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
512
512
|
|
|
513
513
|
push_list = []
|
|
514
514
|
|
|
@@ -77,7 +77,7 @@ def login(api, ptt_id: str, ptt_pw: str, kick_other_session: bool):
|
|
|
77
77
|
# api.is_mailbox_full = True
|
|
78
78
|
|
|
79
79
|
def register_processing(screen):
|
|
80
|
-
pattern = re.compile('[\d]+')
|
|
80
|
+
pattern = re.compile(r'[\d]+')
|
|
81
81
|
api.process_picks = int(pattern.search(screen).group(0))
|
|
82
82
|
|
|
83
83
|
if len(ptt_pw) > 8:
|
|
@@ -110,10 +110,10 @@ content_start = '─────────────────────
|
|
|
110
110
|
content_end = '--\n※ 發信站: 批踢踢實業坊(ptt.cc)'
|
|
111
111
|
content_ip_old = '◆ From: '
|
|
112
112
|
|
|
113
|
-
mail_author_pattern = re.compile('作者 (.+)')
|
|
114
|
-
mail_title_pattern = re.compile('標題 (.+)')
|
|
115
|
-
mail_date_pattern = re.compile('時間 (.+)')
|
|
116
|
-
ip_pattern = re.compile('[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
113
|
+
mail_author_pattern = re.compile(r'作者 (.+)')
|
|
114
|
+
mail_title_pattern = re.compile(r'標題 (.+)')
|
|
115
|
+
mail_date_pattern = re.compile(r'時間 (.+)')
|
|
116
|
+
ip_pattern = re.compile(r'[\d]+\.[\d]+\.[\d]+\.[\d]+')
|
|
117
117
|
|
|
118
118
|
|
|
119
119
|
def get_mail(api, index: int, search_type: Optional[data_type.SearchType] = None,
|
|
@@ -37,7 +37,7 @@ def get_content(api, post_mode: bool = True):
|
|
|
37
37
|
break_detect_after_send=True),
|
|
38
38
|
]
|
|
39
39
|
|
|
40
|
-
line_from_pattern = re.compile('[\d]+~[\d]+')
|
|
40
|
+
line_from_pattern = re.compile(r'[\d]+~[\d]+')
|
|
41
41
|
|
|
42
42
|
has_control_code = False
|
|
43
43
|
control_code_mode = False
|
|
@@ -192,7 +192,7 @@ def get_mailbox_capacity(api) -> tuple[int, int]:
|
|
|
192
192
|
|
|
193
193
|
log.logger.debug('capacity_line', capacity_line)
|
|
194
194
|
|
|
195
|
-
pattern_result = re.compile('(\d+)/(\d+)').search(capacity_line)
|
|
195
|
+
pattern_result = re.compile(r'(\d+)/(\d+)').search(capacity_line)
|
|
196
196
|
if pattern_result is not None:
|
|
197
197
|
current_capacity = int(pattern_result.group(0).split('/')[0])
|
|
198
198
|
max_capacity = int(pattern_result.group(0).split('/')[1])
|
|
@@ -254,11 +254,11 @@ def parse_query_post(api, ori_screen):
|
|
|
254
254
|
post_aid = None
|
|
255
255
|
if len(aid_line) == 1:
|
|
256
256
|
aid_line = aid_line[0]
|
|
257
|
-
pattern = re.compile('#[\w|-]+')
|
|
257
|
+
pattern = re.compile(r'#[\w|-]+')
|
|
258
258
|
pattern_result = pattern.search(aid_line)
|
|
259
259
|
post_aid = pattern_result.group(0)[1:]
|
|
260
260
|
|
|
261
|
-
pattern = re.compile('文章網址: https:[\S]+html')
|
|
261
|
+
pattern = re.compile(r'文章網址: https:[\S]+html')
|
|
262
262
|
pattern_result = pattern.search(ori_screen_temp)
|
|
263
263
|
|
|
264
264
|
if pattern_result is None:
|
|
@@ -266,7 +266,7 @@ def parse_query_post(api, ori_screen):
|
|
|
266
266
|
else:
|
|
267
267
|
post_web = pattern_result.group(0)[6:]
|
|
268
268
|
|
|
269
|
-
pattern = re.compile('這一篇文章值 [\d]+ Ptt幣')
|
|
269
|
+
pattern = re.compile(r'這一篇文章值 [\d]+ Ptt幣')
|
|
270
270
|
pattern_result = pattern.search(ori_screen_temp)
|
|
271
271
|
if pattern_result is None:
|
|
272
272
|
# 特殊文章無價格
|
|
@@ -276,7 +276,7 @@ def parse_query_post(api, ori_screen):
|
|
|
276
276
|
post_money = post_money[:post_money.find(' ')]
|
|
277
277
|
post_money = int(post_money)
|
|
278
278
|
|
|
279
|
-
pattern = re.compile('[\d]+\/[\d]+')
|
|
279
|
+
pattern = re.compile(r'[\d]+\/[\d]+')
|
|
280
280
|
pattern_result = pattern.search(cursor_line)
|
|
281
281
|
if pattern_result is None:
|
|
282
282
|
list_date = None
|
|
@@ -290,7 +290,7 @@ def parse_query_post(api, ori_screen):
|
|
|
290
290
|
# >781508 +爆 9/17 jodojeda □ [新聞] 國人吃魚少 學者:應把吃魚當成輕鬆愉快
|
|
291
291
|
# >781406 +X1 9/17 kingofage111 R: [申請] ReDmango 請辭Gossiping板主職務
|
|
292
292
|
|
|
293
|
-
pattern = re.compile('[\d]+')
|
|
293
|
+
pattern = re.compile(r'[\d]+')
|
|
294
294
|
pattern_result = pattern.search(cursor_line)
|
|
295
295
|
post_index = 0
|
|
296
296
|
if pattern_result is not None:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import asyncio
|
|
4
|
+
import os.path
|
|
4
5
|
import ssl
|
|
5
6
|
import telnetlib
|
|
6
7
|
import threading
|
|
@@ -23,7 +24,11 @@ from . import screens
|
|
|
23
24
|
|
|
24
25
|
websockets.http.USER_AGENT += f' PyPtt/{PyPtt.__version__}'
|
|
25
26
|
|
|
27
|
+
_script_path = os.path.dirname(os.path.abspath(__file__))
|
|
28
|
+
|
|
26
29
|
ssl_context = ssl.create_default_context()
|
|
30
|
+
ssl_context.load_cert_chain(certfile=f"{_script_path}/ssl/cert.pem", keyfile=f"{_script_path}/ssl/key.pem")
|
|
31
|
+
ssl_context.minimum_version = ssl.TLSVersion.TLSv1_2
|
|
27
32
|
|
|
28
33
|
|
|
29
34
|
class TargetUnit:
|
|
@@ -47,7 +47,7 @@ def get_aid_from_url(url: str) -> Tuple[str, str]:
|
|
|
47
47
|
check_value.check_type(url, str, 'url')
|
|
48
48
|
|
|
49
49
|
# 檢查是否符合 PTT BOARD 文章網址格式
|
|
50
|
-
pattern = re.compile('https://www.ptt.cc/bbs/[-.\w]+/M.[\d]+.A[.\w]*.html')
|
|
50
|
+
pattern = re.compile(r'https://www.ptt.cc/bbs/[-.\w]+/M.[\d]+.A[.\w]*.html')
|
|
51
51
|
r = pattern.search(url)
|
|
52
52
|
if r is None:
|
|
53
53
|
raise ValueError('wrong parameter url must be www.ptt.cc post url')
|
|
@@ -191,8 +191,8 @@ def show(config, screen_queue, function_name=None):
|
|
|
191
191
|
print('-' * 50)
|
|
192
192
|
|
|
193
193
|
|
|
194
|
-
xy_pattern_h = re.compile('^=ESC=\[[\d]+;[\d]+H')
|
|
195
|
-
xy_pattern_s = re.compile('^=ESC=\[[\d]+;[\d]+s')
|
|
194
|
+
xy_pattern_h = re.compile(r'^=ESC=\[[\d]+;[\d]+H')
|
|
195
|
+
xy_pattern_s = re.compile(r'^=ESC=\[[\d]+;[\d]+s')
|
|
196
196
|
|
|
197
197
|
|
|
198
198
|
class VT100Parser:
|
|
@@ -230,18 +230,12 @@ class VT100Parser:
|
|
|
230
230
|
data = bytes_data.decode(encoding, errors='replace')
|
|
231
231
|
|
|
232
232
|
# remove color
|
|
233
|
-
data = re.sub('\x1B\[[\d+;]*m', '', data)
|
|
233
|
+
data = re.sub(r'\x1B\[[\d+;]*m', '', data)
|
|
234
234
|
data = re.sub(r'[\x1B]', '=ESC=', data)
|
|
235
235
|
data = re.sub(r'[\r]', '', data)
|
|
236
236
|
while ' \x08' in data:
|
|
237
237
|
data = re.sub(r' \x08', '', data)
|
|
238
238
|
|
|
239
|
-
# print('---' * 8)
|
|
240
|
-
# print(encoding)
|
|
241
|
-
# print(bytes_data)
|
|
242
|
-
# print(data)
|
|
243
|
-
# print('---' * 8)
|
|
244
|
-
|
|
245
239
|
if '=ESC=[2J' in data:
|
|
246
240
|
data = data[data.rfind('=ESC=[2J') + len('=ESC=[2J'):]
|
|
247
241
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIDOTCCAiGgAwIBAgIUWXN9WODZaK4kDWG3qbqUAkuCj04wDQYJKoZIhvcNAQEL
|
|
3
|
+
BQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoM
|
|
4
|
+
GEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDA0MTAxNDU0NDFaFw0zNDA0
|
|
5
|
+
MDgxNDU0NDFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEw
|
|
6
|
+
HwYDVQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggEiMA0GCSqGSIb3DQEB
|
|
7
|
+
AQUAA4IBDwAwggEKAoIBAQCpxdPzvNj38HtyhUDpbgiyZ5uxVGBRvlNEffM7ZsUZ
|
|
8
|
+
Izj+OX/D9yYQeUoWfp4MxnHVsHHaK42RBOpydmvjUzvcQISdnZBWF6m+itapzfp0
|
|
9
|
+
TW9+orLDTTzZYcCfq1zOh7O/EFd0xXNg9lQkQQCPuHuVQCVYb/fzR5RpF0Fv7uQ9
|
|
10
|
+
B7jz4VGQ8iSBxoGARIBDfvIgYEEDosmRGdIOwvbMSjyJkAWHhgH04Ip93VzSbKgx
|
|
11
|
+
CjjfSUeOoxJnsCPMgpSDa+A0aNNMFYEU4k/ZkDjyPrldczo3XEUKFm/HHjT3F9JU
|
|
12
|
+
DTgquBm43wL3FtFlBJKeYpSEMs8/zQosgt6e/X/KWm8vAgMBAAGjITAfMB0GA1Ud
|
|
13
|
+
DgQWBBRAZgEYsusC0iO7cqTY1HSUBqGK2jANBgkqhkiG9w0BAQsFAAOCAQEAex2N
|
|
14
|
+
N3vUjirTkJnA3KO2WkzWkoL+p6dreAQV7rXcjhtcoRr32YJ+jLWVQthD2qF6Y/XX
|
|
15
|
+
zfvveI2+HTK911QQr8MOPaJb3vGf85OJbI0oi6+j+jOj3u2I+fwI5n0Hx5G5w6zO
|
|
16
|
+
kwpfHDAxgTNwE/iKjVusw26q2hkM5ii8yAArL0lYFlgeOzDzbMqXZGUN/AaOwvVl
|
|
17
|
+
/ttNeI5F9VFA+c5R1Q01F1QKRNGOTM4a4DHFLqs1f/1+ABYVf/AFNGD73NmPMsbI
|
|
18
|
+
OmT8IJbxiHbkok3rDJAgBMQcGzUYPanH8Srh/fCqv/oYdLX9yCLiMNiblyXr9i29
|
|
19
|
+
ay+fUP9R9ohVYMGOSQ==
|
|
20
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCpxdPzvNj38Hty
|
|
3
|
+
hUDpbgiyZ5uxVGBRvlNEffM7ZsUZIzj+OX/D9yYQeUoWfp4MxnHVsHHaK42RBOpy
|
|
4
|
+
dmvjUzvcQISdnZBWF6m+itapzfp0TW9+orLDTTzZYcCfq1zOh7O/EFd0xXNg9lQk
|
|
5
|
+
QQCPuHuVQCVYb/fzR5RpF0Fv7uQ9B7jz4VGQ8iSBxoGARIBDfvIgYEEDosmRGdIO
|
|
6
|
+
wvbMSjyJkAWHhgH04Ip93VzSbKgxCjjfSUeOoxJnsCPMgpSDa+A0aNNMFYEU4k/Z
|
|
7
|
+
kDjyPrldczo3XEUKFm/HHjT3F9JUDTgquBm43wL3FtFlBJKeYpSEMs8/zQosgt6e
|
|
8
|
+
/X/KWm8vAgMBAAECggEAEkvuvsrwezAgrcPsrfuc1lVSMzdLtiOT58LHLvSxczcX
|
|
9
|
+
klZyDZWaNZZMxMXalLfiVsxQSNn+xM1J0xIuKG60+dS+NhpgDtc4BQADiINZZaVe
|
|
10
|
+
ycAREflGAIuHbe3S77MyTPoe4sfQ2ndRtCKJQ/P25avnGnPevgpN1VGbTMvrLyRz
|
|
11
|
+
61xDZBBWSFy5YxSK5JGcV0huieAgWbXnu4wWghIZYCvCae1US5MIXYhasK4lVgcT
|
|
12
|
+
ZNrhe6OoWdjwTSckhZg8TsZb7+lgwY0YQ09U7a0VtaWDYbUFjcAcaAV1nFHBeD6P
|
|
13
|
+
jofz3bDbIl4k2QJoZ/E1QczSgbgoZCwwcxzl5uFIyQKBgQDb6fh7DT+mAsbWEEZ0
|
|
14
|
+
MPnxgVH+rIJ1e6/w+DU8+NTZkxi65G4WImNyFtvNjXtPJ8vqXqY998cQleb764lO
|
|
15
|
+
slpb+0eu4KmrCllVR2UUdoMKSaguwXoO/ZrZ6+MK24qols4oXerZq7GAxP0cdtGV
|
|
16
|
+
5Ya3mcPNaJTKEgczeZvjVKuszQKBgQDFoY2LlW5XLlEMnjUkEAlfjSim8ijD8TtJ
|
|
17
|
+
v3Z9nfBHJyNvZq6VonOsetem76noanlxjds91gecRz77zSGpZE4ohbpJ7HFbf6YX
|
|
18
|
+
J15ZLwBkDzfaFiU4FjVosKXY9mxL2JL6A2ej9Mt4ukN9XGlgT7BvF6ovPIBEAYZ7
|
|
19
|
+
ufAXMa4L6wKBgBszQ0KlDtxPt5w+gxhX/nI6lpOzbqdtVwOtD5itBlaq9QIYwu0F
|
|
20
|
+
79rqrOEtwLS3rWcdsd40SXDpuZorNd5//OEnoWQl8ZZwP0BnBj+TsP2SwrSVxa0Y
|
|
21
|
+
/RA7Nufe47WagYFIrIWj0N6mftAIej/aFeGbqTY82zprJGzfe8KQdHN5AoGASIfF
|
|
22
|
+
3th0qmJBNJRLhHSuO/ceWEa/V0oNLD+sSOXR7QscIiJZKGl6cm6S/p0uijGpaFdb
|
|
23
|
+
gxItsNkk8FyUYgqB9LU/bSntYFs0pYK5SZnKVu6O3OcLuc3MxCMwerPVgvB04HSn
|
|
24
|
+
cLDCjAgwBK4JrmMQqXTR7IwTtuGobXgL+TcuXQkCgYBEAfZRQgVAEno/M6gHOUHY
|
|
25
|
+
38FjqS3a4/sb0clzjPWVDCWoHHtzZuz9Fnhc0NJK/XlmOMZ5UrAysSQZz1HFthZm
|
|
26
|
+
cuzaRlaRPxLf6VhLTnhUKlILPkejJuumhNX4c+TT7aYcZ9BNE6KS/hI+Q7o9P29P
|
|
27
|
+
EBt+YfXiQNkCOrCXj92Dpw==
|
|
28
|
+
-----END PRIVATE KEY-----
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|