Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-flake8-builtins for 
openSUSE:Factory checked in at 2024-04-21 20:27:37
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-flake8-builtins (Old)
 and      /work/SRC/openSUSE:Factory/.python-flake8-builtins.new.26366 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-flake8-builtins"

Sun Apr 21 20:27:37 2024 rev:8 rq:1169373 version:2.5.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-flake8-builtins/python-flake8-builtins.changes
    2023-12-28 23:03:02.893917752 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-flake8-builtins.new.26366/python-flake8-builtins.changes
 2024-04-21 20:29:08.082002807 +0200
@@ -1,0 +2,10 @@
+Sat Apr 20 14:06:23 UTC 2024 - Dirk Müller <dmuel...@suse.com>
+
+- update to 2.5.0:
+  * Support detecting a shadowing folder as module name (as part
+    of A005). [asfaltboy]
+  * Add rule for lambda argument shadowing (A006). [cielavenir]
+  * Add rule for builtin module name shadowing (A005).
+    [asfaltboy]
+
+-------------------------------------------------------------------

Old:
----
  flake8_builtins-2.2.0.tar.gz

New:
----
  flake8_builtins-2.5.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-flake8-builtins.spec ++++++
--- /var/tmp/diff_new_pack.JqnFKv/_old  2024-04-21 20:29:09.170042748 +0200
+++ /var/tmp/diff_new_pack.JqnFKv/_new  2024-04-21 20:29:09.170042748 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-flake8-builtins
 #
-# Copyright (c) 2023 SUSE LLC
+# Copyright (c) 2024 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-flake8-builtins
-Version:        2.2.0
+Version:        2.5.0
 Release:        0
 Summary:        Flake8 Builtins plugin
 License:        GPL-2.0-only

++++++ flake8_builtins-2.2.0.tar.gz -> flake8_builtins-2.5.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/CHANGES.rst 
new/flake8_builtins-2.5.0/CHANGES.rst
--- old/flake8_builtins-2.2.0/CHANGES.rst       2020-02-02 01:00:00.000000000 
+0100
+++ new/flake8_builtins-2.5.0/CHANGES.rst       2020-02-02 01:00:00.000000000 
+0100
@@ -3,6 +3,27 @@
 Changelog
 =========
 
+2.5.0 (2024-04-09)
+------------------
+
+- Support detecting a shadowing folder as module name (as part of `A005`).
+  [asfaltboy]
+
+
+2.4.0 (2024-04-01)
+------------------
+
+- Add rule for lambda argument shadowing (`A006`).
+  [cielavenir]
+
+
+2.3.0 (2024-03-29)
+------------------
+
+- Add rule for builtin module name shadowing (`A005`).
+  [asfaltboy]
+
+
 2.2.0 (2023-11-03)
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/PKG-INFO 
new/flake8_builtins-2.5.0/PKG-INFO
--- old/flake8_builtins-2.2.0/PKG-INFO  2020-02-02 01:00:00.000000000 +0100
+++ new/flake8_builtins-2.5.0/PKG-INFO  2020-02-02 01:00:00.000000000 +0100
@@ -1,350 +1,11 @@
 Metadata-Version: 2.1
 Name: flake8-builtins
-Version: 2.2.0
+Version: 2.5.0
 Summary: Check for python builtins being used as variables or parameters
 Project-URL: Homepage, https://github.com/gforcada/flake8-builtins
 Project-URL: Bug Tracker, https://github.com/gforcada/flake8-builtins/issues
 Project-URL: Changelog, 
https://github.com/gforcada/flake8-builtins/blob/main/CHANGES.rst
 Author-email: Gil Forcada Codinachs <gil.gn...@gmail.com>
-License:                     GNU GENERAL PUBLIC LICENSE
-                               Version 2, June 1991
-        
-         Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
-         51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-         Everyone is permitted to copy and distribute verbatim copies
-         of this license document, but changing it is not allowed.
-        
-                                    Preamble
-        
-          The licenses for most software are designed to take away your
-        freedom to share and change it.  By contrast, the GNU General Public
-        License is intended to guarantee your freedom to share and change free
-        software--to make sure the software is free for all its users.  This
-        General Public License applies to most of the Free Software
-        Foundation's software and to any other program whose authors commit to
-        using it.  (Some other Free Software Foundation software is covered by
-        the GNU Lesser General Public License instead.)  You can apply it to
-        your programs, too.
-        
-          When we speak of free software, we are referring to freedom, not
-        price.  Our General Public Licenses are designed to make sure that you
-        have the freedom to distribute copies of free software (and charge for
-        this service if you wish), that you receive source code or can get it
-        if you want it, that you can change the software or use pieces of it
-        in new free programs; and that you know you can do these things.
-        
-          To protect your rights, we need to make restrictions that forbid
-        anyone to deny you these rights or to ask you to surrender the rights.
-        These restrictions translate to certain responsibilities for you if you
-        distribute copies of the software, or if you modify it.
-        
-          For example, if you distribute copies of such a program, whether
-        gratis or for a fee, you must give the recipients all the rights that
-        you have.  You must make sure that they, too, receive or can get the
-        source code.  And you must show them these terms so they know their
-        rights.
-        
-          We protect your rights with two steps: (1) copyright the software, 
and
-        (2) offer you this license which gives you legal permission to copy,
-        distribute and/or modify the software.
-        
-          Also, for each author's protection and ours, we want to make certain
-        that everyone understands that there is no warranty for this free
-        software.  If the software is modified by someone else and passed on, 
we
-        want its recipients to know that what they have is not the original, so
-        that any problems introduced by others will not reflect on the original
-        authors' reputations.
-        
-          Finally, any free program is threatened constantly by software
-        patents.  We wish to avoid the danger that redistributors of a free
-        program will individually obtain patent licenses, in effect making the
-        program proprietary.  To prevent this, we have made it clear that any
-        patent must be licensed for everyone's free use or not licensed at all.
-        
-          The precise terms and conditions for copying, distribution and
-        modification follow.
-        
-                            GNU GENERAL PUBLIC LICENSE
-           TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-        
-          0. This License applies to any program or other work which contains
-        a notice placed by the copyright holder saying it may be distributed
-        under the terms of this General Public License.  The "Program", below,
-        refers to any such program or work, and a "work based on the Program"
-        means either the Program or any derivative work under copyright law:
-        that is to say, a work containing the Program or a portion of it,
-        either verbatim or with modifications and/or translated into another
-        language.  (Hereinafter, translation is included without limitation in
-        the term "modification".)  Each licensee is addressed as "you".
-        
-        Activities other than copying, distribution and modification are not
-        covered by this License; they are outside its scope.  The act of
-        running the Program is not restricted, and the output from the Program
-        is covered only if its contents constitute a work based on the
-        Program (independent of having been made by running the Program).
-        Whether that is true depends on what the Program does.
-        
-          1. You may copy and distribute verbatim copies of the Program's
-        source code as you receive it, in any medium, provided that you
-        conspicuously and appropriately publish on each copy an appropriate
-        copyright notice and disclaimer of warranty; keep intact all the
-        notices that refer to this License and to the absence of any warranty;
-        and give any other recipients of the Program a copy of this License
-        along with the Program.
-        
-        You may charge a fee for the physical act of transferring a copy, and
-        you may at your option offer warranty protection in exchange for a fee.
-        
-          2. You may modify your copy or copies of the Program or any portion
-        of it, thus forming a work based on the Program, and copy and
-        distribute such modifications or work under the terms of Section 1
-        above, provided that you also meet all of these conditions:
-        
-            a) You must cause the modified files to carry prominent notices
-            stating that you changed the files and the date of any change.
-        
-            b) You must cause any work that you distribute or publish, that in
-            whole or in part contains or is derived from the Program or any
-            part thereof, to be licensed as a whole at no charge to all third
-            parties under the terms of this License.
-        
-            c) If the modified program normally reads commands interactively
-            when run, you must cause it, when started running for such
-            interactive use in the most ordinary way, to print or display an
-            announcement including an appropriate copyright notice and a
-            notice that there is no warranty (or else, saying that you provide
-            a warranty) and that users may redistribute the program under
-            these conditions, and telling the user how to view a copy of this
-            License.  (Exception: if the Program itself is interactive but
-            does not normally print such an announcement, your work based on
-            the Program is not required to print an announcement.)
-        
-        These requirements apply to the modified work as a whole.  If
-        identifiable sections of that work are not derived from the Program,
-        and can be reasonably considered independent and separate works in
-        themselves, then this License, and its terms, do not apply to those
-        sections when you distribute them as separate works.  But when you
-        distribute the same sections as part of a whole which is a work based
-        on the Program, the distribution of the whole must be on the terms of
-        this License, whose permissions for other licensees extend to the
-        entire whole, and thus to each and every part regardless of who wrote 
it.
-        
-        Thus, it is not the intent of this section to claim rights or contest
-        your rights to work written entirely by you; rather, the intent is to
-        exercise the right to control the distribution of derivative or
-        collective works based on the Program.
-        
-        In addition, mere aggregation of another work not based on the Program
-        with the Program (or with a work based on the Program) on a volume of
-        a storage or distribution medium does not bring the other work under
-        the scope of this License.
-        
-          3. You may copy and distribute the Program (or a work based on it,
-        under Section 2) in object code or executable form under the terms of
-        Sections 1 and 2 above provided that you also do one of the following:
-        
-            a) Accompany it with the complete corresponding machine-readable
-            source code, which must be distributed under the terms of Sections
-            1 and 2 above on a medium customarily used for software 
interchange; or,
-        
-            b) Accompany it with a written offer, valid for at least three
-            years, to give any third party, for a charge no more than your
-            cost of physically performing source distribution, a complete
-            machine-readable copy of the corresponding source code, to be
-            distributed under the terms of Sections 1 and 2 above on a medium
-            customarily used for software interchange; or,
-        
-            c) Accompany it with the information you received as to the offer
-            to distribute corresponding source code.  (This alternative is
-            allowed only for noncommercial distribution and only if you
-            received the program in object code or executable form with such
-            an offer, in accord with Subsection b above.)
-        
-        The source code for a work means the preferred form of the work for
-        making modifications to it.  For an executable work, complete source
-        code means all the source code for all modules it contains, plus any
-        associated interface definition files, plus the scripts used to
-        control compilation and installation of the executable.  However, as a
-        special exception, the source code distributed need not include
-        anything that is normally distributed (in either source or binary
-        form) with the major components (compiler, kernel, and so on) of the
-        operating system on which the executable runs, unless that component
-        itself accompanies the executable.
-        
-        If distribution of executable or object code is made by offering
-        access to copy from a designated place, then offering equivalent
-        access to copy the source code from the same place counts as
-        distribution of the source code, even though third parties are not
-        compelled to copy the source along with the object code.
-        
-          4. You may not copy, modify, sublicense, or distribute the Program
-        except as expressly provided under this License.  Any attempt
-        otherwise to copy, modify, sublicense or distribute the Program is
-        void, and will automatically terminate your rights under this License.
-        However, parties who have received copies, or rights, from you under
-        this License will not have their licenses terminated so long as such
-        parties remain in full compliance.
-        
-          5. You are not required to accept this License, since you have not
-        signed it.  However, nothing else grants you permission to modify or
-        distribute the Program or its derivative works.  These actions are
-        prohibited by law if you do not accept this License.  Therefore, by
-        modifying or distributing the Program (or any work based on the
-        Program), you indicate your acceptance of this License to do so, and
-        all its terms and conditions for copying, distributing or modifying
-        the Program or works based on it.
-        
-          6. Each time you redistribute the Program (or any work based on the
-        Program), the recipient automatically receives a license from the
-        original licensor to copy, distribute or modify the Program subject to
-        these terms and conditions.  You may not impose any further
-        restrictions on the recipients' exercise of the rights granted herein.
-        You are not responsible for enforcing compliance by third parties to
-        this License.
-        
-          7. If, as a consequence of a court judgment or allegation of patent
-        infringement or for any other reason (not limited to patent issues),
-        conditions are imposed on you (whether by court order, agreement or
-        otherwise) that contradict the conditions of this License, they do not
-        excuse you from the conditions of this License.  If you cannot
-        distribute so as to satisfy simultaneously your obligations under this
-        License and any other pertinent obligations, then as a consequence you
-        may not distribute the Program at all.  For example, if a patent
-        license would not permit royalty-free redistribution of the Program by
-        all those who receive copies directly or indirectly through you, then
-        the only way you could satisfy both it and this License would be to
-        refrain entirely from distribution of the Program.
-        
-        If any portion of this section is held invalid or unenforceable under
-        any particular circumstance, the balance of the section is intended to
-        apply and the section as a whole is intended to apply in other
-        circumstances.
-        
-        It is not the purpose of this section to induce you to infringe any
-        patents or other property right claims or to contest validity of any
-        such claims; this section has the sole purpose of protecting the
-        integrity of the free software distribution system, which is
-        implemented by public license practices.  Many people have made
-        generous contributions to the wide range of software distributed
-        through that system in reliance on consistent application of that
-        system; it is up to the author/donor to decide if he or she is willing
-        to distribute software through any other system and a licensee cannot
-        impose that choice.
-        
-        This section is intended to make thoroughly clear what is believed to
-        be a consequence of the rest of this License.
-        
-          8. If the distribution and/or use of the Program is restricted in
-        certain countries either by patents or by copyrighted interfaces, the
-        original copyright holder who places the Program under this License
-        may add an explicit geographical distribution limitation excluding
-        those countries, so that distribution is permitted only in or among
-        countries not thus excluded.  In such case, this License incorporates
-        the limitation as if written in the body of this License.
-        
-          9. The Free Software Foundation may publish revised and/or new 
versions
-        of the General Public License from time to time.  Such new versions 
will
-        be similar in spirit to the present version, but may differ in detail 
to
-        address new problems or concerns.
-        
-        Each version is given a distinguishing version number.  If the Program
-        specifies a version number of this License which applies to it and "any
-        later version", you have the option of following the terms and 
conditions
-        either of that version or of any later version published by the Free
-        Software Foundation.  If the Program does not specify a version number 
of
-        this License, you may choose any version ever published by the Free 
Software
-        Foundation.
-        
-          10. If you wish to incorporate parts of the Program into other free
-        programs whose distribution conditions are different, write to the 
author
-        to ask for permission.  For software which is copyrighted by the Free
-        Software Foundation, write to the Free Software Foundation; we 
sometimes
-        make exceptions for this.  Our decision will be guided by the two goals
-        of preserving the free status of all derivatives of our free software 
and
-        of promoting the sharing and reuse of software generally.
-        
-                                    NO WARRANTY
-        
-          11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO 
WARRANTY
-        FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT 
WHEN
-        OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-        PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER 
EXPRESSED
-        OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-        MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK 
AS
-        TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-        PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY 
SERVICING,
-        REPAIR OR CORRECTION.
-        
-          12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 
WRITING
-        WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-        REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR 
DAMAGES,
-        INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES 
ARISING
-        OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT 
LIMITED
-        TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED 
BY
-        YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY 
OTHER
-        PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-        POSSIBILITY OF SUCH DAMAGES.
-        
-                             END OF TERMS AND CONDITIONS
-        
-                    How to Apply These Terms to Your New Programs
-        
-          If you develop a new program, and you want it to be of the greatest
-        possible use to the public, the best way to achieve this is to make it
-        free software which everyone can redistribute and change under these 
terms.
-        
-          To do so, attach the following notices to the program.  It is safest
-        to attach them to the start of each source file to most effectively
-        convey the exclusion of warranty; and each file should have at least
-        the "copyright" line and a pointer to where the full notice is found.
-        
-            <one line to give the program's name and a brief idea of what it 
does.>
-            Copyright (C) <year>  <name of author>
-        
-            This program is free software; you can redistribute it and/or 
modify
-            it under the terms of the GNU General Public License as published 
by
-            the Free Software Foundation; either version 2 of the License, or
-            (at your option) any later version.
-        
-            This program is distributed in the hope that it will be useful,
-            but WITHOUT ANY WARRANTY; without even the implied warranty of
-            MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-            GNU General Public License for more details.
-        
-            You should have received a copy of the GNU General Public License 
along
-            with this program; if not, write to the Free Software Foundation, 
Inc.,
-            51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-        
-        Also add information on how to contact you by electronic and paper 
mail.
-        
-        If the program is interactive, make it output a short notice like this
-        when it starts in an interactive mode:
-        
-            Gnomovision version 69, Copyright (C) year name of author
-            Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type 
`show w'.
-            This is free software, and you are welcome to redistribute it
-            under certain conditions; type `show c' for details.
-        
-        The hypothetical commands `show w' and `show c' should show the 
appropriate
-        parts of the General Public License.  Of course, the commands you use 
may
-        be called something other than `show w' and `show c'; they could even 
be
-        mouse-clicks or menu items--whatever suits your program.
-        
-        You should also get your employer (if you work as a programmer) or your
-        school, if any, to sign a "copyright disclaimer" for the program, if
-        necessary.  Here is a sample; alter the names:
-        
-          Yoyodyne, Inc., hereby disclaims all copyright interest in the 
program
-          `Gnomovision' (which makes passes at compilers) written by James 
Hacker.
-        
-          <signature of Ty Coon>, 1 April 1989
-          Ty Coon, President of Vice
-        
-        This General Public License does not permit incorporating your program 
into
-        proprietary programs.  If your program is a subroutine library, you may
-        consider it more useful to permit linking proprietary applications 
with the
-        library.  If this is what you want to do, use the GNU Lesser General
-        Public License instead of this License.
 License-File: LICENSE
 Keywords: flake8,pep8,python
 Classifier: Development Status :: 5 - Production/Stable
@@ -456,7 +117,7 @@
 
 Requirements
 ------------
-- Python 3.8, 3.9, 3.10, 3.11, and pypy3
+- Python 3.8, 3.9, 3.10, 3.11, 3.12, and pypy3
 - flake8
 
 Rules
@@ -474,6 +135,12 @@
 A004:
   An import statement is shadowing a Python builtin.
 
+A005:
+  A module is shadowing a Python builtin module (e.g: `logging` or `socket`)
+
+A006:
+  A lambda argument is shadowing a Python builtin.
+
 License
 -------
 GPL 2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/README.rst 
new/flake8_builtins-2.5.0/README.rst
--- old/flake8_builtins-2.2.0/README.rst        2020-02-02 01:00:00.000000000 
+0100
+++ new/flake8_builtins-2.5.0/README.rst        2020-02-02 01:00:00.000000000 
+0100
@@ -83,7 +83,7 @@
 
 Requirements
 ------------
-- Python 3.8, 3.9, 3.10, 3.11, and pypy3
+- Python 3.8, 3.9, 3.10, 3.11, 3.12, and pypy3
 - flake8
 
 Rules
@@ -101,6 +101,12 @@
 A004:
   An import statement is shadowing a Python builtin.
 
+A005:
+  A module is shadowing a Python builtin module (e.g: `logging` or `socket`)
+
+A006:
+  A lambda argument is shadowing a Python builtin.
+
 License
 -------
 GPL 2.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/flake8_builtins.py 
new/flake8_builtins-2.5.0/flake8_builtins.py
--- old/flake8_builtins-2.2.0/flake8_builtins.py        2020-02-02 
01:00:00.000000000 +0100
+++ new/flake8_builtins-2.5.0/flake8_builtins.py        2020-02-02 
01:00:00.000000000 +0100
@@ -1,8 +1,10 @@
 from flake8 import utils as stdin_utils
+from pathlib import Path
 
 import ast
 import builtins
 import inspect
+import sys
 
 
 class BuiltinsChecker:
@@ -12,6 +14,8 @@
     argument_msg = 'A002 argument "{0}" is shadowing a Python builtin'
     class_attribute_msg = 'A003 class attribute "{0}" is shadowing a Python 
builtin'
     import_msg = 'A004 import statement "{0}" is shadowing a Python builtin'
+    module_name_msg = 'A005 the module is shadowing a Python builtin module 
"{0}"'
+    lambda_argument_msg = 'A006 lambda argument "{0}" is shadowing a Python 
builtin'
 
     names = []
     ignore_list = {
@@ -20,6 +24,7 @@
         'credits',
         '_',
     }
+    ignored_module_names = set()
 
     def __init__(self, tree, filename):
         self.tree = tree
@@ -34,6 +39,13 @@
             comma_separated_list=True,
             help='A comma separated list of builtins to skip checking',
         )
+        option_manager.add_option(
+            '--builtins-allowed-modules',
+            metavar='builtins',
+            parse_from_config=True,
+            comma_separated_list=True,
+            help='A comma separated list of builtin module names to allow',
+        )
 
     @classmethod
     def parse_options(cls, options):
@@ -47,12 +59,26 @@
         if flake8_builtins:
             cls.names.update(flake8_builtins)
 
+        if options.builtins_allowed_modules is not None:
+            cls.ignored_module_names.update(options.builtins_allowed_modules)
+
+        if hasattr(sys, 'stdlib_module_names'):
+            # stdlib_module_names is only available in Python 3.10+
+            known_module_names = sys.stdlib_module_names
+            cls.module_names = {
+                m for m in known_module_names if m not in 
cls.ignored_module_names
+            }
+        else:
+            cls.module_names = set()
+
     def run(self):
         tree = self.tree
 
         if self.filename == 'stdin':
             lines = stdin_utils.stdin_get_value()
             tree = ast.parse(lines)
+        else:
+            yield from self.check_module_name(self.filename)
 
         for statement in ast.walk(tree):
             for child in ast.iter_child_nodes(statement):
@@ -88,6 +114,9 @@
             elif isinstance(statement, function_nodes):
                 value = self.check_function_definition(statement)
 
+            elif isinstance(statement, ast.Lambda):
+                value = self.check_lambda_definition(statement)
+
             elif isinstance(statement, for_nodes):
                 value = self.check_for_loop(statement)
 
@@ -156,6 +185,20 @@
                     variable=arg.arg,
                 )
 
+    def check_lambda_definition(self, statement):
+        all_arguments = []
+        all_arguments.extend(statement.args.args)
+        all_arguments.extend(getattr(statement.args, 'kwonlyargs', []))
+        all_arguments.extend(getattr(statement.args, 'posonlyargs', []))
+
+        for arg in all_arguments:
+            if isinstance(arg, ast.arg) and arg.arg in self.names:
+                yield self.error(
+                    arg,
+                    message=self.lambda_argument_msg,
+                    variable=arg.arg,
+                )
+
     def check_for_loop(self, statement):
         stack = [statement.target]
         while stack:
@@ -234,13 +277,29 @@
         if statement.name in self.names:
             yield self.error(statement, variable=statement.name)
 
-    def error(self, statement, variable, message=None):
+    def error(self, statement=None, variable=None, message=None):
         if not message:
             message = self.assign_msg
 
+        # lineno and col_offset must be integers
         return (
-            statement.lineno,
-            statement.col_offset,
+            statement.lineno if statement else 0,
+            statement.col_offset if statement else 0,
             message.format(variable),
             type(self),
         )
+
+    def check_module_name(self, filename: str):
+        if not self.module_names:
+            return
+        path = Path(filename)
+        if path.name == '__init__.py':
+            module_name = path.parent.name
+        else:
+            module_name = path.name.removesuffix('.py')
+        if module_name in self.module_names:
+            yield self.error(
+                None,
+                module_name,
+                message=self.module_name_msg,
+            )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/pyproject.toml 
new/flake8_builtins-2.5.0/pyproject.toml
--- old/flake8_builtins-2.2.0/pyproject.toml    2020-02-02 01:00:00.000000000 
+0100
+++ new/flake8_builtins-2.5.0/pyproject.toml    2020-02-02 01:00:00.000000000 
+0100
@@ -4,13 +4,12 @@
 
 [project]
 name = "flake8-builtins"
-version = "2.2.0"
+version = "2.5.0"
 authors = [
   { name="Gil Forcada Codinachs", email="gil.gn...@gmail.com" },
 ]
 description = "Check for python builtins being used as variables or parameters"
 keywords = ["pep8", "flake8", "python", ]
-license = {file = "LICENSE"}
 readme = "README.rst"
 requires-python = ">=3.8"
 classifiers = [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/run_tests.py 
new/flake8_builtins-2.5.0/run_tests.py
--- old/flake8_builtins-2.2.0/run_tests.py      2020-02-02 01:00:00.000000000 
+0100
+++ new/flake8_builtins-2.5.0/run_tests.py      2020-02-02 01:00:00.000000000 
+0100
@@ -10,15 +10,25 @@
 class FakeOptions:
     builtins_ignorelist = []
     builtins = None
+    builtins_allowed_modules = None
 
-    def __init__(self, ignore_list='', builtins=None):
+    def __init__(self, ignore_list='', builtins=None, 
builtins_allowed_modules=None):
         if ignore_list:
             self.builtins_ignorelist = ignore_list
         if builtins:
             self.builtins = builtins
+        if builtins_allowed_modules:
+            self.builtins_allowed_modules = builtins_allowed_modules
 
 
-def check_code(source, expected_codes=None, ignore_list=None, builtins=None):
+def check_code(
+    source,
+    expected_codes=None,
+    ignore_list=None,
+    builtins=None,
+    builtins_allowed_modules=None,
+    filename='/home/script.py',
+):
     """Check if the given source code generates the given flake8 errors
 
     If `expected_codes` is a string is converted to a list,
@@ -37,8 +47,14 @@
     if ignore_list is None:
         ignore_list = []
     tree = ast.parse(textwrap.dedent(source))
-    checker = BuiltinsChecker(tree, '/home/script.py')
-    checker.parse_options(FakeOptions(ignore_list=ignore_list, 
builtins=builtins))
+    checker = BuiltinsChecker(tree, filename)
+    checker.parse_options(
+        FakeOptions(
+            ignore_list=ignore_list,
+            builtins=builtins,
+            builtins_allowed_modules=builtins_allowed_modules,
+        )
+    )
     return_statements = list(checker.run())
 
     assert len(return_statements) == len(expected_codes)
@@ -140,6 +156,11 @@
     check_code(source, 'A002')
 
 
+def test_lambda_argument_message():
+    source = 'takefirst = lambda list: list[0]'
+    check_code(source, 'A006')
+
+
 def test_keyword_argument_message():
     source = """
     def bla(dict=3):
@@ -167,6 +188,17 @@
     check_code(source, 'A002')
 
 
+@pytest.mark.skipif(
+    sys.version_info < (3, 8),
+    reason='This syntax is only valid in Python 3.8+',
+)
+def test_lambda_posonly_argument_message():
+    source = """
+    takefirst = lambda list, /: list[0]
+    """
+    check_code(source, 'A006')
+
+
 def test_no_error():
     source = """def bla(first):\n    b = 4"""
     check_code(source)
@@ -463,12 +495,37 @@
 def test_stdin(stdin_get_value):
     source = 'max = 4'
     stdin_get_value.return_value = source
-    checker = BuiltinsChecker('', 'stdin')
-    checker.parse_options(FakeOptions())
-    ret = list(checker.run())
-    assert len(ret) == 1
+    check_code('', expected_codes='A001', filename='stdin')
 
 
 def test_tuple_unpacking():
     source = 'a, *(b, c) = 1, 2, 3'
     check_code(source)
+
+
+@pytest.mark.skipif(
+    sys.version_info < (3, 10),
+    reason='Skip A005, module testing is only supported in Python 3.10 and 
above',
+)
+def test_module_name():
+    source = ''
+    check_code(source, expected_codes='A005', filename='./temp/logging.py')
+    check_code(source, expected_codes='A005', 
filename='./temp/typing/__init__.py')
+
+
+@pytest.mark.skipif(
+    sys.version_info < (3, 10),
+    reason='Skip A005, module testing is only supported in Python 3.10 and 
above',
+)
+def test_module_name_ignore_module():
+    source = ''
+    check_code(
+        source,
+        filename='./temp/logging.py',
+        builtins_allowed_modules=['logging'],
+    )
+
+
+def test_module_name_not_builtin():
+    source = ''
+    check_code(source, filename='log_config')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/setup.cfg 
new/flake8_builtins-2.5.0/setup.cfg
--- old/flake8_builtins-2.2.0/setup.cfg 2020-02-02 01:00:00.000000000 +0100
+++ new/flake8_builtins-2.5.0/setup.cfg 1970-01-01 01:00:00.000000000 +0100
@@ -1,9 +0,0 @@
-[zest.releaser]
-create-wheel = yes
-
-[check-manifest]
-ignore =
-    .installed.cfg
-
-[isort]
-profile = black
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/flake8_builtins-2.2.0/tox.ini 
new/flake8_builtins-2.5.0/tox.ini
--- old/flake8_builtins-2.2.0/tox.ini   2020-02-02 01:00:00.000000000 +0100
+++ new/flake8_builtins-2.5.0/tox.ini   2020-02-02 01:00:00.000000000 +0100
@@ -44,6 +44,7 @@
 use_develop = true
 skip_install = false
 deps =
+    pytest-cov
     coverage
 commands =
     pytest run_tests.py --cov --cov-report term-missing

Reply via email to