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.
Files changed (52) hide show
  1. {PyPtt-1.2.3 → PyPtt-1.2.4}/PKG-INFO +1 -1
  2. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/__init__.py +1 -1
  3. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_board_info.py +8 -8
  4. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_newest_index.py +1 -1
  5. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_post.py +13 -13
  6. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_time.py +1 -1
  7. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_has_new_mail.py +1 -1
  8. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_loginout.py +1 -1
  9. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_mail.py +4 -4
  10. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_util.py +7 -7
  11. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/connect_core.py +5 -0
  12. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lib_util.py +1 -1
  13. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/screens.py +3 -9
  14. PyPtt-1.2.4/PyPtt/ssl/cert.pem +20 -0
  15. PyPtt-1.2.4/PyPtt/ssl/key.pem +28 -0
  16. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/PKG-INFO +1 -1
  17. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/SOURCES.txt +3 -1
  18. {PyPtt-1.2.3 → PyPtt-1.2.4}/setup.py +4 -1
  19. {PyPtt-1.2.3 → PyPtt-1.2.4}/LICENSE +0 -0
  20. {PyPtt-1.2.3 → PyPtt-1.2.4}/MANIFEST.in +0 -0
  21. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/PTT.py +0 -0
  22. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_bucket.py +0 -0
  23. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_call_status.py +0 -0
  24. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_change_pw.py +0 -0
  25. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_comment.py +0 -0
  26. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_del_post.py +0 -0
  27. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_board_list.py +0 -0
  28. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_bottom_post_list.py +0 -0
  29. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_favourite_board.py +0 -0
  30. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_post_index.py +0 -0
  31. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_get_user.py +0 -0
  32. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_give_money.py +0 -0
  33. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_mark_post.py +0 -0
  34. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_post.py +0 -0
  35. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_reply_post.py +0 -0
  36. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_search_user.py +0 -0
  37. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/_api_set_board_title.py +0 -0
  38. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/check_value.py +0 -0
  39. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/command.py +0 -0
  40. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/config.py +0 -0
  41. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/data_type.py +0 -0
  42. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/exceptions.py +0 -0
  43. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/i18n.py +0 -0
  44. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lang/en_US.yaml +0 -0
  45. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/lang/zh_TW.yaml +0 -0
  46. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/log.py +0 -0
  47. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt/service.py +0 -0
  48. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/dependency_links.txt +0 -0
  49. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/requires.txt +0 -0
  50. {PyPtt-1.2.3 → PyPtt-1.2.4}/PyPtt.egg-info/top_level.txt +0 -0
  51. {PyPtt-1.2.3 → PyPtt-1.2.4}/README.md +0 -0
  52. {PyPtt-1.2.3 → PyPtt-1.2.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyPtt
3
- Version: 1.2.3
3
+ Version: 1.2.4
4
4
  Summary: PyPtt
5
5
  Home-page: https://pyptt.cc/
6
6
  Author: CodingMan
@@ -1,4 +1,4 @@
1
- __version__ = '1.2.3'
1
+ __version__ = '1.2.4'
2
2
 
3
3
  from .PTT import API
4
4
  from .data_type import *
@@ -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
 
@@ -8,7 +8,7 @@ from . import i18n
8
8
  from . import log
9
9
  from . import screens
10
10
 
11
- pattern = re.compile('[\d]+:[\d][\d]')
11
+ pattern = re.compile(r'[\d]+:[\d][\d]')
12
12
 
13
13
 
14
14
  def get_time(api) -> str:
@@ -17,7 +17,7 @@ def has_new_mail(api) -> int:
17
17
  cmd = ''.join(cmd_list)
18
18
  current_capacity = None
19
19
  plus_count = 0
20
- index_pattern = re.compile('(\d+)')
20
+ index_pattern = re.compile(r'(\d+)')
21
21
  checked_index_list = []
22
22
  break_detect = False
23
23
 
@@ -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-----
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PyPtt
3
- Version: 1.2.3
3
+ Version: 1.2.4
4
4
  Summary: PyPtt
5
5
  Home-page: https://pyptt.cc/
6
6
  Author: CodingMan
@@ -45,4 +45,6 @@ PyPtt.egg-info/dependency_links.txt
45
45
  PyPtt.egg-info/requires.txt
46
46
  PyPtt.egg-info/top_level.txt
47
47
  PyPtt/lang/en_US.yaml
48
- PyPtt/lang/zh_TW.yaml
48
+ PyPtt/lang/zh_TW.yaml
49
+ PyPtt/ssl/cert.pem
50
+ PyPtt/ssl/key.pem
@@ -123,6 +123,9 @@ setup(
123
123
  'PyYAML',
124
124
  ],
125
125
  package_data={
126
- 'PyPtt': ['lang/*.yaml'],
126
+ 'PyPtt': [
127
+ 'lang/*.yaml',
128
+ 'ssl/*.pem',
129
+ ],
127
130
  }
128
131
  )
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