src/eric7/PipInterface/piplicenses.py

Sat, 13 May 2023 12:15:43 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 13 May 2023 12:15:43 +0200
branch
eric7
changeset 10027
63728909f3ff
parent 9851
ec12090e9cd9
child 10179
c2125fcab4b8
permissions
-rw-r--r--

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

eric ide

mercurial