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