PyPtt 2.3.8__tar.gz → 2.3.9__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 (104) hide show
  1. {pyptt-2.3.8 → pyptt-2.3.9}/PKG-INFO +1 -1
  2. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/__init__.py +1 -1
  3. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/screens.py +3 -2
  4. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt.egg-info/PKG-INFO +1 -1
  5. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_vt100_parser.py +6 -0
  6. {pyptt-2.3.8 → pyptt-2.3.9}/LICENSE +0 -0
  7. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/PTT.py +0 -0
  8. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_bucket.py +0 -0
  9. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_call_status.py +0 -0
  10. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_change_pw.py +0 -0
  11. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_comment.py +0 -0
  12. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_del_post.py +0 -0
  13. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_board_info.py +0 -0
  14. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_board_list.py +0 -0
  15. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_bottom_post_list.py +0 -0
  16. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_favourite_board.py +0 -0
  17. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_newest_index.py +0 -0
  18. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_post.py +0 -0
  19. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_post_index.py +0 -0
  20. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_post_list.py +0 -0
  21. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_time.py +0 -0
  22. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_user.py +0 -0
  23. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_get_waterball.py +0 -0
  24. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_give_money.py +0 -0
  25. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_has_new_mail.py +0 -0
  26. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_loginout.py +0 -0
  27. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_mail.py +0 -0
  28. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_mark_post.py +0 -0
  29. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_post.py +0 -0
  30. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_reply_post.py +0 -0
  31. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_search_user.py +0 -0
  32. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_set_board_title.py +0 -0
  33. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_set_signature_file.py +0 -0
  34. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_api_util.py +0 -0
  35. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_uao/LICENSE +0 -0
  36. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_uao/__init__.py +0 -0
  37. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_uao/b2u.py +0 -0
  38. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/_uao/u2b.py +0 -0
  39. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/api_server.py +0 -0
  40. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/check_value.py +0 -0
  41. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/command.py +0 -0
  42. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/config.py +0 -0
  43. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/connect_core.py +0 -0
  44. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/data_type.py +0 -0
  45. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/exceptions.py +0 -0
  46. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/i18n.py +0 -0
  47. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/lang_en_US.py +0 -0
  48. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/lang_zh_TW.py +0 -0
  49. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/lib_util.py +0 -0
  50. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/log.py +0 -0
  51. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/service.py +0 -0
  52. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt/ssl_config.py +0 -0
  53. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt.egg-info/SOURCES.txt +0 -0
  54. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt.egg-info/dependency_links.txt +0 -0
  55. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt.egg-info/requires.txt +0 -0
  56. {pyptt-2.3.8 → pyptt-2.3.9}/PyPtt.egg-info/top_level.txt +0 -0
  57. {pyptt-2.3.8 → pyptt-2.3.9}/README.md +0 -0
  58. {pyptt-2.3.8 → pyptt-2.3.9}/pyproject.toml +0 -0
  59. {pyptt-2.3.8 → pyptt-2.3.9}/setup.cfg +0 -0
  60. {pyptt-2.3.8 → pyptt-2.3.9}/setup.py +0 -0
  61. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_backup_effective.py +0 -0
  62. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_backup_param.py +0 -0
  63. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_bucket.py +0 -0
  64. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_change_pw.py +0 -0
  65. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_comment.py +0 -0
  66. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_connect_core_timeout.py +0 -0
  67. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_del_post.py +0 -0
  68. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_del_post_unit.py +0 -0
  69. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_exceptions.py +0 -0
  70. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_fast_post.py +0 -0
  71. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_board_info.py +0 -0
  72. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_board_list.py +0 -0
  73. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_bottom_post_list.py +0 -0
  74. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_content_formula.py +0 -0
  75. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_favourite_boards.py +0 -0
  76. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_mail.py +0 -0
  77. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_newest_index.py +0 -0
  78. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_post.py +0 -0
  79. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_post_list.py +0 -0
  80. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_post_list_parser.py +0 -0
  81. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_post_parser.py +0 -0
  82. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_time.py +0 -0
  83. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_user.py +0 -0
  84. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_get_waterball.py +0 -0
  85. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_give_money.py +0 -0
  86. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_half_dead_connection.py +0 -0
  87. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_i18n.py +0 -0
  88. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_incremental_parity.py +0 -0
  89. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_init.py +0 -0
  90. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_logger.py +0 -0
  91. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_login_logout.py +0 -0
  92. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_mail_send_and_del.py +0 -0
  93. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_mark_post.py +0 -0
  94. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_parse_query_post.py +0 -0
  95. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_post.py +0 -0
  96. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_post_anonymous.py +0 -0
  97. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_pyte_parity.py +0 -0
  98. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_reply_post.py +0 -0
  99. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_search_user.py +0 -0
  100. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_service.py +0 -0
  101. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_set_board_title.py +0 -0
  102. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_set_signature_file.py +0 -0
  103. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_status_line.py +0 -0
  104. {pyptt-2.3.8 → pyptt-2.3.9}/tests/test_uao_codec.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPtt
