Write resulting requirements taking versions from the fixed_requirements.
(
sources=None, fixed_requirements=None, output_file=None, skip=None
)
| 192 | |
| 193 | |
| 194 | def write_requirements( |
| 195 | sources=None, fixed_requirements=None, output_file=None, skip=None |
| 196 | ): |
| 197 | """ |
| 198 | Write resulting requirements taking versions from the fixed_requirements. |
| 199 | """ |
| 200 | skip = skip or [] |
| 201 | |
| 202 | requirements = merge_source_requirements(sources) |
| 203 | |
| 204 | fixedreq_hash = load_fixed_requirements(fixed_requirements) |
| 205 | |
| 206 | lines_to_write = [] |
| 207 | links = set() |
| 208 | for req in requirements: |
| 209 | if hasattr(req, "requirement"): |
| 210 | parsedreq = parse_req_from_line(req.requirement, req.line_source) |
| 211 | project_name = parsedreq.requirement.name |
| 212 | linkreq = parsedreq |
| 213 | else: |
| 214 | project_name = req.name |
| 215 | linkreq = req |
| 216 | if project_name in skip: |
| 217 | continue |
| 218 | |
| 219 | # we don't have any idea how to process links, so just add them |
| 220 | if linkreq.link and linkreq.link not in links: |
| 221 | links.add(linkreq.link) |
| 222 | if hasattr(req, "req") and req.req and str(req.req).count("@") == 2: |
| 223 | # PEP 440 direct reference |
| 224 | rline = str(linkreq.req) |
| 225 | # Also write out environment markers |
| 226 | if linkreq.markers: |
| 227 | rline += " ; {}".format(str(linkreq.markers)) |
| 228 | else: |
| 229 | rline = str(linkreq.link) |
| 230 | |
| 231 | if (hasattr(req, "is_editable") and req.is_editable) or ( |
| 232 | hasattr(req, "editable") and req.editable |
| 233 | ): |
| 234 | rline = "-e %s" % (rline) |
| 235 | elif hasattr(req, "requirement") and req.requirement: |
| 236 | project = parsedreq.requirement.name |
| 237 | req_obj = fixedreq_hash.get(project, req) |
| 238 | |
| 239 | rline = str(req_obj.requirement) |
| 240 | |
| 241 | # Markers are included in req_obj.requirement, so no |
| 242 | # special processing required |
| 243 | elif hasattr(req, "req") and req.req: |
| 244 | project = req.name |
| 245 | req_obj = fixedreq_hash.get(project, req) |
| 246 | |
| 247 | rline = str(req_obj.req) |
| 248 | # Also write out environment markers |
| 249 | if req_obj.markers: |
| 250 | rline += " ; {}".format(str(req_obj.markers)) |
| 251 |
no test coverage detected