From 68f28fdac5d106b674bb384de3e616cd6c65cbe8 Mon Sep 17 00:00:00 2001 From: "emdee@macaw.me" Date: Sun, 17 Dec 2023 00:00:38 +0000 Subject: [PATCH] fixes --- .gitignore | 3 + .rsync.sh | 7 ++ setup.py | 62 ++-------------- toxygen/app.py | 19 +++-- toxygen/av/calls.py | 21 ++---- toxygen/bootstrap/bootstrap.py | 6 +- toxygen/contacts/basecontact.py | 4 +- toxygen/contacts/contact_menu.py | 2 +- toxygen/contacts/contact_provider.py | 21 ++---- toxygen/contacts/contacts_manager.py | 18 ++--- toxygen/contacts/group_chat.py | 8 +- toxygen/contacts/group_factory.py | 2 +- toxygen/file_transfers/.#file_transfers.py | 1 + toxygen/file_transfers/file_transfers.py | 18 +++-- .../file_transfers/file_transfers_handler.py | 61 +++++++++++++--- .../file_transfers_messages_service.py | 7 +- toxygen/groups/group_peer.py | 2 +- toxygen/groups/groups_service.py | 6 +- toxygen/groups/peers_list.py | 2 +- toxygen/main.py | 19 +++-- toxygen/messenger/messages.py | 2 +- toxygen/messenger/messenger.py | 4 +- toxygen/middleware/callbacks.py | 26 +++---- toxygen/middleware/threads.py | 6 +- toxygen/middleware/tox_factory.py | 73 +++++-------------- toxygen/tests/logging_toxygen_echo.py | 24 +++--- toxygen/tests/support_testing.py | 12 +-- toxygen/tests/test_gdb.py | 4 +- toxygen/tests/tests_socks.py | 12 +-- toxygen/tests/tests_wrapper.py | 12 +-- toxygen/ui/av_widgets.py | 2 +- toxygen/ui/contact_items.py | 2 +- toxygen/ui/group_peers_list.py | 2 +- toxygen/ui/groups_widgets.py | 2 +- toxygen/ui/menu.py | 2 +- toxygen/ui/messages_widgets.py | 2 +- toxygen/ui/peer_screen.py | 2 +- toxygen/user_data/profile_manager.py | 8 +- toxygen/user_data/settings.py | 18 ++--- 39 files changed, 219 insertions(+), 285 deletions(-) create mode 100644 .rsync.sh create mode 120000 toxygen/file_transfers/.#file_transfers.py diff --git a/.gitignore b/.gitignore index 3a6d1e9..3c1676f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.pylint.err +.pylint.out *.pyc *.pyo toxygen/toxcore @@ -9,6 +11,7 @@ tests/avatars toxygen/libs .idea *~ +#* *.iml *.so *.log diff --git a/.rsync.sh b/.rsync.sh new file mode 100644 index 0000000..12dc35f --- /dev/null +++ b/.rsync.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +find * -name \*.py | xargs grep -l '[ ]*$' | xargs sed -i -e 's/[ ]*$//' +rsync "$@" -vax --include \*.py \ + --exclude Toxygen.egg-info --exclude build \ + --exclude \*.pyc --exclude .pyl\* --exclude \*~ \ + ./ ../toxygen.git/|grep -v /$ diff --git a/setup.py b/setup.py index c1e802c..25f8bde 100644 --- a/setup.py +++ b/setup.py @@ -1,45 +1,15 @@ -from setuptools import setup -from setuptools.command.install import install -from platform import system -from subprocess import call -import main import sys import os -from utils.util import curr_directory, join_path +from setuptools import setup +from setuptools.command.install import install +version = '1.0.0' -version = main.__version__ + '.0' - - -if system() == 'Windows': - MODULES = ['PyQt5', 'PyAudio', 'numpy', 'opencv-python', 'pydenticon', 'cv2'] -else: - MODULES = ['pydenticon'] - MODULES.append('PyQt5') - try: - import pyaudio - except ImportError: - MODULES.append('PyAudio') - try: - import numpy - except ImportError: - MODULES.append('numpy') - try: - import cv2 - except ImportError: - MODULES.append('opencv-python') - try: - import coloredlogs - except ImportError: - MODULES.append('coloredlogs') - try: - import pyqtconsole - except ImportError: - MODULES.append('pyqtconsole') - +MODULES = ['argparse', 'PyQt5', 'PyAudio', 'numpy', 'opencv-python', 'cv2', + 'pydenticon', 'pyqtconsole', 'toxygen_wrapper'] # qweechat def get_packages(): - directory = join_path(curr_directory(__file__), 'toxygen') + directory = os.path.join(os.path.dirname(__file__), 'tox_wrapper') for root, dirs, files in os.walk(directory): packages = map(lambda d: 'toxygen.' + d, dirs) packages = ['toxygen'] + list(packages) @@ -50,22 +20,6 @@ class InstallScript(install): def run(self): install.run(self) - try: - if system() != 'Windows': - call(["toxygen", "--clean"]) - except: - try: - params = list(filter(lambda x: x.startswith('--prefix='), sys.argv)) - if params: - path = params[0][len('--prefix='):] - if path[-1] not in ('/', '\\'): - path += '/' - path += 'bin/toxygen' - if system() != 'Windows': - call([path, "--clean"]) - except: - pass - setup(name='Toxygen', version=version, @@ -81,13 +35,13 @@ setup(name='Toxygen', include_package_data=True, classifiers=[ 'Programming Language :: Python :: 3 :: Only', - 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.11', ], entry_points={ 'console_scripts': ['toxygen=toxygen.main:main'] }, cmdclass={ - 'install': InstallScript + 'install': InstallScript, }, zip_safe=False ) diff --git a/toxygen/app.py b/toxygen/app.py index 4d31e10..492a5d5 100644 --- a/toxygen/app.py +++ b/toxygen/app.py @@ -5,6 +5,7 @@ import traceback from random import shuffle import threading from time import sleep, time +from copy import deepcopy from gevent import monkey; monkey.patch_all(); del monkey # noqa import gevent @@ -36,7 +37,7 @@ from middleware import threads import middleware.callbacks as callbacks import updater.updater as updater from middleware.tox_factory import tox_factory -import wrapper.toxencryptsave as tox_encrypt_save +import tox_wrapper.toxencryptsave as tox_encrypt_save import user_data.toxes from user_data import settings from user_data.settings import get_user_config_path, merge_args_into_settings @@ -74,7 +75,7 @@ from ui.widgets_factory import WidgetsFactory from user_data.backup_service import BackupService import styles.style # TODO: dynamic loading -import wrapper_tests.support_testing as ts +import tox_wrapper.tests.support_testing as ts global LOG import logging @@ -147,7 +148,6 @@ sSTYLE = """ .QTextSingleLine {font-family Courier; weight: 75; } .QToolBar { font-weight: bold; } """ -from copy import deepcopy class App: def __init__(self, version, oArgs): @@ -170,7 +170,8 @@ class App: self._app = self._settings = self._profile_manager = None self._plugin_loader = self._messenger = None self._tox = self._ms = self._init = self._main_loop = self._av_loop = None - self._uri = self._toxes = self._tray = self._file_transfer_handler = self._contacts_provider = None + self._uri = self._toxes = self._tray = None + self._file_transfer_handler = self._contacts_provider = None self._friend_factory = self._calls_manager = None self._contacts_manager = self._smiley_loader = None self._group_peer_factory = self._tox_dns = self._backup_service = None @@ -223,8 +224,6 @@ class App: self._load_app_styles() if self._args.language != 'English': - # > /var/local/src/toxygen/toxygen/app.py(303)_load_app_translations()->None - # -> self._app.translator = translator # (Pdb) Fatal Python error: Segmentation fault self._load_app_translations() self._create_dependencies() @@ -270,7 +269,7 @@ class App: LOG.debug("quit") self._stop_app() - # failsafe: segfaults on exit + # failsafe: segfaults on exit - maybe it's Qt if hasattr(self, '_tox'): if self._tox and hasattr(self._tox, 'kill'): LOG.debug(f"quit: Killing {self._tox}") @@ -739,7 +738,7 @@ class App: self._groups_service, history, self._contacts_provider) - if False: + if True: # try it self._tray = tray.init_tray(self._profile, self._settings, self._ms, self._toxes) @@ -754,7 +753,7 @@ class App: self._calls_manager, self._groups_service, self._toxes, self) - if False: + if True: # try it # the tray icon does not die with the app self._tray.show() self._ms.show() @@ -979,7 +978,7 @@ class App: self._ms.log_console() def _test_main(self): - from toxygen_wrapper.wrapper_tests.tests_wrapper import main as tests_main + from toxygen_tox_wrapper.tox_wrapper.tests.tests_wrapper import main as tests_main LOG.debug("_test_main") if not self._tox: return title = 'Extended Test Suite' diff --git a/toxygen/av/calls.py b/toxygen/av/calls.py index f9957e4..8fdfa10 100644 --- a/toxygen/av/calls.py +++ b/toxygen/av/calls.py @@ -4,13 +4,16 @@ import time import threading import itertools -from wrapper.toxav_enums import * +from tox_wrapper.toxav_enums import * +from tox_wrapper.tests import support_testing as ts +from tox_wrapper.tests.support_testing import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE + from av import screen_sharing from av.call import Call import common.tox_save from utils import ui as util_ui -import wrapper_tests.support_testing as ts +import tox_wrapper.tests.support_testing as ts from middleware.threads import invoke_in_main_thread from main import sleep from middleware.threads import BaseThread @@ -18,18 +21,6 @@ from middleware.threads import BaseThread global LOG import logging LOG = logging.getLogger('app.'+__name__) -# callbacks can be called in any thread so were being careful -def LOG_ERROR(l): print('EROR< '+l) -def LOG_WARN(l): print('WARN< '+l) -def LOG_INFO(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 20-1 - if bIsVerbose: print('INFO< '+l) -def LOG_DEBUG(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10-1 - if bIsVerbose: print('DBUG< '+l) -def LOG_TRACE(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel < 10-1 - pass # print('TRACE+ '+l) TIMER_TIMEOUT = 30.0 bSTREAM_CALLBACK = False @@ -132,7 +123,7 @@ class AV(common.tox_save.ToxAvSave): self._toxav.answer(friend_number, self._audio_krate_tox_audio if audio_enabled else 0, self._audio_krate_tox_video if video_enabled else 0) - except ArgumentError as e: + except Exception as e: LOG.debug(f"AV accept_call error from {friend_number} {self._running}" + f"{e}") raise diff --git a/toxygen/bootstrap/bootstrap.py b/toxygen/bootstrap/bootstrap.py index 3bfcf07..ec00d8b 100644 --- a/toxygen/bootstrap/bootstrap.py +++ b/toxygen/bootstrap/bootstrap.py @@ -11,9 +11,9 @@ except ImportError: certifi = None from user_data.settings import get_user_config_path -from wrapper_tests.support_testing import _get_nodes_path -from wrapper_tests.support_http import download_url -import wrapper_tests.support_testing as ts +from tox_wrapper.tests.support_testing import _get_nodes_path +from tox_wrapper.tests.support_http import download_url +import tox_wrapper.tests.support_testing as ts global LOG import logging diff --git a/toxygen/contacts/basecontact.py b/toxygen/contacts/basecontact.py index fb4da44..c80a75d 100644 --- a/toxygen/contacts/basecontact.py +++ b/toxygen/contacts/basecontact.py @@ -1,7 +1,7 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- from user_data.settings import * from PyQt5 import QtCore, QtGui -from wrapper.toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE +from tox_wrapper.toxcore_enums_and_consts import TOX_PUBLIC_KEY_SIZE import utils.util as util import common.event as event import contacts.common as common @@ -117,7 +117,7 @@ class BaseContact: self._avatar_changed_event(avatar_path) except Exception as e: pass - + def reset_avatar(self, generate_new): avatar_path = self.get_avatar_path() if os.path.isfile(avatar_path) and not avatar_path == self._get_default_avatar_path(): diff --git a/toxygen/contacts/contact_menu.py b/toxygen/contacts/contact_menu.py index 695a721..eab2585 100644 --- a/toxygen/contacts/contact_menu.py +++ b/toxygen/contacts/contact_menu.py @@ -2,7 +2,7 @@ from PyQt5 import QtWidgets import utils.ui as util_ui -from wrapper.toxcore_enums_and_consts import * +from tox_wrapper.toxcore_enums_and_consts import * global LOG import logging diff --git a/toxygen/contacts/contact_provider.py b/toxygen/contacts/contact_provider.py index 94266bd..a9d16a6 100644 --- a/toxygen/contacts/contact_provider.py +++ b/toxygen/contacts/contact_provider.py @@ -7,17 +7,7 @@ import logging LOG = logging.getLogger(__name__) # callbacks can be called in any thread so were being careful -def LOG_ERROR(l): print('EROR< '+l) -def LOG_WARN(l): print('WARN< '+l) -def LOG_INFO(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 20-1 - if bIsVerbose: print('INFO< '+l) -def LOG_DEBUG(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10-1 - if bIsVerbose: print('DBUG< '+l) -def LOG_TRACE(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel < 10-1 - pass # print('TRACE+ '+l) +from av.calls import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE class ContactProvider(tox_save.ToxSave): @@ -52,10 +42,9 @@ class ContactProvider(tox_save.ToxSave): try: friend_numbers = self._tox.self_get_friend_list() except Exception as e: - LOG_WARN(f"CP.get_all_friends NO {friend_numbers} {e} ") + LOG_WARN(f"CP.get_all_friends EXCEPTION {e} ") return None friends = map(lambda n: self.get_friend_by_number(n), friend_numbers) - return list(friends) # Groups @@ -121,7 +110,7 @@ class ContactProvider(tox_save.ToxSave): return group group = self._group_factory.create_group_by_public_key(public_key) if group is None: - LOG_ERROR(f"get_group_by_public_key NULL group public_key={get_group_by_chat_id}") + LOG_ERROR(f"get_group_by_public_key NULL group public_key={public_key}") else: self._add_to_cache(public_key, group) @@ -139,8 +128,8 @@ class ContactProvider(tox_save.ToxSave): def get_group_peer_by_public_key(self, group, public_key): peer = group.get_peer_by_public_key(public_key) - - return self._get_group_peer(group, peer) + if peer: + return self._get_group_peer(group, peer) # All contacts diff --git a/toxygen/contacts/contacts_manager.py b/toxygen/contacts/contacts_manager.py index 68621ab..951388f 100644 --- a/toxygen/contacts/contacts_manager.py +++ b/toxygen/contacts/contacts_manager.py @@ -8,23 +8,19 @@ from messenger.messages import * from common.tox_save import ToxSave from contacts.group_peer_contact import GroupPeerContact from groups.group_peer import GroupChatPeer +from middleware.callbacks import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE +import tox_wrapper.toxcore_enums_and_consts as enums # LOG=util.log global LOG import logging LOG = logging.getLogger('app.'+__name__) -def LOG_ERROR(l): print('ERROR_: '+l) -def LOG_WARN(l): print('WARN_: '+l) -def LOG_INFO(l): print('INFO_: '+l) -def LOG_DEBUG(l): print('DEBUG_: '+l) -def LOG_TRACE(l): pass # print('TRACE+ '+l) - UINT32_MAX = 2 ** 32 -1 def set_contact_kind(contact): - bInvite = len(contact.name) == TOX_PUBLIC_KEY_SIZE * 2 and \ + bInvite = len(contact.name) == enums.TOX_PUBLIC_KEY_SIZE * 2 and \ contact.status_message == '' bBot = not bInvite and contact.name.lower().endswith(' bot') if type(contact) == Friend and bInvite: @@ -377,8 +373,8 @@ class ContactsManager(ToxSave): """ Block user with specified tox id (or public key) - delete from friends list and ignore friend requests """ - tox_id = tox_id[:TOX_PUBLIC_KEY_SIZE * 2] - if tox_id == self._tox.self_get_address()[:TOX_PUBLIC_KEY_SIZE * 2]: + tox_id = tox_id[:enums.TOX_PUBLIC_KEY_SIZE * 2] + if tox_id == self._tox.self_get_address()[:enums.TOX_PUBLIC_KEY_SIZE * 2]: return if tox_id not in self._settings['blocked']: self._settings['blocked'].append(tox_id) @@ -484,14 +480,14 @@ class ContactsManager(ToxSave): retval = '' try: message = message or 'Hello! Add me to your contact list please' - if len(sToxPkOrId) == TOX_PUBLIC_KEY_SIZE * 2: # public key + if len(sToxPkOrId) == enums.TOX_PUBLIC_KEY_SIZE * 2: # public key self.add_friend(sToxPkOrId) title = 'Friend added' text = 'Friend added without sending friend request' else: num = self._tox.friend_add(sToxPkOrId, message.encode('utf-8')) if num < UINT32_MAX: - tox_pk = sToxPkOrId[:TOX_PUBLIC_KEY_SIZE * 2] + tox_pk = sToxPkOrId[:enums.TOX_PUBLIC_KEY_SIZE * 2] self._add_friend(tox_pk) self.update_filtration() title = 'Friend added' diff --git a/toxygen/contacts/group_chat.py b/toxygen/contacts/group_chat.py index d77535b..dbe1019 100644 --- a/toxygen/contacts/group_chat.py +++ b/toxygen/contacts/group_chat.py @@ -4,18 +4,14 @@ from contacts import contact from contacts.contact_menu import GroupMenuGenerator import utils.util as util from groups.group_peer import GroupChatPeer -from wrapper import toxcore_enums_and_consts as constants +from tox_wrapper import toxcore_enums_and_consts as constants from common.tox_save import ToxSave from groups.group_ban import GroupBan global LOG import logging LOG = logging.getLogger(__name__) -def LOG_ERROR(l): print('ERROR_: '+l) -def LOG_WARN(l): print('WARN_: '+l) -def LOG_INFO(l): print('INFO_: '+l) -def LOG_DEBUG(l): print('DEBUG_: '+l) -def LOG_TRACE(l): pass # print('TRACE+ '+l) +from av.calls import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE class GroupChat(contact.Contact, ToxSave): diff --git a/toxygen/contacts/group_factory.py b/toxygen/contacts/group_factory.py index 2763471..d7b26b7 100644 --- a/toxygen/contacts/group_factory.py +++ b/toxygen/contacts/group_factory.py @@ -2,7 +2,7 @@ from contacts.group_chat import GroupChat from common.tox_save import ToxSave -import wrapper.toxcore_enums_and_consts as constants +import tox_wrapper.toxcore_enums_and_consts as constants global LOG import logging diff --git a/toxygen/file_transfers/.#file_transfers.py b/toxygen/file_transfers/.#file_transfers.py new file mode 120000 index 0000000..c7d1b0b --- /dev/null +++ b/toxygen/file_transfers/.#file_transfers.py @@ -0,0 +1 @@ +root@devuan.29604:1700913818 \ No newline at end of file diff --git a/toxygen/file_transfers/file_transfers.py b/toxygen/file_transfers/file_transfers.py index e2c9d7b..a0a28df 100644 --- a/toxygen/file_transfers/file_transfers.py +++ b/toxygen/file_transfers/file_transfers.py @@ -1,11 +1,13 @@ +import os from os import chdir, remove, rename from os.path import basename, getsize, exists, dirname from time import time from common.event import Event from middleware.threads import invoke_in_main_thread -from wrapper.tox import Tox -from wrapper.toxcore_enums_and_consts import TOX_FILE_KIND, TOX_FILE_CONTROL +from tox_wrapper.tox import Tox +from tox_wrapper.toxcore_enums_and_consts import TOX_FILE_KIND, TOX_FILE_CONTROL +from middleware.callbacks import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE FILE_TRANSFER_STATE = { 'RUNNING': 0, @@ -172,11 +174,14 @@ class SendAvatar(SendTransfer): """ def __init__(self, path, tox, friend_number): - if path is None: + LOG_DEBUG(f"SendAvatar path={path} friend_number={friend_number}") + if path is None or not os.path.exists(path): avatar_hash = None else: with open(path, 'rb') as fl: - avatar_hash = Tox.hash(fl.read()) + data=fl.read() + LOG_DEBUG(f"SendAvatar data={data} type={type(data)}") + avatar_hash = tox.hash(data, None) super().__init__(path, tox, friend_number, TOX_FILE_KIND['AVATAR'], avatar_hash) @@ -218,8 +223,8 @@ class SendFromFileBuffer(SendTransfer): def send_chunk(self, position, size): super().send_chunk(position, size) if not size: - chdir(dirname(self._path)) - remove(self._path) + os.chdir(dirname(self._path)) + os.remove(self._path) # Receive file @@ -311,7 +316,6 @@ class ReceiveAvatar(ReceiveTransfer): Get friend's avatar. Doesn't need file transfer item """ MAX_AVATAR_SIZE = 512 * 1024 - def __init__(self, path, tox, friend_number, size, file_number): full_path = path + '.tmp' super().__init__(full_path, tox, friend_number, size, file_number) diff --git a/toxygen/file_transfers/file_transfers_handler.py b/toxygen/file_transfers/file_transfers_handler.py index ba1fea7..b77c6f0 100644 --- a/toxygen/file_transfers/file_transfers_handler.py +++ b/toxygen/file_transfers/file_transfers_handler.py @@ -1,10 +1,13 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- +from copy import deepcopy + from messenger.messages import * +from file_transfers.file_transfers import SendAvatar, is_inline from ui.contact_items import * import utils.util as util from common.tox_save import ToxSave -from wrapper_tests.support_testing import assert_main_thread -from copy import deepcopy + +from middleware.callbacks import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE # LOG=util.log global LOG @@ -36,6 +39,7 @@ class FileTransfersHandler(ToxSave): # File transfers support def incoming_file_transfer(self, friend_number, file_number, size, file_name): + # main thread """ New transfer :param friend_number: number of friend who sent file @@ -44,12 +48,15 @@ class FileTransfersHandler(ToxSave): :param file_name: file name without path """ friend = self._get_friend_by_number(friend_number) - if friend is None: return None + if friend is None: + LOG.info(f'incoming_file_handler Friend NULL friend_number={friend_number}') + return None auto = self._settings['allow_auto_accept'] and friend.tox_id in self._settings['auto_accept_from_friends'] - inline = is_inline(file_name) and self._settings['allow_inline'] + inline = False # ?is_inline(file_name) and self._settings['allow_inline'] file_id = self._tox.file_get_file_id(friend_number, file_number) accepted = True if file_id in self._paused_file_transfers: + LOG_INFO(f'incoming_file_handler paused friend_number={friend_number}') (path, ft_friend_number, is_incoming, start_position) = self._paused_file_transfers[file_id] pos = start_position if os.path.exists(path) else 0 if pos >= size: @@ -60,16 +67,22 @@ class FileTransfersHandler(ToxSave): friend, accepted, size, file_name, file_number) self.accept_transfer(path, friend_number, file_number, size, False, pos) elif inline and size < 1024 * 1024: + LOG_INFO(f'incoming_file_handler small friend_number={friend_number}') self._file_transfers_message_service.add_incoming_transfer_message( friend, accepted, size, file_name, file_number) self.accept_transfer('', friend_number, file_number, size, True) elif auto: + # accepted is really started + LOG_INFO(f'incoming_file_handler auto friend_number={friend_number}') path = self._settings['auto_accept_path'] or util.curr_directory() self._file_transfers_message_service.add_incoming_transfer_message( friend, accepted, size, file_name, file_number) self.accept_transfer(path + '/' + file_name, friend_number, file_number, size) else: + LOG_INFO(f'incoming_file_handler reject friend_number={friend_number}') accepted = False + # FixME: need GUI ask + # accepted is really started self._file_transfers_message_service.add_incoming_transfer_message( friend, accepted, size, file_name, file_number) @@ -156,12 +169,15 @@ class FileTransfersHandler(ToxSave): def send_inline(self, data, file_name, friend_number, is_resend=False): friend = self._get_friend_by_number(friend_number) - if friend is None: return None + if friend is None: + LOG_WARN("fsend_inline Error friend is None file_name: {file_name}") + return if friend.status is None and not is_resend: self._file_transfers_message_service.add_unsent_file_message(friend, file_name, data) return elif friend.status is None and is_resend: - raise RuntimeError() + LOG_WARN("fsend_inline Error friend.status is None file_name: {file_name}") + return st = SendFromBuffer(self._tox, friend.number, data, file_name) self._send_file_add_set_handlers(st, friend, file_name, True) @@ -179,7 +195,7 @@ class FileTransfersHandler(ToxSave): self._file_transfers_message_service.add_unsent_file_message(friend, path, None) return elif friend.status is None and is_resend: - LOG.error('Error in sending') + LOG_WARN('Error in sending') return st = SendTransfer(path, self._tox, friend_number, TOX_FILE_KIND['DATA'], file_id) file_name = os.path.basename(path) @@ -236,7 +252,7 @@ class FileTransfersHandler(ToxSave): self.send_file(path, friend_number, True, key) del self._paused_file_transfers[key] except Exception as ex: - LOG.error('Exception in file sending: ' + str(ex)) + LOG_ERROR('send_files EXCEPTION in file sending: ' + str(ex)) def friend_exit(self, friend_number): # RuntimeError: dictionary changed size during iteration @@ -248,9 +264,21 @@ class FileTransfersHandler(ToxSave): continue ft = self._file_transfers[(friend_num, file_num)] if type(ft) is SendTransfer: - self._paused_file_transfers[ft.file_id] = [ft.path, friend_num, False, -1] + try: + file_id = ft.file_id + except Exception as e: + LOG_WARN("friend_exit SendTransfer Error getting file_id: {e}") + # drop through + else: + self._paused_file_transfers[file_id] = [ft.path, friend_num, False, -1] elif type(ft) is ReceiveTransfer and ft.state != FILE_TRANSFER_STATE['INCOMING_NOT_STARTED']: - self._paused_file_transfers[ft.file_id] = [ft.path, friend_num, True, ft.total_size()] + try: + file_id = ft.file_id + except Exception as e: + LOG_WARN("friend_exit ReceiveTransfer Error getting file_id: {e}") + # drop through + else: + self._paused_file_transfers[file_id] = [ft.path, friend_num, True, ft.total_size()] self.cancel_transfer(friend_num, file_num, True) # Avatars support @@ -260,15 +288,24 @@ class FileTransfersHandler(ToxSave): :param friend_number: number of friend who should get new avatar :param avatar_path: path to avatar or None if reset """ + return if (avatar_path, friend_number,) in self.lBlockAvatars: return - + if friend_number is None: + LOG_WARN(f"send_avatar friend_number NULL {friend_number}") + return + if avatar_path and type(avatar_path) != str: + LOG_WARN(f"send_avatar avatar_path type {type(avatar_path)}") + return + LOG_INFO(f"send_avatar avatar_path={avatar_path} friend_number={friend_number}") try: + # self NOT missing - who's self? sa = SendAvatar(avatar_path, self._tox, friend_number) + LOG_INFO(f"send_avatar avatar_path={avatar_path} sa={sa}") self._file_transfers[(friend_number, sa.file_number)] = sa except Exception as e: # ArgumentError('This client is currently not connected to the friend.') - LOG.error(f"send_avatar {e}") + LOG_WARN(f"send_avatar EXCEPTION {e}") self.lBlockAvatars.append( (avatar_path, friend_number,) ) def incoming_avatar(self, friend_number, file_number, size): diff --git a/toxygen/file_transfers/file_transfers_messages_service.py b/toxygen/file_transfers/file_transfers_messages_service.py index 9462b2e..ce7aa7b 100644 --- a/toxygen/file_transfers/file_transfers_messages_service.py +++ b/toxygen/file_transfers/file_transfers_messages_service.py @@ -6,11 +6,7 @@ global LOG import logging LOG = logging.getLogger('app.'+__name__) -def LOG_ERROR(l): print('ERROR_: '+l) -def LOG_WARN(l): print('WARN_: '+l) -def LOG_INFO(l): print('INFO_: '+l) -def LOG_DEBUG(l): print('DEBUG_: '+l) -def LOG_TRACE(l): pass # print('TRACE+ '+l) +from av.calls import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE class FileTransfersMessagesService: @@ -23,6 +19,7 @@ class FileTransfersMessagesService: def add_incoming_transfer_message(self, friend, accepted, size, file_name, file_number): assert friend author = MessageAuthor(friend.name, MESSAGE_AUTHOR['FRIEND']) + # accepted is really started status = FILE_TRANSFER_STATE['RUNNING'] if accepted else FILE_TRANSFER_STATE['INCOMING_NOT_STARTED'] tm = TransferMessage(author, util.get_unix_time(), status, size, file_name, friend.number, file_number) diff --git a/toxygen/groups/group_peer.py b/toxygen/groups/group_peer.py index cb05fcb..9e644ee 100644 --- a/toxygen/groups/group_peer.py +++ b/toxygen/groups/group_peer.py @@ -34,7 +34,7 @@ class GroupChatPeer: is_current_user = property(get_is_current_user) def get_status_message(self): - return self._peer_status_message + return self._status_message status_message = property(get_status_message) diff --git a/toxygen/groups/groups_service.py b/toxygen/groups/groups_service.py index 844751d..e45a1e4 100644 --- a/toxygen/groups/groups_service.py +++ b/toxygen/groups/groups_service.py @@ -4,9 +4,9 @@ import common.tox_save as tox_save import utils.ui as util_ui from groups.peers_list import PeersListGenerator from groups.group_invite import GroupInvite -import wrapper.toxcore_enums_and_consts as constants -from wrapper.toxcore_enums_and_consts import * -from wrapper.tox import UINT32_MAX +import tox_wrapper.toxcore_enums_and_consts as constants +from tox_wrapper.toxcore_enums_and_consts import * +from tox_wrapper.tox import UINT32_MAX global LOG import logging diff --git a/toxygen/groups/peers_list.py b/toxygen/groups/peers_list.py index 4661e93..f5db042 100644 --- a/toxygen/groups/peers_list.py +++ b/toxygen/groups/peers_list.py @@ -1,5 +1,5 @@ from ui.group_peers_list import PeerItem, PeerTypeItem -from wrapper.toxcore_enums_and_consts import * +from tox_wrapper.toxcore_enums_and_consts import * from ui.widgets import * diff --git a/toxygen/main.py b/toxygen/main.py index d71ed7b..e4d5849 100644 --- a/toxygen/main.py +++ b/toxygen/main.py @@ -2,7 +2,6 @@ import sys import os import app -import argparse import logging import signal @@ -12,7 +11,7 @@ faulthandler.enable() import warnings warnings.filterwarnings('ignore') -import wrapper_tests.support_testing as ts +import tox_wrapper.tests.support_testing as ts try: from trepan.interfaces import server as Mserver from trepan.api import debug @@ -182,7 +181,6 @@ def main_parser(_=None, iMode=2): audio = setup_default_audio() default_video = setup_default_video() -# parser = argparse.ArgumentParser() parser = ts.oMainArgparser() parser.add_argument('--version', action='store_true', help='Prints Toxygen version') parser.add_argument('--clean', action='store_true', help='Delete toxcore libs from libs folder') @@ -240,10 +238,10 @@ def main_parser(_=None, iMode=2): parser.add_argument('--theme', type=str, default='default', choices=['dark', 'default'], help='Theme - style of UI') - parser.add_argument('--sleep', type=str, default='time', - # could expand this to tk, gtk, gevent... - choices=['qt','gevent','time'], - help='Sleep method - one of qt, gevent , time') +# parser.add_argument('--sleep', type=str, default='time', +# # could expand this to tk, gtk, gevent... +# choices=['qt','gevent','time'], +# help='Sleep method - one of qt, gevent , time') supported_languages = settings.supported_languages() parser.add_argument('--language', type=str, default='English', choices=supported_languages, @@ -318,6 +316,7 @@ def main(lArgs): aArgs = A() for key in oArgs.__dict__.keys(): setattr(aArgs, key, getattr(oArgs, key)) + #setattr(aArgs, 'video', setup_video(oArgs)) aArgs.video = setup_video(oArgs) assert 'video' in aArgs.__dict__ @@ -327,10 +326,10 @@ def main(lArgs): assert 'audio' in aArgs.__dict__ oArgs = aArgs - toxygen = app.App(__version__, oArgs) + oApp = app.App(__version__, oArgs) # for pyqtconsole - __builtins__.app = toxygen - i = toxygen.iMain() + __builtins__.app = oApp + i = oApp.iMain() return i if __name__ == '__main__': diff --git a/toxygen/messenger/messages.py b/toxygen/messenger/messages.py index 4c73fc6..47c6545 100644 --- a/toxygen/messenger/messages.py +++ b/toxygen/messenger/messages.py @@ -83,7 +83,7 @@ class Message: def _create_widget(self, *args): # overridden - pass + return None @staticmethod def _get_id(): diff --git a/toxygen/messenger/messenger.py b/toxygen/messenger/messenger.py index 48f9244..534ebc0 100644 --- a/toxygen/messenger/messenger.py +++ b/toxygen/messenger/messenger.py @@ -3,8 +3,8 @@ import common.tox_save as tox_save import utils.ui as util_ui from messenger.messages import * -from wrapper_tests.support_testing import assert_main_thread -from wrapper.toxcore_enums_and_consts import TOX_MAX_MESSAGE_LENGTH +from tox_wrapper.tests.support_testing import assert_main_thread +from tox_wrapper.toxcore_enums_and_consts import TOX_MAX_MESSAGE_LENGTH global LOG import logging diff --git a/toxygen/middleware/callbacks.py b/toxygen/middleware/callbacks.py index 5d76362..cd6f807 100644 --- a/toxygen/middleware/callbacks.py +++ b/toxygen/middleware/callbacks.py @@ -3,9 +3,9 @@ import sys import os import threading from PyQt5 import QtGui -from wrapper.toxcore_enums_and_consts import * -from wrapper.toxav_enums import * -from wrapper.tox import bin_to_string +from tox_wrapper.toxcore_enums_and_consts import * +from tox_wrapper.toxav_enums import * +from tox_wrapper.tox import bin_to_string import utils.ui as util_ui import utils.util as util from middleware.threads import invoke_in_main_thread, execute @@ -15,17 +15,17 @@ from datetime import datetime iMAX_INT32 = 4294967295 # callbacks can be called in any thread so were being careful -def LOG_ERROR(l): print('EROR< '+l) -def LOG_WARN(l): print('WARN< '+l) +def LOG_ERROR(l): print(f"EROR. {l}") +def LOG_WARN(l): print(f"WARN. {l}") def LOG_INFO(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 20-1 - if bIsVerbose: print('INFO< '+l) + bIsVerbose = not hasattr(__builtins__, 'app') or app.oArgs.loglevel <= 20-1 + if bIsVerbose: print(f"INFO. {l}") def LOG_DEBUG(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10-1 - if bIsVerbose: print('DBUG< '+l) + bIsVerbose = not hasattr(__builtins__, 'app') or app.oArgs.loglevel <= 10-1 + if bIsVerbose: print(f"DBUG. {l}") def LOG_TRACE(l): - bIsVerbose = hasattr(__builtins__, 'app') and app.oArgs.loglevel < 10-1 - pass # print('TRACE+ '+l) + bIsVerbose = not hasattr(__builtins__, 'app') or app.oArgs.loglevel < 10-1 + pass # print(f"TRACE. {l}") global aTIMES aTIMES=dict() @@ -102,7 +102,7 @@ def friend_status(contacts_manager, file_transfer_handler, profile, settings): """ Check friend's status (none, busy, away) """ - LOG_DEBUG(f"Friend's #{friend_number} status changed") + LOG_INFO(f"Friend's #{friend_number} status changed") key = f"friend_number {friend_number}" if bTooSoon(key, sSlot, 10): return friend = contacts_manager.get_friend_by_number(friend_number) @@ -240,7 +240,7 @@ def tox_file_recv(window, tray, profile, file_transfer_handler, contacts_manager """ def wrapped(tox, friend_number, file_number, file_type, size, file_name, file_name_size, user_data): if file_type == TOX_FILE_KIND['DATA']: - LOG_DEBUG(f'file_transfer_handler File') + LOG_INFO(f'file_transfer_handler File friend_number={friend_number}') try: file_name = str(file_name[:file_name_size], 'utf-8') except: diff --git a/toxygen/middleware/threads.py b/toxygen/middleware/threads.py index b98cf06..8a1d2e8 100644 --- a/toxygen/middleware/threads.py +++ b/toxygen/middleware/threads.py @@ -6,8 +6,8 @@ from PyQt5 import QtCore from bootstrap.bootstrap import * from bootstrap.bootstrap import download_nodes_list -from wrapper.toxcore_enums_and_consts import TOX_USER_STATUS, TOX_CONNECTION -import wrapper_tests.support_testing as ts +from tox_wrapper.toxcore_enums_and_consts import TOX_USER_STATUS, TOX_CONNECTION +import tox_wrapper.tests.support_testing as ts from utils import util import time @@ -86,7 +86,7 @@ class InitThread(BaseThread): def run(self): # DBUG+ InitThread run: ERROR name 'ts' is not defined - import wrapper_tests.support_testing as ts + import tox_wrapper.tests.support_testing as ts LOG_DEBUG('InitThread run: ') try: if self._is_first_start and ts.bAreWeConnected() and \ diff --git a/toxygen/middleware/tox_factory.py b/toxygen/middleware/tox_factory.py index a8e1815..4562714 100644 --- a/toxygen/middleware/tox_factory.py +++ b/toxygen/middleware/tox_factory.py @@ -1,59 +1,25 @@ # -*- mode: python; indent-tabs-mode: nil; py-indent-offset: 4; coding: utf-8 -*- -import user_data.settings -import wrapper.tox -import wrapper.toxcore_enums_and_consts as enums + import ctypes import traceback import os +from ctypes import * + +import user_data.settings +import tox_wrapper.tox +import tox_wrapper.toxcore_enums_and_consts as enums +from tox_wrapper.tests import support_testing as ts +# callbacks can be called in any thread so were being careful +# tox.py can be called by callbacks +from tox_wrapper.tests.support_testing import LOG_ERROR, LOG_WARN, LOG_INFO, LOG_DEBUG, LOG_TRACE global LOG import logging LOG = logging.getLogger('app.'+'tox_factory') -from ctypes import * from utils import util from utils import ui as util_ui -# callbacks can be called in any thread so were being careful -# tox.py can be called by callbacks -def LOG_ERROR(a): print('EROR> '+a) -def LOG_WARN(a): print('WARN> '+a) -def LOG_INFO(a): - bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 20 - if bVERBOSE: print('INFO> '+a) -def LOG_DEBUG(a): - bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10 - if bVERBOSE: print('DBUG> '+a) -def LOG_TRACE(a): - bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel < 10 - if bVERBOSE: print('TRAC> '+a) -def LOG_LOG(a): print('TRAC> '+a) - -def tox_log_cb(iTox, level, file, line, func, message, *args): - """ - * @param level The severity of the log message. - * @param file The source file from which the message originated. - * @param line The source line from which the message originated. - * @param func The function from which the message originated. - * @param message The log message. - * @param user_data The user data pointer passed to tox_new in options. - """ - try: - file = str(file, 'UTF-8') - # root WARNING 3network.c#944:b'send_packet'attempted to send message with network family 10 (probably IPv6) on IPv4 socket - if file == 'network.c' and line in [944, 660]: return - func = str(func, 'UTF-8') - message = str(message, 'UTF-8') - message = f"{file}#{line}:{func} {message}" - LOG_LOG(message) - except Exception as e: - LOG_ERROR(f"tox_log_cb {e}") - -#tox_log_handler (context=0x24763d0, -# level=LOGGER_LEVEL_TRACE, file=0x7fffe599fb99 "TCP_common.c", line=203, -# func=0x7fffe599fc50 <__func__.2> "read_TCP_packet", -# message=0x7fffba7fabd0 "recv buffer has 0 bytes, but requested 10 bytes", -# userdata=0x0) at /var/local/src/c-toxcore/toxcore/tox.c:78 def tox_factory(data=None, settings=None, args=None, app=None): """ @@ -68,7 +34,7 @@ def tox_factory(data=None, settings=None, args=None, app=None): user_data.settings.clean_settings(settings) try: - tox_options = wrapper.tox.Tox.options_new() + tox_options = tox_wrapper.tox.Tox.options_new() tox_options.contents.ipv6_enabled = settings['ipv6_enabled'] tox_options.contents.udp_enabled = settings['udp_enabled'] tox_options.contents.proxy_type = int(settings['proxy_type']) @@ -99,27 +65,28 @@ def tox_factory(data=None, settings=None, args=None, app=None): tox_options.contents.ipv6_enabled = False tox_options.contents.hole_punching_enabled = False - LOG.debug("wrapper.tox.Tox settings: " +repr(settings)) + LOG.debug("tox_wrapper.tox.Tox settings: " +repr(settings)) - if 'trace_enabled' in settings and settings['trace_enabled']: - LOG_INFO("settings['trace_enabled' disabled" ) + if 'trace_enabled' in settings and not settings['trace_enabled']: + LOG_DEBUG("settings['trace_enabled' disabled" ) elif tox_options._options_pointer: c_callback = CFUNCTYPE(None, c_void_p, c_int, c_char_p, c_int, c_char_p, c_char_p, c_void_p) - tox_options.self_logger_cb = c_callback(tox_log_cb) - wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( + tox_options.self_logger_cb = c_callback(ts.tox_log_cb) + tox_wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( tox_options._options_pointer, tox_options.self_logger_cb) + LOG_INFO("c-toxcore trace_enabled enabled" ) else: LOG_WARN("No tox_options._options_pointer to add self_logger_cb" ) - retval = wrapper.tox.Tox(tox_options) + retval = tox_wrapper.tox.Tox(tox_options) except Exception as e: if app and hasattr(app, '_log'): pass - LOG_ERROR(f"wrapper.tox.Tox failed: {e}") + LOG_ERROR(f"tox_wrapper.tox.Tox failed: {e}") LOG_WARN(traceback.format_exc()) raise if app and hasattr(app, '_log'): - app._log("DEBUG: wrapper.tox.Tox succeeded") + app._log("DEBUG: tox_wrapper.tox.Tox succeeded") return retval diff --git a/toxygen/tests/logging_toxygen_echo.py b/toxygen/tests/logging_toxygen_echo.py index c475424..37bc54e 100644 --- a/toxygen/tests/logging_toxygen_echo.py +++ b/toxygen/tests/logging_toxygen_echo.py @@ -32,15 +32,15 @@ def LOG_debug(a): print('DBUG_ '+a) def LOG_trace(a): pass # print('TRAC_ '+a) from middleware.tox_factory import tox_factory -import wrapper -import wrapper.toxcore_enums_and_consts as enums -from wrapper.toxcore_enums_and_consts import TOX_CONNECTION, TOX_USER_STATUS, \ +import tox_wrapper +import tox_wrapper.toxcore_enums_and_consts as enums +from tox_wrapper.toxcore_enums_and_consts import TOX_CONNECTION, TOX_USER_STATUS, \ TOX_MESSAGE_TYPE, TOX_PUBLIC_KEY_SIZE, TOX_FILE_CONTROL import user_data -from wrapper.libtox import LibToxCore -import wrapper_tests.support_testing as ts -from wrapper_tests.support_testing import oMainArgparser -from wrapper_tests.support_testing import logging_toxygen_echo +from tox_wrapper.libtox import LibToxCore +import tox_wrapper.tests.support_testing as ts +from tox_wrapper.tests.support_testing import oMainArgparser +from tox_wrapper.tests.support_testing import logging_toxygen_echo def sleep(fSec): if 'QtCore' in globals(): @@ -57,7 +57,7 @@ except ImportError as e: # logging.log(logging.DEBUG, f"coloredlogs not available: {e}") coloredlogs = None -import wrapper_tests.support_testing as ts +import tox_wrapper.tests.support_testing as ts if 'USER' in os.environ: sDATA_FILE = '/tmp/logging_toxygen_' +os.environ['USER'] +'.tox' elif 'USERNAME' in os.environ: @@ -71,7 +71,7 @@ iDHT_TRY = 0 #?SERVER = lLOCAL[-1] -class AV(wrapper.tox.ToxAV): +class AV(tox_wrapper.tox.ToxAV): def __init__(self, core): super(AV, self).__init__(core) self.core = self.get_tox() @@ -149,7 +149,7 @@ class EchoBot(): message_data_size, *largs): key = ''.join(chr(x) for x in public_key[:TOX_PUBLIC_KEY_SIZE]) - sPk = wrapper.tox.bin_to_string(key, TOX_PUBLIC_KEY_SIZE) + sPk = tox_wrapper.tox.bin_to_string(key, TOX_PUBLIC_KEY_SIZE) sMd = str(message_data, 'UTF-8') LOG.debug('on_friend_request ' +sPk +' ' +sMd) self.on_friend_request(sPk, sMd) @@ -339,7 +339,7 @@ def iMain(oArgs): oTox = tox_factory(data=opts.savedata_data, settings=opts, args=oArgs, app=None) else: - oTox = wrapper.tox.Tox(opts) + oTox = tox_wrapper.tox.Tox(opts) t = EchoBot(oTox) t._oargs = oArgs t.start() @@ -358,7 +358,7 @@ def iMain(oArgs): return iRet def oToxygenToxOptions(oArgs, data=None): - tox_options = wrapper.tox.Tox.options_new() + tox_options = tox_wrapper.tox.Tox.options_new() tox_options.contents.local_discovery_enabled = False tox_options.contents.dht_announcements_enabled = False diff --git a/toxygen/tests/support_testing.py b/toxygen/tests/support_testing.py index 8e1ea48..5b09086 100644 --- a/toxygen/tests/support_testing.py +++ b/toxygen/tests/support_testing.py @@ -36,11 +36,11 @@ try: except ImportError as e: nmap = False -import wrapper -from wrapper.toxcore_enums_and_consts import TOX_CONNECTION, TOX_USER_STATUS +import tox_wrapper +from tox_wrapper.toxcore_enums_and_consts import TOX_CONNECTION, TOX_USER_STATUS -from wrapper_tests.support_http import bAreWeConnected -from wrapper_tests.support_onions import (is_valid_fingerprint, +from tox_wrapper.tests.support_http import bAreWeConnected +from tox_wrapper.tests.support_onions import (is_valid_fingerprint, lIntroductionPoints, oGetStemController, sMapaddressResolv, sTorResolve) @@ -245,7 +245,7 @@ def tox_log_cb(level, filename, line, func, message, *args): def vAddLoggerCallback(tox_options, callback=None): if callback is None: - wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( + tox_wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( tox_options._options_pointer, POINTER(None)()) tox_options.self_logger_cb = None @@ -253,7 +253,7 @@ def vAddLoggerCallback(tox_options, callback=None): c_callback = CFUNCTYPE(None, c_void_p, c_int, c_char_p, c_int, c_char_p, c_char_p, c_void_p) tox_options.self_logger_cb = c_callback(callback) - wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( + tox_wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback( tox_options._options_pointer, tox_options.self_logger_cb) diff --git a/toxygen/tests/test_gdb.py b/toxygen/tests/test_gdb.py index 46736f6..3b1965f 100644 --- a/toxygen/tests/test_gdb.py +++ b/toxygen/tests/test_gdb.py @@ -854,14 +854,14 @@ id(42) cmd = textwrap.dedent(''' class MyList(list): def __init__(self): - super().__init__() # wrapper_call() + super().__init__() # tox_wrapper_call() id("first break point") l = MyList() ''') # Verify with "py-bt": gdb_output = self.get_stack_trace(cmd, - cmds_after_breakpoint=['break wrapper_call', 'continue', 'py-bt']) + cmds_after_breakpoint=['break tox_wrapper_call', 'continue', 'py-bt']) self.assertRegex(gdb_output, r"