src/eric7/PipInterface/piplicenses.py

Thu, 31 Aug 2023 15:00:53 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Thu, 31 Aug 2023 15:00:53 +0200
branch
eric7
changeset 10179
c2125fcab4b8
parent 10027
63728909f3ff
child 10331
c1a2ff7e3575
permissions
-rw-r--r--

Third Party packages
- Upgraded pip-licenses to version 4.3.2.

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 # - changed 'create_output_string' to return a JSON string
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
41 #
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
42
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
43 from __future__ import annotations
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
44
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
45 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
46 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
47 import json
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
48 import os
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
49 import re
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
50 import subprocess
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
51 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
52 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
53 from enum import Enum, auto
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
54 from pathlib import Path
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
55 from typing import TYPE_CHECKING, List, Type, cast
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
56
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
57 # modified for 'eric-ide' for Python < 3.8
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
58 try:
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
59 from importlib import metadata as importlib_metadata
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
60 except ImportError:
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
61 importlib_metadata = None
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
62
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
63 if TYPE_CHECKING:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
64 from email.message import Message
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
65 from typing import Callable, Dict, 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
66
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
67
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
68 __pkgname__ = "pip-licenses"
10179
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
69 __version__ = "4.3.2"
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
70 __author__ = "raimon"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
71 __license__ = "MIT"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
72 __summary__ = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
73 "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
74 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
75 __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
76
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77
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 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
79 '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
80 '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
81 '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
82 '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
83 '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
84 '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
85 '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
86 'Author',
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
87 "Maintainer",
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
88 '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
89 '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
90 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
93 SUMMARY_FIELD_NAMES = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
94 "Count",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
95 "License",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
96 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
97
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
98
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
99 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
100 '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
101 '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
102 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 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
106 '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
107 '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
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
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
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
111 def extract_homepage(metadata: Message) -> Optional[str]:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
112 """Extracts the homepage attribute from the package metadata.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
113
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
114 Not all python packages have defined a home-page attribute.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
115 As a fallback, the `Project-URL` metadata can be used.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
116 The python core metadata supports multiple (free text) values for
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
117 the `Project-URL` field that are comma separated.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
118
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
119 Args:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
120 metadata: The package metadata to extract the homepage from.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
121
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
122 Returns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
123 The home page if applicable, None otherwise.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
124 """
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
125 homepage = metadata.get("home-page", None)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
126 if homepage is not None:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
127 return homepage
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
128
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
129 candidates: Dict[str, str] = {}
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
130
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
131 for entry in metadata.get_all("Project-URL", []):
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
132 key, value = entry.split(",", 1)
10179
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
133 candidates[key.strip().lower()] = value.strip()
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
134
10179
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
135 for priority_key in [ "homepage",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
136 "source",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
137 "repository",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
138 "changelog",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
139 "bug tracker",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
140 ]:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
141 if priority_key in candidates:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
142 return candidates[priority_key]
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
143
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
144 return None
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
145
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
146
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
147 PATTERN_DELIMITER = re.compile(r"[-_.]+")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
148
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
149
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
150 def normalize_pkg_name(pkg_name: str) -> str:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
151 """Return normalized name according to PEP specification
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
152
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
153 See here: https://peps.python.org/pep-0503/#normalized-names
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
154
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
155 Args:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
156 pkg_name: Package name it is extracted from the package metadata
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
157 or specified in the CLI
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
158
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
159 Returns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
160 normalized packege name
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
161 """
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
162 return PATTERN_DELIMITER.sub("-", pkg_name).lower()
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
163
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
164
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
165 METADATA_KEYS: Dict[str, List[Callable[[Message], Optional[str]]]] = {
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
166 "home-page": [extract_homepage],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
167 "author": [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
168 lambda metadata: metadata.get("author"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
169 lambda metadata: metadata.get("author-email"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
170 ],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
171 "maintainer": [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
172 lambda metadata: metadata.get("maintainer"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
173 lambda metadata: metadata.get("maintainer-email"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
174 ],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
175 "license": [lambda metadata: metadata.get("license")],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
176 "summary": [lambda metadata: metadata.get("summary")],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
177 }
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
178
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 # 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
180 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
181 '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
182 '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
183 '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
184 '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
185 }
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
186
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
187
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
188 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
189 __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
190 '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
191 '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
192 '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
193 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
194
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
195 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
196
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_packages(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
199 args: CustomNamespace,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
200 ) -> Iterator[dict[str, str | list[str]]]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
201 def get_pkg_included_file(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
202 pkg, file_names_rgx: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
203 ) -> 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
204 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
205 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
206 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
207 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
208 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
209 included_text = LICENSE_UNKNOWN
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
210
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
211 pkg_files = pkg.files or ()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
212 pattern = re.compile(file_names_rgx)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
213 matched_rel_paths = filter(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
214 lambda file: pattern.match(file.name), pkg_files
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
215 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
216 for rel_path in matched_rel_paths:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
217 abs_path = Path(pkg.locate_file(rel_path))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
218 if not abs_path.is_file():
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
219 continue
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
220 included_file = str(abs_path)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
221 with open(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
222 abs_path, encoding="utf-8", errors="backslashreplace"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
223 ) as included_file_handle:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
224 included_text = included_file_handle.read()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
225 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
226 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
227
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
228 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
229 (license_file, license_text) = get_pkg_included_file(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
230 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
231 )
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
232 (notice_file, notice_text) = get_pkg_included_file(pkg, "NOTICE.*")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
233 pkg_info: dict[str, str | list[str]] = {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
234 "name": pkg.metadata["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
235 "version": pkg.version,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
236 "namever": "{} {}".format(pkg.metadata["name"], pkg.version),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
237 "licensefile": license_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
238 "licensetext": license_text,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
239 "noticefile": notice_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
240 "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
241 }
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
242 metadata = pkg.metadata
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
243 for field_name, field_selector_fns in METADATA_KEYS.items():
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
244 value = None
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
245 for field_selector_fn in field_selector_fns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
246 # Type hint of `Distribution.metadata` states `PackageMetadata`
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
247 # but it's actually of type `email.Message`
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
248 value = field_selector_fn(metadata) # type: ignore
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
249 if value:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
250 break
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
251 pkg_info[field_name] = value or LICENSE_UNKNOWN
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
252
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
253 classifiers: list[str] = metadata.get_all("classifier", [])
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
254 pkg_info["license_classifier"] = find_license_from_classifier(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
255 classifiers
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
256 )
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
257
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 if args.filter_strings:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
259
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
260 def filter_string(item: str) -> str:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
261 return item.encode(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
262 args.filter_code_page, errors="ignore"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
263 ).decode(args.filter_code_page)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
264
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
265 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
266 if isinstance(pkg_info[k], list):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
267 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
268 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
269 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
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 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
272
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
273 def get_python_sys_path(executable: str) -> list[str]:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
274 script = "import sys; print(' '.join(filter(bool, sys.path)))"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
275 output = subprocess.run(
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
276 [executable, "-c", script],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
277 capture_output=True,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
278 env={**os.environ, "PYTHONPATH": "", "VIRTUAL_ENV": ""},
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
279 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
280 return output.stdout.decode().strip().split()
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
281
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
282 # modified for 'eric-ide' for Python < 3.8
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
283 if importlib_metadata is None:
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
284 return []
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
285 else:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
286 if args.python == sys.executable:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
287 search_paths = sys.path
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
288 else:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
289 search_paths = get_python_sys_path(args.python)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
290 pkgs = importlib_metadata.distributions(path=search_paths)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
291 ignore_pkgs_as_normalize = [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
292 normalize_pkg_name(pkg) for pkg in args.ignore_packages
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
293 ]
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
294 pkgs_as_normalize = [normalize_pkg_name(pkg) for pkg in args.packages]
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
295
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 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
297 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
298 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
299
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 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
301 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
302 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
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 for pkg in pkgs:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
305 pkg_name = normalize_pkg_name(pkg.metadata["name"])
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
306 pkg_name_and_version = pkg_name + ":" + pkg.metadata["version"]
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
307
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
308 if (
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
309 pkg_name.lower() in ignore_pkgs_as_normalize
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
310 or pkg_name_and_version.lower() in ignore_pkgs_as_normalize
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
311 ):
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
312 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
313
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
314 if pkgs_as_normalize and pkg_name.lower() not in pkgs_as_normalize:
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
315 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
316
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
317 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
318 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
319
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
320 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
321
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
322 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
323 args.from_,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
324 cast(List[str], pkg_info["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
325 cast(str, pkg_info["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
326 )
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
327
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 if fail_on_licenses:
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
329 failed_licenses = case_insensitive_set_intersect(
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
330 license_names, fail_on_licenses
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
331 )
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
332 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
333 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
334 "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
335 "{}:{}".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
336 "; ".join(sorted(failed_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
337 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
338 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
339 )
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
340 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
341 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
342
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
343 if allow_only_licenses:
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
344 uncommon_licenses = case_insensitive_set_diff(
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
345 license_names, allow_only_licenses
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
346 )
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
347 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
348 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
349 "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
350 " for package {}:{}".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
351 "; ".join(sorted(uncommon_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
352 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
353 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
354 )
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 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
357
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
358 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
359
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
360
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
361 # modified for 'eric-ide'
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
362 def create_licenses_list(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
363 args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS):
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
364
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
365 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
366 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
367 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
368 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
369 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
370 license_set = select_license_by_source(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
371 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
372 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
373 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
374 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
375 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
376 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
377 elif field == 'License-Classifier':
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
378 row[field] = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
379 "; ".join(sorted(pkg["license_classifier"]))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
380 or LICENSE_UNKNOWN
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
381 )
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
382 elif field.lower() in pkg:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
383 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
384 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
385 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
386 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
387
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
388 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
389
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
390
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
391 # modified for 'eric-ide'
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
392 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
393 counts = Counter(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
394 "; ".join(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
395 sorted(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
396 select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
397 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
398 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
399 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
400 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
401 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
402 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
403 for pkg in get_packages(args)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
404 )
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
405
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
406 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
407 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
408 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
409 "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
410 "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
411 })
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
412
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
413 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
414
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
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
416 def case_insensitive_set_intersect(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
417 """Same as set.intersection() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
418 common_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
419 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
420 for elem in set_a:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
421 if elem.lower() in set_b_lower:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
422 common_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
423 return common_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
424
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
425
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
426 def case_insensitive_set_diff(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
427 """Same as set.difference() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
428 uncommon_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
429 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
430 for elem in set_a:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
431 if not elem.lower() in set_b_lower:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
432 uncommon_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
433 return uncommon_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
434
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
435
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
436 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
437 licenses = []
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
438 for classifier in filter(lambda c: c.startswith("License"), classifiers):
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
439 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
440
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
441 # Through the declaration of 'Classifier: License :: OSI Approved'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
442 if license != "OSI Approved":
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
443 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
444
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
445 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
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
448 def select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
449 from_source: FromArg, license_classifier: list[str], license_meta: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
450 ) -> 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
451 license_classifier_set = set(license_classifier) or {LICENSE_UNKNOWN}
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
452 if (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
453 from_source == FromArg.CLASSIFIER
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
454 or from_source == FromArg.MIXED
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
455 and len(license_classifier) > 0
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
456 ):
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
457 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
458 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
459 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
460
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
461
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
462 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
463 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
464 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
465
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 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
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 if args.from_ == FromArg.ALL:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
469 output_fields.append("License-Metadata")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
470 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
471 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
472 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
473
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
474 if args.with_authors:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
475 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
476
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
477 if args.with_maintainers:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
478 output_fields.append("Maintainer")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
479
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
480 if args.with_urls:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
481 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
482
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 if args.with_description:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
484 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
485
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
486 if args.no_version:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
487 output_fields.remove("Version")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
488
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 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
490 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
491 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
492
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
493 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
494
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 if args.with_notice_file:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
496 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
497 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
498 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
499
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
500 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
501
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
9851
ec12090e9cd9 Modified the pip licenses dialog to show the license data for packages contained in the packages list only.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9850
diff changeset
503 # modified for 'eric-ide'
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
504 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
505 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
506
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
507 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
508 licenses = create_summary_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
509 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
510 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
511
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
512 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
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
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 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
516 def __init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
517 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
518 prog: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
519 indent_increment: int = 2,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
520 max_help_position: int = 24,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
521 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
522 ) -> 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
523 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
524 super().__init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
525 prog,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
526 indent_increment=indent_increment,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
527 max_help_position=max_help_position,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
528 width=width,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
529 )
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
530
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 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
532 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
533 text = self._expand_help(action)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
534 separator_pos = text[:3].find("|")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
535 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
536 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
537 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
538 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
539 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
540 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
541 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
542
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
543 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
544 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
545 default_value = enum_key_to_value(action.default)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
546 return cast(str, self._get_help_string(action)) % {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
547 "default": default_value
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
548 }
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
549 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
550
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
551 def _split_lines(self, text: str, width: int) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
552 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
553 if separator_pos != -1:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
554 flag_splitlines: bool = "R" in text[:separator_pos]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
555 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
556 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
557 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
558 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
559
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
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 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
562 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
563 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
564 summary: 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
565 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
566 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
567 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
568 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
569 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
570 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
571 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
572 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
573 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
574 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
575 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
576 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
577 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
578 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
579
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
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 class CompatibleArgumentParser(argparse.ArgumentParser):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
582 def parse_args( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
583 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
584 args: None | Sequence[str] = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
585 namespace: None | CustomNamespace = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
586 ) -> CustomNamespace:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
587 args_ = cast(CustomNamespace, super().parse_args(args, namespace))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
588 self._verify_args(args_)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
589 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
590
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
591 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
592 if args.with_license_file is False and (
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
593 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
594 ):
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
595 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
596 "'--no-license-path' and '--with-notice-file' require "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
597 "the '--with-license-file' option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
598 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
599 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
600 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
601 "'--filter-code-page' requires the '--filter-strings' "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
602 "option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
603 )
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
604 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
605 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
606 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
607 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
608 "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
609 "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
610 "#standard-encodings for valid code pages"
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
611 % args.filter_code_page
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
612 )
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
613
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
614
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 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
616 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
617 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
618
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
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 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
621 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
622 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
623 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
624 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
625
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
626
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
627 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
628 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
629 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
630 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
631 AUTHOR = A = auto()
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
632 MAINTAINER = M = auto()
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
633 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
634
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
635
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 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
637 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
638
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
639
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
640 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
641 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
642
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
643
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
644 def choices_from_enum(enum_cls: Type[NoValueEnum]) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
645 return [
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
646 key.replace("_", "-").lower() for key in enum_cls.__members__.keys()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
647 ]
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
648
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
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
650 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
651 '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
652 '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
653 }
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
654
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
655
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 class SelectAction(argparse.Action):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
657 def __call__( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
658 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
659 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
660 namespace: argparse.Namespace,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
661 values: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
662 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
663 ) -> 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
664 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
665 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
666 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
667
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
668
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
669 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
670 parser = CompatibleArgumentParser(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
671 description=__summary__, formatter_class=CustomHelpFormatter
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
672 )
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
673
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 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
675 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
676 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
677
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
678 parser.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
679 "-v", "--version", action="version", version="%(prog)s " + __version__
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
680 )
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
681
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 common_options.add_argument(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
683 "--python",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
684 type=str,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
685 default=sys.executable,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
686 metavar="PYTHON_EXEC",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
687 help="R| path to python executable to search distributions from\n"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
688 "Package will be searched in the selected python's sys.path\n"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
689 "By default, will search packages for current env executable\n"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
690 "(default: sys.executable)",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
691 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
692
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
693 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
694 "--from",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
695 dest="from_",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
696 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
697 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
698 default=FromArg.MIXED,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
699 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
700 choices=choices_from_enum(FromArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
701 help="R|where to find license information\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
702 '"meta", "classifier, "mixed", "all"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
703 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
704 )
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
705 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
706 "-o",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
707 "--order",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
708 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
709 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
710 default=OrderArg.NAME,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
711 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
712 choices=choices_from_enum(OrderArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
713 help="R|order by column\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
714 '"name", "license", "author", "url"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
715 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
716 )
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 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
718 '--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
719 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
720 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
721 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
722 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
723 '--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
724 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
725 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
726 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
727 "-i",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
728 "--ignore-packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
729 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
730 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
731 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
732 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
733 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
734 help="ignore package name in dumped list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
735 )
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
736 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
737 "-p",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
738 "--packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
739 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
740 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
741 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
742 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
743 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
744 help="only include selected packages in output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
745 )
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
746
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
747 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
748 "-s",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
749 "--with-system",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
750 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
751 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
752 help="dump with system packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
753 )
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
754 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
755 "-a",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
756 "--with-authors",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
757 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
758 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
759 help="dump with package authors",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
760 )
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
761 format_options.add_argument(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
762 "--with-maintainers",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
763 action="store_true",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
764 default=False,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
765 help="dump with package maintainers",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
766 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
767 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
768 "-u",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
769 "--with-urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
770 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
771 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
772 help="dump with package urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
773 )
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
774 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
775 "-d",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
776 "--with-description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
777 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
778 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
779 help="dump with short package description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
780 )
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
781 format_options.add_argument(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
782 "-nv",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
783 "--no-version",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
784 action="store_true",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
785 default=False,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
786 help="dump without package version",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
787 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
788 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
789 "-l",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
790 "--with-license-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
791 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
792 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
793 help="dump with location of license file and "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
794 "contents, most useful with JSON output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
795 )
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
796 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
797 "--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
798 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
799 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
800 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
801 "suppress location of license file output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
802 )
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
803 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
804 "--with-notice-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
805 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
806 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
807 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
808 "dump with location of license file and contents",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
809 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
810 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
811 "--filter-strings",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
812 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
813 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
814 help="filter input according to code page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
815 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
816 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
817 "--filter-code-page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
818 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
819 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
820 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
821 metavar="CODE",
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
822 help="I|specify code page for filtering " "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
823 )
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
824
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
825 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
826 "--fail-on",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
827 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
828 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
829 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
830 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
831 "of the licenses of the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
832 )
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
833 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
834 "--allow-only",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
835 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
836 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
837 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
838 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
839 "of the licenses not in the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
840 )
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
841
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
842 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
843
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
844
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
845 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
846 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
847 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
848
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
849 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
850
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
851 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
852
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
853
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
854 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
855 main()

eric ide

mercurial