src/eric7/PipInterface/piplicenses.py

Sat, 08 Jun 2024 15:57:58 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 08 Jun 2024 15:57:58 +0200
branch
eric7
changeset 10756
0702be694bc4
parent 10637
98160fe3eb4d
child 10881
c20d7e202152
permissions
-rw-r--r--

Third Party Packages
- Upgraded pip-licenses to version 4.4.0.

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

eric ide

mercurial