src/eric7/PipInterface/piplicenses.py

Sun, 05 Mar 2023 12:26:12 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sun, 05 Mar 2023 12:26:12 +0100
branch
eric7
changeset 9849
99782ca569ed
parent 9653
e67609152c5e
child 9850
20c49b517679
permissions
-rw-r--r--

Third Party packages
- Upgraded eradicate to version 2.2.0.
- Upgraded pipdeptree to version 2.5.2.
- Upgraded pip-licenses to version 4.1.0.

9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #!/usr/bin/env python
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # vim:fenc=utf-8 ff=unix ft=python ts=4 sw=4 sts=4 si et
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 pip-licenses
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 MIT License
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 Copyright (c) 2018 raimon
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 Permission is hereby granted, free of charge, to any person obtaining a copy
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 of this software and associated documentation files (the "Software"), to deal
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 in the Software without restriction, including without limitation the rights
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 copies of the Software, and to permit persons to whom the Software is
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 furnished to do so, subject to the following conditions:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 The above copyright notice and this permission notice shall be included in all
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 copies or substantial portions of the Software.
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 SOFTWARE.
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
29
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
30 #
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
31 # Modified to be used within the eric-ide project.
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
32 #
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9590
diff changeset
33 # Copyright (c) 2022 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
34 #
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
35 # Modifications:
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
36 # - removed dependency to prettytable
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
37 # - removed some not needed code
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
38 # - changed 'create_licenses_table' to 'create_licenses_list'
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
39 # - changed 'create_summary_table' to 'create_summary_list'
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
40 # - added 'create_summary_by_license_list' together with the
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
41 # '--summary-by-license' switch to count each individual
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
42 # license used
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
43 # - changed 'create_output_string' to return a JSON string
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
44 # - added 'get_installed_distributions' to get the distributions
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
45 # via pip in order to filter for 'local only' and/or 'user only'
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
46 #
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
47
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
48 from __future__ import annotations
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
49
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 import argparse
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 import codecs
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
52 import json
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
53 import re
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 import sys
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 from collections import Counter
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 from enum import Enum, auto
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
57 from pathlib import Path
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
58 from typing import TYPE_CHECKING, List, Type, cast
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
59
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
60 if TYPE_CHECKING:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
61 from typing import Iterator, Optional, Sequence
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
63
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
64 def get_installed_distributions(local_only=True, user_only=False):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
65 """
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
66 Function to get the installed packages via pip.
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
67
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
68 Note: importlib_metadata.distributions() does not respect
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
69 'local_only' and 'user_only' keyword parameters.
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
70
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
71 @param local_only DESCRIPTION (defaults to True)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
72 @type TYPE (optional)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
73 @param user_only DESCRIPTION (defaults to False)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
74 @type TYPE (optional)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
75 @return DESCRIPTION
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
76 @rtype TYPE
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
77 """
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 try:
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
79 from pip._internal.metadata import get_environment
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 except ImportError:
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
81 # For backward compatibility with pip version 20.3.4
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
82 from pip._internal.utils import misc
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
83 return misc.get_installed_distributions(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
84 local_only=local_only,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
85 user_only=user_only
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
86 )
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
87 else:
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
88 from pip._internal.utils.compat import stdlib_pkgs
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
89 dists = get_environment(None).iter_installed_distributions(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
90 local_only=local_only,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
91 user_only=user_only,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
92 skip=stdlib_pkgs,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
93 include_editables=True,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
94 editables_only=False,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
95 )
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
96 return [d._dist for d in dists]
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
99 __pkgname__ = "pip-licenses"
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
100 __version__ = "4.1.0"
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
101 __author__ = "raimon"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
102 __license__ = "MIT"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
103 __summary__ = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
104 "Dump the software license list of Python packages installed with pip."
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
105 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
106 __url__ = "https://github.com/raimon49/pip-licenses"
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 FIELD_NAMES = (
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 'Name',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 'Version',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 'License',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 'LicenseFile',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 'LicenseText',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115 'NoticeFile',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 'NoticeText',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117 'Author',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 'Description',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
119 'URL',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
123 SUMMARY_FIELD_NAMES = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
124 "Count",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
125 "License",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
126 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
127
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
128
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 DEFAULT_OUTPUT_FIELDS = (
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 'Name',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 'Version',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 SUMMARY_OUTPUT_FIELDS = (
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 'Count',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 'License',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 METADATA_KEYS = (
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 'home-page',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 'author',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 'license',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
145 'summary',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 'license_classifier',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 # Mapping of FIELD_NAMES to METADATA_KEYS where they differ by more than case
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 FIELDS_TO_METADATA_KEYS = {
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 'URL': 'home-page',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152 'Description': 'summary',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 'License-Metadata': 'license',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 'License-Classifier': 'license_classifier',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 }
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
156
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
158 SYSTEM_PACKAGES = (
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159 __pkgname__,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 'pip',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 'setuptools',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162 'wheel',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165 LICENSE_UNKNOWN = 'UNKNOWN'
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
168 def get_packages(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
169 args: CustomNamespace,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
170 ) -> Iterator[dict[str, str | list[str]]]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
171 def get_pkg_included_file(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
172 pkg, file_names_rgx: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
173 ) -> tuple[str, str]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
174 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
175 Attempt to find the package's included file on disk and return the
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 tuple (included_file_path, included_file_contents).
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 included_file = LICENSE_UNKNOWN
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179 included_text = LICENSE_UNKNOWN
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
180
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
181 pkg_files = pkg.files or ()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
182 pattern = re.compile(file_names_rgx)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
183 matched_rel_paths = filter(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
184 lambda file: pattern.match(file.name), pkg_files
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
185 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
186 for rel_path in matched_rel_paths:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
187 abs_path = Path(pkg.locate_file(rel_path))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
188 if not abs_path.is_file():
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
189 continue
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
190 included_file = str(abs_path)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
191 with open(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
192 abs_path, encoding="utf-8", errors="backslashreplace"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
193 ) as included_file_handle:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
194 included_text = included_file_handle.read()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
195 break
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
196 return (included_file, included_text)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
197
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
198 def get_pkg_info(pkg) -> dict[str, str | list[str]]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
199 (license_file, license_text) = get_pkg_included_file(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
200 pkg, "LICEN[CS]E.*|COPYING.*"
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
201 )
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
202 (notice_file, notice_text) = get_pkg_included_file(pkg, "NOTICE.*")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
203 pkg_info: dict[str, str | list[str]] = {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
204 "name": pkg.metadata["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
205 "version": pkg.version,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
206 "namever": "{} {}".format(pkg.metadata["name"], pkg.version),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
207 "licensefile": license_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
208 "licensetext": license_text,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
209 "noticefile": notice_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
210 "noticetext": notice_text,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
211 }
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
212 metadata = pkg.metadata
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
213 for key in METADATA_KEYS:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
214 pkg_info[key] = metadata.get(key, LICENSE_UNKNOWN) # type: ignore[attr-defined] # noqa: E501
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
215
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
216 classifiers: list[str] = metadata.get_all("classifier", [])
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
217 pkg_info["license_classifier"] = find_license_from_classifier(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
218 classifiers
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
219 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
220
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
221 if args.filter_strings:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
222
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
223 def filter_string(item: str) -> str:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
224 return item.encode(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
225 args.filter_code_page, errors="ignore"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
226 ).decode(args.filter_code_page)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
227
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
228 for k in pkg_info:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
229 if isinstance(pkg_info[k], list):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
230 pkg_info[k] = list(map(filter_string, pkg_info[k]))
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
231 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
232 pkg_info[k] = filter_string(cast(str, pkg_info[k]))
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
233
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
234 return pkg_info
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
235
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
236 pkgs = get_installed_distributions(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
237 local_only=args.local_only,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
238 user_only=args.user_only,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
239 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
240 ignore_pkgs_as_lower = [pkg.lower() for pkg in args.ignore_packages]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
241 pkgs_as_lower = [pkg.lower() for pkg in args.packages]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
242
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
243 fail_on_licenses = set()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
244 if args.fail_on:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
245 fail_on_licenses = set(map(str.strip, args.fail_on.split(";")))
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
246
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
247 allow_only_licenses = set()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
248 if args.allow_only:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
249 allow_only_licenses = set(map(str.strip, args.allow_only.split(";")))
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
250
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
251 for pkg in pkgs:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
252 pkg_name = pkg.metadata["name"]
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
253
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
254 if pkg_name.lower() in ignore_pkgs_as_lower:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
255 continue
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
256
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 if pkgs_as_lower and pkg_name.lower() not in pkgs_as_lower:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
258 continue
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
259
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
260 if not args.with_system and pkg_name in SYSTEM_PACKAGES:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
261 continue
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
262
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
263 pkg_info = get_pkg_info(pkg)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
264
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
265 license_names = select_license_by_source(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
266 args.from_,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
267 cast(List[str], pkg_info["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
268 cast(str, pkg_info["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
269 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 if fail_on_licenses:
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
272 failed_licenses = case_insensitive_set_intersect(
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
273 license_names, fail_on_licenses
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
274 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 if failed_licenses:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276 sys.stderr.write(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 "fail-on license {} was found for package "
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 "{}:{}".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
279 "; ".join(sorted(failed_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
280 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
281 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
282 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 sys.exit(1)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286 if allow_only_licenses:
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
287 uncommon_licenses = case_insensitive_set_diff(
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
288 license_names, allow_only_licenses
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
289 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 if len(uncommon_licenses) == len(license_names):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 sys.stderr.write(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 "license {} not in allow-only licenses was found"
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 " for package {}:{}".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
294 "; ".join(sorted(uncommon_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
295 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
296 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
297 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
298 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 sys.exit(1)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301 yield pkg_info
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
304 def create_licenses_list(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
305 args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
306
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
307 licenses = []
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
308 for pkg in get_packages(args):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
309 row = {}
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
310 for field in output_fields:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
311 if field == 'License':
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
312 license_set = select_license_by_source(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
313 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
314 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
315 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
316 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
317 license_str = "; ".join(sorted(license_set))
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
318 row[field] = license_str
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
319 elif field == 'License-Classifier':
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
320 row[field] = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
321 "; ".join(sorted(pkg["license_classifier"]))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
322 or LICENSE_UNKNOWN
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
323 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
324 elif field.lower() in pkg:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
325 row[field] = cast(str, pkg[field.lower()])
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
327 row[field] = cast(str, pkg[FIELDS_TO_METADATA_KEYS[field]])
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 licenses.append(row)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 return licenses
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
332
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
333 def create_summary_list(args: "CustomNamespace"):
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
334 counts = Counter(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
335 "; ".join(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
336 sorted(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
337 select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
338 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
339 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
340 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
341 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
342 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
343 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
344 for pkg in get_packages(args)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
345 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
347 licenses = []
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
348 for license, count in counts.items():
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
349 licenses.append({
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
350 "Count": count,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
351 "License": license,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
352 })
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
353
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
354 return licenses
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
355
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
356
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
357 def create_summary_by_license_list(args: "CustomNamespace"):
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
358 licenses_list = []
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
359 for pkg in get_packages(args):
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
360 licenses_list.extend(select_license_by_source(
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
361 args.from_, pkg['license_classifier'], pkg['license']))
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
362 counts = Counter(licenses_list)
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
363
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
364 licenses = []
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
365 for license, count in counts.items():
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
366 licenses.append({
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
367 "Count": count,
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
368 "License": license,
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
369 })
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
370
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
371 return licenses
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
372
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
373
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
374 def case_insensitive_set_intersect(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
375 """Same as set.intersection() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
376 common_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
377 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
378 for elem in set_a:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
379 if elem.lower() in set_b_lower:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
380 common_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
381 return common_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
382
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
383
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
384 def case_insensitive_set_diff(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
385 """Same as set.difference() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
386 uncommon_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
387 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
388 for elem in set_a:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
389 if not elem.lower() in set_b_lower:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
390 uncommon_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
391 return uncommon_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
392
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
393
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
394 def find_license_from_classifier(classifiers: list[str]) -> list[str]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
395 licenses = []
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
396 for classifier in filter(lambda c: c.startswith("License"), classifiers):
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
397 license = classifier.split(" :: ")[-1]
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
398
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
399 # Through the declaration of 'Classifier: License :: OSI Approved'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
400 if license != "OSI Approved":
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
401 licenses.append(license)
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
402
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
403 return licenses
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
404
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
405
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
406 def select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
407 from_source: FromArg, license_classifier: list[str], license_meta: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
408 ) -> set[str]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
409 license_classifier_set = set(license_classifier) or {LICENSE_UNKNOWN}
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
410 if (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
411 from_source == FromArg.CLASSIFIER
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
412 or from_source == FromArg.MIXED
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
413 and len(license_classifier) > 0
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
414 ):
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
415 return license_classifier_set
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
416 else:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
417 return {license_meta}
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
418
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
419
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
420 def get_output_fields(args: CustomNamespace) -> list[str]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
421 if args.summary:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
422 return list(SUMMARY_OUTPUT_FIELDS)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
423
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
424 output_fields = list(DEFAULT_OUTPUT_FIELDS)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
425
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426 if args.from_ == FromArg.ALL:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
427 output_fields.append("License-Metadata")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
428 output_fields.append("License-Classifier")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
429 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
430 output_fields.append("License")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
431
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
432 if args.with_authors:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
433 output_fields.append("Author")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
434
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
435 if args.with_urls:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
436 output_fields.append("URL")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
437
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
438 if args.with_description:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
439 output_fields.append("Description")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
440
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
441 if args.with_license_file:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
442 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
443 output_fields.append("LicenseFile")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
444
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
445 output_fields.append("LicenseText")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
446
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
447 if args.with_notice_file:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
448 output_fields.append("NoticeText")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
449 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
450 output_fields.append("NoticeFile")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
451
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
452 return output_fields
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
453
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
454
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
455 def create_output_string(args: "CustomNamespace"):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
456 output_fields = get_output_fields(args)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
457
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
458 if args.summary:
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
459 licenses = create_summary_list(args)
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
460 elif args.summary_by_license:
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
461 licenses = create_summary_by_license_list(args)
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
462 else:
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
463 licenses = create_licenses_list(args, output_fields)
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
464
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
465 return json.dumps(licenses)
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
466
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
467
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
468 class CustomHelpFormatter(argparse.HelpFormatter): # pragma: no cover
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
469 def __init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
470 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
471 prog: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
472 indent_increment: int = 2,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
473 max_help_position: int = 24,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
474 width: Optional[int] = None,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
475 ) -> None:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
476 max_help_position = 30
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
477 super().__init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
478 prog,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
479 indent_increment=indent_increment,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
480 max_help_position=max_help_position,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
481 width=width,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
482 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
483
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
484 def _format_action(self, action: argparse.Action) -> str:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
485 flag_indent_argument: bool = False
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
486 text = self._expand_help(action)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
487 separator_pos = text[:3].find("|")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
488 if separator_pos != -1 and "I" in text[:separator_pos]:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
489 self._indent()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
490 flag_indent_argument = True
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
491 help_str = super()._format_action(action)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
492 if flag_indent_argument:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
493 self._dedent()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
494 return help_str
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
495
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
496 def _expand_help(self, action: argparse.Action) -> str:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
497 if isinstance(action.default, Enum):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
498 default_value = enum_key_to_value(action.default)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
499 return cast(str, self._get_help_string(action)) % {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
500 "default": default_value
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
501 }
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
502 return super()._expand_help(action)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
504 def _split_lines(self, text: str, width: int) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
505 separator_pos = text[:3].find("|")
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
506 if separator_pos != -1:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
507 flag_splitlines: bool = "R" in text[:separator_pos]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
508 text = text[separator_pos + 1:] # fmt: skip
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 if flag_splitlines:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
510 return text.splitlines()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
511 return super()._split_lines(text, width)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
513
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
514 class CustomNamespace(argparse.Namespace):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
515 from_: "FromArg"
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
516 order: "OrderArg"
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
517 summary: bool
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
518 summary_by_license: bool
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
519 local_only: bool
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
520 user_only:bool
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
521 output_file: str
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
522 ignore_packages: List[str]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
523 packages: List[str]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
524 with_system: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
525 with_authors: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
526 with_urls: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
527 with_description: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
528 with_license_file: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 no_license_path: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
530 with_notice_file: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
531 filter_strings: bool
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
532 filter_code_page: str
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
533 fail_on: Optional[str]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
534 allow_only: Optional[str]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
535
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
537 class CompatibleArgumentParser(argparse.ArgumentParser):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
538 def parse_args( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
539 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
540 args: None | Sequence[str] = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
541 namespace: None | CustomNamespace = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
542 ) -> CustomNamespace:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
543 args_ = cast(CustomNamespace, super().parse_args(args, namespace))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
544 self._verify_args(args_)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
545 return args_
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
546
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
547 def _verify_args(self, args: CustomNamespace) -> None:
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
548 if args.with_license_file is False and (
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
549 args.no_license_path is True or args.with_notice_file is True
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
550 ):
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
551 self.error(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
552 "'--no-license-path' and '--with-notice-file' require "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
553 "the '--with-license-file' option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
554 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
555 if args.filter_strings is False and args.filter_code_page != "latin1":
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
556 self.error(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
557 "'--filter-code-page' requires the '--filter-strings' "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
558 "option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
559 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
560 try:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
561 codecs.lookup(args.filter_code_page)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
562 except LookupError:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
563 self.error(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
564 "invalid code page '%s' given for '--filter-code-page, "
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
565 "check https://docs.python.org/3/library/codecs.html"
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
566 "#standard-encodings for valid code pages"
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
567 % args.filter_code_page
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
568 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
569
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
570
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
571 class NoValueEnum(Enum):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 def __repr__(self): # pragma: no cover
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
573 return '<%s.%s>' % (self.__class__.__name__, self.name)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
574
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
575
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
576 class FromArg(NoValueEnum):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
577 META = M = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
578 CLASSIFIER = C = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
579 MIXED = MIX = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
580 ALL = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
581
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
582
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
583 class OrderArg(NoValueEnum):
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
584 COUNT = C = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
585 LICENSE = L = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
586 NAME = N = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
587 AUTHOR = A = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
588 URL = U = auto()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
591 def value_to_enum_key(value: str) -> str:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
592 return value.replace('-', '_').upper()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
593
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
594
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
595 def enum_key_to_value(enum_key: Enum) -> str:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
596 return enum_key.name.replace('_', '-').lower()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
597
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
598
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
599 def choices_from_enum(enum_cls: Type[NoValueEnum]) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
600 return [
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
601 key.replace("_", "-").lower() for key in enum_cls.__members__.keys()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
602 ]
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
603
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
604
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
605 MAP_DEST_TO_ENUM = {
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
606 'from_': FromArg,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 'order': OrderArg,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
608 }
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
609
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
610
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
611 class SelectAction(argparse.Action):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
612 def __call__( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
613 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
614 parser: argparse.ArgumentParser,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
615 namespace: argparse.Namespace,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
616 values: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
617 option_string: Optional[str] = None,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
618 ) -> None:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
619 enum_cls = MAP_DEST_TO_ENUM[self.dest]
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
620 values = value_to_enum_key(values)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
621 setattr(namespace, self.dest, getattr(enum_cls, values))
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
622
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
623
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
624 def create_parser():
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
625 parser = CompatibleArgumentParser(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
626 description=__summary__, formatter_class=CustomHelpFormatter
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
627 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
628
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
629 common_options = parser.add_argument_group('Common options')
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
630 format_options = parser.add_argument_group('Format options')
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
631 verify_options = parser.add_argument_group('Verify options')
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
632
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
633 parser.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
634 "-v", "--version", action="version", version="%(prog)s " + __version__
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
635 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
636
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
637 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
638 "--from",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
639 dest="from_",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
640 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
641 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
642 default=FromArg.MIXED,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
643 metavar="SOURCE",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644 choices=choices_from_enum(FromArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
645 help="R|where to find license information\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
646 '"meta", "classifier, "mixed", "all"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
647 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
648 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
649 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
650 "-o",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
651 "--order",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
652 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
653 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
654 default=OrderArg.NAME,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
655 metavar="COL",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
656 choices=choices_from_enum(OrderArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
657 help="R|order by column\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
658 '"name", "license", "author", "url"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
659 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
660 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
661 common_options.add_argument(
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
662 '--summary',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
663 action='store_true',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
664 default=False,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
665 help='dump summary of each license')
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
666 common_options.add_argument(
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
667 '--summary-by-license',
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
668 action='store_true',
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
669 default=False,
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
670 help='dump summary of each individual license')
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
671 common_options.add_argument(
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
672 '--output-file',
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
673 action='store', type=str,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
674 help='save license list to file')
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
675 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
676 "-i",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
677 "--ignore-packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
678 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
679 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
680 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
681 metavar="PKG",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
682 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
683 help="ignore package name in dumped list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
684 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
685 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
686 "-p",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
687 "--packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
688 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
689 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
690 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
691 metavar="PKG",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
692 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
693 help="only include selected packages in output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
694 )
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
695 common_options.add_argument(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
696 '--local-only',
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
697 action='store_true',
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
698 default=False,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
699 help='include only local packages')
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
700 common_options.add_argument(
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
701 '--user-only',
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
702 action='store_true',
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
703 default=False,
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
704 help='include only packages of the user site dir')
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
705
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
706 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
707 "-s",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
708 "--with-system",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
709 action="store_true",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
710 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
711 help="dump with system packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
712 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
713 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
714 "-a",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
715 "--with-authors",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
716 action="store_true",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
717 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
718 help="dump with package authors",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
719 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
720 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
721 "-u",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
722 "--with-urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
723 action="store_true",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
724 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
725 help="dump with package urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
726 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
727 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
728 "-d",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
729 "--with-description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
730 action="store_true",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
731 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
732 help="dump with short package description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
733 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
734 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
735 "-l",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
736 "--with-license-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
737 action="store_true",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
738 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
739 help="dump with location of license file and "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
740 "contents, most useful with JSON output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
741 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
742 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
743 "--no-license-path",
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
744 action="store_true",
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
745 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
746 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
747 "suppress location of license file output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
748 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
749 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
750 "--with-notice-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
751 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
752 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
753 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
754 "dump with location of license file and contents",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
755 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
756 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
757 "--filter-strings",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
758 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
759 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
760 help="filter input according to code page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
761 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
762 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
763 "--filter-code-page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
764 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
765 type=str,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
766 default="latin1",
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
767 metavar="CODE",
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
768 help="I|specify code page for filtering " "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
769 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
770
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
771 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
772 "--fail-on",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
773 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
774 type=str,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
775 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
776 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
777 "of the licenses of the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
778 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
779 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
780 "--allow-only",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
781 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
782 type=str,
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
783 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
784 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
785 "of the licenses not in the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
786 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
787
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
788 return parser
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
789
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
790
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
791 def main(): # pragma: no cover
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
792 parser = create_parser()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
793 args = parser.parse_args()
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
794
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
795 output_string = create_output_string(args)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
796
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
797 print(output_string)
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
798
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
799
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
800 if __name__ == '__main__': # pragma: no cover
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
801 main()

eric ide

mercurial