Return a three-tuple of (name, comparator, version) given a ``req`` requirement specifier string. Each segment may be empty. Spaces are removed. For example: >>> assert split_req("foo==1.2.3") == ("foo", "==", "1.2.3"), split_req("foo==1.2.3") >>> assert split_req("foo") == ("f
(req)
| 139 | |
| 140 | |
| 141 | def split_req(req): |
| 142 | """ |
| 143 | Return a three-tuple of (name, comparator, version) given a ``req`` |
| 144 | requirement specifier string. Each segment may be empty. Spaces are removed. |
| 145 | |
| 146 | For example: |
| 147 | >>> assert split_req("foo==1.2.3") == ("foo", "==", "1.2.3"), split_req("foo==1.2.3") |
| 148 | >>> assert split_req("foo") == ("foo", "", ""), split_req("foo") |
| 149 | >>> assert split_req("==1.2.3") == ("", "==", "1.2.3"), split_req("==1.2.3") |
| 150 | >>> assert split_req("foo >= 1.2.3 ") == ("foo", ">=", "1.2.3"), split_req("foo >= 1.2.3 ") |
| 151 | >>> assert split_req("foo>=1.2") == ("foo", ">=", "1.2"), split_req("foo>=1.2") |
| 152 | """ |
| 153 | if not req: |
| 154 | raise ValueError("req is required") |
| 155 | # do not allow multiple constraints and tags |
| 156 | if ";" in req: |
| 157 | req = req.split(";")[0] |
| 158 | if any(c in req for c in ",:"): |
| 159 | raise Exception(f"complex requirements with : or ; not supported: {req}") |
| 160 | req = "".join(req.split()) |
| 161 | if not any(c in req for c in comparators): |
| 162 | return req, "", "" |
| 163 | segments = version_splitter.split(req, maxsplit=1) |
| 164 | return tuple(segments) |
no test coverage detected