3
- Version: 2.3.8
3
+ Version: 2.3.9
4
4
  Summary: PyPtt github: https://github.com/PyPtt/PyPtt
5
5
  Author-email: CodingMan <pttcodingman@gmail.com>
6
6
  License: GNU Lesser General Public License v3 (LGPLv3)
@@ -1,4 +1,4 @@
1
- __version__ = '2.3.8'
1
+ __version__ = '2.3.9'
2
2
  __author__ = 'CodingMan'
3
3
  __email__ = 'pttcodingman@gmail.com'
4
4
 
@@ -267,8 +267,9 @@ def show(config, screen_queue, function_name=None):
267
267
 
268
268
  xy_pattern_h = re.compile(r'^=ESC=\[[\d]+;[\d]+H')
269
269
  xy_pattern_s = re.compile(r'^=ESC=\[[\d]+;[\d]+s')
270
- # SGR 顏色 + DEC 私有模式開關 (ESC[?2026h/l 同步輸出): 後者若留著, 引擎會當未知 escape 而丟掉其後整段畫面
271
- _color_sgr = re.compile(r'\x1B\[(?:[\d+;]*m|\?[\d;]*[hl])')
270
+ # SGR 顏色 + DEC 私有模式開關 (ESC[?2026h/l 同步輸出) + DSR 查詢 (ESC[6n, PTT 不等回應):
271
+ # 後兩者若留著, 引擎會當未知 escape 而丟掉其後整段畫面
272
+ _color_sgr = re.compile(r'\x1B\[(?:[\d+;]*m|\?[\d;]*[hl]|\d*n)')
272
273
 
273
274
 
274
275
  def _preprocess(data: str) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyPtt
3
- Version: 2.3.8
3
+ Version: 2.3.9
4
4
  Summary: PyPtt github: https://github.com/PyPtt/PyPtt
5
5
  Author-email: CodingMan <pttcodingman@gmail.com>
6
6
  License: GNU Lesser General Public License v3 (LGPLv3)
@@ -451,3 +451,9 @@ def test_dec_private_mode_escape_does_not_drop_screen():
451
451
  # PTT 送 ESC[?2026h/l (同步輸出); 沒被吃掉時引擎會在此中止, 整個畫面變空白 (登入 LoginError)
452
452
  lines = parse(b'\x1b[2J\x1b[?2026h\x1b[3;1Hhello\x1b[?2026l\x1b[4;1Hworld')
453
453
  assert 'hello' in lines[2] and 'world' in lines[3]
454
+
455
+
456
+ def test_dsr_query_is_ignored():
457
+ # PTT 歡迎畫面送 ESC[6n (DSR 游標位置查詢) 且不等回應; 沒被吃掉時畫面凍結在登入提示之前 (LoginError)
458
+ lines = parse(b'\x1b[2J\x1b[3;1Hhello\x1b[6n\x1b[4;1Hworld')
459
+ assert 'hello' in lines[2] and 'world' in lines[3]
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
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
File without changes
File without changes
File without changes
File without changes