The Wayback Machine - https://web.archive.org/web/20231203115453/https://github.com/netromdk/vermin/issues/144
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Library features that are not (correctly) detected #144

Closed
cpAdm opened this issue Jan 27, 2023 · 2 comments
Closed

Library features that are not (correctly) detected #144

cpAdm opened this issue Jan 27, 2023 · 2 comments

Comments

@cpAdm
Copy link

cpAdm commented Jan 27, 2023

Describe the bug
We have found 169 cases in which the tool does not (correctly) detect the minimum Python version required to run the given code.

To Reproduce
See first column for code snippet, run it with default configuration.

Expected behavior
Second column shows expected minimum Python version. Last 2 column show (for debugging purposes) which features it should detect and what it currently is able to detect.

Environment

  • Vermin version: 1.5.1
  • OS: Windows 10

Additional context

Test code Introduced in Python version Expected features Detected features
BaseException.__notes__() 3.11 {'3.11': ["'BaseException.notes' member"]} {}
BaseException.add_note() 3.11 {'3.11': ["'BaseException.add_note' member"]} {}
False 2.3 {'2.3': ["'False' member"]} {}
True 2.3 {'2.3': ["'True' member"]} {}
definition.__qualname__() 3.3 {'3.3': ["'definition.qualname' member"]} {}
exec(closure=None) 3.11 {'3.11': ["'exec(closure)'"]} {}
genericalias.__unpacked__() 3.11 {'3.11': ["'genericalias.unpacked' member"]} {}
import SimpleXMLRPCServer
SimpleXMLRPCServer.SimpleXMLRPCServer(bind_and_activate=None)
2.6 {'2.2': ["'SimpleXMLRPCServer' module"], '2.6': ["'SimpleXMLRPCServer.SimpleXMLRPCServer(bind_and_activate)'"]} {'2.2': ["'SimpleXMLRPCServer' module"]}
import _thread
_thread.interrupt_main(signum=None)
3.10 {'3.10': ["'_thread.interrupt_main(signum)'"]} {}
import _winreg
_winreg.PyHKEY.__enter__()
2.6 {'2.0': ["'_winreg' module"], '2.6': ["'_winreg.PyHKEY.enter' member"]} {'2.0': ["'_winreg' module"]}
import _winreg
_winreg.PyHKEY.__exit__()
2.6 {'2.0': ["'_winreg' module"], '2.6': ["'_winreg.PyHKEY.exit' member"]} {'2.0': ["'_winreg' module"]}
import array
array.array.index(start=None)
3.10 {'3.10': ["'array.array.index(start)'"]} {}
import array
array.array.index(stop=None)
3.10 {'3.10': ["'array.array.index(stop)'"]} {}
import asyncio
asyncio.Task.__init__(context=None)
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.Task.init(context)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.Task.cancelling()
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.Task.cancelling' member"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.Task.uncancel()
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.Task.uncancel' member"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.TaskGroup()
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.TaskGroup' member"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.loop.create_server(ssl_handshake_timeout=None)
3.6 {'3.4': ["'asyncio' module"], '3.6': ["'asyncio.loop.create_server(ssl_handshake_timeout)'"]} {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.loop.create_server(ssl_handshake_timeout)'"]}
import asyncio
asyncio.loop.create_server(start_serving=None)
3.6 {'3.4': ["'asyncio' module"], '3.6': ["'asyncio.loop.create_server(start_serving)'"]} {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.loop.create_server(start_serving)'"]}
import asyncio
asyncio.loop.create_task(context=None)
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.loop.create_task(context)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.loop.create_unix_connection(path=None)
3.7 {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.loop.create_unix_connection(path)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.loop.create_unix_server(path=None)
3.7 {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.loop.create_unix_server(path)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.loop.create_unix_server(ssl_shutdown_timeout=None)
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.loop.create_unix_server(ssl_shutdown_timeout)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.open_unix_connection(path=None)
3.7 {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.open_unix_connection(path)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.start_unix_server(path=None)
3.7 {'3.4': ["'asyncio' module"], '3.7': ["'asyncio.start_unix_server(path)'"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.timeout()
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.timeout' member"]} {'3.4': ["'asyncio' module"]}
import asyncio
asyncio.timeout_at()
3.11 {'3.4': ["'asyncio' module"], '3.11': ["'asyncio.timeout_at' member"]} {'3.4': ["'asyncio' module"]}
import asyncore
asyncore.dispatcher.handle_accepted()
3.2 {'3.2': ["'asyncore.dispatcher.handle_accepted' member"]} {}
import atexit 2.0 {'2.0': ["'atexit' module"]} {}
import audioop
audioop.alaw2lin()
2.5 {'2.5': ["'audioop.alaw2lin' member"]} {}
import audioop
audioop.lin2alaw()
2.5 {'2.5': ["'audioop.lin2alaw' member"]} {}
import calendar
calendar.calendar()
2.0 {'2.0': ["'calendar.calendar' member"]} {}
import calendar
calendar.firstweekday()
2.0 {'2.0': ["'calendar.firstweekday' member"]} {}
import calendar
calendar.month()
2.0 {'2.0': ["'calendar.month' member"]} {}
import calendar
calendar.setfirstweekday()
2.0 {'2.0': ["'calendar.setfirstweekday' member"]} {}
import calendar
calendar.timegm()
2.0 {'2.0': ["'calendar.timegm' member"]} {}
import cgi
cgi.parse_multipart(separator=None)
3.10 {'3.10': ["'cgi.parse_multipart(separator)'"]} {'3.6': ["'cgi.parse_multipart(separator)'"]}
import compileall
compileall.compile_dir(maxlevels=None)
3.9 {'3.9': ["'compileall.compile_dir(maxlevels)'"]} {}
import compileall
compileall.compile_dir(workers=None)
3.5 {'3.5': ["'compileall.compile_dir(workers)'"]} {}
import dataclasses
dataclasses.KW_ONLY
3.10 {'3.7': ["'dataclasses' module"], '3.10': ["'dataclasses.KW_ONLY' member"]} {'3.7': ["'dataclasses' module"]}
import decimal
decimal.Decimal()
3.6 {'2.4': ["'decimal' module"], '3.6': ["'decimal.Decimal' member"]} {'2.4': ["'decimal' module"]}
import docxmlrpcserver 2.3 {'2.3': ["'docxmlrpcserver' module"]} {}
import email.errors 2.4 {'2.4': ["'email.errors' module"]} {}
import email.message 3.6 {'3.6': ["'email.message' module"]} {}
import email.parser
email.parser.Parser(strict=None)
2.2 {'2.2': ["'email.parser.Parser(strict)'"]} {}
import email.parser
email.parser.Parser.parse(headersonly=None)
2.2 {'2.2': ["'email.parser.Parser.parse(headersonly)'"]} {}
import email.parser
email.parser.Parser.parsestr(headersonly=None)
2.2 {'2.2': ["'email.parser.Parser.parsestr(headersonly)'"]} {}
import email.utils
email.utils.formataddr(charset=None)
3.3 {'3.3': ["'email.utils.formataddr(charset)'"]} {}
import enum
enum.member()
3.11 {'3.4': ["'enum' module"], '3.11': ["'enum.member' member"]} {'3.4': ["'enum' module"]}
import enum
enum.nonmember()
3.11 {'3.4': ["'enum' module"], '3.11': ["'enum.nonmember' member"]} {'3.4': ["'enum' module"]}
import exceptions
exceptions.BaseException()
2.5 {'2.5': ["'exceptions.BaseException' member"]} {}
import exceptions
exceptions.BytesWarning()
2.6 {'2.6': ["'exceptions.BytesWarning' member"]} {}
import exceptions
exceptions.GeneratorExit()
2.5 {'2.5': ["'exceptions.GeneratorExit' member"]} {}
import exceptions
exceptions.ImportWarning()
2.5 {'2.5': ["'exceptions.ImportWarning' member"]} {}
import exceptions
exceptions.StopIteration()
2.2 {'2.2': ["'exceptions.StopIteration' member"]} {}
import exceptions
exceptions.UnboundLocalError()
2.0 {'2.0': ["'exceptions.UnboundLocalError' member"]} {}
import exceptions
exceptions.UnicodeDecodeError()
2.3 {'2.3': ["'exceptions.UnicodeDecodeError' member"]} {}
import exceptions
exceptions.UnicodeEncodeError()
2.3 {'2.3': ["'exceptions.UnicodeEncodeError' member"]} {}
import exceptions
exceptions.UnicodeError()
2.0 {'2.0': ["'exceptions.UnicodeError' member"]} {}
import exceptions
exceptions.UnicodeTranslateError()
2.3 {'2.3': ["'exceptions.UnicodeTranslateError' member"]} {}
import exceptions
exceptions.UnicodeWarning()
2.5 {'2.5': ["'exceptions.UnicodeWarning' member"]} {}
import exceptions
exceptions.WindowsError()
2.0 {'2.0': ["'exceptions.WindowsError' member"]} {}
import functools
functools.lru_cache(user_function=None)
3.8 {'2.5': ["'functools' module"], '3.2': ["'functools.lru_cache' member"], '3.8': ["'functools.lru_cache(user_function)'"]} {'2.5': ["'functools' module"], '3.2': ["'functools.lru_cache' member"]}
import hashlib
hashlib.hashlib.algorithms()
2.7 {'2.5': ["'hashlib' module"], '2.7': ["'hashlib.hashlib.algorithms' member"]} {'2.5': ["'hashlib' module"]}
import htmlparser 2.2 {'2.2': ["'htmlparser' module"]} {}
import http.server 3.4 {'3.4': ["'http.server' module"]} {}
import imghdr 3.5 {'2.5': ["'imghdr' module"], '3.5': ["'imghdr' module"]} {}
import imp 3.2 {'3.2': ["'imp' module"]} {}
import importlib.resources.abc 3.11 {'3.11': ["'importlib.resources.abc' module"]} {}
import importlib.resources.abc
importlib.resources.abc.ResourceReader()
3.7 {'3.7': ["'importlib.resources.abc.ResourceReader' member"]} {}
import importlib.resources.abc
importlib.resources.abc.Traversable()
3.9 {'3.9': ["'importlib.resources.abc.Traversable' member"]} {}
import importlib.resources.abc
importlib.resources.abc.TraversableResources()
3.9 {'3.9': ["'importlib.resources.abc.TraversableResources' member"]} {}
import importlib.util
importlib.util.cache_from_source(debug_override=None)
3.5 {'3.4': ["'importlib.util.cache_from_source' member"], '3.5': ["'importlib.util.cache_from_source(debug_override)'"]} {'3.4': ["'importlib.util.cache_from_source' member"]}
import inspect
inspect.ismethodwrapper()
3.11 {'2.1': ["'inspect' module"], '3.11': ["'inspect.ismethodwrapper' member"]} {'2.1': ["'inspect' module"]}
import itertools
itertools.chain.from_iterable()
2.6 {'2.3': ["'itertools' module"], '2.6': ["'itertools.chain.from_iterable' member"]} {'2.3': ["'itertools' module"]}
import locale
locale.getdefaultlocale()
2.0 {'2.0': ["'locale.getdefaultlocale' member"]} {}
import locale
locale.getlocale()
2.0 {'2.0': ["'locale.getlocale' member"]} {}
import locale
locale.normalize()
2.0 {'2.0': ["'locale.normalize' member"]} {}
import locale
locale.resetlocale()
2.0 {'2.0': ["'locale.resetlocale' member"]} {}
import logging
logging.FileHandler(errors=None)
3.9 {'2.3': ["'logging' module"], '3.9': ["'logging.FileHandler(errors)'"]} {'2.3': ["'logging' module"]}
import logging
logging.basicConfig(filename=None)
3.3 {'2.3': ["'logging' module"], '3.3': ["'logging.basicConfig(filename)'"]} {'2.3': ["'logging' module"], '2.4': ["'logging.basicConfig(filename)'"]}
import logging
logging.basicConfig(stream=None)
3.3 {'2.3': ["'logging' module"], '3.3': ["'logging.basicConfig(stream)'"]} {'2.3': ["'logging' module"], '2.4': ["'logging.basicConfig(stream)'"]}
import logging.config
logging.config.fileConfig(always=None)
2.6 {'2.6': ["'logging.config.fileConfig(always)'"]} {}
import logging.handlers
logging.handlers.BaseRotatingHandler.namer()
3.3 {'3.3': ["'logging.handlers.BaseRotatingHandler.namer' member"]} {}
import mmap
mmap.MADV_FREE_REUSABLE
3.8 {'3.8': ["'mmap.MADV_FREE_REUSABLE' member"]} {}
import mmap
mmap.MADV_FREE_REUSE
3.8 {'3.8': ["'mmap.MADV_FREE_REUSE' member"]} {}
import multiprocessing.pool
multiprocessing.pool.Pool.starmap()
3.3 {'3.3': ["'multiprocessing.pool.Pool.starmap' member"]} {}
import multiprocessing.pool
multiprocessing.pool.Pool.starmap_async()
3.3 {'3.3': ["'multiprocessing.pool.Pool.starmap_async' member"]} {}
import operator
operator.__call__()
3.11 {'3.11': ["'operator.call' member"]} {}
import operator
operator.call()
3.11 {'3.11': ["'operator.call' member"]} {}
import operator
operator.itemgetter()
2.4 {'2.4': ["'operator.itemgetter' member"]} {'2.5': ["'operator.itemgetter' member"]}
import os
os.startfile()
2.0 {'2.0': ["'os.startfile' member"]} {}
import pdb 3.2 {'2.4': ["'pdb' module"], '3.2': ["'pdb' module"]} {}
import pyclbr 3.7 {'3.7': ["'pyclbr' module"]} {}
import python 3.7 {'3.7': ["'python' module"]} {}
import random 2.4 {'2.4': ["'random' module"]} {}
import re
re.Match.__getitem__()
3.6 {'3.6': ["'re.Match.getitem' member"]} {}
import re
re.U
2.0 {'2.0': ["'re.U' member"]} {}
import re
re.UNICODE
2.0 {'2.0': ["'re.UNICODE' member"]} {}
import reprlib
reprlib.Repr.fillvalue()
3.11 {'3.0': ["'reprlib' module"], '3.11': ["'reprlib.Repr.fillvalue' member"]} {'3.0': ["'reprlib' module"]}
import shutil
shutil.copytree(symlinks=None)
3.2 {'3.2': ["'shutil.copytree(symlinks)'"]} {}
import signal
signal.Handlers()
3.5 {'3.5': ["'signal.Handlers' member"]} {}
import signal
signal.Sigmasks()
3.5 {'3.5': ["'signal.Sigmasks' member"]} {}
import signal
signal.Signals()
3.5 {'3.5': ["'signal.Signals' member"]} {}
import simplexmlrpcserver 2.2 {'2.2': ["'simplexmlrpcserver' module"]} {}
import socket 2.5 {'2.5': ["'socket' module"]} {}
import socket
socket.getfqdn()
2.0 {'2.0': ["'socket.getfqdn' member"]} {}
import sqlite3
sqlite3.Connection.iterdump()
2.6 {'2.5': ["'sqlite3' module"], '2.6': ["'sqlite3.Connection.iterdump' member"]} {'2.5': ["'sqlite3' module"]}
import ssl
ssl.OP_NO_TLSv1_3()
3.7 {'2.6': ["'ssl' module"], '2.7': ["'ssl.OP_NO_TLSv1_3' member"], '3.7': ["'ssl.OP_NO_TLSv1_3' member"]} {'2.6': ["'ssl' module"], '2.7': ["'ssl.OP_NO_TLSv1_3' member"], '3.6': ["'ssl.OP_NO_TLSv1_3' member"]}
import ssl
ssl.VerifyFlags()
3.6 {'2.6': ["'ssl' module"], '3.6': ["'ssl.VerifyFlags' member"]} {'2.6': ["'ssl' module"]}
import ssl
ssl.VerifyMode()
3.6 {'2.6': ["'ssl' module"], '3.6': ["'ssl.VerifyMode' member"]} {'2.6': ["'ssl' module"]}
import string
string.lstrip(chars=None)
2.2 {'2.2': ["'string.lstrip(chars)'"]} {'2.3': ["'string.lstrip(chars)'"]}
import string
string.rstrip(chars=None)
2.2 {'2.2': ["'string.rstrip(chars)'"]} {'2.3': ["'string.rstrip(chars)'"]}
import string
string.strip(chars=None)
2.2 {'2.2': ["'string.strip(chars)'"]} {'2.3': ["'string.strip(chars)'"]}
import subprocess
subprocess.CalledProcessError(stderr=None)
3.5 {'2.4': ["'subprocess' module"], '3.5': ["'subprocess.CalledProcessError(stderr)'"]} {'2.4': ["'subprocess' module"]}
import subprocess
subprocess.CalledProcessError(stdout=None)
3.5 {'2.4': ["'subprocess' module"], '3.5': ["'subprocess.CalledProcessError(stdout)'"]} {'2.4': ["'subprocess' module"]}
import subprocess
subprocess.Popen()
3.9 {'2.4': ["'subprocess' module"], '3.9': ["'subprocess.Popen' member"]} {'2.4': ["'subprocess' module"]}
import subprocess
subprocess.TimeoutExpired(stderr=None)
3.5 {'2.4': ["'subprocess' module"], '3.3': ["'subprocess.TimeoutExpired' member"], '3.5': ["'subprocess.TimeoutExpired(stderr)'"]} {'2.4': ["'subprocess' module"], '3.3': ["'subprocess.TimeoutExpired' member"]}
import subprocess
subprocess.TimeoutExpired(stdout=None)
3.5 {'2.4': ["'subprocess' module"], '3.3': ["'subprocess.TimeoutExpired' member"], '3.5': ["'subprocess.TimeoutExpired(stdout)'"]} {'2.4': ["'subprocess' module"], '3.3': ["'subprocess.TimeoutExpired' member"]}
import subprocess
subprocess.run(universal_newlines=None)
3.7 {'2.4': ["'subprocess' module"], '3.5': ["'subprocess.run' member"], '3.7': ["'subprocess.run(universal_newlines)'"]} {'2.4': ["'subprocess' module"], '3.5': ["'subprocess.run' member"]}
import sys
sys.byteorder()
2.0 {'2.0': ["'sys.byteorder' member"]} {}
import sys
sys.get_int_max_str_digits()
3.11 {'3.11': ["'sys.get_int_max_str_digits' member"]} {}
import sys
sys.getdefaultencoding()
2.0 {'2.0': ["'sys.getdefaultencoding' member"]} {}
import sys
sys.getwindowsversion(platform_version=None)
3.6 {'2.3': ["'sys.getwindowsversion' member"], '3.6': ["'sys.getwindowsversion(platform_version)'"]} {'2.3': ["'sys.getwindowsversion' member"]}
import sys
sys.set_int_max_str_digits()
3.11 {'3.11': ["'sys.set_int_max_str_digits' member"]} {}
import test.support
test.support.adjust_int_max_str_digits()
3.11 {'3.11': ["'test.support.adjust_int_max_str_digits' member"]} {}
import test.support
test.support.check_warnings(filters=None)
2.7 {'2.6': ["'test.support.check_warnings' member"], '2.7': ["'test.support.check_warnings(filters)'"]} {'2.6': ["'test.support.check_warnings' member"]}
import traceback
traceback.TracebackException.__notes__()
3.11 {'3.5': ["'traceback.TracebackException' member"], '3.11': ["'traceback.TracebackException.notes' member"]} {'3.5': ["'traceback.TracebackException' member"]}
import traceback
traceback.TracebackException.print()
3.11 {'3.5': ["'traceback.TracebackException' member"], '3.11': ["'traceback.TracebackException.print' member"]} {'3.5': ["'traceback.TracebackException' member"]}
import types
types.NotImplementedType()
3.10 {'3.10': ["'types.NotImplementedType' member"]} {'2.0': ["'types.NotImplementedType' member"], '3.10': ["'types.NotImplementedType' member"]}
import typing
typing.AsyncContextManager()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.AsyncContextManager' member"]} {'3.5': ["'typing' module", "'typing.AsyncContextManager' member"]}
import typing
typing.ChainMap()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.ChainMap' member"]} {'3.5': ["'typing' module", "'typing.ChainMap' member"]}
import typing
typing.ContextManager()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.ContextManager' member"]} {'3.5': ["'typing' module", "'typing.ContextManager' member"]}
import typing
typing.Counter()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.Counter' member"]} {'3.5': ["'typing' module", "'typing.Counter' member"]}
import typing
typing.Deque()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.Deque' member"]} {'3.5': ["'typing' module", "'typing.Deque' member"]}
import typing
typing.NoReturn()
3.6 {'3.5': ["'typing' module"], '3.6': ["'typing.NoReturn' member"]} {'3.5': ["'typing' module", "'typing.NoReturn' member"]}
import typing
typing.TypedDict.__optional_keys__()
3.9 {'3.5': ["'typing' module"], '3.8': ["'typing.TypedDict' member"], '3.9': ["'typing.TypedDict.optional_keys' member"]} {'3.5': ["'typing' module"], '3.8': ["'typing.TypedDict' member"]}
import typing
typing.TypedDict.__required_keys__()
3.9 {'3.5': ["'typing' module"], '3.8': ["'typing.TypedDict' member"], '3.9': ["'typing.TypedDict.required_keys' member"]} {'3.5': ["'typing' module"], '3.8': ["'typing.TypedDict' member"]}
import unicodedata
unicodedata.ucd_3_2_0()
2.5 {'2.5': ["'unicodedata.ucd_3_2_0' member"]} {'2.3': ["'unicodedata.ucd_3_2_0' member"]}
import unittest
unittest.TestCase.assertMultiLineEqual()
3.1 {'2.1': ["'unittest' module"], '2.7': ["'unittest.TestCase.assertMultiLineEqual' member"], '3.1': ["'unittest.TestCase.assertMultiLineEqual' member"]} {'2.1': ["'unittest' module"]}
import urllib
urllib.ContentTooShortError()
2.5 {'2.5': ["'urllib.ContentTooShortError' member"]} {'2.6': ["'urllib.ContentTooShortError' member"]}
import urllib.parse
urllib.parse.parse_qs(max_num_fields=None)
3.8 {'3.0': ["'urllib.parse' module"], '3.8': ["'urllib.parse.parse_qs(max_num_fields)'"]} {'3.0': ["'urllib.parse' module"], '3.6': ["'urllib.parse.parse_qs(max_num_fields)'"]}
import urllib.parse
urllib.parse.parse_qs(separator=None)
3.10 {'3.0': ["'urllib.parse' module"], '3.10': ["'urllib.parse.parse_qs(separator)'"]} {'3.0': ["'urllib.parse' module"], '3.6': ["'urllib.parse.parse_qs(separator)'"]}
import urllib.parse
urllib.parse.parse_qsl(max_num_fields=None)
3.8 {'3.0': ["'urllib.parse' module"], '3.8': ["'urllib.parse.parse_qsl(max_num_fields)'"]} {'3.0': ["'urllib.parse' module"], '3.6': ["'urllib.parse.parse_qsl(max_num_fields)'"]}
import urllib.parse
urllib.parse.parse_qsl(separator=None)
3.10 {'3.0': ["'urllib.parse' module"], '3.10': ["'urllib.parse.parse_qsl(separator)'"]} {'3.0': ["'urllib.parse' module"], '3.6': ["'urllib.parse.parse_qsl(separator)'"]}
import using 3.8 {'3.8': ["'using' module"]} {}
import webbrowser 3.3 {'3.3': ["'webbrowser' module"]} {}
import xml.dom 2.0 {'2.0': ["'xml.dom' module"]} {}
import xml.dom.minidom 2.0 {'2.0': ["'xml.dom.minidom' module"]} {}
import xml.dom.pulldom 2.0 {'2.0': ["'xml.dom.pulldom' module"]} {}
import xml.etree.elementtree 2.5 {'2.5': ["'xml.etree.elementtree' module"]} {}
import xml.parsers.expat 2.0 {'2.0': ["'xml.parsers.expat' module"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.EntityDeclHandler()
2.1 {'2.1': ["'xml.parsers.expat.xmlparser.EntityDeclHandler' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.GetInputContext()
2.1 {'2.1': ["'xml.parsers.expat.xmlparser.GetInputContext' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.UseForeignDTD()
2.3 {'2.3': ["'xml.parsers.expat.xmlparser.UseForeignDTD' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.XmlDeclHandler()
2.1 {'2.1': ["'xml.parsers.expat.xmlparser.XmlDeclHandler' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.buffer_size()
2.3 {'2.3': ["'xml.parsers.expat.xmlparser.buffer_size' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.buffer_text()
2.3 {'2.3': ["'xml.parsers.expat.xmlparser.buffer_text' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.buffer_used()
2.3 {'2.3': ["'xml.parsers.expat.xmlparser.buffer_used' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.ordered_attributes()
2.1 {'2.1': ["'xml.parsers.expat.xmlparser.ordered_attributes' member"]} {}
import xml.parsers.expat
xml.parsers.expat.xmlparser.specified_attributes()
2.1 {'2.1': ["'xml.parsers.expat.xmlparser.specified_attributes' member"]} {}
import xml.sax 2.0 {'2.0': ["'xml.sax' module"]} {}
import xml.sax.handler 2.0 {'2.0': ["'xml.sax.handler' module"]} {}
import xml.sax.saxutils 2.0 {'2.0': ["'xml.sax.saxutils' module"]} {}
import xml.sax.xmlreader 2.0 {'2.0': ["'xml.sax.xmlreader' module"]} {}
str.center(fillchar=None) 2.4 {'2.4': ["'str.center(fillchar)'"]} {}
str.encode() 2.0 {'2.0': ["'str.encode' member"]} {}
zip() 2.0 {'2.0': ["'zip' member"]} {}
@netromdk
Copy link
Owner

Thank you very much for the feedback. I'll look into it soon.

@netromdk
Copy link
Owner

netromdk commented Mar 2, 2023

Alright, took a while but I've gone through your extensive list, and added missing rules and corrected some erroneous ones. Much appreciated!

Some will require more work, detection wise, like definition.__qualname__(), which actually relates to:

class Foo: pass
Foo.__qualname__

Or genericalias.__unpacked__ which is a special attribute on GenericAlias objects.

Some features have been backported due to security fixes, like these:

# Security fix backported to 3.6.13+, 3.7.10+, 3.8.8+, 3.9.2+, 3.10+
cgi.parse_multipart(separator=None)

# Security fix backported to 3.6.8+, 3.7.2+, 3.8+
urllib.parse.parse_qs(max_num_fields=None)

# Security fix backported to 3.6.13+, 3.7.10+, 3.8.8+, 3.9.2+, 3.10+
urllib.parse.parse_qs(separator=None)

# Security fix backported to 3.6.8+, 3.7.2+, 3.8+
urllib.parse.parse_qsl(max_num_fields=None)

# Security fix backported to 3.6.13+, 3.7.10+, 3.8.8+, 3.9.2+, 3.10+
urllib.parse.parse_qsl(separator=None)

Some were all lowercase, like import docxmlrpcserver instead of the correct import DocXMLRPCServer.
And some were perhaps misparsed from the documentation.
Or nonexistent modules, like using and python.

Perhaps you'd take a look at #155 for me, @cpAdm? Thanks :)

@netromdk netromdk closed this as completed Apr 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
2 participants