Skip to content

Special characters in trakt username - Error: Method Not Found - method doesn't exist #2223

Description

@Yan-nian

Confirmation

  • I have read the README.md on the project homepage
  • I have checked if an identical issue or discussion already exists
  • I have tried downgrading to find version that can be used as a workaround

The problem

I once saw a similar issue in the issue tracker, but I didn't set up a privacy list, and everything was public. So I don't understand what the problem is. Trying to reset the Trakt API didn't work either.

Steps to reproduce the behavior

just sync

Error trace / logs

NFO     Sync Movie sections: ['STRM电影']                                                   
INFO     Sync Show sections: ['STRM动漫', 'STRM电视剧', 'STRM纪录片']                        
INFO     Enable sync plugin 'AddCollectionPlugin': False                                     
INFO     Enable sync plugin 'ClearCollectedPlugin': False                                    
INFO     Enable sync plugin 'LikedListsPlugin': False                                        
INFO     Enable sync plugin 'SyncRatingsPlugin': False                                       
INFO     Enable sync plugin 'SyncWatchedPlugin': True                                        
INFO     Enable sync plugin 'TraktListsPlugin': False                                        
INFO     Enable sync plugin 'WatchListPlugin': False                                         
INFO     Enable sync plugin 'WatchProgressPlugin': False                                     
Processing STRM电影   1% ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1/106  [ 0:00:01 < -:--:-- , ? it/s ]
ERROR    Method Not Found - method doesn't exist                                             
         ╭─────────────────────── Traceback (most recent call last) ────────────────────────╮
         │ /app/plextraktsync/cli.py:28 in wrap                                             │
         │                                                                                  │
         │    25 │   │   │   cmd = getattr(module, name)                                    │
         │    26 │   │   │                                                                  │
         │    27 │   │   │   try:                                                           │
         │ ❱  28 │   │   │   │   cmd(*args, **kwargs)                                       │
         │    29 │   │   │   except EOFError as e:                                          │
         │    30 │   │   │   │   raise ClickException(f"Program requested terminal, No term │
         │       connected: {e}")                                                           │
         │    31 │   │   │   except ClickException as e:                                    │
         │                                                                                  │
         │ /app/plextraktsync/commands/sync.py:74 in sync                                   │
         │                                                                                  │
         │   71 │   │   │   w.print_plan(print=logger.info)                                 │
         │   72 │   │   if dry_run:                                                         │
         │   73 │   │   │   logger.info("Enabled dry-run mode: not making actual changes")  │
         │ ❱ 74 │   │   run_async(runner, walker=w, dry_run=config.dry_run)                 │
         │   75                                                                             │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/decorator.py:235 in fun                  │
         │                                                                                  │
         │   232 │   │   def fun(*args, **kw):                                              │
         │   233 │   │   │   if not kwsyntax:                                               │
         │   234 │   │   │   │   args, kw = fix(args, kw, sig)                              │
         │ ❱ 235 │   │   │   return caller(func, *(extras + args), **kw)                    │
         │   236 │                                                                          │
         │   237 │   fun.__name__ = func.__name__                                           │
         │   238 │   fun.__doc__ = func.__doc__                                             │
         │                                                                                  │
         │ /app/plextraktsync/decorators/coro.py:15 in coro                                 │
         │                                                                                  │
         │   12 │                                                                           │
         │   13 │   https://github.com/pallets/click/issues/85#issuecomment-503464628       │
         │   14 │   """                                                                     │
         │ ❱ 15 │   return asyncio.run(f(*args, **kwargs))                                  │
         │   16                                                                             │
         │                                                                                  │
         │ /usr/local/lib/python3.13/asyncio/runners.py:195 in run                          │
         │                                                                                  │
         │   192 │   │   │   "asyncio.run() cannot be called from a running event loop")    │
         │   193 │                                                                          │
         │   194 │   with Runner(debug=debug, loop_factory=loop_factory) as runner:         │
         │ ❱ 195 │   │   return runner.run(main)                                            │
         │   196                                                                            │
         │   197                                                                            │
         │   198 def _cancel_all_tasks(loop):                                               │
         │                                                                                  │
         │ /usr/local/lib/python3.13/asyncio/runners.py:118 in run                          │
         │                                                                                  │
         │   115 │   │                                                                      │
         │   116 │   │   self._interrupt_count = 0                                          │
         │   117 │   │   try:                                                               │
         │ ❱ 118 │   │   │   return self._loop.run_until_complete(task)                     │
         │   119 │   │   except exceptions.CancelledError:                                  │
         │   120 │   │   │   if self._interrupt_count > 0:                                  │
         │   121 │   │   │   │   uncancel = getattr(task, "uncancel", None)                 │
         │                                                                                  │
         │ /usr/local/lib/python3.13/asyncio/base_events.py:725 in run_until_complete       │
         │                                                                                  │
         │    722 │   │   if not future.done():                                             │
         │    723 │   │   │   raise RuntimeError('Event loop stopped before Future complete │
         │    724 │   │                                                                     │
         │ ❱  725 │   │   return future.result()                                            │
         │    726 │                                                                         │
         │    727 │   def stop(self):                                                       │
         │    728 │   │   """Stop running the event loop.                                   │
         │                                                                                  │
         │ /app/plextraktsync/commands/sync.py:13 in run_async                              │
         │                                                                                  │
         │   10                                                                             │
         │   11 @coro                                                                       │
         │   12 async def run_async(runner, **kwargs):                                      │
         │ ❱ 13 │   await runner.sync(**kwargs)                                             │
         │   14                                                                             │
         │   15                                                                             │
         │   16 def sync(                                                                   │
         │                                                                                  │
         │ /app/plextraktsync/sync/Sync.py:50 in sync                                       │
         │                                                                                  │
         │   47 │   │                                                                       │
         │   48 │   │   if self.config.need_library_walk:                                   │
         │   49 │   │   │   async for movie in walker.find_movies():                        │
         │ ❱ 50 │   │   │   │   await pm.ahook.walk_movie(movie=movie, dry_run=dry_run)     │
         │   51 │   │   │                                                                   │
         │   52 │   │   │   async for episode in walker.find_episodes():                    │
         │   53 │   │   │   │   await pm.ahook.walk_episode(episode=episode, dry_run=dry_ru │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/apluggy/wrap/ext.py:19 in call           │
         │                                                                                  │
         │   16 │   │   async def call(*args: Any, **kwargs: Any) -> list:                  │
         │   17 │   │   │   hook: HookCaller = getattr(self.pm.hook, name)                  │
         │   18 │   │   │   coros: list[asyncio.Future] = hook(*args, **kwargs)             │
         │ ❱ 19 │   │   │   return await asyncio.gather(*coros)                             │
         │   20 │   │                                                                       │
         │   21 │   │   return call                                                         │
         │   22                                                                             │
         │                                                                                  │
         │ /app/plextraktsync/sync/SyncWatchedPlugin.py:29 in walk_movie                    │
         │                                                                                  │
         │   26 │                                                                           │
         │   27 │   @hookimpl                                                               │
         │   28 │   async def walk_movie(self, movie: Media, dry_run: bool):                │
         │ ❱ 29 │   │   await self.sync_watched(movie, dry_run=dry_run)                     │
         │   30 │                                                                           │
         │   31 │   @hookimpl                                                               │
         │   32 │   async def walk_episode(self, episode: Media, dry_run: bool):            │
         │                                                                                  │
         │ /app/plextraktsync/sync/SyncWatchedPlugin.py:36 in sync_watched                  │
         │                                                                                  │
         │   33 │   │   await self.sync_watched(episode, dry_run=dry_run)                   │
         │   34 │                                                                           │
         │   35 │   async def sync_watched(self, m: Media, dry_run: bool):                  │
         │ ❱ 36 ���   │   if m.watched_on_plex is m.watched_on_trakt:                         │
         │   37 │   │   │   return                                                          │
         │   38 │   │                                                                       │
         │   39 │   │   if m.watched_on_plex:                                               │
         │                                                                                  │
         │ /app/plextraktsync/media/Media.py:179 in watched_on_trakt                        │
         │                                                                                  │
         │   176 │   @property                                                              │
         │   177 │   def watched_on_trakt(self):                                            │
         │   178 │   │   if self.is_movie:                                                  │
         │ ❱ 179 │   │   │   return self.trakt_id in self.trakt_api.watched_movies          │
         │   180 │   │   elif not self.is_episode:                                          │
         │   181 │   │   │   raise RuntimeError(f"watched_on_trakt: Unsupported media type: │
         │       {self.media_type}")                                                        │
         │   182                                                                            │
         │                                                                                  │
         │ /usr/local/lib/python3.13/functools.py:1042 in __get__                           │
         │                                                                                  │
         │   1039 │   │   │   raise TypeError(msg) from None                                │
         │   1040 │   │   val = cache.get(self.attrname, _NOT_FOUND)                        │
         │   1041 │   │   if val is _NOT_FOUND:                                             │
         │ ❱ 1042 │   │   │   val = self.func(instance)                                     │
         │   1043 │   │   │   try:                                                          │
         │   1044 │   │   │   │   cache[self.attrname] = val                                │
         │   1045 │   │   │   except TypeError:                                             │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/decorator.py:235 in fun                  │
         │                                                                                  │
         │   232 │   │   def fun(*args, **kw):                                              │
         │   233 │   │   │   if not kwsyntax:                                               │
         │   234 │   │   │   │   args, kw = fix(args, kw, sig)                              │
         │ ❱ 235 │   │   │   return caller(func, *(extras + args), **kw)                    │
         │   236 │                                                                          │
         │   237 │   fun.__name__ = func.__name__                                           │
         │   238 │   fun.__doc__ = func.__doc__                                             │
         │                                                                                  │
         │ /app/plextraktsync/decorators/rate_limit.py:20 in rate_limit                     │
         │                                                                                  │
         │   17 │   retry = 0                                                               │
         │   18 │   while True:                                                             │
         │   19 │   │   try:                                                                │
         │ ❱ 20 │   │   │   return fn(*args, **kwargs)                                      │
         │   21 │   │   except RateLimitException as e:                                     │
         │   22 │   │   │   if retry == retries:                                            │
         │   23 │   │   │   │   logger.error(f"Trakt Error: {e}")                           │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/decorator.py:235 in fun                  │
         │                                                                                  │
         │   232 │   │   def fun(*args, **kw):                                              │
         │   233 │   │   │   if not kwsyntax:                                               │
         │   234 │   │   │   │   args, kw = fix(args, kw, sig)                              │
         │ ❱ 235 │   │   │   return caller(func, *(extras + args), **kw)                    │
         │   236 │                                                                          │
         │   237 │   fun.__name__ = func.__name__                                           │
         │   238 │   fun.__doc__ = func.__doc__                                             │
         │                                                                                  │
         │ /app/plextraktsync/decorators/retry.py:26 in retry                               │
         │                                                                                  │
         │   23 │   count = 0                                                               │
         │   24 │   while True:                                                             │
         │   25 │   │   try:                                                                │
         │ ❱ 26 │   │   │   return fn(*args, **kwargs)                                      │
         │   27 │   │   except (                                                            │
         │   28 │   │   │   BadRequest,                                                     │
         │   29 │   │   │   BadResponseException,                                           │
         │                                                                                  │
         │ /app/plextraktsync/trakt/TraktApi.py:92 in watched_movies                        │
         │                                                                                  │
         │    89 │   @rate_limit()                                                          │
         │    90 │   @retry()                                                               │
         │    91 │   def watched_movies(self):                                              │
         │ ❱  92 │   │   return set(map(lambda m: m.trakt, self.me.watched_movies))         │
         │    93 │                                                                          │
         │    94 │   @cached_property                                                       │
         │    95 │   @rate_limit()                                                          │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/trakt/decorators.py:48 in inner          │
         │                                                                                  │
         │    45 │   │   │   # Handle cached property responses                             │
         │    46 │   │   │   return resp                                                    │
         │    47 │   │   url, generator, _ = resp                                           │
         │ ❱  48 │   │   json_data = api().get(url)                                         │
         │    49 │   │   try:                                                               │
         │    50 │   │   │   return generator.send(json_data)                               │
         │    51 │   │   except StopIteration:                                              │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/trakt/api.py:54 in get                   │
         │                                                                                  │
         │    51 │   │   Raises:                                                            │
         │    52 │   │   │   Various exceptions from `raise_if_needed` based on HTTP status │
         │    53 │   │   """                                                                │
         │ ❱  54 │   │   return self.request('get', url)                                    │
         │    55 │                                                                          │
         │    56 │   def delete(self, url: str):                                            │
         │    57 │   │   self.request('delete', url)                                        │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/trakt/api.py:134 in request              │
         │                                                                                  │
         │   131 │   │   self.logger.debug('RESPONSE [%s] (%s): %s', method, url, str(respo │
         │   132 │   │   if response.status_code == 204:  # HTTP no content                 │
         │   133 │   │   │   return None                                                    │
         │ ❱ 134 │   │   self.raise_if_needed(response)                                     │
         │   135 │   │                                                                      │
         │   136 │   │   return self.decode_response(response)                              │
         │   137                                                                            │
         │                                                                                  │
         │ /usr/local/lib/python3.13/site-packages/trakt/api.py:147 in raise_if_needed      │
         │                                                                                  │
         │   144 │                                                                          │
         │   145 │   def raise_if_needed(self, response):                                   │
         │   146 │   │   if response.status_code in self.error_map:                         │
         │ ❱ 147 │   │   │   raise self.error_map[response.status_code](response)           │
         │   148 │                                                                          │
         │   149 │   @property                                                              │
         │   150 │   @lru_cache(maxsize=None)                                               │
         ╰──────────────────────────────────────────────────────────────────────────────────╯
         MethodNotAllowedException: Method Not Found - method doesn't exist                  
Error: Error running sync command: Method Not Found - method doesn't exist

Expected behavior

workout problem

Inspect of problematic items


Workarounds

No response

Config file contents

Install method

pipx

Version

0.34.6

Python Version

3.13

Plex Server Version

linuxserver 1.41.5.9522

Operating System and Version

unraid

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions