src/eric7/PipInterface/piplicenses.py

Fri, 02 Aug 2024 18:02:56 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 02 Aug 2024 18:02:56 +0200
branch
eric7
changeset 10881
c20d7e202152
parent 10756
0702be694bc4
child 11090
f5f5f5803935
permissions
-rw-r--r--

Third Party Packages
- Upgraded `pip-licenses` to version 5.0.0.

9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #!/usr/bin/env python
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # vim:fenc=utf-8 ff=unix ft=python ts=4 sw=4 sts=4 si et
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 """
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5 pip-licenses
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 MIT License
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 Copyright (c) 2018 raimon
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 Permission is hereby granted, free of charge, to any person obtaining a copy
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 of this software and associated documentation files (the "Software"), to deal
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13 in the Software without restriction, including without limitation the rights
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15 copies of the Software, and to permit persons to whom the Software is
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 furnished to do so, subject to the following conditions:
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 The above copyright notice and this permission notice shall be included in all
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 copies or substantial portions of the Software.
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 SOFTWARE.
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
9003
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
29
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
30 #
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
31 # Modified to be used within the eric-ide project.
6bc210cd5726 Finished implementing the basic functionality of a license lister for pip installed packages (based on pip-licenses).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9002
diff changeset
32 #
10439
21c28b0f9e41 Updated copyright for 2024.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10352
diff changeset
33 # Copyright (c) 2022 - 2024 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
10881
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
41 # - removed 'load_config_from_file()' because we only use command line
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
42 # configuration
9310
8ab45a4a6d96 pip Interface
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9218
diff changeset
43 #
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
44
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
45 from __future__ import annotations
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
46
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
47 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
48 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
49 import json
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
50 import os
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
51 import re
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
52 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
53 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
54 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
55 from enum import Enum, auto
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
56 from pathlib import Path
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
57 from typing import TYPE_CHECKING, List, Type, cast
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
58
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
59 # 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
60 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
61 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
62 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
63 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
64
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
65 if TYPE_CHECKING:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
66 from email.message import Message
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
67 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
68
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
69
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
70 __pkgname__ = "pip-licenses"
10881
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
71 __version__ = "5.0.0"
9590
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 )
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
75
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 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
78 '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
79 '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
80 '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
81 '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
82 '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
83 '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
84 '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
85 'Author',
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
86 "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
87 '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
88 '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
89 )
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
92 SUMMARY_FIELD_NAMES = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
93 "Count",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
94 "License",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
95 )
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
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
98 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
99 '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
100 '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
101 )
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 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
105 '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
106 '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
107 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
110 def extract_homepage(metadata: Message) -> Optional[str]:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
111 """Extracts the homepage attribute from the package metadata.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
112
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
113 Not all python packages have defined a home-page attribute.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
114 As a fallback, the `Project-URL` metadata can be used.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
115 The python core metadata supports multiple (free text) values for
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
116 the `Project-URL` field that are comma separated.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
117
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
118 Args:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
119 metadata: The package metadata to extract the homepage from.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
120
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
121 Returns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
122 The home page if applicable, None otherwise.
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
123 """
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
124 homepage = metadata.get("home-page", None)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
125 if homepage is not None:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
126 return homepage
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
127
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
128 candidates: Dict[str, str] = {}
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
129
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
130 for entry in metadata.get_all("Project-URL", []):
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
131 key, value = entry.split(",", 1)
10179
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
132 candidates[key.strip().lower()] = value.strip()
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
133
10179
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
134 for priority_key in [ "homepage",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
135 "source",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
136 "repository",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
137 "changelog",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
138 "bug tracker",
c2125fcab4b8 Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10027
diff changeset
139 ]:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
140 if priority_key in candidates:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
141 return candidates[priority_key]
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
142
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
143 return None
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
144
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 PATTERN_DELIMITER = re.compile(r"[-_.]+")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
147
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 def normalize_pkg_name(pkg_name: str) -> str:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
150 """Return normalized name according to PEP specification
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
151
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
152 See here: https://peps.python.org/pep-0503/#normalized-names
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
153
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
154 Args:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
155 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
156 or specified in the CLI
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
157
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
158 Returns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
159 normalized packege name
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
160 """
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
161 return PATTERN_DELIMITER.sub("-", pkg_name).lower()
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
162
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 METADATA_KEYS: Dict[str, List[Callable[[Message], Optional[str]]]] = {
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
165 "home-page": [extract_homepage],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
166 "author": [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
167 lambda metadata: metadata.get("author"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
168 lambda metadata: metadata.get("author-email"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
169 ],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
170 "maintainer": [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
171 lambda metadata: metadata.get("maintainer"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
172 lambda metadata: metadata.get("maintainer-email"),
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
173 ],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
174 "license": [lambda metadata: metadata.get("license")],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
175 "summary": [lambda metadata: metadata.get("summary")],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
176 }
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
177
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 # 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
179 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
180 '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
181 '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
182 '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
183 '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
184 }
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 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
188 __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
189 '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
190 '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
191 '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
192 )
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 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
195
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
197 def get_packages(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
198 args: CustomNamespace,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
199 ) -> Iterator[dict[str, str | list[str]]]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
200 def get_pkg_included_file(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
201 pkg, file_names_rgx: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
202 ) -> 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
203 """
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 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
205 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
206 """
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 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
208 included_text = LICENSE_UNKNOWN
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
209
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
210 pkg_files = pkg.files or ()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
211 pattern = re.compile(file_names_rgx)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
212 matched_rel_paths = filter(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
213 lambda file: pattern.match(file.name), pkg_files
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
214 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
215 for rel_path in matched_rel_paths:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
216 abs_path = Path(pkg.locate_file(rel_path))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
217 if not abs_path.is_file():
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
218 continue
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
219 included_file = str(abs_path)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
220 with open(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
221 abs_path, encoding="utf-8", errors="backslashreplace"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
222 ) as included_file_handle:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
223 included_text = included_file_handle.read()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
224 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
225 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
226
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
227 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
228 (license_file, license_text) = get_pkg_included_file(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
229 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
230 )
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
231 (notice_file, notice_text) = get_pkg_included_file(pkg, "NOTICE.*")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
232 pkg_info: dict[str, str | list[str]] = {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
233 "name": pkg.metadata["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
234 "version": pkg.version,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
235 "namever": "{} {}".format(pkg.metadata["name"], pkg.version),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
236 "licensefile": license_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
237 "licensetext": license_text,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
238 "noticefile": notice_file,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
239 "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
240 }
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
241 metadata = pkg.metadata
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
242 for field_name, field_selector_fns in METADATA_KEYS.items():
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
243 value = None
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
244 for field_selector_fn in field_selector_fns:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
245 # Type hint of `Distribution.metadata` states `PackageMetadata`
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
246 # but it's actually of type `email.Message`
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
247 value = field_selector_fn(metadata) # type: ignore
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
248 if value:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
249 break
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
250 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
251
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
252 classifiers: list[str] = metadata.get_all("classifier", [])
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
253 pkg_info["license_classifier"] = find_license_from_classifier(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
254 classifiers
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
255 )
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
256
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
257 if args.filter_strings:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
258
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
259 def filter_string(item: str) -> str:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
260 return item.encode(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
261 args.filter_code_page, errors="ignore"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
262 ).decode(args.filter_code_page)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
263
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
264 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
265 if isinstance(pkg_info[k], list):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
266 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
267 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
268 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
269
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 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
271
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
272 def get_python_sys_path(executable: str) -> list[str]:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
273 script = "import sys; print(' '.join(filter(bool, sys.path)))"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
274 output = subprocess.run(
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
275 [executable, "-c", script],
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
276 capture_output=True,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
277 env={**os.environ, "PYTHONPATH": "", "VIRTUAL_ENV": ""},
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
278 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
279 return output.stdout.decode().strip().split()
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
280
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
281 # 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
282 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
283 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
284 else:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
285 if args.python == sys.executable:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
286 search_paths = sys.path
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
287 else:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
288 search_paths = get_python_sys_path(args.python)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
289 pkgs = importlib_metadata.distributions(path=search_paths)
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
290 ignore_pkgs_as_normalize = [
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
291 normalize_pkg_name(pkg) for pkg in args.ignore_packages
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
292 ]
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
293 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
294
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 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
296 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
297 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
298
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 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
300 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
301 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
302
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
303 for pkg in pkgs:
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
304 pkg_name = normalize_pkg_name(pkg.metadata["name"])
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
305 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
306
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
307 if (
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
308 pkg_name.lower() in ignore_pkgs_as_normalize
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
309 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
310 ):
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
311 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
312
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
313 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
314 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
315
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 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
317 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
318
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 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
320
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 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
322 args.from_,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
323 cast(List[str], pkg_info["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
324 cast(str, pkg_info["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
325 )
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326
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 if fail_on_licenses:
10756
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
328 failed_licenses = set()
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
329 if not args.partial_match:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
330 failed_licenses = case_insensitive_set_intersect(
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
331 license_names, fail_on_licenses
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
332 )
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
333 else:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
334 failed_licenses = case_insensitive_partial_match_set_intersect(
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
335 license_names, fail_on_licenses
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
336 )
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
337 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
338 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
339 "fail-on license {} was found for package "
10352
37d8616b44ca Upgraded pip-licenses to version 4.3.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
340 "{}:{}\n".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
341 "; ".join(sorted(failed_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
342 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
343 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
344 )
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
345 )
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
346 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
347
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 if allow_only_licenses:
10756
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
349 uncommon_licenses = set()
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
350 if not args.partial_match:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
351 uncommon_licenses = case_insensitive_set_diff(
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
352 license_names, allow_only_licenses
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
353 )
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
354 else:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
355 uncommon_licenses = case_insensitive_partial_match_set_diff(
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
356 license_names, allow_only_licenses
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
357 )
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
358 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
359 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
360 "license {} not in allow-only licenses was found"
10352
37d8616b44ca Upgraded pip-licenses to version 4.3.3.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10331
diff changeset
361 " for package {}:{}\n".format(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
362 "; ".join(sorted(uncommon_licenses)),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
363 pkg_info["name"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
364 pkg_info["version"],
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
365 )
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
366 )
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 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
368
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 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
370
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
371
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
372 # 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
373 def create_licenses_list(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
374 args: "CustomNamespace", output_fields=DEFAULT_OUTPUT_FIELDS):
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
375
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 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
377 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
378 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
379 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
380 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
381 license_set = select_license_by_source(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
382 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
383 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
384 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
385 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
386 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
387 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
388 elif field == 'License-Classifier':
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
389 row[field] = (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
390 "; ".join(sorted(pkg["license_classifier"]))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
391 or LICENSE_UNKNOWN
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
392 )
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 elif field.lower() in pkg:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
394 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
395 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
396 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
397 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
398
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
399 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
400
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
401
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
402 # 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
403 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
404 counts = Counter(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
405 "; ".join(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
406 sorted(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
407 select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
408 args.from_,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
409 cast(List[str], pkg["license_classifier"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
410 cast(str, pkg["license"]),
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
411 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
412 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
413 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
414 for pkg in get_packages(args)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
415 )
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
416
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
417 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
418 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
419 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
420 "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
421 "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
422 })
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
423
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
424 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
425
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
426
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
427 def case_insensitive_set_intersect(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
428 """Same as set.intersection() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
429 common_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
430 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
431 for elem in set_a:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
432 if elem.lower() in set_b_lower:
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
433 common_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
434 return common_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
435
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
436
10756
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
437 def case_insensitive_partial_match_set_intersect(set_a, set_b):
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
438 common_items = set()
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
439 for item_a in set_a:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
440 for item_b in set_b:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
441 if item_b.lower() in item_a.lower():
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
442 common_items.add(item_a)
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
443 return common_items
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
444
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
445
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
446 def case_insensitive_partial_match_set_diff(set_a, set_b):
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
447 uncommon_items = set_a.copy()
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
448 for item_a in set_a:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
449 for item_b in set_b:
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
450 if item_b.lower() in item_a.lower():
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
451 uncommon_items.remove(item_a)
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
452 return uncommon_items
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
453
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
454
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
455 def case_insensitive_set_diff(set_a, set_b):
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
456 """Same as set.difference() but case-insensitive"""
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
457 uncommon_items = set()
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
458 set_b_lower = {item.lower() for item in set_b}
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
459 for elem in set_a:
10331
c1a2ff7e3575 Modernized some code and corrected some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10179
diff changeset
460 if elem.lower() not in set_b_lower:
9849
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
461 uncommon_items.add(elem)
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
462 return uncommon_items
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
463
99782ca569ed Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9653
diff changeset
464
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
465 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
466 licenses = []
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
467 for classifier in filter(lambda c: c.startswith("License"), classifiers):
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
468 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
469
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
470 # Through the declaration of 'Classifier: License :: OSI Approved'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
471 if license != "OSI Approved":
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
472 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
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 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
475
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
477 def select_license_by_source(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
478 from_source: FromArg, license_classifier: list[str], license_meta: str
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
479 ) -> 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
480 license_classifier_set = set(license_classifier) or {LICENSE_UNKNOWN}
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
481 if (
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
482 from_source == FromArg.CLASSIFIER
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
483 or from_source == FromArg.MIXED
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
484 and len(license_classifier) > 0
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
485 ):
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
486 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
487 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
488 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
489
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
491 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
492 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
493 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
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 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
496
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 args.from_ == FromArg.ALL:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
498 output_fields.append("License-Metadata")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
499 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
500 else:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
501 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
502
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
503 if args.with_authors:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
504 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
505
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
506 if args.with_maintainers:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
507 output_fields.append("Maintainer")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
508
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
509 if args.with_urls:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
510 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
511
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
512 if args.with_description:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
513 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
514
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
515 if args.no_version:
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
516 output_fields.remove("Version")
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
517
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
518 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
519 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
520 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
521
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
522 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
523
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 if args.with_notice_file:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
525 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
526 if not args.no_license_path:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
527 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
528
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
529 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
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
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
532 # 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
533 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
534 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
535
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
536 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
537 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
538 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
539 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
540
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
541 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
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
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 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
545 def __init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
546 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
547 prog: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
548 indent_increment: int = 2,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
549 max_help_position: int = 24,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
550 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
551 ) -> 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
552 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
553 super().__init__(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
554 prog,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
555 indent_increment=indent_increment,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
556 max_help_position=max_help_position,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
557 width=width,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
558 )
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
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 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
561 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
562 text = self._expand_help(action)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
563 separator_pos = text[:3].find("|")
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
564 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
565 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
566 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
567 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
568 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
569 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
570 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
571
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
572 def _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
573 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
574 default_value = enum_key_to_value(action.default)
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
575 return cast(str, self._get_help_string(action)) % {
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
576 "default": default_value
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
577 }
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
578 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
579
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
580 def _split_lines(self, text: str, width: int) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
581 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
582 if separator_pos != -1:
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
583 flag_splitlines: bool = "R" in text[:separator_pos]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
584 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
585 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
586 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
587 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
588
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
589
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
590 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
591 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
592 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
593 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
594 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
595 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
596 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
597 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
598 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
599 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
600 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
601 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
602 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
603 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
604 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
605 filter_code_page: str
10756
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
606 partial_match: bool
9002
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
607 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
608 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
609
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
610
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
611 class CompatibleArgumentParser(argparse.ArgumentParser):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
612 def parse_args( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
613 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
614 args: None | Sequence[str] = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
615 namespace: None | CustomNamespace = None,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
616 ) -> CustomNamespace:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
617 args_ = cast(CustomNamespace, super().parse_args(args, namespace))
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
618 self._verify_args(args_)
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
619 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
620
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
621 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
622 if args.with_license_file is False and (
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
623 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
624 ):
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
625 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
626 "'--no-license-path' and '--with-notice-file' require "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
627 "the '--with-license-file' option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
628 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
629 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
630 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
631 "'--filter-code-page' requires the '--filter-strings' "
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
632 "option to be set"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
633 )
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
634 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
635 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
636 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
637 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
638 "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
639 "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
640 "#standard-encodings for valid code pages"
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
641 % args.filter_code_page
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
642 )
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
643
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
644
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
645 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
646 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
647 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
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 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
651 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
652 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
653 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
654 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
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
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
657 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
658 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
659 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
660 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
661 AUTHOR = A = auto()
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
662 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
663 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
664
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
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 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
667 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
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
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 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
671 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
672
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
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
674 def choices_from_enum(enum_cls: Type[NoValueEnum]) -> List[str]:
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
675 return [
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
676 key.replace("_", "-").lower() for key in enum_cls.__members__.keys()
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
677 ]
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
678
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
679
10881
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
680 def get_value_from_enum(
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
681 enum_cls: Type[NoValueEnum], value: str
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
682 ) -> NoValueEnum:
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
683 return getattr(enum_cls, value_to_enum_key(value))
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
684
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
685
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
686 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
687 '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
688 '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
689 }
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
690
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
691
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
692 class SelectAction(argparse.Action):
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
693 def __call__( # type: ignore[override]
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
694 self,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
695 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
696 namespace: argparse.Namespace,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
697 values: str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
698 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
699 ) -> 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
700 enum_cls = MAP_DEST_TO_ENUM[self.dest]
10881
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
701 setattr(namespace, self.dest, get_value_from_enum(enum_cls, values))
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
702
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
703
10881
c20d7e202152 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10756
diff changeset
704 def create_parser() -> CompatibleArgumentParser:
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 parser = CompatibleArgumentParser(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
706 description=__summary__, formatter_class=CustomHelpFormatter
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
707 )
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
708
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
709 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
710 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
711 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
712
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
713 parser.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
714 "-v", "--version", action="version", version="%(prog)s " + __version__
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
715 )
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
716
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(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
718 "--python",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
719 type=str,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
720 default=sys.executable,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
721 metavar="PYTHON_EXEC",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
722 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
723 "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
724 "By default, will search packages for current env executable\n"
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
725 "(default: sys.executable)",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
726 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
727
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
728 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
729 "--from",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
730 dest="from_",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
731 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
732 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
733 default=FromArg.MIXED,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
734 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
735 choices=choices_from_enum(FromArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
736 help="R|where to find license information\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
737 '"meta", "classifier, "mixed", "all"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
738 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
739 )
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
740 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
741 "-o",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
742 "--order",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
743 action=SelectAction,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
744 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
745 default=OrderArg.NAME,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
746 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
747 choices=choices_from_enum(OrderArg),
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
748 help="R|order by column\n"
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
749 '"name", "license", "author", "url"\n'
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
750 "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
751 )
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
752 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
753 '--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
754 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
755 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
756 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
757 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
758 '--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
759 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
760 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
761 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
762 "-i",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
763 "--ignore-packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
764 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
765 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
766 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
767 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
768 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
769 help="ignore package name in dumped list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
770 )
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 common_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
772 "-p",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
773 "--packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
774 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
775 type=str,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
776 nargs="+",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
777 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
778 default=[],
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
779 help="only include selected packages in output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
780 )
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
781
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
782 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
783 "-s",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
784 "--with-system",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
785 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
786 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
787 help="dump with system packages",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
788 )
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
789 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
790 "-a",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
791 "--with-authors",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
792 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
793 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
794 help="dump with package authors",
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(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
797 "--with-maintainers",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
798 action="store_true",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
799 default=False,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
800 help="dump with package maintainers",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
801 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
802 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
803 "-u",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
804 "--with-urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
805 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
806 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
807 help="dump with package urls",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
808 )
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
809 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
810 "-d",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
811 "--with-description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
812 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
813 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
814 help="dump with short package description",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
815 )
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
816 format_options.add_argument(
10027
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
817 "-nv",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
818 "--no-version",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
819 action="store_true",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
820 default=False,
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
821 help="dump without package version",
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
822 )
63728909f3ff Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9851
diff changeset
823 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
824 "-l",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
825 "--with-license-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
826 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
827 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
828 help="dump with location of license file and "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
829 "contents, most useful with JSON output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
830 )
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
831 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
832 "--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
833 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
834 default=False,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
835 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
836 "suppress location of license file output",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
837 )
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
838 format_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
839 "--with-notice-file",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
840 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
841 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
842 help="I|when specified together with option -l, "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
843 "dump with location of license file and contents",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
844 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
845 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
846 "--filter-strings",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
847 action="store_true",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
848 default=False,
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
849 help="filter input according to code page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
850 )
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
851 format_options.add_argument(
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
852 "--filter-code-page",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
853 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
854 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
855 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
856 metavar="CODE",
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
857 help="I|specify code page for filtering " "(default: %(default)s)",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
858 )
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
859
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
860 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
861 "--fail-on",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
862 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
863 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
864 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
865 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
866 "of the licenses of the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
867 )
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
868 verify_options.add_argument(
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
869 "--allow-only",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
870 action="store",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
871 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
872 default=None,
9590
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
873 help="fail (exit with code 1) on the first occurrence "
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
874 "of the licenses not in the semicolon-separated list",
8fad82cb88ab Third Party packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9310
diff changeset
875 )
10756
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
876 verify_options.add_argument(
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
877 "--partial-match",
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
878 action="store_true",
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
879 default=False,
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
880 help="enables partial matching for --allow-only/--fail-on",
0702be694bc4 Third Party Packages
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 10637
diff changeset
881 )
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
882
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
883 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
884
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
885
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
886 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
887 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
888 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
889
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
890 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
891
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
892 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
893
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
894
31a7decd3393 Started to implement a license lister for pip installed packages based on pip-licenses.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
895 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
896 main()

eric ide

mercurial