diff --git a/.pylintrc b/.pylintrc index 68398c1eb3..0b04d46663 100644 --- a/.pylintrc +++ b/.pylintrc @@ -1,27 +1,73 @@ -[MASTER] +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= # A comma-separated list of package or module names from where C extensions may # be loaded. Extensions are loading into the active Python interpreter and may # run arbitrary code. -extension-pkg-whitelist=panda3d +extension-pkg-allow-list=panda3d,wx -# Specify a score threshold to be exceeded before program exits with error. +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist=panda3d,wx + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. fail-under=10.0 -# Add files or directories to the blacklist. They should be base names, not -# paths. +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. ignore=thirdparty -# Add files or directories matching the regex patterns to the blacklist. The -# regex matches against base names, not paths. +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks ignore-patterns= +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + # Python code to execute, usually for sys.path manipulation such as # pygtk.require(). #init-hook= # Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the -# number of processors available to use. +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. jobs=1 # Control the amount of potential inferred values when inferring a single @@ -36,259 +82,23 @@ load-plugins= # Pickle collected data for later comparisons. persistent=yes +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.6 + +# Discover python modules and packages in the file system subtree. +recursive=no + # When enabled, pylint would attempt to guess common misconfiguration and emit # user-friendly hints instead of false-positive error messages. suggestion-mode=yes # Allow loading of arbitrary C extensions. Extensions are imported into the # active Python interpreter and may run arbitrary code. -unsafe-load-any-extension=no +#unsafe-load-any-extension=no - -[MESSAGES CONTROL] - -# Only show warnings with the listed confidence levels. Leave empty to show -# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED. -confidence= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once). You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use "--disable=all --enable=classes -# --disable=W". -disable=attribute-defined-outside-init, - broad-except, - comparison-with-callable, - dangerous-default-value, - global-statement, - import-outside-toplevel, - invalid-name, - line-too-long, - misplaced-comparison-constant, - missing-class-docstring, - missing-function-docstring, - missing-module-docstring, - protected-access, - r, - raise-missing-from, - redefined-builtin, - redefined-outer-name, - too-many-lines, - unused-argument, - unused-variable, - unused-wildcard-import, - using-constant-test, - wildcard-import, - wrong-import-order, - wrong-import-position - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time (only on the command line, not in the configuration file where -# it should appear only once). See also the "--disable" option for examples. -enable=c-extension-no-member - - -[REPORTS] - -# Python expression which should return a score less than or equal to 10. You -# have access to the variables 'error', 'warning', 'refactor', and 'convention' -# which contain the number of messages in each category, as well as 'statement' -# which is the total number of statements analyzed. This score is used by the -# global evaluation report (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details. -#msg-template= - -# Set the output format. Available formats are text, parseable, colorized, json -# and msvs (visual studio). You can also give a reporter class, e.g. -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Tells whether to display a full report or only the messages. -reports=no - -# Activate the evaluation score. -score=yes - - -[REFACTORING] - -# Maximum number of nested blocks for function / method body -max-nested-blocks=5 - -# Complete name of functions that never returns. When checking for -# inconsistent-return-statements if a never returning function is called then -# it will be considered as an explicit return statement and no message will be -# printed. -never-returning-functions=sys.exit - - -[FORMAT] - -# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. -expected-line-ending-format=LF - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Number of spaces of indent required inside a hanging or continued line. -indent-after-paren=4 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - -# Maximum number of characters on a single line. -max-line-length=100 - -# Maximum number of lines in a module. -max-module-lines=1000 - -# Allow the body of a class to be on the same line as the declaration if body -# contains single statement. -single-line-class-stmt=no - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - - -[SPELLING] - -# Limits count of emitted suggestions for spelling mistakes. -max-spelling-suggestions=4 - -# Spelling dictionary name. Available dictionaries: none. To make it work, -# install the python-enchant package. -spelling-dict= - -# List of comma separated words that should not be checked. -spelling-ignore-words= - -# A path to a file that contains the private dictionary; one word per line. -spelling-private-dict-file= - -# Tells whether to store unknown words to the private dictionary (see the -# --spelling-private-dict-file option) instead of raising a message. -spelling-store-unknown-words=no - - -[TYPECHECK] - -# List of decorators that produce context managers, such as -# contextlib.contextmanager. Add to this list to register other decorators that -# produce valid context managers. -contextmanager-decorators=contextlib.contextmanager - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E1101 when accessed. Python regular -# expressions are accepted. -generated-members= - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# Tells whether to warn about missing members when the owner of the attribute -# is inferred to be None. -ignore-none=yes - -# This flag controls whether pylint should warn about no-member and similar -# checks whenever an opaque object is returned when inferring. The inference -# can return multiple potential results while evaluating a Python object, but -# some branches might not be evaluated, which results in partial inference. In -# that case, it might be useful to still emit no-member and other checks for -# the rest of the inferred objects. -ignore-on-opaque-inference=yes - -# List of class names for which member attributes should not be checked (useful -# for classes with dynamically set attributes). This supports the use of -# qualified names. -ignored-classes=optparse.Values,thread._local,_thread._local,direct.showbase.PythonUtil.ScratchPad - -# List of module names for which member attributes should not be checked -# (useful for modules/projects where namespaces are manipulated during runtime -# and thus existing member attributes cannot be deduced by static analysis). It -# supports qualified module names, as well as Unix pattern matching. -ignored-modules= - -# Show a hint with possible names when a member name was not found. The aspect -# of finding the hint is based on edit distance. -missing-member-hint=yes - -# The minimum edit distance a name should have in order to be considered a -# similar match for a missing member name. -missing-member-hint-distance=1 - -# The total number of similar names that should be taken in consideration when -# showing a hint for a missing member. -missing-member-max-choices=1 - -# List of decorators that change the signature of a decorated function. -signature-mutators= - - -[SIMILARITIES] - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - -# Minimum lines number of a similarity. -min-similarity-lines=4 - - -[VARIABLES] - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid defining new builtins when possible. -additional-builtins=base,simbase,__dev__,onScreenDebug,globalClock,render,hidden,cluster - -# Tells whether unused global variables should be treated as a violation. -allow-global-unused-variables=yes - -# List of strings which can identify a callback function by name. A callback -# name must start or end with one of those strings. -callbacks=cb_, - _cb - -# A regular expression matching the name of dummy variables (i.e. expected to -# not be used). -dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore. -ignored-argument-names=_.*|^ignored_|^unused_ - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# List of qualified module names which can have objects that can redefine -# builtins. -redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME, - XXX, - TODO - -# Regular expression of note tags to take in consideration. -#notes-rgx= +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= [BASIC] @@ -297,13 +107,15 @@ notes=FIXME, argument-naming-style=snake_case # Regular expression matching correct argument names. Overrides argument- -# naming-style. +# naming-style. If left empty, argument names will be checked with the set +# naming style. #argument-rgx= # Naming style matching correct attribute names. attr-naming-style=snake_case # Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming # style. #attr-rgx= @@ -323,20 +135,30 @@ bad-names-rgxs= class-attribute-naming-style=any # Regular expression matching correct class attribute names. Overrides class- -# attribute-naming-style. +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. #class-attribute-rgx= +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + # Naming style matching correct class names. class-naming-style=PascalCase # Regular expression matching correct class names. Overrides class-naming- -# style. +# style. If left empty, class names will be checked with the set naming style. #class-rgx= # Naming style matching correct constant names. const-naming-style=UPPER_CASE # Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming # style. #const-rgx= @@ -348,7 +170,8 @@ docstring-min-length=-1 function-naming-style=snake_case # Regular expression matching correct function names. Overrides function- -# naming-style. +# naming-style. If left empty, function names will be checked with the set +# naming style. #function-rgx= # Good variable names which should always be accepted, separated by a comma. @@ -370,21 +193,22 @@ include-naming-hint=no inlinevar-naming-style=any # Regular expression matching correct inline iteration names. Overrides -# inlinevar-naming-style. +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. #inlinevar-rgx= # Naming style matching correct method names. method-naming-style=snake_case # Regular expression matching correct method names. Overrides method-naming- -# style. +# style. If left empty, method names will be checked with the set naming style. #method-rgx= # Naming style matching correct module names. module-naming-style=snake_case # Regular expression matching correct module names. Overrides module-naming- -# style. +# style. If left empty, module names will be checked with the set naming style. #module-rgx= # Colon-delimited sets of names that determine each other's naming style when @@ -400,38 +224,55 @@ no-docstring-rgx=^_ # These decorators are taken in consideration only for invalid-name. property-classes=abc.abstractproperty +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + # Naming style matching correct variable names. variable-naming-style=snake_case # Regular expression matching correct variable names. Overrides variable- -# naming-style. +# naming-style. If left empty, variable names will be checked with the set +# naming style. #variable-rgx= -[LOGGING] +[CLASSES] -# The type of string formatting that logging methods do. `old` means using % -# formatting, `new` is for `{}` formatting. -logging-format-style=old +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no -# Logging modules to check that the string format arguments are in logging -# function parameter format. -logging-modules=logging +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make -[STRING] +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls -# This flag controls whether inconsistent-quotes generates a warning when the -# character used as a quote delimiter is used inconsistently within a module. -check-quote-consistency=no - -# This flag controls whether the implicit-str-concat should generate a warning -# on implicit string concatenation in sequences defined over several lines. -check-str-concat-over-line-jumps=no +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=cls [DESIGN] +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + # Maximum number of arguments for function / method. max-args=5 @@ -463,6 +304,42 @@ max-statements=50 min-public-methods=2 +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format=LF + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + [IMPORTS] # List of modules that can be imported at any level, not just the top level @@ -472,24 +349,20 @@ allow-any-import-level= # Allow wildcard imports from modules that define __all__. allow-wildcard-with-all=no -# Analyse import fallback blocks. This can be used to support both Python 2 and -# 3 compatible code, which means that the block might have code that exists -# only in one or another interpreter, leading to false positives when analysed. -analyse-fallback-blocks=no - # Deprecated modules which should not be used, separated by a comma. -deprecated-modules=optparse,tkinter.tix +deprecated-modules=optparse,tkinter.tix,pandac.PandaModules,direct.directbase.DirectStart -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled). +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). ext-import-graph= -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled). +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). import-graph= -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled). +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). int-import-graph= # Force import order to recognize a module as part of the standard @@ -503,32 +376,352 @@ known-third-party=enchant preferred-modules= -[CLASSES] +[LOGGING] -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__, - __new__, - setUp, - __post_init__ +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old -# List of member names, which should be excluded from the protected access -# warning. -exclude-protected=_asdict, - _fields, - _replace, - _source, - _make - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=cls +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging -[EXCEPTIONS] +[MESSAGES CONTROL] -# Exceptions that will emit a warning when being caught. Defaults to -# "BaseException, Exception". -overgeneral-exceptions=BaseException, - Exception +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + consider-using-f-string, + attribute-defined-outside-init, + comparison-with-callable, + dangerous-default-value, + global-statement, + import-outside-toplevel, + invalid-name, + line-too-long, + missing-class-docstring, + missing-function-docstring, + missing-module-docstring, + protected-access, + no-classmethod-decorator, + no-staticmethod-decorator, + useless-object-inheritance, + property-with-parameters, + too-many-ancestors, + too-many-instance-attributes, + too-few-public-methods, + too-many-public-methods, + too-many-return-statements, + too-many-branches, + too-many-arguments, + too-many-locals, + too-many-statements, + too-many-boolean-expressions, + consider-merging-isinstance, + too-many-nested-blocks, + simplifiable-if-statement, + redefined-argument-from-local, + no-else-return, + consider-using-ternary, + trailing-comma-tuple, + stop-iteration-return, + simplify-boolean-expression, + inconsistent-return-statements, + useless-return, + consider-swap-variables, + consider-using-join, + consider-using-in, + consider-using-get, + chained-comparison, + consider-using-dict-comprehension, + consider-using-set-comprehension, + simplifiable-if-expression, + no-else-raise, + unnecessary-comprehension, + consider-using-sys-exit, + no-else-break, + no-else-continue, + super-with-arguments, + simplifiable-condition, + condition-evals-to-constant, + consider-using-generator, + use-a-generator, + consider-using-min-builtin, + consider-using-max-builtin, + consider-using-with, + unnecessary-dict-index-lookup, + use-list-literal, + use-dict-literal, + unnecessary-list-index-lookup, + literal-comparison, + comparison-with-itself, + comparison-of-constants, + cyclic-import, + consider-using-from-import, + duplicate-code, + raise-missing-from, + redefined-builtin, + redefined-outer-name, + too-many-lines, + unused-argument, + unused-variable, + unused-wildcard-import, + using-constant-test, + wrong-import-order, + wrong-import-position, + not-callable + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +#enable=c-extension-no-member + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=no + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members=base.cr, + base.le, + Pmw.AboutDialog, + Pmw.Balloon, + Pmw.ButtonBox, + Pmw.Color, + Pmw.ComboBox, + Pmw.EntryField, + Pmw.Group, + Pmw.INITOPT, + Pmw.MegaArchetype, + Pmw.MegaToplevel, + Pmw.MegaWidget, + Pmw.MenuBar, + Pmw.MessageBar, + Pmw.NoteBook, + Pmw.OptionMenu, + Pmw.OptionMenu, + Pmw.PanedWidget, + Pmw.ScrolledCanvas, + Pmw.ScrolledFrame, + Pmw.ScrolledListBox, + Pmw.ScrolledText, + Pmw.aboutcontact, + Pmw.aboutcopyright, + Pmw.aboutversion, + Pmw.forwardmethods, + Pmw.popgrab, + Pmw.pushgrab, + Pmw.setgeometryanddeiconify + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,direct.showbase.PythonUtil.ScratchPad + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins=base, + simbase, + __dev__, + onScreenDebug, + render, + hidden, + cluster, + launcher, + taskMgr, + localAvatar + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io,direct.showbase.ShowBase,direct.showbase.PythonUtil diff --git a/direct/src/cluster/ClusterServer.py b/direct/src/cluster/ClusterServer.py index ce16ed719e..188e3543e0 100644 --- a/direct/src/cluster/ClusterServer.py +++ b/direct/src/cluster/ClusterServer.py @@ -29,6 +29,7 @@ from direct.directnotify import DirectNotifyGlobal from direct.showbase import DirectObject from direct.task import Task from direct.task.TaskManagerGlobal import taskMgr +import builtins # NOTE: This assumes the following variables are set via bootstrap command line # arguments on server startup: @@ -334,10 +335,9 @@ class ClusterServer(DirectObject.DirectObject): def handleMessageQueue(self): - - #print self.messageQueue + #print(self.messageQueue) for data in self.messageQueue: - #print "in queue",dgi + #print("in queue", dgi) self.handleNamedMovement(data) self.messageQueue = [] @@ -352,8 +352,8 @@ class ClusterServer(DirectObject.DirectObject): """ Update cameraJig position to reflect latest position """ (x, y, z, h, p, r, sx, sy, sz) = self.msgHandler.parseSelectedMovementDatagram( dgi) - if last: - last.setPosHprScale(x, y, z, h, p, r, sx, sy, sz) + if getattr(builtins, 'last', None): + builtins.last.setPosHprScale(x, y, z, h, p, r, sx, sy, sz) def handleTimeData(self, dgi): """ Update cameraJig position to reflect latest position """ diff --git a/direct/src/directdevices/DirectDeviceManager.py b/direct/src/directdevices/DirectDeviceManager.py index 06f7797e2d..8198db2816 100644 --- a/direct/src/directdevices/DirectDeviceManager.py +++ b/direct/src/directdevices/DirectDeviceManager.py @@ -59,7 +59,7 @@ class DirectButtons(ButtonNode, DirectObject): # Attach node to data graph try: self._base = base - except: + except NameError: self._base = simbase self.nodePath = self._base.dataRoot.attachNewNode(self) @@ -108,7 +108,7 @@ class DirectAnalogs(AnalogNode, DirectObject): # Attach node to data graph try: self._base = base - except: + except NameError: self._base = simbase self.nodePath = self._base.dataRoot.attachNewNode(self) @@ -206,7 +206,7 @@ class DirectTracker(TrackerNode, DirectObject): # Attach node to data graph try: self._base = base - except: + except NameError: self._base = simbase self.nodePath = self._base.dataRoot.attachNewNode(self) @@ -238,7 +238,7 @@ class DirectDials(DialNode, DirectObject): # Attach node to data graph try: self._base = base - except: + except NameError: self._base = simbase self.nodePath = self._base.dataRoot.attachNewNode(self) @@ -289,7 +289,7 @@ class DirectTimecodeReader(AnalogNode, DirectObject): # Attach node to data graph try: self._base = base - except: + except NameError: self._base = simbase self.nodePath = self._base.dataRoot.attachNewNode(self) diff --git a/direct/src/directscripts/extract_docs.py b/direct/src/directscripts/extract_docs.py index e7d0a08c47..2b44beff49 100644 --- a/direct/src/directscripts/extract_docs.py +++ b/direct/src/directscripts/extract_docs.py @@ -16,11 +16,11 @@ from panda3d.interrogatedb import * if 'interrogate_element_is_sequence' not in globals(): - def interrogate_element_is_sequence(element): + def interrogate_element_is_sequence(element): # pylint: disable=function-redefined return False if 'interrogate_element_is_mapping' not in globals(): - def interrogate_element_is_mapping(element): + def interrogate_element_is_mapping(element): # pylint: disable=function-redefined return False diff --git a/direct/src/directtools/DirectGlobals.py b/direct/src/directtools/DirectGlobals.py index 719e60dc39..49fabd1d40 100644 --- a/direct/src/directtools/DirectGlobals.py +++ b/direct/src/directtools/DirectGlobals.py @@ -51,11 +51,11 @@ LE_CAM_MASKS = {'persp':LE_PERSP_CAM_MASK, 'top':LE_TOP_CAM_MASK} def LE_showInAllCam(nodePath): - for camName in LE_CAM_MASKS: - nodePath.show(LE_CAM_MASKS[camName]) + for camName, mask in LE_CAM_MASKS.items(): + nodePath.show(mask) def LE_showInOneCam(nodePath, thisCamName): LE_showInAllCam(nodePath) - for camName in LE_CAM_MASKS: + for camName, mask in LE_CAM_MASKS.items(): if camName != thisCamName: - nodePath.hide(LE_CAM_MASKS[camName]) + nodePath.hide(mask) diff --git a/direct/src/distributed/DistributedCamera.py b/direct/src/distributed/DistributedCamera.py index 5fc48df33b..4568cad712 100755 --- a/direct/src/distributed/DistributedCamera.py +++ b/direct/src/distributed/DistributedCamera.py @@ -2,7 +2,7 @@ from panda3d.core import ConfigVariableInt, GeomNode, NodePath, PerspectiveLens, from direct.fsm.FSM import FSM from direct.interval.IntervalGlobal import LerpScaleInterval, Sequence from direct.distributed.DistributedObject import DistributedObject - +from direct.showbase.MessengerGlobal import messenger _camera_id = ConfigVariableInt('camera-id', -1) _aware_of_cameras = ConfigVariableInt('aware-of-cameras', 0) diff --git a/direct/src/distributed/DistributedSmoothNode.py b/direct/src/distributed/DistributedSmoothNode.py index 118f0b3e78..06da4ff1df 100644 --- a/direct/src/distributed/DistributedSmoothNode.py +++ b/direct/src/distributed/DistributedSmoothNode.py @@ -465,6 +465,7 @@ class DistributedSmoothNode(DistributedNode.DistributedNode, "Warning: couldn't find the avatar %d" % (avId)) elif hasattr(other, "d_returnResync") and \ hasattr(self.cr, 'localAvatarDoId'): + globalClock = ClockObject.getGlobalClock() realTime = globalClock.getRealTime() serverTime = realTime - globalClockDelta.getDelta() assert self.notify.info( diff --git a/direct/src/leveleditor/AnimControlUI.py b/direct/src/leveleditor/AnimControlUI.py index 8381e68b83..8e26c3df0e 100755 --- a/direct/src/leveleditor/AnimControlUI.py +++ b/direct/src/leveleditor/AnimControlUI.py @@ -242,7 +242,7 @@ class TimeSlider(wx.Window): dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) - dc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)) + dc.SetFont(wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) self.unitWidth = self.w/float(self.frameNum) @@ -384,7 +384,7 @@ class TimeSlider(wx.Window): def DrawNumber(self, dc): dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) - dc.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.NORMAL)) + dc.SetFont(wx.Font(10, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) i = self.curFrame-self.sliderStartFrame st = str(self.curFrame) diff --git a/direct/src/leveleditor/CurveEditor.py b/direct/src/leveleditor/CurveEditor.py index 4fb846037d..08083962e0 100755 --- a/direct/src/leveleditor/CurveEditor.py +++ b/direct/src/leveleditor/CurveEditor.py @@ -49,7 +49,7 @@ class CurveEditor(DirectObject): self.currentCurve = self.currentRope.ropeNode.getCurve() self.currentCurve.setVertex(item[0], self.selected.getPos()) self.accept("DIRECT-delete", self.onControlerDelete) - return task.cont + return Task.cont def onControlerDelete(self): if self.editor.mode == self.editor.EDIT_CURVE_MODE: diff --git a/direct/src/leveleditor/GraphEditorUI.py b/direct/src/leveleditor/GraphEditorUI.py index 80594d8fd2..7c256f6dd6 100755 --- a/direct/src/leveleditor/GraphEditorUI.py +++ b/direct/src/leveleditor/GraphEditorUI.py @@ -213,7 +213,7 @@ class GraphEditorWindow(wx.Window): dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) - dc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL)) + dc.SetFont(wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) dc.DrawLine(self.zeroPos[0], 0.0, self.zeroPos[0], self.h) st = str(self.zero) @@ -283,7 +283,7 @@ class GraphEditorWindow(wx.Window): def DrawYCoord(self,dc): dc.SetPen(wx.BLACK_PEN) dc.SetBrush(wx.BLACK_BRUSH) - dc.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.NORMAL)) + dc.SetFont(wx.Font(8, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL)) dc.DrawLine(0.0, self.zeroPos[1], self.w, self.zeroPos[1]) st = str(self.zero) @@ -530,21 +530,21 @@ class GraphEditorWindow(wx.Window): dc.DrawLine(self.newPos[0], self.newPos[1], self.pos[0], self.newPos[1]) dc.DrawLine(self.newPos[0], self.newPos[1], self.newPos[0], self.pos[1]) - def OnSize(self,evt): + def OnSize(self, evt): self.InitBuffer() - def OnLeftDown(self,evt): + def OnLeftDown(self, evt): point = (evt.GetX(), evt.GetY()) - if point[1]>= 0.0 and point[1]<= float(self.h): - if point[0]>= 0.0 and point[0]<= float(self.w): + if point[1] >= 0.0 and point[1] <= float(self.h): + if point[0] >= 0.0 and point[0] <= float(self.w): self._mouseIn = True if self._mouseIn: self.CaptureMouse() self.pos = point - def OnLeftUp(self,evt): + def OnLeftUp(self, evt): if self.GetCapture(): self.ReleaseMouse() self._mouseIn = False @@ -552,11 +552,11 @@ class GraphEditorWindow(wx.Window): self.setSelection() self.SetGraphEditorData(self.property, self.curFrame) - def OnMiddleDown(self,evt): + def OnMiddleDown(self, evt): point = (evt.GetX(), evt.GetY()) - if point[1]>= 0.0 and point[1]<= float(self.h): - if point[0]>= 0.0 and point[0]<= float(self.w): + if point[1] >= 0.0 and point[1] <= float(self.h): + if point[0] >= 0.0 and point[0] <= float(self.w): self._mouseIn = True if self._mouseIn: @@ -567,12 +567,12 @@ class GraphEditorWindow(wx.Window): if self.GetCapture(): self.ReleaseMouse() - def OnMotion(self,evt): + def OnMotion(self, evt): self._mouseIn = False if evt.Dragging() and evt.LeftIsDown(): self.newPos = (evt.GetX(), evt.GetY()) - if self.newPos[1]>= 0.0 and self.newPos[1]<= float(self.h): - if self.newPos[0]>= 0.0 and self.newPos[0]<= float(self.w): + if self.newPos[1] >= 0.0 and self.newPos[1] <= float(self.h): + if self.newPos[0] >= 0.0 and self.newPos[0] <= float(self.w): self._mouseIn = True if self._mouseIn: @@ -585,8 +585,8 @@ class GraphEditorWindow(wx.Window): if evt.Dragging() and evt.MiddleIsDown(): self.newMidPos = (evt.GetX(), evt.GetY()) - if self.newMidPos[1]>= 0.0 and self.newMidPos[1]<= float(self.h): - if self.newMidPos[0]>= 0.0 and self.newMidPos[0]<= float(self.w): + if self.newMidPos[1] >= 0.0 and self.newMidPos[1] <= float(self.h): + if self.newMidPos[0] >= 0.0 and self.newMidPos[0] <= float(self.w): self._mouseIn = True if self._mouseIn: @@ -656,23 +656,23 @@ class GraphEditorWindow(wx.Window): self.setNewKey(list) def inside(self, point0, point1, point): - if point0[0]<=point1[0] and point0[1]<=point1[1]: - if point0[0]= list[i][AG.KEYFRAME][AG.LOCAL_VALUE][0]: + if handler[1][0][0] >= list[i][AG.KEYFRAME][AG.LOCAL_VALUE][0]: self._mainDialog.editor.animMgr.keyFramesInfo[list[i][AG.KEY]][list[i][AG.I]][AG.INSLOPE][0] = temp0 self._mainDialog.editor.animMgr.keyFramesInfo[list[i][AG.KEY]][list[i][AG.I]][AG.INSLOPE][1] = temp1 return @@ -872,25 +872,25 @@ class GraphEditorUI(wx.Dialog): self.graphEditorWindow.refresh() self.graphEditorWindow.SetGraphEditorData(self.str, self.curFrame) - def OnZoomIn(self,evt): + def OnZoomIn(self, evt): self.graphEditorWindow.zoom = self.graphEditorWindow.zoom/float(1.2) self.graphEditorWindow.unitWidth = self.graphEditorWindow.unitWidth*float(1.2) self.graphEditorWindow.unitHeight = self.graphEditorWindow.unitHeight*float(1.2) self.graphEditorWindow.generateInfo() self.graphEditorWindow.SetGraphEditorData(self.str, self.curFrame) - def OnZoomOut(self,evt): + def OnZoomOut(self, evt): self.graphEditorWindow.zoom = self.graphEditorWindow.zoom*float(1.2) self.graphEditorWindow.unitWidth = self.graphEditorWindow.unitWidth/float(1.2) self.graphEditorWindow.unitHeight = self.graphEditorWindow.unitHeight/float(1.2) self.graphEditorWindow.generateInfo() self.graphEditorWindow.SetGraphEditorData(self.str, self.curFrame) - def OnOneTangent(self,evt): + def OnOneTangent(self, evt): self.graphEditorWindow._OneTangent = True self.graphEditorWindow.SetGraphEditorData(self.str, self.curFrame) - def OnTwoTangents(self,evt): + def OnTwoTangents(self, evt): self.graphEditorWindow._OneTangent = False self.graphEditorWindow.SetGraphEditorData(self.str, self.curFrame) @@ -901,7 +901,7 @@ class GraphEditorUI(wx.Dialog): else: pass - def OnExit(self,evt): + def OnExit(self, evt): self.Destroy() self.editor.ui.graphEditorMenuItem.Check(False) self.object = None diff --git a/direct/src/leveleditor/LevelEditorUIBase.py b/direct/src/leveleditor/LevelEditorUIBase.py index 4a964ce7b9..d2ec98b9e5 100755 --- a/direct/src/leveleditor/LevelEditorUIBase.py +++ b/direct/src/leveleditor/LevelEditorUIBase.py @@ -646,17 +646,21 @@ class ViewportMenu(wx.Menu): wx.Menu.__init__(self) def addItem(self, name, parent = None, call = None, id = None): - if id is None: id = wx.NewId() - if parent is None: parent = self + if id is None: + id = wx.NewId() + if parent is None: + parent = self item = wx.MenuItem(parent, id, name) parent.AppendItem(item) if call is not None: self.Bind(wx.EVT_MENU, call, item) def addMenu(self, name, parent = None, id = None): - if id is None: id = wx.NewId() + if id is None: + id = wx.NewId() subMenu = wx.Menu() - if parent is None: parent = self + if parent is None: + parent = self parent.AppendMenu(id, name, subMenu) return subMenu diff --git a/direct/src/leveleditor/ObjectMgrBase.py b/direct/src/leveleditor/ObjectMgrBase.py index cd22310909..33dad9a4bc 100755 --- a/direct/src/leveleditor/ObjectMgrBase.py +++ b/direct/src/leveleditor/ObjectMgrBase.py @@ -48,7 +48,7 @@ class ObjectMgrBase: for id in list(self.objects.keys()): try: self.objects[id][OG.OBJ_NP].removeNode() - except: + except Exception: pass del self.objects[id] @@ -209,7 +209,7 @@ class ObjectMgrBase: model = objDef.model try: newobj = Actor(model) - except: + except Exception: newobj = Actor(Filename.fromOsSpecific(model).getFullpath()) if hasattr(objDef, 'animDict') and objDef.animDict != {}: objDef.anims = objDef.animDict.get(model) @@ -220,7 +220,7 @@ class ObjectMgrBase: model = objDef.model try: newobjModel = base.loader.loadModel(model) - except: + except Exception: newobjModel = base.loader.loadModel(Filename.fromOsSpecific(model).getFullpath(), okMissing=True) if newobjModel: self.flatten(newobjModel, model, objDef, uid) @@ -511,7 +511,7 @@ class ObjectMgrBase: if objDef.actor: try: newobj = Actor(model) - except: + except Exception: newobj = Actor(Filename.fromOsSpecific(model).getFullpath()) else: newobjModel = base.loader.loadModel(model, okMissing=True) diff --git a/direct/src/leveleditor/ProtoObjsUI.py b/direct/src/leveleditor/ProtoObjsUI.py index af717173df..1d1dad486d 100755 --- a/direct/src/leveleditor/ProtoObjsUI.py +++ b/direct/src/leveleditor/ProtoObjsUI.py @@ -117,9 +117,9 @@ class ProtoObjsUI(wx.Panel): if name.upper().endswith(ext.upper()): try: index = self.llist.InsertStringItem(self.llist.GetItemCount(), name) - self.protoObjs.data[name]= filename + self.protoObjs.data[name] = filename self.addObj(filename) - except: + except Exception: pass break diff --git a/direct/src/showbase/ContainerLeakDetector.py b/direct/src/showbase/ContainerLeakDetector.py index 56e94bf54e..9a0919acc3 100755 --- a/direct/src/showbase/ContainerLeakDetector.py +++ b/direct/src/showbase/ContainerLeakDetector.py @@ -376,8 +376,8 @@ class FindContainers(Job): # framerate, etc. See LeakDetectors.py if not hasattr(builtins, "leakDetectors"): builtins.leakDetectors = {} - ref = ObjectRef(Indirection(evalStr='leakDetectors'), id(leakDetectors)) - self._id2baseStartRef[id(leakDetectors)] = ref + ref = ObjectRef(Indirection(evalStr='leakDetectors'), id(builtins.leakDetectors)) + self._id2baseStartRef[id(builtins.leakDetectors)] = ref for i in self._addContainerGen(builtins.__dict__, ref): pass try: diff --git a/direct/src/showbase/LeakDetectors.py b/direct/src/showbase/LeakDetectors.py index 8ac18ee415..0bdfef6ac6 100755 --- a/direct/src/showbase/LeakDetectors.py +++ b/direct/src/showbase/LeakDetectors.py @@ -21,11 +21,11 @@ class LeakDetector: builtins.leakDetectors = {} self._leakDetectorsKey = self.getLeakDetectorKey() if __dev__: - assert self._leakDetectorsKey not in leakDetectors - leakDetectors[self._leakDetectorsKey] = self + assert self._leakDetectorsKey not in builtins.leakDetectors + builtins.leakDetectors[self._leakDetectorsKey] = self def destroy(self): - del leakDetectors[self._leakDetectorsKey] + del builtins.leakDetectors[self._leakDetectorsKey] def getLeakDetectorKey(self): # this string will be shown to the end user and should ideally contain enough information to diff --git a/direct/src/showbase/Loader.py b/direct/src/showbase/Loader.py index bedf65f1d2..2796c79972 100644 --- a/direct/src/showbase/Loader.py +++ b/direct/src/showbase/Loader.py @@ -437,9 +437,9 @@ class Loader(DirectObject): assert len(modelList) == len(nodeList) # Make sure we have PandaNodes, not NodePaths. - for i in range(len(nodeList)): - if isinstance(nodeList[i], NodePath): - nodeList[i] = nodeList[i].node() + for i, node in enumerate(nodeList): + if isinstance(node, NodePath): + nodeList[i] = node.node() # From here on, we deal with a list of (filename, node) pairs. modelList = list(zip(modelList, nodeList)) @@ -1091,10 +1091,10 @@ class Loader(DirectObject): drop in the new models. """ self.notify.debug("asyncFlattenDone: %s" % (models,)) assert len(models) == len(origModelList) - for i in range(len(models)): + for i, model in enumerate(models): origModelList[i].getChildren().detach() orig = origModelList[i].node() - flat = models[i].node() + flat = model.node() orig.copyAllProperties(flat) flat.replaceNode(orig) diff --git a/direct/src/showbase/PythonUtil.py b/direct/src/showbase/PythonUtil.py index 231b343a96..a29d98b6a4 100644 --- a/direct/src/showbase/PythonUtil.py +++ b/direct/src/showbase/PythonUtil.py @@ -88,7 +88,7 @@ class Functor: for arg in self._args: try: argStr = repr(arg) - except: + except Exception: argStr = 'bad repr: %s' % arg.__class__ s += ', %s' % argStr for karg, value in list(self._kargs.items()): @@ -307,8 +307,10 @@ def difference(a, b): """ difference(list, list): """ - if not a: return b - if not b: return a + if not a: + return b + if not b: + return a d = [] for i in a: if (i not in b) and (i not in d): @@ -626,7 +628,7 @@ if __debug__: # allow profiling in published versions #try: # null = not __dev__ - #except: + #except Exception: # null = not __debug__ #if null: # # if we're not in __dev__, just return the function itself. This @@ -1006,7 +1008,7 @@ if __debug__: finally: del stack del frame - except: + except Exception: result = (None, None, None) return result @@ -1322,7 +1324,7 @@ def safeRepr(obj): try: return repr(obj) - except: + except Exception: return '<** FAILED REPR OF %s instance at %s **>' % (obj.__class__.__name__, hex(id(obj))) def safeReprTypeOnFail(obj): @@ -1339,7 +1341,7 @@ def safeReprTypeOnFail(obj): try: return repr(obj) - except: + except Exception: return '<** FAILED REPR OF %s instance at %s **>' % (obj.__class__.__name__, hex(id(obj))) @@ -1401,7 +1403,7 @@ def fastRepr(obj, maxLen=200, strFactor=10, _visitedIds=None): if len(r) > maxLen: r = r[:maxLen] return r - except: + except Exception: return '<** FAILED REPR OF %s **>' % obj.__class__.__name__ def convertTree(objTree, idList): @@ -1819,7 +1821,7 @@ def pstatcollect(scope, level = None): scope.stop(pop = True) return val return wrap - except: + except Exception: pass return decorator @@ -2007,13 +2009,13 @@ def report(types = [], prefix = '', xform = None, notifyFunc = None, dConfigPara def getBase(): try: return base - except: + except Exception: return simbase def getRepository(): try: return base.cr - except: + except Exception: return simbase.air exceptionLoggedNotify = None @@ -2029,7 +2031,7 @@ if __debug__: """ try: null = not __dev__ - except: + except Exception: null = not __debug__ if null: # if we're not in __dev__, just return the function itself. This @@ -2061,7 +2063,7 @@ if __debug__: appendStr(e, '\n%s' % s) else: exceptionLoggedNotify.info(s) - except: + except Exception: exceptionLoggedNotify.info( '%s: ERROR IN PRINTING' % f.__name__) raise @@ -2426,11 +2428,11 @@ def typeName(o): def safeTypeName(o): try: return typeName(o) - except: + except Exception: pass try: return type(o) - except: + except Exception: pass return '' diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 5d12a0ab4c..8c5ca231ea 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -704,7 +704,7 @@ class ShowBase(DirectObject.DirectObject): try: self.direct.panel.destroy() - except: + except Exception: pass if hasattr(self, 'win'): @@ -2697,7 +2697,7 @@ class ShowBase(DirectObject.DirectObject): self.bboard.post('oobeEnabled', True) try: cameraParent = localAvatar - except: + except NameError: # Make oobeCamera be a sibling of wherever camera is now. cameraParent = self.camera.getParent() self.oobeCamera.reparentTo(cameraParent) diff --git a/direct/src/showbase/TaskThreaded.py b/direct/src/showbase/TaskThreaded.py index cb664c6c09..2206921dc0 100755 --- a/direct/src/showbase/TaskThreaded.py +++ b/direct/src/showbase/TaskThreaded.py @@ -46,7 +46,8 @@ class TaskThreaded: self.ignoreAll() def getTimeslice(self): - return self.___timeslice + return self.__timeslice + def setTimeslice(self, timeslice): self.__timeslice = timeslice diff --git a/direct/src/tkpanels/Inspector.py b/direct/src/tkpanels/Inspector.py index d646afcb74..13df2f05d3 100644 --- a/direct/src/tkpanels/Inspector.py +++ b/direct/src/tkpanels/Inspector.py @@ -219,7 +219,7 @@ class SequenceInspector(Inspector): if partNumber == 0: return self.object index = self.privatePartNumber(partNumber) - if type(index) == IntType: + if isinstance(index, int): return self.object[index] else: return getattr(self.object, index) diff --git a/direct/src/tkpanels/NotifyPanel.py b/direct/src/tkpanels/NotifyPanel.py index 0ead50d9f6..9edba2358f 100644 --- a/direct/src/tkpanels/NotifyPanel.py +++ b/direct/src/tkpanels/NotifyPanel.py @@ -15,7 +15,7 @@ class NotifyPanel: # Make sure TK mainloop is running from direct.showbase.TkGlobal import Pmw from tkinter import Toplevel, Frame, Label, Radiobutton, IntVar - from direct.showbase.TkGlobal import HORIZONTAL, X, W, NW, BOTH, LEFT, RIGHT + from tkinter import HORIZONTAL, X, W, NW, BOTH, LEFT, RIGHT # To get severity levels from panda3d.core import NSFatal, NSError, NSWarning, NSInfo, NSDebug, NSSpam diff --git a/direct/src/tkwidgets/Floater.py b/direct/src/tkwidgets/Floater.py index d61056bf3b..a3adbde188 100644 --- a/direct/src/tkwidgets/Floater.py +++ b/direct/src/tkwidgets/Floater.py @@ -344,19 +344,17 @@ if __name__ == '__main__': mega1 = Floater(root, command = printVal) mega1.pack(side = 'left', expand = 1, fill = 'x') - """ # These are things you can set/configure # Starting value for floater - mega1['value'] = 123.456 - mega1['text'] = 'Drive delta X' + #mega1['value'] = 123.456 + #mega1['text'] = 'Drive delta X' # To change the color of the label: - mega1.label['foreground'] = 'Red' + #mega1.label['foreground'] = 'Red' # Max change/update, default is 100 # To have really fine control, for example - # mega1['maxVelocity'] = 0.1 + #mega1['maxVelocity'] = 0.1 # Number of digits to the right of the decimal point, default = 2 - # mega1['numDigits'] = 5 - """ + #mega1['numDigits'] = 5 # To create a floater group to set an RGBA value: group1 = FloaterGroup(root, dim = 4, diff --git a/direct/src/tkwidgets/MemoryExplorer.py b/direct/src/tkwidgets/MemoryExplorer.py index 83c86f4f7f..ddca3000e7 100755 --- a/direct/src/tkwidgets/MemoryExplorer.py +++ b/direct/src/tkwidgets/MemoryExplorer.py @@ -343,7 +343,7 @@ class MemoryExplorerItem: self.numFaces += child.numFaces def ls(self, indent = ""): - print(indent + self.nodePath.getName() + " " + str(self.vertexBytes) + " " + str(self.numFaces) + " " + str(self.textureBytes)) + print(indent + self.nodePath.getName() + " " + str(self.getVertexBytes()) + " " + str(self.numFaces) + " " + str(self.textureBytes)) indent = indent + " " for child in self.children: diff --git a/direct/src/tkwidgets/VectorWidgets.py b/direct/src/tkwidgets/VectorWidgets.py index b46e2c2846..fe0efd1e36 100644 --- a/direct/src/tkwidgets/VectorWidgets.py +++ b/direct/src/tkwidgets/VectorWidgets.py @@ -115,18 +115,12 @@ class VectorEntry(Pmw.MegaWidget): # Make sure input variables processed self.initialiseoptions(VectorEntry) - def menu(self): - return self.menu - def label(self): return self._label def entry(self, index): return self.entryList[index] - def entryList(self): - return self.entryList - def floaters(self): return self._floaters diff --git a/direct/src/tkwidgets/WidgetPropertiesDialog.py b/direct/src/tkwidgets/WidgetPropertiesDialog.py index 2c5efb6fb8..61c65b30fe 100644 --- a/direct/src/tkwidgets/WidgetPropertiesDialog.py +++ b/direct/src/tkwidgets/WidgetPropertiesDialog.py @@ -24,8 +24,7 @@ class WidgetPropertiesDialog(tk.Toplevel): self.propertyList.sort() # Use default parent if none specified if not parent: - import tkinter - parent = tkinter._default_root + parent = tk._default_root # Create toplevel window tk.Toplevel.__init__(self, parent) self.transient(parent)