Fix data file path detection with new pip
Using an editable installation of Kayobe fails on Rocky Linux 9 or
Ubuntu with an error such as:
ERROR! The requirements file '/home/rocky/kayobe/kayobe/requirements.yml' does not exist.
Failed to install Ansible roles from /home/rocky/kayobe/kayobe/utils.py/../requirements.yml via Ansible Galaxy: returncode 1
Control host bootstrap failed - likely Ansible Galaxy flakiness. Sleeping 5 seconds before retrying
This is caused by recent changes to how pip manages editable
installations. The egg-link file that Kayobe was using to find the
source path does not exist anymore. Instead, there is a direct_url.json
file under the kayobe dist-info directory that can be parsed.
This also includes Ic53efd03cecbd53ad3e3b64b664e084f4e25be0e to work
around mocking issues in unit tests.
Change-Id: I9dd5b97dec93c0e5393a1e7d9640f85003651b56
Closes-Bug: #2020135
(cherry picked from commit 1847ad3f17
)
This commit is contained in:
parent
6ec4e8a5c7
commit
a44f06365a
@ -14,6 +14,8 @@
|
||||
|
||||
import base64
|
||||
import glob
|
||||
import importlib_metadata
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import shutil
|
||||
@ -48,10 +50,30 @@ def _detect_install_prefix(path):
|
||||
return prefix_path
|
||||
|
||||
|
||||
def _get_direct_url(dist):
|
||||
direct_url = os.path.join(dist._path, 'direct_url.json')
|
||||
if os.path.isfile(direct_url):
|
||||
with open(direct_url, 'r') as f:
|
||||
direct_url_content = json.loads(f.readline().strip())
|
||||
url = direct_url_content['url']
|
||||
prefix = 'file://'
|
||||
if url.startswith(prefix):
|
||||
return url[len(prefix):]
|
||||
|
||||
return None
|
||||
|
||||
|
||||
def _get_base_path():
|
||||
override = os.environ.get("KAYOBE_DATA_FILES_PATH")
|
||||
if override:
|
||||
return os.path.join(override)
|
||||
|
||||
kayobe_dist = list(importlib_metadata.Distribution.discover(name="kayobe"))
|
||||
if kayobe_dist:
|
||||
direct_url = _get_direct_url(kayobe_dist[0])
|
||||
if direct_url:
|
||||
return direct_url
|
||||
|
||||
egg_glob = os.path.join(
|
||||
sys.prefix, 'lib*', 'python*', '*-packages', 'kayobe.egg-link'
|
||||
)
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixes detection of data file path when using editable installations with a
|
||||
recent pip.
|
Loading…
Reference in New Issue
Block a user