Using 2023.9.7 editable package installation fails with build isolation disabled when depending upon setuptools

Issue description
When performing an editable install of a package that depends upon setuptools with build isolation disabled (see https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-no-build-isolation) pipenv clobbers setuptools while it's being used to install an editable package. I assume this is because installs happen in parallel and setuptools gets swapped out from under the editable package while it's being installed.
Expected result
I'm not sure when this last worked, we hadn't upgraded pipenv for quite a while. But at some point this seemed to work, i.e we could install an editable package with pipenv that depends upon setuptools.
Actual result
Removing .venv/
Removing Pipfile
Removing Pipfile.lock
Creating a virtualenv for this project...
Pipfile: /home/stewart/src/pipenv_editable_install_repro/Pipfile
Using /usr/bin/python (3.8.10) to create virtualenv...
created virtual environment CPython3.8.10.final.0-64 in 49ms
  creator CPython3Posix(dest=/home/stewart/src/pipenv_editable_install_repro/.venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/stewart/.local/share/virtualenv)
    added seed packages: pip==23.2.1, setuptools==68.1.2, wheel==0.41.2
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/stewart/src/pipenv_editable_install_repro/.venv
Creating a Pipfile for this project...
The flag --skip-lock has been reintroduced (but is not recommended).  Without the lock resolver it is difficult to manage multiple package
indexes, and hash checking is not provided.  However it can help manage installs with current deficiencies in locking across platforms.
Installing -e ./requires-setuptools...
Resolving -e ./requires-setuptools...
Added requires-setuptools to Pipfile's [packages] ...
✔ Installation Succeeded
Installing dependencies from Pipfile...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (c2fec5ff1a495cbfa1fcbdd572d8f990a3559d4d8b69565aa35d34409ad990a3)!
Installing dependencies from Pipfile.lock (d990a3)...
[pipenv.exceptions.InstallError]: Obtaining file:///home/stewart/src/pipenv_editable_install_repro/requires-setuptools (from -r /tmp/pipenv-mql58ofv-requirements/pipenv-anmjg6eu-reqs.txt (line 1))
[pipenv.exceptions.InstallError]:   Checking if build backend supports build_editable: started
[pipenv.exceptions.InstallError]:   Checking if build backend supports build_editable: finished with status 'done'
[pipenv.exceptions.InstallError]:   Preparing editable metadata (pyproject.toml): started
[pipenv.exceptions.InstallError]:   Preparing editable metadata (pyproject.toml): finished with status 'done'
[pipenv.exceptions.InstallError]: ERROR: Exception:
[pipenv.exceptions.InstallError]: Traceback (most recent call last):
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/cli/base_command.py", line 180, in exc_logging_wrapper
[pipenv.exceptions.InstallError]:     status = run_func(*args)
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/cli/req_command.py", line 248, in wrapper
[pipenv.exceptions.InstallError]:     return func(self, options, args)
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/commands/install.py", line 377, in run
[pipenv.exceptions.InstallError]:     requirement_set = resolver.resolve(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/resolver.py", line 73, in resolve
[pipenv.exceptions.InstallError]:     collected = self.factory.collect_root_requirements(root_reqs)
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/factory.py", line 491, in collect_root_requirements
[pipenv.exceptions.InstallError]:     req = self._make_requirement_from_install_req(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/factory.py", line 453, in _make_requirement_from_install_req
[pipenv.exceptions.InstallError]:     cand = self._make_candidate_from_link(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/factory.py", line 185, in _make_candidate_from_link
[pipenv.exceptions.InstallError]:     self._editable_candidate_cache[link] = EditableCandidate(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/candidates.py", line 322, in __init__
[pipenv.exceptions.InstallError]:     super().__init__(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/candidates.py", line 157, in __init__
[pipenv.exceptions.InstallError]:     self.dist = self._prepare()
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/candidates.py", line 226, in _prepare
[pipenv.exceptions.InstallError]:     dist = self._prepare_distribution()
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/resolution/resolvelib/candidates.py", line 332, in _prepare_distribution
[pipenv.exceptions.InstallError]:     return self._factory.preparer.prepare_editable_requirement(self._ireq)
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/operations/prepare.py", line 709, in prepare_editable_requirement
[pipenv.exceptions.InstallError]:     dist = _get_prepared_distribution(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/operations/prepare.py", line 69, in _get_prepared_distribution
[pipenv.exceptions.InstallError]:     abstract_dist.prepare_distribution_metadata(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/distributions/sdist.py", line 61, in prepare_distribution_metadata
[pipenv.exceptions.InstallError]:     self.req.prepare_metadata()
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/req/req_install.py", line 557, in prepare_metadata
[pipenv.exceptions.InstallError]:     self.metadata_directory = generate_editable_metadata(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/operations/build/metadata_editable.py", line 37, in generate_editable_metadata
[pipenv.exceptions.InstallError]:     distinfo_dir = backend.prepare_metadata_for_build_editable(metadata_dir)
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_internal/utils/misc.py", line 731, in prepare_metadata_for_build_editable
[pipenv.exceptions.InstallError]:     return super().prepare_metadata_for_build_editable(
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_vendor/pyproject_hooks/_impl.py", line 246, in prepare_metadata_for_build_editable
[pipenv.exceptions.InstallError]:     return self._call_hook('prepare_metadata_for_build_editable', {
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_vendor/pyproject_hooks/_impl.py", line 321, in _call_hook
[pipenv.exceptions.InstallError]:     raise BackendUnavailable(data.get('traceback', ''))
[pipenv.exceptions.InstallError]: pipenv.patched.pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most recent call last):
[pipenv.exceptions.InstallError]:   File "/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv/patched/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
[pipenv.exceptions.InstallError]:     obj = import_module(mod_path)
[pipenv.exceptions.InstallError]:   File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
[pipenv.exceptions.InstallError]:     return _bootstrap._gcd_import(name[level:], package, level)
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 991, in _find_and_load
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap_external>", line 848, in exec_module
[pipenv.exceptions.InstallError]:   File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
[pipenv.exceptions.InstallError]:   File "/home/stewart/src/pipenv_editable_install_repro/.venv/lib/python3.8/site-packages/setuptools/__init__.py", line 15, in <module>
[pipenv.exceptions.InstallError]:   File "/home/stewart/src/pipenv_editable_install_repro/.venv/lib/python3.8/site-packages/setuptools/version.py", line 1, in <module>
[pipenv.exceptions.InstallError]:   File "/home/stewart/src/pipenv_editable_install_repro/.venv/lib/python3.8/site-packages/setuptools/_importlib.py", line 41, in <module>
[pipenv.exceptions.InstallError]:   File "/home/stewart/src/pipenv_editable_install_repro/.venv/lib/python3.8/site-packages/setuptools/extern/__init__.py", line 52, in create_module
[pipenv.exceptions.InstallError]:   File "/home/stewart/src/pipenv_editable_install_repro/.venv/lib/python3.8/site-packages/setuptools/extern/__init__.py", line 44, in load_module
[pipenv.exceptions.InstallError]: ImportError: The 'importlib_metadata' package is required; normally this is bundled with this package so if you get this warning, consult the packager of your distribution.
ERROR: Couldn't install package: {}
 Package installation failed...

Steps to replicate

Clone https://github.com/stewartmiles/pipenv_editable_install_repro
Run requires-setuptools/install.sh on a Linux box / macOS box or you can run the equivalent commands from your Windows terminal of choice.

$ pipenv --support
Pipenv version: '2023.9.7'
Pipenv location: '/home/stewart/.local/pipx/venvs/pipenv/lib/python3.8/site-packages/pipenv'
Python location: '/home/stewart/.local/pipx/venvs/pipenv/bin/python'
OS Name: 'posix'
User pip version: '23.2.1'
user Python installations found:
PEP 508 Information:
{'implementation_name': 'cpython',
 'implementation_version': '3.8.10',
 'os_name': 'posix',
 'platform_machine': 'x86_64',
 'platform_python_implementation': 'CPython',
 'platform_release': '5.15.0-69-generic',
 'platform_system': 'Linux',
 'platform_version': '#76~20.04.1-Ubuntu SMP Mon Mar 20 15:54:19 UTC 2023',
 'python_full_version': '3.8.10',
 'python_version': '3.8',
 'sys_platform': 'linux'}

System environment variables:

SHELL
PIPENV_VENV_IN_PROJECT
TERMCAP
SSH_AUTH_SOCK
WINDOW
SSH_AGENT_PID
PWD
LOGNAME
XDG_SESSION_TYPE
MOTD_SHOWN
HOME
LANG
LS_COLORS
SSH_CONNECTION
LESSCLOSE
XDG_SESSION_CLASS
TERM
LESSOPEN
USER
XLA_FLAGS
SHLVL
XDG_SESSION_ID
KUBECONFIG
LD_LIBRARY_PATH
XDG_RUNTIME_DIR
SSH_CLIENT
XDG_DATA_DIRS
PATH
STY
DBUS_SESSION_BUS_ADDRESS
SSH_TTY
USE_GKE_GCLOUD_AUTH_PLUGIN
OLDPWD
_
PIP_DISABLE_PIP_VERSION_CHECK
PYTHONDONTWRITEBYTECODE
PYTHONFINDER_IGNORE_UNSUPPORTED

Pipenv–specific environment variables:

PIPENV_VENV_IN_PROJECT: true

Debug–specific environment variables:

PATH: /usr/local/cuda/bin:/usr/local/nvidia/bin:/home/stewart/bin/gradle/bin:/home/stewart/bin/cmake/bin:/usr/local/cuda/bin:~/.local/bin:/home/stewart/.local/bin:/home/stewart/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/stewart/bin/node/bin
SHELL: /bin/bash
LANG: en_US.UTF-8
PWD: /home/stewart/src/pipenv_editable_install_repro

Contents of Pipfile ('/home/stewart/src/pipenv_editable_install_repro/Pipfile'):
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
requires-setuptools = {file = "requires-setuptools", editable = true}

[dev-packages]

[requires]
python_version = "3.8"
python_full_version = "3.8.10"

Contents of Pipfile.lock ('/home/stewart/src/pipenv_editable_install_repro/Pipfile.lock'):
{
    "_meta": {
        "hash": {
            "sha256": "c2fec5ff1a495cbfa1fcbdd572d8f990a3559d4d8b69565aa35d34409ad990a3"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_full_version": "3.8.10",
            "python_version": "3.8"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "requires-setuptools": {
            "editable": true,
            "file": "requires-setuptools"
        },
        "setuptools": {
            "hashes": [
                "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48",
                "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"
            ],
            "markers": "python_version >= '3.8'",
            "version": "==68.2.0"
        }
    },
    "develop": {}
}

Oh I should mention the reason why we use build isolation is that we have a load of editable packages in our development venv, if we had each one installed in an isolated environment it quickly results in O(N-1^2) package installs.

A workaround is to pin setuptools to a specific version in Pipfile, then it's never upgraded but that isn't ideal as you have to remember to unpin and upgrade it periodically.

@stewartmiles Hmmm, this is a case where I would recommend created a prereq category for things like setuptools:
pipenv install setuptools --categories=prereq and then install that category first so that its available for the subsequent build step, like pipenv sync --categories="prereq packages"  (i forget actually if its packages or default and I see our documentation around this could be improved).
It also reminds me for any folks thinking of participating in Hacktoberfest, it would be cool to be able to specify default catetgories in the pipenv directive so pipenv ran through the categories in that order when no flags were supplied (for convenience)

@matteius I'll have to give that a try. However, if categories work the same way as dev packages (i.e dev category?) then this isn't going to generally work AFAIK since historically pipenv would lock each category independently which can result in each category requiring different or, worse, incompatible versions of packages. To minimize the hacky would it make sense to parse the build requirements (i.e in pyproject.toml) of editable packages and ensure those are installed before installing the editable packages? I think that would work in the general case without pushing knowledge of the dependency graph onto the user.

default packages constraints do constrain all other categories, but that is about it, yeah they are otherwise locked independently.

would it make sense to parse the build requirements (i.e in pyproject.toml) of editable packages and ensure those are installed before installing the editable packages

Actually though requirementslib used to try and do such things, but I was happy to purge that code because in theory if the build environment is setup properly with the right install_requires and not importing things it doesn't have installed yet, then it should be handled fine by pip.
I am actually surprised that you find needing to use no build isolation, because when pipenv install phase happens it uses --no-deps which doesn't install any of the dependencies, and it installs everything in parallel.   Are you sure that the no build isolation flag you are passing is actually performing better on the the newer pipenv versions?

Another thing to factor into it is the install phases, each phase technically you would think of as 1 pip install phase, but its actually up to 2 because hash checking I believe and certain features are for the whole install phase, so your editable installs are technically happening after the named installs in the same category.  That is probably why adding setuptools actually doesn't need to be done in a prereq category can can be done in the same category as you mentioned.

Actually though requirementslib used to try and do such things, but I was happy to purge that code because in theory if the build environment is setup properly with the right install_requires and not importing things it doesn't have installed yet, then it should be handled fine by pip.

The bummer with this is that it makes things harder when developing with multiple packages in a single repository / venv. If one editable install has a build time dependency upon another, pip install --no-deps fails. The workaround pipenv used to do or perhaps still does, is to run the sync process multiple times before failing out, each pass would install a separate layer of the build dependency tree. Unfortunately, if I remember correctly it only retried 3 times rather than continuing to retry if new packages are installed which means you can only have 3 levels of build time dependencies.

I am actually surprised that you find needing to use no build isolation, because when pipenv install phase happens it uses --no-deps which doesn't install any of the dependencies, and it installs everything in parallel. Are you sure that the no build isolation flag you are passing is actually performing better on the the newer pipenv versions?

Yeah as we have pretty sizeable build time dependencies in pyproject.toml which end being installed over and again for each isolated build.

If one editable install has a build time dependency upon another, pip install --no-deps fails.

That is where named package categories can be useful, because you can stage your build dependencies which it feels like could be worth investing in defining that in the Pipfile via categories for complicated setups where the isolation causes a big increase in install time and cycles.

The workaround pipenv used to do or perhaps still does, is to run the sync process multiple times before failing out, each pass would install a separate layer of the build dependency tree. Unfortunately, if I remember correctly it only retried 3 times rather than continuing to retry if new packages are installed which means you can only have 3 levels of build time dependencies.

Actually I think it only retired once, so the initial plus one retry, but that has since been removed -- I didn't realize anyone was relying on it as a side effect of this type of issue, but the reason it got removed is it was altering between a pep517 (??) flag or not, but as I recall in almost all cases a package that failed in the first iteration would fail again in the second.  As you mention the number of iterations could have to be n where n is the number of packages that have build time dependencies.
Sorry that I don't have a magi bullet suggestion on it other than named categories and having a preferred ordering.  My preference is to not go back to days of trying to maintain parse setup.py/pyproject.toml/setup.cfg ahead of the pip install, because pip is designed to handle these cases as well.  It just felt like a lot of things in requirementslib were stale and broken and duplicating things pip does.
Another thing to note is the old pipenv (the ones with the progress bar) they basically did a sequential install where each dependency was installed not in parallel, in order to track progress, and some sometimes people would get lucky because the ordering the install happened in happened to include build dependencies before other ones, but it wasn't bullet proof.

Last comment for now though would be around setuptools -- you mentioned pinning the version and having to periodically update it -- why not just pin to star unless you know of a restriction keeping you on an old version?   This way it gets updated automatically during lock cycles?

Ok most recent thing I discovered that is an issue with todays release is:  https://github.com/pypa/pipenv/pull/5926
Not sure if it impacts what you were seeing at all, but I bring it up because you mentioned clobbering setuptools.

Worth checking with https://pypi.org/project/pipenv/2023.9.8/

Sorry that I don't have a magi bullet suggestion on it other than named categories and having a preferred ordering. My preference is to not go back to days of trying to maintain parse setup.py/pyproject.toml/setup.cfg ahead of the pip install, because pip is designed to handle these cases as well. It just felt like a lot of things in requirementslib were stale and broken and duplicating things pip does.

Yeah I feel that. I've dug around in that code a bit and it's great to stop depending upon it. It sounds like supporting build time dependencies of editable wheels isn't a thing pipenv would like to do then? Right now we have a load of code that uses pipenv --graph (i.e deptree) to generate a graph of dependencies after everything is installed and it parses pyproject.toml for build-time dependencies so that we have an install requirements graph and build requirements graph, everything gets installed via the build requirements graph in parallel as much as possible. Everything is checked against the install requirements graph to ensure everything has install time requirements at the end of the sync. I would love to ditch all this crazyiness in favor of just pipenv sync but it sounds like that isn't on the agenda, I'm sure you all have plenty of other fish to fry to get things stable and reduce the vendored forks etc.

Another thing to note is the old pipenv (the ones with the progress bar) they basically did a sequential install where each dependency was installed not in parallel, in order to track progress, and some sometimes people would get lucky because the ordering the install happened in happened to include build dependencies before other ones, but it wasn't bullet proof.

Yeah that was likely helping as the sequential install would avoid the issue in this bug as setuptools would be installed / upgraded then packages that depend upon it at build time could use without the rug being pulled out from under them.

Last comment for now though would be around setuptools -- you mentioned pinning the version and having to periodically update it -- why not just pin to star unless you know of a restriction keeping you on an old version? This way it gets updated automatically during lock cycles?

With a fresh mind (it's the start of my day), I think that would end up with the same issue when initially syncing it. i.e:
pipenv --python $(which python)  # creates venv with older setuptools bundled with pipenv
pipenv sync  # updates setuptools and packages that depend upon it in parallel which causes
             # things to blow up.

I think the only way to get pipenv sync to work in this case is to do one of the following:

As you describe, use categories and basically install setuptools and build dependencies manually first followed by packages that require setuptools at build time.
Pin setuptools to the version bundled with pipenv and manually update this on each pipenv upgrade.
Ditch using packages that need to be built (e.g editable packages) and instead build them using pip wheel and maintain a private repository. This is seriously sucky from a developer workflow point of view IMHO.
Bring back pipenv sync --sequential, it would be slow but it would avoid this issue, what do you think?

Ok most recent thing I discovered that is an issue with todays release is: https://github.com/pypa/pipenv/pull/5926

I had a read through it but I don't think that helps for this issue.

@stewartmiles might be worth trying todays release just in case there was an issue resolving the specific build requirement/dependency, since ignore_compatibility was defaulted to True in yesterdays release.  That being said ...

It sounds like supporting build time dependencies of editable wheels isn't a thing pipenv would like to do then?

I guess I don't have a solid answer on this, my initial take was we are supporting it via pip's level of support.   The requirementslib code that maybe did that was also maybe not being invoked, because there was a lot of cruft code from the time that pipenv's resolver lived in requirementslib.   Maybe one day I can pick apart more if it was truly doing something helpful with regards to build time dependencies, but ideally I would need to know what the last version of pipenv it did work properly on -- its possible we could be looking up the wrong tree.

As you describe, use categories and basically install setuptools and build dependencies manually first followed by packages that require setuptools at build time.
Pin setuptools to the version bundled with pipenv and manually update this on each pipenv upgrade.

If point two solves it, then are there really other build dependencies to put in a separate package group besides setuptools (pt 1).    I think the advantage of having a separate group, is that while named requirements get installed before editable, you would guarantee setuptools is the same for even named requirements ahead of invoking the default group install.

Ditch using packages that need to be built (e.g editable packages) and instead build them using pip wheel and maintain a private repository. This is seriously sucky from a developer workflow point of view IMHO.

Understood.

Bring back pipenv sync --sequential, it would be slow but it would avoid this issue, what do you think?

I am not convinced on this simply because there was never a way to specify the ordering of the sequential install, so I feel its a can of worms to try and support it.
I'll look more at your reproduction example when I have more time and see if there is another angle to consider.

Oh FYI I tried disabling build isolation this morning and wow it's slow with a lot of packages so it's definitely still no good for us.
Again in my hacky repo https://github.com/stewartmiles/pipenv_editable_install_repro , I've added requires-setuptools/install_multiple.sh. It's possible to configure the number of packages using the INSTALL_PACKAGES variable which defaults to 50.
e.g:
INSTALL_PACKAGES=25 time ./requires-setuptools/install_multiple.sh

dumps out a heap of logs with the final time on a hefty 24 core box with fast SSD this takes 1 minute and 24 seconds. All generated packages depend upon the same things so really the resolver shouldn't be doing much work. Out of mild curiosity I fired up top to monitor it and the CPU was doing very little.

@stewartmiles It appears to only be an issue with using --skip-lock
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat Pipfile
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
requires-setuptools1 = {file = "requires-setuptools1", editable = true}
requires-setuptools2 = {file = "requires-setuptools2", editable = true}
requires-setuptools3 = {file = "requires-setuptools3", editable = true}
requires-setuptools4 = {file = "requires-setuptools4", editable = true}
requires-setuptools5 = {file = "requires-setuptools5", editable = true}
requires-setuptools6 = {file = "requires-setuptools6", editable = true}
requires-setuptools7 = {file = "requires-setuptools7", editable = true}
requires-setuptools8 = {file = "requires-setuptools8", editable = true}
requires-setuptools9 = {file = "requires-setuptools9", editable = true}
requires-setuptools10 = {file = "requires-setuptools10", editable = true}
requires-setuptools11 = {file = "requires-setuptools11", editable = true}
requires-setuptools12 = {file = "requires-setuptools12", editable = true}
requires-setuptools13 = {file = "requires-setuptools13", editable = true}
requires-setuptools14 = {file = "requires-setuptools14", editable = true}
requires-setuptools15 = {file = "requires-setuptools15", editable = true}
requires-setuptools16 = {file = "requires-setuptools16", editable = true}
requires-setuptools17 = {file = "requires-setuptools17", editable = true}
requires-setuptools18 = {file = "requires-setuptools18", editable = true}
requires-setuptools19 = {file = "requires-setuptools19", editable = true}
requires-setuptools20 = {file = "requires-setuptools20", editable = true}
requires-setuptools21 = {file = "requires-setuptools21", editable = true}
requires-setuptools22 = {file = "requires-setuptools22", editable = true}
requires-setuptools23 = {file = "requires-setuptools23", editable = true}
requires-setuptools24 = {file = "requires-setuptools24", editable = true}
requires-setuptools25 = {file = "requires-setuptools25", editable = true}
requires-setuptools26 = {file = "requires-setuptools26", editable = true}
requires-setuptools27 = {file = "requires-setuptools27", editable = true}
requires-setuptools28 = {file = "requires-setuptools28", editable = true}
requires-setuptools29 = {file = "requires-setuptools29", editable = true}
requires-setuptools30 = {file = "requires-setuptools30", editable = true}
requires-setuptools31 = {file = "requires-setuptools31", editable = true}
requires-setuptools32 = {file = "requires-setuptools32", editable = true}
requires-setuptools33 = {file = "requires-setuptools33", editable = true}
requires-setuptools34 = {file = "requires-setuptools34", editable = true}
requires-setuptools35 = {file = "requires-setuptools35", editable = true}
requires-setuptools36 = {file = "requires-setuptools36", editable = true}
requires-setuptools37 = {file = "requires-setuptools37", editable = true}
requires-setuptools38 = {file = "requires-setuptools38", editable = true}
requires-setuptools39 = {file = "requires-setuptools39", editable = true}
requires-setuptools40 = {file = "requires-setuptools40", editable = true}
requires-setuptools41 = {file = "requires-setuptools41", editable = true}
requires-setuptools42 = {file = "requires-setuptools42", editable = true}
requires-setuptools43 = {file = "requires-setuptools43", editable = true}
requires-setuptools44 = {file = "requires-setuptools44", editable = true}
requires-setuptools45 = {file = "requires-setuptools45", editable = true}
requires-setuptools46 = {file = "requires-setuptools46", editable = true}
requires-setuptools47 = {file = "requires-setuptools47", editable = true}
requires-setuptools48 = {file = "requires-setuptools48", editable = true}
requires-setuptools49 = {file = "requires-setuptools49", editable = true}
requires-setuptools50 = {file = "requires-setuptools50", editable = true}

[dev-packages]

[requires]
python_version = "3.10"
python_full_version = "3.10.12"
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat Pipfile.lock
{
    "_meta": {
        "hash": {
            "sha256": "7a3625721f1d53e1cec0190bcf5e0f6e71096be95fe6deddecf8d17bf2edc405"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_full_version": "3.10.12",
            "python_version": "3.10"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {
        "requires-setuptools1": {
            "editable": true,
            "file": "requires-setuptools1"
        },
        "requires-setuptools10": {
            "editable": true,
            "file": "requires-setuptools10"
        },
        "requires-setuptools11": {
            "editable": true,
            "file": "requires-setuptools11"
        },
        "requires-setuptools12": {
            "editable": true,
            "file": "requires-setuptools12"
        },
        "requires-setuptools13": {
            "editable": true,
            "file": "requires-setuptools13"
        },
        "requires-setuptools14": {
            "editable": true,
            "file": "requires-setuptools14"
        },
        "requires-setuptools15": {
            "editable": true,
            "file": "requires-setuptools15"
        },
        "requires-setuptools16": {
            "editable": true,
            "file": "requires-setuptools16"
        },
        "requires-setuptools17": {
            "editable": true,
            "file": "requires-setuptools17"
        },
        "requires-setuptools18": {
            "editable": true,
            "file": "requires-setuptools18"
        },
        "requires-setuptools19": {
            "editable": true,
            "file": "requires-setuptools19"
        },
        "requires-setuptools2": {
            "editable": true,
            "file": "requires-setuptools2"
        },
        "requires-setuptools20": {
            "editable": true,
            "file": "requires-setuptools20"
        },
        "requires-setuptools21": {
            "editable": true,
            "file": "requires-setuptools21"
        },
        "requires-setuptools22": {
            "editable": true,
            "file": "requires-setuptools22"
        },
        "requires-setuptools23": {
            "editable": true,
            "file": "requires-setuptools23"
        },
        "requires-setuptools24": {
            "editable": true,
            "file": "requires-setuptools24"
        },
        "requires-setuptools25": {
            "editable": true,
            "file": "requires-setuptools25"
        },
        "requires-setuptools26": {
            "editable": true,
            "file": "requires-setuptools26"
        },
        "requires-setuptools27": {
            "editable": true,
            "file": "requires-setuptools27"
        },
        "requires-setuptools28": {
            "editable": true,
            "file": "requires-setuptools28"
        },
        "requires-setuptools29": {
            "editable": true,
            "file": "requires-setuptools29"
        },
        "requires-setuptools3": {
            "editable": true,
            "file": "requires-setuptools3"
        },
        "requires-setuptools30": {
            "editable": true,
            "file": "requires-setuptools30"
        },
        "requires-setuptools31": {
            "editable": true,
            "file": "requires-setuptools31"
        },
        "requires-setuptools32": {
            "editable": true,
            "file": "requires-setuptools32"
        },
        "requires-setuptools33": {
            "editable": true,
            "file": "requires-setuptools33"
        },
        "requires-setuptools34": {
            "editable": true,
            "file": "requires-setuptools34"
        },
        "requires-setuptools35": {
            "editable": true,
            "file": "requires-setuptools35"
        },
        "requires-setuptools36": {
            "editable": true,
            "file": "requires-setuptools36"
        },
        "requires-setuptools37": {
            "editable": true,
            "file": "requires-setuptools37"
        },
        "requires-setuptools38": {
            "editable": true,
            "file": "requires-setuptools38"
        },
        "requires-setuptools39": {
            "editable": true,
            "file": "requires-setuptools39"
        },
        "requires-setuptools4": {
            "editable": true,
            "file": "requires-setuptools4"
        },
        "requires-setuptools40": {
            "editable": true,
            "file": "requires-setuptools40"
        },
        "requires-setuptools41": {
            "editable": true,
            "file": "requires-setuptools41"
        },
        "requires-setuptools42": {
            "editable": true,
            "file": "requires-setuptools42"
        },
        "requires-setuptools43": {
            "editable": true,
            "file": "requires-setuptools43"
        },
        "requires-setuptools44": {
            "editable": true,
            "file": "requires-setuptools44"
        },
        "requires-setuptools45": {
            "editable": true,
            "file": "requires-setuptools45"
        },
        "requires-setuptools46": {
            "editable": true,
            "file": "requires-setuptools46"
        },
        "requires-setuptools47": {
            "editable": true,
            "file": "requires-setuptools47"
        },
        "requires-setuptools48": {
            "editable": true,
            "file": "requires-setuptools48"
        },
        "requires-setuptools49": {
            "editable": true,
            "file": "requires-setuptools49"
        },
        "requires-setuptools5": {
            "editable": true,
            "file": "requires-setuptools5"
        },
        "requires-setuptools50": {
            "editable": true,
            "file": "requires-setuptools50"
        },
        "requires-setuptools6": {
            "editable": true,
            "file": "requires-setuptools6"
        },
        "requires-setuptools7": {
            "editable": true,
            "file": "requires-setuptools7"
        },
        "requires-setuptools8": {
            "editable": true,
            "file": "requires-setuptools8"
        },
        "requires-setuptools9": {
            "editable": true,
            "file": "requires-setuptools9"
        },
        "setuptools": {
            "hashes": [
                "sha256:00478ca80aeebeecb2f288d3206b0de568df5cd2b8fada1209843cc9a8d88a48",
                "sha256:af3d5949030c3f493f550876b2fd1dd5ec66689c4ee5d5344f009746f71fd5a8"
            ],
            "markers": "python_version >= '3.8'",
            "version": "==68.2.0"
        }
    },
    "develop": {}
}
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv sync
Installing dependencies from Pipfile.lock (edc405)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!

Worth noting too that I had to modify install.sh by moving it up a directory and commenting out the cd line, because it was getting into a circular import otherwise.

I think the difference is --skip-lock without the Pipfile specifier for setuptools, doesn't actually know that setuptools is required yet so it enters the install phase directly into the editable install and without build isolation each project is concurrently installing/removing setuptools as needed which results in the parallel build failures.   However in your example, operating off the lock file, the lock file picks up the fact setuptools is required without adding it to the Pipfile, and because its in the lock, that gets installed as a named requirement first and is available to all the editable installs.

I just figured something out  -- if you want to use --skip-lock try adding to your script: export PIP_CHECK_BUILD_DEPENDENCIES=1; which "Check the build dependencies when PEP517 is used."  and remove the lock/sync steps as the sync doesn't appear to work when skip lock env var is set.   Alternatively, without skip-lock also works (important to not set the same env var that works with skip-lock)
Using skip-lock
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ cat install.sh
#!/bin/bash -eu
# Flip PIP_NO_BUILD_ISOLATION to 1 fix the installation with pipenv 2023.9.7
export PIP_NO_BUILD_ISOLATION=0;
export PIP_CHECK_BUILD_DEPENDENCIES=1;
export PIPENV_SKIP_LOCK=true;
export PIPENV_VENV_IN_PROJECT=true;
#cd "$(cd "$(dirname "${0}")"; pwd)/.."
#git clean -dfx
pipenv --python "$(command -v python)"
declare -a pipenv_install_args=()
for i in $(seq 1 50); do
  package_name=requires-setuptools$((i))
  cp -r ./requires-setuptools "./${package_name}"
  sed -i "s/requires-setuptools/${package_name}/g" \
      "./${package_name}/setup.py"
  pipenv_install_args+=('-e' "./${package_name}")
done
set -x
export PIP_LOG_FILE=/dev/stdout
pipenv install "${pipenv_install_args[@]}"
#pipenv lock
#pipenv sync

matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ pipenv --rm
No virtualenv has been created for this project yet!
Aborted!
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ vim install.sh
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ ./install.sh
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv_editable_install_repro/Pipfile
Using /usr/bin/python (3.10.12) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 188ms
  creator CPython3Posix(dest=/home/matteius/pipenv_editable_install_repro/.venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
    added seed packages: pip==23.2.1, setuptools==68.0.0, wheel==0.41.2
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/pipenv_editable_install_repro/.venv
+ export PIP_LOG_FILE=/dev/stdout
+ PIP_LOG_FILE=/dev/stdout
+ pipenv install -e ./requires-setuptools1 -e ./requires-setuptools2 -e ./requires-setuptools3 -e ./requires-setuptools4 -e ./requires-setuptools5 -e ./requires-setuptools6 -e ./requires-setuptools7 -e ./requires-setuptools8 -e ./requires-setuptools9 -e ./requires-setuptools10 -e ./requires-setuptools11 -e ./requires-setuptools12 -e ./requires-setuptools13 -e ./requires-setuptools14 -e ./requires-setuptools15 -e ./requires-setuptools16 -e ./requires-setuptools17 -e ./requires-setuptools18 -e ./requires-setuptools19 -e ./requires-setuptools20 -e ./requires-setuptools21 -e ./requires-setuptools22 -e ./requires-setuptools23 -e ./requires-setuptools24 -e ./requires-setuptools25 -e ./requires-setuptools26 -e ./requires-setuptools27 -e ./requires-setuptools28 -e ./requires-setuptools29 -e ./requires-setuptools30 -e ./requires-setuptools31 -e ./requires-setuptools32 -e ./requires-setuptools33 -e ./requires-setuptools34 -e ./requires-setuptools35 -e ./requires-setuptools36 -e ./requires-setuptools37 -e ./requires-setuptools38 -e ./requires-setuptools39 -e ./requires-setuptools40 -e ./requires-setuptools41 -e ./requires-setuptools42 -e ./requires-setuptools43 -e ./requires-setuptools44 -e ./requires-setuptools45 -e ./requires-setuptools46 -e ./requires-setuptools47 -e ./requires-setuptools48 -e ./requires-setuptools49 -e ./requires-setuptools50
The flag --skip-lock has been reintroduced (but is not recommended).  Without the lock resolver it is difficult to manage multiple package indexes, and hash checking is not provided.  However it can help
manage installs with current deficiencies in locking across platforms.
Installing -e ./requires-setuptools1...
Resolving -e ./requires-setuptools1...
✔ Installation Succeeded
Installing -e ./requires-setuptools2...
Resolving -e ./requires-setuptools2...
✔ Installation Succeeded
Installing -e ./requires-setuptools3...
Resolving -e ./requires-setuptools3...
✔ Installation Succeeded
Installing -e ./requires-setuptools4...
Resolving -e ./requires-setuptools4...
✔ Installation Succeeded
Installing -e ./requires-setuptools5...
Resolving -e ./requires-setuptools5...
✔ Installation Succeeded
Installing -e ./requires-setuptools6...
Resolving -e ./requires-setuptools6...
✔ Installation Succeeded
Installing -e ./requires-setuptools7...
Resolving -e ./requires-setuptools7...
✔ Installation Succeeded
Installing -e ./requires-setuptools8...
Resolving -e ./requires-setuptools8...
✔ Installation Succeeded
Installing -e ./requires-setuptools9...
Resolving -e ./requires-setuptools9...
✔ Installation Succeeded
Installing -e ./requires-setuptools10...
Resolving -e ./requires-setuptools10...
✔ Installation Succeeded
Installing -e ./requires-setuptools11...
Resolving -e ./requires-setuptools11...
✔ Installation Succeeded
Installing -e ./requires-setuptools12...
Resolving -e ./requires-setuptools12...
✔ Installation Succeeded
Installing -e ./requires-setuptools13...
Resolving -e ./requires-setuptools13...
✔ Installation Succeeded
Installing -e ./requires-setuptools14...
Resolving -e ./requires-setuptools14...
✔ Installation Succeeded
Installing -e ./requires-setuptools15...
Resolving -e ./requires-setuptools15...
✔ Installation Succeeded
Installing -e ./requires-setuptools16...
Resolving -e ./requires-setuptools16...
✔ Installation Succeeded
Installing -e ./requires-setuptools17...
Resolving -e ./requires-setuptools17...
✔ Installation Succeeded
Installing -e ./requires-setuptools18...
Resolving -e ./requires-setuptools18...
✔ Installation Succeeded
Installing -e ./requires-setuptools19...
Resolving -e ./requires-setuptools19...
✔ Installation Succeeded
Installing -e ./requires-setuptools20...
Resolving -e ./requires-setuptools20...
✔ Installation Succeeded
Installing -e ./requires-setuptools21...
Resolving -e ./requires-setuptools21...
✔ Installation Succeeded
Installing -e ./requires-setuptools22...
Resolving -e ./requires-setuptools22...
✔ Installation Succeeded
Installing -e ./requires-setuptools23...
Resolving -e ./requires-setuptools23...
✔ Installation Succeeded
Installing -e ./requires-setuptools24...
Resolving -e ./requires-setuptools24...
✔ Installation Succeeded
Installing -e ./requires-setuptools25...
Resolving -e ./requires-setuptools25...
✔ Installation Succeeded
Installing -e ./requires-setuptools26...
Resolving -e ./requires-setuptools26...
✔ Installation Succeeded
Installing -e ./requires-setuptools27...
Resolving -e ./requires-setuptools27...
✔ Installation Succeeded
Installing -e ./requires-setuptools28...
Resolving -e ./requires-setuptools28...
✔ Installation Succeeded
Installing -e ./requires-setuptools29...
Resolving -e ./requires-setuptools29...
✔ Installation Succeeded
Installing -e ./requires-setuptools30...
Resolving -e ./requires-setuptools30...
✔ Installation Succeeded
Installing -e ./requires-setuptools31...
Resolving -e ./requires-setuptools31...
✔ Installation Succeeded
Installing -e ./requires-setuptools32...
Resolving -e ./requires-setuptools32...
✔ Installation Succeeded
Installing -e ./requires-setuptools33...
Resolving -e ./requires-setuptools33...
✔ Installation Succeeded
Installing -e ./requires-setuptools34...
Resolving -e ./requires-setuptools34...
✔ Installation Succeeded
Installing -e ./requires-setuptools35...
Resolving -e ./requires-setuptools35...
✔ Installation Succeeded
Installing -e ./requires-setuptools36...
Resolving -e ./requires-setuptools36...
✔ Installation Succeeded
Installing -e ./requires-setuptools37...
Resolving -e ./requires-setuptools37...
✔ Installation Succeeded
Installing -e ./requires-setuptools38...
Resolving -e ./requires-setuptools38...
✔ Installation Succeeded
Installing -e ./requires-setuptools39...
Resolving -e ./requires-setuptools39...
✔ Installation Succeeded
Installing -e ./requires-setuptools40...
Resolving -e ./requires-setuptools40...
✔ Installation Succeeded
Installing -e ./requires-setuptools41...
Resolving -e ./requires-setuptools41...
✔ Installation Succeeded
Installing -e ./requires-setuptools42...
Resolving -e ./requires-setuptools42...
✔ Installation Succeeded
Installing -e ./requires-setuptools43...
Resolving -e ./requires-setuptools43...
✔ Installation Succeeded
Installing -e ./requires-setuptools44...
Resolving -e ./requires-setuptools44...
✔ Installation Succeeded
Installing -e ./requires-setuptools45...
Resolving -e ./requires-setuptools45...
✔ Installation Succeeded
Installing -e ./requires-setuptools46...
Resolving -e ./requires-setuptools46...
✔ Installation Succeeded
Installing -e ./requires-setuptools47...
Resolving -e ./requires-setuptools47...
✔ Installation Succeeded
Installing -e ./requires-setuptools48...
Resolving -e ./requires-setuptools48...
✔ Installation Succeeded
Installing -e ./requires-setuptools49...
Resolving -e ./requires-setuptools49...
✔ Installation Succeeded
Installing -e ./requires-setuptools50...
Resolving -e ./requires-setuptools50...
✔ Installation Succeeded
Installing dependencies from Pipfile...
To activate this project's virtualenv, run pipenv shell.

#git clean -dfx
pipenv --python "$(command -v python)"
declare -a pipenv_install_args=()
for i in $(seq 1 50); do
  package_name=requires-setuptools$((i))
  cp -r ./requires-setuptools "./${package_name}"
  sed -i "s/requires-setuptools/${package_name}/g" \
      "./${package_name}/setup.py"
  pipenv_install_args+=('-e' "./${package_name}")
done
set -x
export PIP_LOG_FILE=/dev/stdout
pipenv install "${pipenv_install_args[@]}"
pipenv lock
pipenv sync
matteius@matteius-VirtualBox:~/pipenv_editable_install_repro$ ./install.sh
Creating a virtualenv for this project...
Pipfile: /home/matteius/pipenv_editable_install_repro/Pipfile
Using /usr/bin/python (3.10.12) to create virtualenv...
⠹ Creating virtual environment...created virtual environment CPython3.10.12.final.0-64 in 223ms
  creator CPython3Posix(dest=/home/matteius/pipenv_editable_install_repro/.venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/matteius/.local/share/virtualenv)
    added seed packages: pip==23.2.1, setuptools==68.0.0, wheel==0.41.2
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

✔ Successfully created virtual environment!
Virtualenv location: /home/matteius/pipenv_editable_install_repro/.venv
Creating a Pipfile for this project...
+ export PIP_LOG_FILE=/dev/stdout
+ PIP_LOG_FILE=/dev/stdout
+ pipenv install -e ./requires-setuptools1 -e ./requires-setuptools2 -e ./requires-setuptools3 -e ./requires-setuptools4 -e ./requires-setuptools5 -e ./requires-setuptools6 -e ./requires-setuptools7 -e ./requires-setuptools8 -e ./requires-setuptools9 -e ./requires-setuptools10 -e ./requires-setuptools11 -e ./requires-setuptools12 -e ./requires-setuptools13 -e ./requires-setuptools14 -e ./requires-setuptools15 -e ./requires-setuptools16 -e ./requires-setuptools17 -e ./requires-setuptools18 -e ./requires-setuptools19 -e ./requires-setuptools20 -e ./requires-setuptools21 -e ./requires-setuptools22 -e ./requires-setuptools23 -e ./requires-setuptools24 -e ./requires-setuptools25 -e ./requires-setuptools26 -e ./requires-setuptools27 -e ./requires-setuptools28 -e ./requires-setuptools29 -e ./requires-setuptools30 -e ./requires-setuptools31 -e ./requires-setuptools32 -e ./requires-setuptools33 -e ./requires-setuptools34 -e ./requires-setuptools35 -e ./requires-setuptools36 -e ./requires-setuptools37 -e ./requires-setuptools38 -e ./requires-setuptools39 -e ./requires-setuptools40 -e ./requires-setuptools41 -e ./requires-setuptools42 -e ./requires-setuptools43 -e ./requires-setuptools44 -e ./requires-setuptools45 -e ./requires-setuptools46 -e ./requires-setuptools47 -e ./requires-setuptools48 -e ./requires-setuptools49 -e ./requires-setuptools50
Installing -e ./requires-setuptools1...
Resolving -e ./requires-setuptools1...
Added requires-setuptools11 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools2...
Resolving -e ./requires-setuptools2...
Added requires-setuptools22 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools3...
Resolving -e ./requires-setuptools3...
Added requires-setuptools33 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools4...
Resolving -e ./requires-setuptools4...
Added requires-setuptools44 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools5...
Resolving -e ./requires-setuptools5...
Added requires-setuptools55 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools6...
Resolving -e ./requires-setuptools6...
Added requires-setuptools66 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools7...
Resolving -e ./requires-setuptools7...
Added requires-setuptools77 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools8...
Resolving -e ./requires-setuptools8...
Added requires-setuptools88 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools9...
Resolving -e ./requires-setuptools9...
Added requires-setuptools99 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools10...
Resolving -e ./requires-setuptools10...
Added requires-setuptools1010 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools11...
Resolving -e ./requires-setuptools11...
Added requires-setuptools1111 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools12...
Resolving -e ./requires-setuptools12...
Added requires-setuptools1212 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools13...
Resolving -e ./requires-setuptools13...
Added requires-setuptools1313 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools14...
Resolving -e ./requires-setuptools14...
Added requires-setuptools1414 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools15...
Resolving -e ./requires-setuptools15...
Added requires-setuptools1515 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools16...
Resolving -e ./requires-setuptools16...
Added requires-setuptools1616 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools17...
Resolving -e ./requires-setuptools17...
Added requires-setuptools1717 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools18...
Resolving -e ./requires-setuptools18...
Added requires-setuptools1818 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools19...
Resolving -e ./requires-setuptools19...
Added requires-setuptools1919 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools20...
Resolving -e ./requires-setuptools20...
Added requires-setuptools2020 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools21...
Resolving -e ./requires-setuptools21...
Added requires-setuptools2121 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools22...
Resolving -e ./requires-setuptools22...
Added requires-setuptools2222 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools23...
Resolving -e ./requires-setuptools23...
Added requires-setuptools2323 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools24...
Resolving -e ./requires-setuptools24...
Added requires-setuptools2424 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools25...
Resolving -e ./requires-setuptools25...
Added requires-setuptools2525 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools26...
Resolving -e ./requires-setuptools26...
Added requires-setuptools2626 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools27...
Resolving -e ./requires-setuptools27...
Added requires-setuptools2727 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools28...
Resolving -e ./requires-setuptools28...
Added requires-setuptools2828 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools29...
Resolving -e ./requires-setuptools29...
Added requires-setuptools2929 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools30...
Resolving -e ./requires-setuptools30...
Added requires-setuptools3030 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools31...
Resolving -e ./requires-setuptools31...
Added requires-setuptools3131 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools32...
Resolving -e ./requires-setuptools32...
Added requires-setuptools3232 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools33...
Resolving -e ./requires-setuptools33...
Added requires-setuptools3333 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools34...
Resolving -e ./requires-setuptools34...
Added requires-setuptools3434 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools35...
Resolving -e ./requires-setuptools35...
Added requires-setuptools3535 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools36...
Resolving -e ./requires-setuptools36...
Added requires-setuptools3636 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools37...
Resolving -e ./requires-setuptools37...
Added requires-setuptools3737 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools38...
Resolving -e ./requires-setuptools38...
Added requires-setuptools3838 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools39...
Resolving -e ./requires-setuptools39...
Added requires-setuptools3939 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools40...
Resolving -e ./requires-setuptools40...
Added requires-setuptools4040 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools41...
Resolving -e ./requires-setuptools41...
Added requires-setuptools4141 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools42...
Resolving -e ./requires-setuptools42...
Added requires-setuptools4242 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools43...
Resolving -e ./requires-setuptools43...
Added requires-setuptools4343 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools44...
Resolving -e ./requires-setuptools44...
Added requires-setuptools4444 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools45...
Resolving -e ./requires-setuptools45...
Added requires-setuptools4545 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools46...
Resolving -e ./requires-setuptools46...
Added requires-setuptools4646 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools47...
Resolving -e ./requires-setuptools47...
Added requires-setuptools4747 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools48...
Resolving -e ./requires-setuptools48...
Added requires-setuptools4848 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools49...
Resolving -e ./requires-setuptools49...
Added requires-setuptools4949 to Pipfile's [packages] ...
✔ Installation Succeeded
Installing -e ./requires-setuptools50...
Resolving -e ./requires-setuptools50...
Added requires-setuptools5050 to Pipfile's [packages] ...
✔ Installation Succeeded
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (9db8de7beceaef2b697de3312a725a4ad51317c04e348af9193707fe35a6d56b)!
Installing dependencies from Pipfile.lock (a6d56b)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
+ pipenv lock
Locking [packages] dependencies...
Building requirements...
Resolving dependencies...
✔ Success!
Locking [dev-packages] dependencies...
Updated Pipfile.lock (9db8de7beceaef2b697de3312a725a4ad51317c04e348af9193707fe35a6d56b)!
+ pipenv sync
Installing dependencies from Pipfile.lock (a6d56b)...
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
All dependencies are now up-to-date!

Possibly related:  https://github.com/pypa/pip/issues/10739

Sorry about the delay responding to this, been quite a busy week. I'll try to find some time to try out export PIP_CHECK_BUILD_DEPENDENCIES=1 thanks for taking a look.


Switch to tox

Looks like an improvement.  A switch tox can be in a separate issue.
Originally posted by @prjemian in https://github.com/bluesky/hklpy/pull/276#discussion_r1364970263

In ophyd, tox is used in the documentation workflow:
      - name: Build Docs
        run: tox -e docs

and a linting step in the testing workflow:
      - name: Lint
        run: pip install --user .[dev] && tox -e pre-commit,mypy

note: Locally, I check workflows with nektos/act.


Update readme.md with unstable mentions

Added mentions of the unstable branch to the readme, so that people know they can head over there to see the work-in-progress documentation editing.

Squashing to avoid pulling in the revert history I had to make after bungling my fork's development order


Extend List of GitHub Enterprise Users w/ Usage Stats

Add the following values of the GitHub Enterprise user accounts

Amount of commits
Amount of PRs created
Amount of issues created
Amount of comments on issues

query {
  enterprise(slug:"prodyna") {
    slug
    name
    ownerInfo {
      samlIdentityProvider {
        externalIdentities(first:10) {
          pageInfo {
            hasNextPage
            startCursor
          }
          edges {
            node {
              user {
                login
                name
                organizations(first:99) {
                  nodes {
                    name
                  }
                }
                contributionsCollection {
                  contributionCalendar {
                    totalContributions
                  }
                }
              }
              samlIdentity {
                nameId
              }
            }
          }
        }
      }
    }
  }
}

First version only contains total Contributions, can be extended later.

I assume that total contributions not only includes commits.
Sounds good enough then.

Yes, but obviously not only limited to the current enterprise or organisation. The current result is visible here:
https://github.com/PRODYNA/github-housekeeping/wiki/Enterprise-users
But currently it definitely helps us to find users doing nothing in GitHub.


New package: Bioinformatics v0.1.1

Registering package: Bioinformatics
Repository: https://github.com/mrtkp9993/Bioinformatics.jl
Created by: @mrtkp9993
Version: v0.1.1
Commit: f0364541c8779d1fd4f1ad4a08a44b640eb6e387
Reviewed by: @mrtkp9993
Reference: https://github.com/mrtkp9993/Bioinformatics.jl/commit/f0364541c8779d1fd4f1ad4a08a44b640eb6e387#commitcomment-34672476

Please wait until the initial package registration PR has been merged.


Issue with "/" key

I'm using MacOS 10.14, tested on Firefox and Chrome, both have this issue. When I try to type "/" or "?" on Froala editor, it'll automatically update the typing focus to the Nova search bar (at the top bar).

Thanks for reporting!
Fixed in new release.


Fixing incorrect JS doc

I signed it!
On Wed, Jul 22, 2015 at 1:54 PM, googlebot<EMAIL_ADDRESS>wrote:

Thanks for your pull request. It looks like this may be your first
contribution to a Google open source project, in which case you'll need to
sign a Contributor License Agreement (CLA).
[image: :memo:] Please visit https://cla.developers.google.com/
https://cla.developers.google.com/ to sign.
Once you've signed, please reply here (e.g. I signed it!) and we'll
verify. Thanks.

If you've already signed a CLA, it's possible we don't have your
GitHub username or you're using a different email address. Check your
existing CLA data https://cla.developers.google.com/clas and verify
that your email is set on your git commits
https://help.github.com/articles/setting-your-email-in-git/.
If you signed the CLA as a corporation, please let us know the
company's name.

—
Reply to this email directly or view it on GitHub
https://github.com/google/material-design-lite/pull/1161#issuecomment-123557084
.

lgtm

lgtm2


Build Failing for 2.35.2 release

Required Info

Camera Model
D400

Firmware Version
5.12.3

Operating System & Version
Ubuntu 16.04

Kernel Version (Linux Only)
4.15.0-101-generic

Platform
PC

SDK Version
2.35.2

Language
C++

Segment
Robot

Issue Description
I am trying to compile librealsens SDK with the following compilation flags. The compilation breaks.
cmake ../ -DBUILD_EXAMPLES=true -DENFORCE_METADATA=false -DBUILD_PYTHON_BINDINGS=true -DFORCE_RSUSB_BACKEND=OFF -DBUILD_WITH_CUDA=true -DIMPORT_DEPTH_CAM_FW=false -DBUILD_WITH_TM2=false -DCMAKE_BUILD_TYPE=Release
In file included from /home/dummy/librealsense/src/proc/cuda/cuda-pointcloud.h:5:0,                  from /home/dummy/librealsense/src/proc/cuda/cuda-pointcloud.cpp:3: /home/dummy/librealsense/src/proc/cuda/../pointcloud.h:11:40: error: expected initializer before ‘:’ token      class LRS_EXTENSION_API pointcloud : public stream_filter_processing_block                                         ^ In file included from /home/dummy/librealsense/src/proc/cuda/../../cuda/cuda-pointcloud.cuh:15:0,                  from /home/dummy/librealsense/src/proc/cuda/cuda-pointcloud.cpp:6: /usr/local/cuda/include/cuda_runtime.h:56:28: error: expected ‘}’ before end of line /usr/local/cuda/include/cuda_runtime.h:56:28: error: expected declaration before end of line CMakeFiles/realsense2.dir/build.make:517: recipe for target 'CMakeFiles/realsense2.dir/src/proc/cuda/cuda-pointcloud.cpp.o' failed make[2]: *** [CMakeFiles/realsense2.dir/src/proc/cuda/cuda-pointcloud.cpp.o] Error 1 make[2]: *** Waiting for unfinished jobs.... In file included from /home/dummy/librealsense/src/libusb/endpoint-libusb.h:8:0,                  from /home/dummy/librealsense/src/libusb/interface-libusb.h:6,                  from /home/dummy/librealsense/src/libusb/interface-libusb.cpp:4:

@MartyG-RealSense Did anything changed from 2.34 to 2.35. Any kernel or compiler changes do i have to make? I am able to compile 2.34 and earlier without any problem.

2.35.2 mostly introduces official L515 lidar depth camera support.  The major addition for other cameras is improvements to how multiple cameras are handled.
If you think there may be a kernel conflict, you could install with the backend = true flag if you have an internet connection, as it is not dependent on Linux versions or kernel versions and does not require patching.
To do so, put -DFORCE_RSUSB_BACKEND=true at the front of your CMake command in the librealsense build folder, like the example below:
cmake ../ -DFORCE_RSUSB_BACKEND=true -DCMAKE_BUILD_TYPE=release -DBUILD_EXAMPLES=true -DBUILD_GRAPHICAL_EXAMPLES=true
.

I tried all the above mentioned options. I see the same problem.

There was a report that Librealsense 2.35.2 was failng to build on Jetson if -DBUILD_WITH_CUDA=true was used in the build statement.  Could you try building without the CUDA flag in the build statement please and see if it makes a difference?

Actually the issue is when DBUILD_WITH_CUDA=true is set. Is there any plan to fix it in near future?

Re-reading the case, I noticed that it was not confirmed which computing device you are using in this case.  If it is not a Jetson, or another computer that has an Nvidia GPU, then CUDA would not work because CUDA is specific to Nvidia.
For non-Nvidia GPUs, there is an alternative means in the SDK for offloading processing from the CPU onto the GPU.  It is called "GLSL Processing Block", though this method may be ineffective on low-power devices.
https://github.com/IntelRealSense/librealsense/pull/3654

Received a response from Realsense support on this topic.
Jun 11, 2020, 5:47:09 PM PDT
Hi Pratik,
The error happens when build with CUDA.
Set the -DBUILD_WITH_CUDA=false should allow the build to pass, for now...
I will be looking into this error. Thank you for informing us.

@tispratik   Thanks!

@tispratik hello,
This is indeed a bug in the latest version.
To fix it navigate  to src/proc/pointcloud.h in the source tree and  add
#include "synthetic-stream.h"
next to
#include "../include/librealsense2/hpp/rs_frame.hpp"

It worked. Thanks @ev-mp


Getting 2 rows of data when pasting to one row in Chrome.

Hi There
When you copy a row and paste it into a different row on Chrome, 2 rows are inserted instead of one.

This only seems to happen when Handsontable is running inside Angular2. I think this is somehow related to ZoneJS since this issue seems also be happening in MeteorJS when the ZoneJS Bundle is used there (https://github.com/awsp/handsontable-meteor/issues/17).
You can reproduce it here: https://valor-software.github.io/ng2-handsontable/
Steps to reproduce:

Open example page in Chrome (47.0.2526.111)
Click on a single row
CMD+C (on Mac)
Click on a different row (has to be writable)
CMD+V

Two rows are inserted.
Any idea why ZoneJS might cause this issue on Chrome?
Best regards
Pascal Helfenstein

Hey, not sure if you saw it but I pushed a PR to Zone.js fixing this issue.

hey, that's awesome news!
this module doesn't have a dependency to zone.js
but angular2 has peer dep
did you created and issue angular2 repo about this?

@valorkin I sent a PR to Handsontable which was merged into develop branch.


Go Modules support

Is there a plan to include go modules support?
I wouldn't mind making a pull request, looks like the project would just need to include a go.mod and go.sum file.

Is there a plan to include go modules support?
I wouldn't mind making a pull request, looks like the project would just need to include a go.mod and go.sum file.

I would love this as well, but given this library is on v3.2.0 I think there would need to be changes to adhere to the Semantic versioning rules of modules. I think a new package needs to be created in order to adhere to these rules, so that we're importing "github.com/dgrijalva/jwt-go/v3" instead of "github.com/dgrijalva/jwt-go" as we do today. I could be wrong about this...
From https://github.com/golang/go/wiki/Modules#semantic-import-versioning

As a result of semantic import versioning, code opting in to Go modules must comply with these rules:

Follow semantic versioning (with tags such as v1.2.3).
If the module is version v2 or higher, the major version of the module must be included in both the module path in the go.mod file (e.g., module example.com/my/mod/v2) and the package import path (e.g., import "example.com/my/mod/v2/foo").

@dgrijalva any plans to do this?

Now that the community seems to have landed on go mod, I think it's time to add support. I don't believe we can do so in a backwards compatible way, so this will land in v4.

This is landed on v4 branch

Is there a way to use it v4? I couldn't find a release...

Is there a way to use it v4? I couldn't find a release...

Hi @omerlh - there is a v4 release and it has a go.mod file here. Hope this helps!

Sorry, I'm pretty new to go - when trying to run go get github.com/dgrijalva/jwt-go it resolve to the latest v3 - how can I specific v4? I tried with v4.0.0 and it wasn't able to find a relevant version.

No worries @omerlh - I have to run out for a bit, but check out https://blog.golang.org/using-go-modules and the section "Adding a dependency on a new major version". I haven't actually done this yet with jwt-go myself, but believe if you add an import like
import jwtv4 "github.com/dgrijalva/jwt-go"

and then switch a piece of your code to use jwtv4 and it should automatically go grab the v4 branch...

The v4 branch will undergo a few more changes before it's signed off. See the milestone for the list of remaining tickets.

Thanks I'll try it out!

Is there a plan to include go modules support?
I wouldn't mind making a pull request, looks like the project would just need to include a go.mod and go.sum file.

I would love this as well, but given this library is on v3.2.0 I think there would need to be changes to adhere to the Semantic versioning rules of modules. I think a new package needs to be created in order to adhere to these rules, so that we're importing "github.com/dgrijalva/jwt-go/v3" instead of "github.com/dgrijalva/jwt-go" as we do today. I could be wrong about this...
From https://github.com/golang/go/wiki/Modules#semantic-import-versioning

As a result of semantic import versioning, code opting in to Go modules must comply with these rules:

Follow semantic versioning (with tags such as v1.2.3).
If the module is version v2 or higher, the major version of the module must be included in both the module path in the go.mod file (e.g., module example.com/my/mod/v2) and the package import path (e.g., import "example.com/my/mod/v2/foo").

thank you so much. I spent one day for this issue until I saw you answer! :D


[NT-1145] ManagePledgeViewController GraphQL Backing Feature

📲 What
Feature branch for #1174, #1176.
🤔 Why
Some background context on why the change is needed.
🛠 How
More in-depth discussion of the change or implementation.
👀 See
Trello, screenshots, external resources?

Before 🐛
After 🦋

♿ Accessibility

[ ] Tap targets use minimum of 44x44 pts dimensions
[ ] Works with VoiceOver
[ ] Supports Dynamic Type

🏎 Performance

[ ] Optimized Blended Layers (screenshots)

✅ Acceptance criteria

[ ] Steps to test this feature
[ ] Environment to test on
[ ] Issues to look out for

⏰ TODO

          1 Warning

:warning:
Big PR

  Generated by :no_entry_sign: Danger


Feature: Scorecard badges

This issue tracks the work being done as part of enabling Scorecard badges through Scorecard Action.
@rohankh532 fyi.

@laurentsimon @naveensrinivasan @justaugustus - work on Golang action is now feature complete. So I'm proposing that we:

Lockdown any changes/features to Bash code.
Make a pre-release of the Golang Action code and ask some maintainers to become early adopters and provide feedback. Can take help from OSSF repos (Sigstore, AllStar etc.) here.
Do a release once we have confidence things are going smoothly.

There are some final touches still pending, but it shouldn't affect functionality and will mostly not be changes to scorecard-action code (i.e these are changes in Scorecard API and e2e tests).
Thoughts/feedback?

@laurentsimon @naveensrinivasan @justaugustus - work on Golang action is now feature complete. So I'm proposing that we:

Lockdown any changes/features to Bash code.
Make a pre-release of the Golang Action code and ask some maintainers to become early adopters and provide feedback. Can take help from OSSF repos (Sigstore, AllStar etc.) here.
Do a release once we have confidence things are going smoothly.

There are some final touches still pending, but it shouldn't affect functionality and will mostly not be changes to scorecard-action code (i.e these are changes in Scorecard API and e2e tests).
Thoughts/feedback?

👍  Sounds like a plan! Thanks for doing this!

SGTM too!

This is now feature complete. Can track the rollout separately.


Path to pretrained model

Which model shall i include in path when I want to test results for both static and dynamic objects in single frame.

The models for static and dynamic layouts are separate so you can't use both at once for KITTI dataset. You'll need to run them separately. We'll provide the combined model for running it on Argoverse shortly.


WinAppDriver is not creating a session for WindowsForms wizard which is getting launched by Setup.exe.

I am automating a scenario in which I need to automate the installation wizard of a software. While inspecting it displays the details of the installation wizard.

I tried some of the approaches like below but none of them is working, as a result I am unable to click on the 'Next >' button on the wizard:
Approach 1:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.SetCapability("app", "Root"); //start the session with the root node
WindowsDriver DesktopSession = new WindowsDriver(new Uri("http://<IP_ADDRESS>:4723"), capabilities);
/*
create the collection of all nodes(windows) with classname = "WindowsForms10.Window.8.app.0.13965fa_r9_ad1" from the inspector.
*/
var setupWindow = DesktopSession.FindElementsByClassName("WindowsForms10.Window.8.app.0.13965fa_r9_ad1");
here setupWindow  gives the count as 0.
Approach 2:
WindowsDriver  desktopSession2 = new WindowsDriver(new Uri(WindowsApplicationDriverUrl), capabilities);
desktopSession2.FindElementByName("Qualitia Setup").FindElementByClassName("Next >").Click();
Here its throwing exception that window not found.
Please suggest a solution for this. Thank you.

Can someone provide a help? Thanks.

Hi @RajneeshK2018,
Can you try using the automation ID and see if that is able to interact with the element?

I tried using AutomationID, but no luck.
capabilities.SetCapability("app", "Root");
var InstallerWindow = DesktopSession.FindElementByAccessibilityId("Welcome")
It throws error "System.InvalidOperationException: 'An element could not be located on the page using the given search parameters.'"
Additional Information:

The "Qualitia Setup" window appears dynamically after double clicking on the Setup.exe
I also tried using White libraries, there also its not able to click on the 'Next' button
When trying the same with HP UFT, it identifies the button as WinObject instead of WinButton.

Hi @RajneeshK2018,
Before you do your query, can you paste the page source here? This will help us identify what the problem can be in selecting the right element.

Hi guys, I have the same issue. When I run a setup.msi, the Drive UI Recorder returns all data from each button of the wizard application, but when I try to click on Next button, the code returns me a error message("org.openqa.selenium.NoSuchElementException: An element could not be located on the page using the given search parameters."). I'm using Java to test a installer UI. Can someone help me? Thank you!

Hi @pereiraguilherme,
Please do create a new issue with the pasted WinAppDriver.exe logs.
Thank you!


Account lookup failures, account and client limits, options reload.

Changed account lookup and validation failures to be more understandable by users.
Changed limits to be -1 for unlimited to match jwt pkg.
The limits changed exposed problems with options holding real objects causing issues with reload tests under race mode.
Longer term this code should be reworked such that options only hold config data, not real structs, etc.
Signed-off-by: Derek Collison<EMAIL_ADDRESS>

I did a rebase from master which pulled in Pires stuff..


add touch event information to readme

It took me a bit to find this information in the repository. Hopefully adding it to the readme can help future adopters.

Thanks for this PR
👍


Update index.d.ts

Sorry, this was my fault again. I actually tested it this time - no errors now 😅

Thanks!


Glorfindel: Blacklist explosive muscle

Glorfindel requests the blacklist of the following keyword(s):

explosive muscle - MS search

explosive muscle has been seen in 12 true positives, 0 false positives, and 0 NAAs.


Space between months are pretty uneven

Description
<vaadin-month-calendar>'s parent has height set to 250px. This does not take consider on how many rows of dates the month actually has. This creates uneven margins between months.

No longer an issue with the latest design/version

Well, the issue is still that some months contain fewer weeks than others, so we always have to reserve the same space for all months. Though, that is just fine at the moment.


Add npm badge

This adds a nice npm badge

👍

@koppor 1.3.0 is out with all your work in it! https://github.com/MoOx/github-release-from-changelog/releases/tag/1.3.0

Great! Thank you!
Am 06.12.2017 10:07 schrieb "Maxime Thirouin"<EMAIL_ADDRESS>
@koppor https://github.com/koppor 1.3.0 is out with all your work in
it! https://github.com/MoOx/github-release-from-changelog/
releases/tag/1.3.0
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/MoOx/github-release-from-changelog/pull/13#issuecomment-349577821,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ABTaflu1RPRNL_zA7m2AKnanolGNRP3sks5s9lk1gaJpZM4Q2BiC
.


String-typed ConstantTerms for strings and constant symbols mistakenly equal

It seems that the symbolic flag for ConstantTerm<String>s isn't taken into account when checking equality.
The following test illustrating this currently fails (see branch bugfix_term_equality):
@Test
public void testStringTermEquality() {
	ConstantTerm<String> stringConstant = ConstantTerm.getInstance("string");
	ConstantTerm<String> constantSymbol = ConstantTerm.getSymbolicInstance("string");
	Assert.assertNotEquals(stringConstant, constantSymbol);
}

The term called stringConstant represents the quoted string "symbol" in ASP code,
while the other term, constantSymbol, refers to the constant symbol symbol in code. These are not the same thing and should therefore not be equal.

Further analysis showed that at least the "internalizing" still works correctly - stringConstant and constantSymbol are distinct instances in the term cache. This is due to the fact that the value of symbolic is taken into account by ConstantTerm#hashCode.
As a preliminary fix, I added the following check to ConstantTerm#equals:
if (this.symbolic != that.symbolic) {
	return false;
}

However, the above fix still leaves one further issue:
The assertion Assert.assertNotEquals(0, stringConstant.compareTo(constantSymbol)); currently fails, meaning both terms are equal with respect to compareTo, which should not be the case

I guess this is a bug in ConstantTerm.compareTo where in line 120 we have
if (other.object.getClass() == this.object.getClass()) {
  return this.object.compareTo((T) other.object);
}

I guess what is missing there is && other.symbolic == this.symbolic in the if.


Notebook 1 normalization checks

If you haven't already, please read through our contributing guidelines before opening your PR
What is the purpose of this PR?
Closes #235.
Add validation checks to the create_tuning_curve process. This included checking for a minimum of 4 fovs in the sweep, making sure there is a bin file in each fov folder, and checking that the channel counts for each fov are within the desired range. In addition, added axis labels to the generated tuning curve plot.
How did you implement your changes

axis labels were added to plot generation but not example curve image
raise an error if not enough fovs or missing bin file
added a count_range arg that is used to determine which fovs to exclude, currently excludes values <=0 and >=300,000.
created two additional test cases

fov with low count that causes the total number to be less than 4 -> fails
fov with low count but still has sufficient number of fovs -> warning

Remaining issues

[x] adjust the count range and add arg to notebook
[x] discuss more count range implications
[x] output plot with and without extreme values
[x] voltage vs max channel count plot

If the user wants to use the curve with all points, they can set count_range to None and run the cell again.

For the voltage vs channel count plot it will show the maximum count value for each FOV, since those are most useful in determining the count_range upper threshold.

Looks good. How did you settle on the upper value?

Still needs to be adjusted. Here's a few sweeps from Drago.
This first one is the what we've been using and looks best with no values removed.

Here's another one that looks better with some of the lower fov counts removed.

However, Andrew's curve worked best with the 1.2m cutoff.
I think it's good that we provide the count plot and encourage the user to edit + rerun rather than just using our suggestion.

Yeah agreed. Just need to make sure it's very clear from the instructions what they need to do, and how they should be deciding what to remove


Batch route calculation: Input file incomplete if errors

When running a batch routing task, a file with x lines is imported, but if trRouting fails after x-y lines, the input file associated with the task is incomplete and stops at the last entry that was executed, and even so the entry is not complete. The input file should be the entire file inputted by the user, no matter the result.

This bug may be due to #477. Fix that one first, then investigate this one


import() expressions are not external module indicators

// @filename: globble.ts
declare module "lol" {
  export let a: any, b: any, c: any;
}

// @filename: a.ts
let x = import("lol");

// @filename: b.ts
let x = 10;

Expected: No errors, a.ts is a module.
Actual: Errors on the type of x, errors on x being a block scoped declaration.

Node 10 is slated allow top-level import() in cjs, soooooo....... it's not?

What about import.meta?

a.ts is not a module. import is specifically added to allow for importing a module from a script.

I would say import.meta is not a marker; i.e. it does not make a script file a module, but it is an error to use import.meta outside a module.

The original idea of unambiguous grammar is to treat as module things that are not parseable as script, so import.meta probably should be considered a "marker" as long as you implement unambiguous grammar.


SOLR-16687: Add a SolrClassLoader to SolrZkClient

https://issues.apache.org/jira/browse/SOLR-16687
Description
A Solr class loader is needed in SolrZKClient to instantiate classes part of modules.
This is part of a bigger PR to add support of AWS Secret Manager to store Zookeeper credentials.
Tests
Local integration tests.
Do we need a unit test here?
Checklist
Please review the following and check all that apply:

[x] I have reviewed the guidelines for How to Contribute and my code conforms to the standards described there to the best of my ability.
[x] I have created a Jira issue and added the issue ID to my pull request title.
[x] I have given Solr maintainers access to contribute to my PR branch. (optional but recommended)
[x] I have developed this patch against the main branch.
[x] I have run ./gradlew check.
[ ] I have added tests for my changes.
[ ] I have added documentation for the Reference Guide

I think the classloader needs to be used in both createZkCredentialsToAddAutomatically and createZkACLProvider as well.

This looks 👍 so far. Given a bit more time for other folks to review and some automated tests, I'd be happy to merge!

Hi @gerlowskija
Added a test case to test SCL based instantiation, will add more tests (SC vs DCL scenarios) as part of the main PR to add support of AWS Secret Manager.
I have also changed the behavior in case of an Exception is raised when instantiating ZkACLProvider or ZkCredentialsInjector, it should fail-fast rather then ignoring it and go with the default ZkACLProvider/ZkCredentialsInjector which sets znodes permissions  to OPEN_ACL_UNSAFE.

I think the classloader needs to be used in both createZkCredentialsToAddAutomatically and createZkACLProvider as well.

Hi @HoustonPutman
I think a solrClassLoader is not needed for ZkACLProvider and ZkCredentialsProvider  except if we add in the future custom implementations part of another contrib/module, but it doesn't hurt to add it now. I have added it to both methods.

My concerns have been addressed!


Seeing "JdbcTemplateLockProvider cannot be resolved to a type" for version 5.12.0

Using version 5.12.0, there is no "provider" package that allows me to import JdbcTemplateLockProvider. The documentation says to import like this: import net.javacrumbs.shedlock.provider.jdbctemplate.JdbcTemplateLockProvider;, but when I try this, it says it can't be resolved. All I've done so far is add the package to my project and try to set up a new bean for it.

Have you included the dependency? The provider is here https://github.com/lukas-krecan/ShedLock/blob/master/providers%2Fjdbc%2Fshedlock-provider-jdbc-template%2Fsrc%2Fmain%2Fjava%2Fnet%2Fjavacrumbs%2Fshedlock%2Fprovider%2Fjdbctemplate%2FJdbcTemplateLockProvider.java

Yes, I've included:
<dependency>
    <groupId>net.javacrumbs.shedlock</groupId>
    <artifactId>shedlock-spring</artifactId>
    <version>5.12.0</version>
</dependency>

Ok, in that case, please read the documentation once more.

@lukas-krecan I don't think its an issue with readings the directions as I've done that. Is there anything I could have missed that would add that package here? It just seems to be missing in version 5.12.0.

https://github.com/lukas-krecan/ShedLock?tab=readme-ov-file#jdbctemplate


How do you add validations rules?

How do you go about adding custom validations if using as a component ?

You should wrap this component with your own component that has it's own data. then you could validate the data before submitting the form and show the error.
Here is an example:
<template>

        <VCreditCard @change="creditInfoChanged"/>
        <button @click="submit">PAY</button>

</template>

Thanks a lot for the sample, is it possible to add the validation messages inline in the component?

At the moment this is not possible, you can definitely send a PR if you have an idea. I would probably go with named slots for each field or a single slot in the component body. not sure exactly but it could be a nice solution.
Anyway, I'm closing the issue. thanks.


How to break into chunks and upload ?

For example, I have a large image of 10 MB. I change the image from url to base64 strings and divide the strings into couple substring (chunks). My questions is that how this couple chunks (one image) can be uploaded to amazon s3 and auto. combine into original image (as one), shown in bucket.
Thanks for help in advance.

I think what you could use to solve your case is the createWriteStream functionality. Under the hood this uses multipart uploads, so you won't manually have to create the chunks. See this for fs documentation on the functionality, as the interface with this library is the same.


jsx-indent rule with ternary operators on multiple lines and JSX elements

This code
const foo = bar
    ? (

            {'Bar is true!'}

    )
    : (

            {'Bar is false!'}

    );

violates the jsx-indent rule on the lines with the
 opening tags, saying that everything should be brought one level back.
I use a lot this syntax, especially when I have to render one complex component or another according to a boolean variable, and I can't seem to find a workaround to avoid the linting error (apart from not using the ternary operator, which I don't like).

I think what it wants might be more like:
const foo = bar
    ? (

          {'Bar is true!'}

)
    : (

          {'Bar is false!'}

);

Eugh, really? Those round brackets look awful...
Moreover, this is still invalid. This is the syntax my eslint is accepting:
const foo = bar
    ? (

        {'Bar is true!'}

)
    : (

        {'Bar is false!'}

);

This becomes even uglier when I use self-closing tags and the jsx-closing-bracket-location rule:
const foo = bar
    ? (
)
    : (
);

But maybe there's no "right" way to indent those mixes of js and jsx...

Likewise, I often do this:
return somePredicate
  ? <SomeComponent>
      someProp={someValue}
    </SomeComponent>
  : null

but the only thing the linter accepts is this barbarous code:
return somePredicate
  ? <SomeComponent>
    someProp={someValue}
  </SomeComponent>
  : null

Shouldn't the rule key off the opening tag? I don't want to disable the rule because I want to enforce indentation in JSX.

Yeah, this not right. It should be keying off the opening tag, no matter the context:
Should be possible:
return canRender
  ? <Foo>
      className="foo"
    </Foo>
  : null

But both jsx-indent and jsx-indent-props complain about the props indentation and the closing tag indentation. Basically I think it's just checking the line the opening tag is on, and basing the indentation check on the first non-whitespace character rather than the <, as it should.

I'm using syntax mentioned by @neverfox very often and it would be extremely useful if jsx-indent and jsx-indent-props rules worked correctly with it.

I am also using something similar to @neverfox, would love to see support for the following:
Instead of
return colHidden
      ?

      :
        foo
      ;

Should be
    return colHidden
      ?

      :
          foo
        ;

there's also another related issue that also has to do with jsx-closing-bracket-location.
With:
"react/jsx-indent": [1, 2],
"react/jsx-indent-props": [1, 2],
"react/jsx-closing-bracket-location": [1, {selfClosing: "tag-aligned", nonEmpty: "tag-aligned"}],

I think this should be valid (with one prop):
<Layout head={
  <HeadContent/>
}> // error here, eslint does not allow the closing brace to be part of closing tag when opening brace is part of opening tag
  <MainContent/>
</Layout>

but eslint expects:
<Layout
  head={
    <HeadContent/>
  }
>
  <MainContent/>
</Layout>

I use it this way:
isSomething
? <SomeComponent />
: <AnotherComponent
    className={css.component}
    onSomething={props.doSomething}
  />

And it fails w/o:
/* eslint react/jsx-indent-props: 0, react/jsx-closing-bracket-location: 0 */

I have to say I agree with the indenting as described by @goffreder. The ternary operator is indented by one level and the values are either a single line or contained within parenthesis where the content is indented (again) and the closing parenthesis is on the same level as the operator;
isSomething
  ? (
    <MyComponent>
      <WithAChild />
    </MyComponent>
  )
  : <SomethingElse>

To me it just feels the most natural as the operators are indented in a way that's similar to chained methods and the parenthesis indentation is similar to the indentation of curly brackets for control statements. The parenthesis are purely used to indicate scope for multi-lined elements and make it easier to determine where the current part of the operator ends. This is also why I think the brackets should close on the same indentation as the matching question mark or colon, as you can spot the next part of the ternary operator in a glance when reading the code. Obviously, if the element (or statement) is only a single line the parenthesis can be left out.
But that's just my humble opinion :)

Any update on this please?

Hello, +1 for supporting
condition
?

:
if possible :-)

@yannickcr @ljharb Guys please share your thoughts on this issue?

I am happy to help review a PR that improves this rule. It sounds like there are a few styles that folks desire, so it would be good if the rule could enforce each style with this rule, chosen via an option.

This example:
(condition)
  ? <Comp
      foo={x}
      bar={y}
    >
      <ChildrenComponent />
    </Comp>
  : <AnotherComp />

breaks 3 rules: jsx-indent, jsx-indent-props and jsx-closing-bracket-location. @lencioni how would you like to enforce this and potentially other styles across all 3 rules?

@straku I don't think I fully understand what you are criticizing and what you are proposing. Can you give us some examples of each?

It would also be helpful to provide a few examples that only violate one rule each - so we can see each individual modification you'd be interested in.

@lencioni You were saying that you would like to enforce different styles by an option. It certainly would be nice to have that option but I am wondering how would you like to do it when this style of writing ternary expressions breaks more than one rule? The same option for each rule? Some global config?
Sorry if my comment sounded like criticizing, just wanted to know what would be the best way of doing it.

@straku my expectation would be a collection of differing options for each rule, that put together give you the style you like.

Currently --fix doesn't indent ternary operators at all, look at this for example (I made all lines have no indentation at all, then ran eslint --fix on the file, it's a big file and no ternary operator is indented):
        const previousDialog = previousLocation
? (
previousLocation.hash.dialog ||
previousLocation.query.dialog
)
: undefined;
        const currentDialog = (
currentLocation.hash.dialog ||
currentLocation.query.dialog
);

@sassanh If I understand correctly, eslint's built in indent option should handle plain JS indentation. It's undergoing a rewrite which should fix the holes in the current version.
There's a lot of things like ternary operators that the current version will simply leave as is, which is awful when everything around it gets re-indented...

@aij great, looking forward for the new version.

eslint 4 broke this somehow.

@fab1an please file a new issue.

Any success?

4 years passed and nobody yet fixed that?

Any chance it would be implemented?
It would be extremely helpful.
Syntax like this is a significant part of my codebase, and disabling the linting is not a realistic option.

@odragora a PR implementing it would be extremely helpful.

I would like to contribute to working on this issue. @ljharb

Go for it!

@ljharb Upon further research on this topic, I believe that there is a bug within eslint that prevents indentation with ternary operators in jsx. Therefore, I do not believe this issue can be solved under the current version of eslint.

If it's a bug in the indent rule, we should file it in eslint itself - and if they're unwilling to fix it, we should try to work around it in jsx-indent if we can.


Update documentation on virtual environments for python3

I wonder whether the documentation should be updated for the "python3" use-case. The documentation currently advises to install virtualenv, which is integrated (as pyvenv) in python3. That also makes it not necessary to install pip anymore.
The part from If you are on Mac OS X or Linux.. to ..but without the sudo prefix could then be removed (or, more likely, "framed" in a note that says "if you're using python2"). Also the $ virtualenv venv part should be $ pyvenv venv for python3.
If you believe that this should be done, I could work on it and open a PR.

Strong -1 on this.  pyvenv works differently than virtualenv and I do not want to have to consider this.  Using pyenv should only be something for experienced developers, everyone else should be guided through using virtualenv.


Edit IE driver download url in wd.html

Sometimes it opens as https causing error connection

Thanks!