Skip to content

Conversation

@omar-rs
Copy link
Contributor

@omar-rs omar-rs commented Jul 5, 2023

This change is to enable publishing of quarto files or projects to posit.cloud in anticipation of the publishing release in the beginning of August.

Intent

With this change, one can use rsconnect-python to publish quarto files or projects to posit.cloud using:

rsconnect deploy quarto <path_to_quarto_file>
rsconnect deploy quarto <path_to_quarto_project>

similarly to publishing to Posit Connect. The supported engine values are markdown and jupyter.

Resolves #436

Type of Change

  • Bug Fix
  • New Feature
  • Breaking Change

Approach

We have previously added support for publishing quarto outputs to posit.cloud as Connect applications. With the support of quarto publishing in posit.cloud as static, server-rendered output, this change modifies the output creation API call to pass an additional render_by=server parameter and set application_type=static.

Automated Tests

Added/updated tests in the following areas:

  • API calls
  • Bundling for quarto files and projects

Directions for Reviewers

The following deployment of quarto is now supported:

rsconnect deploy quarto \
          --account $YOUR_ACCOUNT \
          --token $YOUR_TOKEN \
          --secret $YOUR_SECRET \
          --server 'https://api.staging.posit.cloud' \
          'some_file.qmd'

where some_file.qmd is a quarto doc with markdown or jupyter engine. Similarly, a quarto project could be supplied instead of a file.

Checklist

  • I have updated CHANGELOG.md to cover notable changes.
  • I have updated all related GitHub issues to reflect their current state.

@github-actions
Copy link

github-actions bot commented Jul 5, 2023

☂️ Python Coverage

current status: ✅

Overall Coverage

Lines Covered Coverage Threshold Status
4244 2721 64% 0% 🟢

New Files

No new covered files...

Modified Files

File Coverage Status
rsconnect/api.py 67% 🟢
rsconnect/bundle.py 79% 🟢
rsconnect/main.py 54% 🟢
TOTAL 67% 🟢

updated for commit: 770c774 by action🐍

Copy link
Collaborator

@aronatkins aronatkins left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you explain why changes were necessary to how we derive some of the paths and the environment?

I'll wait for @mmarchetti to offer feedback as well.

CHANGELOG.md Outdated
## Unreleased

### Added
- Deploys for Posit Cloud now support quarto source files or projects with `markdown` or `jupyter` engines.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quarto, not "quarto".

base_dir = file_or_directory
if not isdir(file_or_directory):
base_dir = basename(file_or_directory)
base_dir = dirname(file_or_directory)
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this, the bundle would be created with files that have incorrect paths in the case where the deploy command is called with a path or file path argument:

rsconnect deploy quarto <path/to/quarto.qmd>

The resulting bundle would try to add files <path/to/quarto.qmd> instead of quarto.qmd.

with tarfile.open(mode="w:gz", fileobj=bundle_file) as bundle:
bundle_add_buffer(bundle, "manifest.json", json.dumps(manifest, indent=2))
if environment:
if environment and environment.source != 'file':
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is extra protection for the bundle_add_buffer function to be called on in-memory requirements.txt file, not an actual file on disk.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Regardless of whether the package requirements were sourced from a file or from pip freeze, the environment object should contain the correct set. We need to guarantee that the bundle and manifest end up with a requirements.txt file in either case, and with this change, the other case will have to be handled in a code path somewhere else.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mmarchetti thanks for the suggestion.

I changed the handling of the package requirements to be independent of how they are sourced. One area that was a bit tricky is that the relevant_files used to include the requirements.txt file, which would cause the bundle to include it twice (once from buffer through environment.contents, and another time from relevant_files). With this change, the requirements.txt is only added from environment.contents.

if environment:
extra_files = list(extra_files or []) + [environment.filename]
extra_files = list(extra_files or [])
if environment.source == 'file':
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the environment filename requirements.txt was generated in memory, adding it to the extra_files would result in a file not found exception later on when the bundle is created.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess this is the other code path. I would suggest always relying on the environment object and using add_buffer rather than splitting the functionality.

base_dir = dirname(file_or_directory)
relevant_files = [file_or_directory] + extra_files
file_name = basename(file_or_directory)
relevant_files = [file_name] + extra_files
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For standalone quarto files deployed by specifying a file path, the manifest should include the base name, not he full path filename.

@omar-rs
Copy link
Contributor Author

omar-rs commented Jul 6, 2023

Could you explain why changes were necessary to how we derive some of the paths and the environment?

I'll wait for @mmarchetti to offer feedback as well.

I added comments to bundle.py that hopefully explain the changes.

@omar-rs omar-rs force-pushed the quarto_posit_cloud branch 2 times, most recently from 35ba66c to af7f714 Compare July 11, 2023 13:50
Copy link
Contributor

@mmarchetti mmarchetti left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The changes look OK. I would like to be sure that we run some QA on this, beyond the automated tests. To include various content types (quarto, notebooks, and app/api) and target servers.

@omar-rs
Copy link
Contributor Author

omar-rs commented Jul 11, 2023

The changes look OK. I would like to be sure that we run some QA on this, beyond the automated tests. To include various content types (quarto, notebooks, and app/api) and target servers.

Sounds good. Do I need to ping someone specific to help with QA? I'm happy to do some more testing myself, but might be better to have new eyes.

Also, I'm hoping we can get this branch released around August 1 (cloud publishing). Is that doable?

@omar-rs omar-rs force-pushed the quarto_posit_cloud branch from af7f714 to bf96a55 Compare July 18, 2023 14:43
@omar-rs omar-rs force-pushed the quarto_posit_cloud branch from bf96a55 to 770c774 Compare July 18, 2023 21:00
@scubastevew
Copy link

scubastevew commented Jul 20, 2023

Tested:

✅ A. deploy static html (client-rendered content) to posit.cloud

create an rmd file: testrmd.Rmd (File > New File > R Markdown document)
knit it to html file testrmd.html
deploy the html to posit.cloud using: rsconnect deploy html testrmd.html --name posit.cloud

❌ B. deploy standalone quarto file with markdown, server-side

create a quarto file with markdown engine: markdown.qmd (File > New File > Quarto document)
deploy it to posit.cloud using: rsconnect deploy quarto markdown.qmd --name posit.cloud

Failed with

Inspecting Quarto project...                     [ERROR]
Error: The following Quarto engine(s) are not supported: knitr

I don't have the option to use the rmarkdown engine on posit.cloud
Screenshot 2023-07-20 at 4 09 05 PM

❌ C. deploy python-based quarto project, server-side

create a new directory called qproject
create a quarto file in qproject with jupyter engine / python kernel: jupyter.qmd (File > New File > Quarto document)
create a _quarto.yml file in qproject with content:
project:
  title: "qproject"
deploy project to posit.cloud using: rsconnect deploy quarto qproject/ --name posit.cloud

This failed with this as the output:

Inspecting Quarto project...                     [OK]
    Warning: Capturing the environment using 'pip freeze'.
             Consider creating a requirements.txt file instead.
Inspecting Python environment...                 [OK]
Validating server...    [OK]
Validating app mode...  [OK]
Making bundle ...       [OK]
Deploying bundle ...
Waiting for task: 5af68eb2-e790-41f1-86bf-e5fbc56258eb
  started - name=deploy-server-static-application-choose-target
  started - name=deploy-server-static-application-build-and-render
[ERROR] 2023-07-20T22:56:41+0000 Build logs:
[2023-07-20T22:55:47.733201Z] Installing your code's dependencies into the rendering environment.
[2023-07-20T22:55:47.733217Z] Using quarto version: 1.4.221
[2023-07-20T22:55:47.733234Z] Using python version: 3.8.17
[2023-07-20T22:55:49.413005Z] Collecting appdirs==1.4.3
[2023-07-20T22:55:49.472645Z]   Downloading appdirs-1.4.3-py2.py3-none-any.whl (12 kB)
[2023-07-20T22:55:49.535663Z] Collecting asttokens==2.2.1
[2023-07-20T22:55:49.550597Z]   Downloading asttokens-2.2.1-py2.py3-none-any.whl (26 kB)
[2023-07-20T22:55:49.614273Z] Collecting attrs==23.1.0
[2023-07-20T22:55:49.627527Z]   Downloading attrs-23.1.0-py3-none-any.whl (61 kB)
[2023-07-20T22:55:49.644990Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 4.1 MB/s eta 0:00:00
[2023-07-20T22:55:49.676962Z] Collecting backcall==0.2.0
[2023-07-20T22:55:49.689785Z]   Downloading backcall-0.2.0-py2.py3-none-any.whl (11 kB)
[2023-07-20T22:55:49.778016Z] Collecting beautifulsoup4==4.12.2
[2023-07-20T22:55:49.778037Z]   Downloading beautifulsoup4-4.12.2-py3-none-any.whl (142 kB)
[2023-07-20T22:55:49.782963Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.0/143.0 kB 11.7 MB/s eta 0:00:00
[2023-07-20T22:55:49.904555Z] Collecting black==22.3.0
[2023-07-20T22:55:49.921565Z]   Downloading black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.5 MB)
[2023-07-20T22:55:49.962179Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.5/1.5 MB 40.0 MB/s eta 0:00:00
[2023-07-20T22:55:50.034389Z] Collecting bleach==6.0.0
[2023-07-20T22:55:50.049743Z]   Downloading bleach-6.0.0-py3-none-any.whl (162 kB)
[2023-07-20T22:55:50.061061Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 162.5/162.5 kB 24.1 MB/s eta 0:00:00
[2023-07-20T22:55:50.122384Z] Collecting certifi==2023.5.7
[2023-07-20T22:55:50.134852Z]   Downloading certifi-2023.5.7-py3-none-any.whl (156 kB)
[2023-07-20T22:55:50.145774Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 157.0/157.0 kB 24.1 MB/s eta 0:00:00
[2023-07-20T22:55:50.565647Z] Collecting cffi==1.15.1
[2023-07-20T22:55:50.579432Z]   Downloading cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (442 kB)
[2023-07-20T22:55:50.594227Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 442.7/442.7 kB 44.1 MB/s eta 0:00:00
[2023-07-20T22:55:50.809583Z] Collecting charset-normalizer==3.2.0
[2023-07-20T22:55:50.823020Z]   Downloading charset_normalizer-3.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (199 kB)
[2023-07-20T22:55:50.834531Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 199.1/199.1 kB 27.2 MB/s eta 0:00:00
[2023-07-20T22:55:50.903672Z] Collecting click==8.1.6
[2023-07-20T22:55:50.938834Z]   Downloading click-8.1.6-py3-none-any.whl (97 kB)
[2023-07-20T22:55:50.949197Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 97.9/97.9 kB 16.6 MB/s eta 0:00:00
[2023-07-20T22:55:50.987976Z] Collecting comm==0.1.3
[2023-07-20T22:55:51.001726Z]   Downloading comm-0.1.3-py3-none-any.whl (6.6 kB)
[2023-07-20T22:55:51.969607Z] Collecting coverage==7.2.7
[2023-07-20T22:55:51.986774Z]   Downloading coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (229 kB)
[2023-07-20T22:55:52.002259Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 229.9/229.9 kB 26.4 MB/s eta 0:00:00
[2023-07-20T22:55:52.683126Z] Collecting cryptography==41.0.2
[2023-07-20T22:55:52.709995Z]   Downloading cryptography-41.0.2-cp37-abi3-manylinux_2_28_x86_64.whl (4.3 MB)
[2023-07-20T22:55:52.789233Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.3/4.3 MB 57.3 MB/s eta 0:00:00
[2023-07-20T22:55:53.182432Z] Collecting debugpy==1.6.7
[2023-07-20T22:55:53.203286Z]   Downloading debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB)
[2023-07-20T22:55:53.264469Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.1/3.1 MB 54.9 MB/s eta 0:00:00
[2023-07-20T22:55:53.322280Z] Collecting decorator==5.1.1
[2023-07-20T22:55:53.334837Z]   Downloading decorator-5.1.1-py3-none-any.whl (9.1 kB)
[2023-07-20T22:55:53.380350Z] Collecting defusedxml==0.7.1
[2023-07-20T22:55:53.395089Z]   Downloading defusedxml-0.7.1-py2.py3-none-any.whl (25 kB)
[2023-07-20T22:55:53.441271Z] Collecting distlib==0.3.7
[2023-07-20T22:55:53.456591Z]   Downloading distlib-0.3.7-py2.py3-none-any.whl (468 kB)
[2023-07-20T22:55:53.471724Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 468.9/468.9 kB 45.1 MB/s eta 0:00:00
[2023-07-20T22:55:53.532861Z] Collecting docutils==0.20.1
[2023-07-20T22:55:53.549270Z]   Downloading docutils-0.20.1-py3-none-any.whl (572 kB)
[2023-07-20T22:55:53.566391Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 572.7/572.7 kB 48.4 MB/s eta 0:00:00
[2023-07-20T22:55:53.614500Z] Collecting exceptiongroup==1.1.2
[2023-07-20T22:55:53.627023Z]   Downloading exceptiongroup-1.1.2-py3-none-any.whl (14 kB)
[2023-07-20T22:55:53.675453Z] Collecting executing==1.2.0
[2023-07-20T22:55:53.688370Z]   Downloading executing-1.2.0-py2.py3-none-any.whl (24 kB)
[2023-07-20T22:55:53.828576Z] Collecting fastjsonschema==2.17.1
[2023-07-20T22:55:53.828597Z]   Downloading fastjsonschema-2.17.1-py3-none-any.whl (23 kB)
[2023-07-20T22:55:53.828616Z] Collecting filelock==3.12.2
[2023-07-20T22:55:53.837800Z]   Downloading filelock-3.12.2-py3-none-any.whl (10 kB)
[2023-07-20T22:55:53.932361Z] Collecting flake8==6.0.0
[2023-07-20T22:55:53.946902Z]   Downloading flake8-6.0.0-py2.py3-none-any.whl (57 kB)
[2023-07-20T22:55:53.955893Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.8/57.8 kB 9.8 MB/s eta 0:00:00
[2023-07-20T22:55:53.990300Z] Collecting funcsigs==1.0.2
[2023-07-20T22:55:54.002966Z]   Downloading funcsigs-1.0.2-py2.py3-none-any.whl (17 kB)
[2023-07-20T22:55:54.056603Z] Collecting GDAL==3.0.4
[2023-07-20T22:55:54.074490Z]   Downloading GDAL-3.0.4.tar.gz (577 kB)
[2023-07-20T22:55:54.091295Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 577.2/577.2 kB 47.5 MB/s eta 0:00:00
[2023-07-20T22:55:54.162037Z]   Preparing metadata (setup.py): started
[2023-07-20T22:55:54.476834Z]   Preparing metadata (setup.py): finished with status 'done'
[2023-07-20T22:55:54.527776Z] Collecting httpretty==1.1.4
[2023-07-20T22:55:54.546849Z]   Downloading httpretty-1.1.4.tar.gz (442 kB)
[2023-07-20T22:55:54.561846Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 442.4/442.4 kB 42.3 MB/s eta 0:00:00
[2023-07-20T22:55:54.634985Z]   Preparing metadata (setup.py): started
[2023-07-20T22:55:54.963960Z]   Preparing metadata (setup.py): finished with status 'done'
[2023-07-20T22:55:55.011919Z] Collecting idna==3.4
[2023-07-20T22:55:55.025258Z]   Downloading idna-3.4-py3-none-any.whl (61 kB)
[2023-07-20T22:55:55.035106Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB 10.3 MB/s eta 0:00:00
[2023-07-20T22:55:55.181039Z] Collecting importlib-metadata==1.5.0
[2023-07-20T22:55:55.199364Z]   Downloading importlib_metadata-1.5.0-py2.py3-none-any.whl (30 kB)
[2023-07-20T22:55:55.302388Z] Collecting importlib-resources==6.0.0
[2023-07-20T22:55:55.314805Z]   Downloading importlib_resources-6.0.0-py3-none-any.whl (31 kB)
[2023-07-20T22:55:55.352165Z] Collecting iniconfig==2.0.0
[2023-07-20T22:55:55.364391Z]   Downloading iniconfig-2.0.0-py3-none-any.whl (5.9 kB)
[2023-07-20T22:55:55.492502Z] Collecting ipykernel==6.24.0
[2023-07-20T22:55:55.513678Z]   Downloading ipykernel-6.24.0-py3-none-any.whl (152 kB)
[2023-07-20T22:55:55.524758Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 152.8/152.8 kB 22.8 MB/s eta 0:00:00
[2023-07-20T22:55:55.678680Z] Collecting ipython==8.12.2
[2023-07-20T22:55:55.702988Z]   Downloading ipython-8.12.2-py3-none-any.whl (797 kB)
[2023-07-20T22:55:55.723482Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 797.8/797.8 kB 52.5 MB/s eta 0:00:00
[2023-07-20T22:55:55.814468Z] Collecting jaraco.classes==3.3.0
[2023-07-20T22:55:55.814488Z]   Downloading jaraco.classes-3.3.0-py3-none-any.whl (5.9 kB)
[2023-07-20T22:55:55.846821Z] Collecting jedi==0.18.2
[2023-07-20T22:55:55.863135Z]   Downloading jedi-0.18.2-py2.py3-none-any.whl (1.6 MB)
[2023-07-20T22:55:55.893183Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.6/1.6 MB 61.2 MB/s eta 0:00:00
[2023-07-20T22:55:55.962529Z] Collecting jeepney==0.8.0
[2023-07-20T22:55:55.975426Z]   Downloading jeepney-0.8.0-py3-none-any.whl (48 kB)
[2023-07-20T22:55:55.983988Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.4/48.4 kB 9.2 MB/s eta 0:00:00
[2023-07-20T22:55:56.041482Z] Collecting Jinja2==3.1.2
[2023-07-20T22:55:56.056226Z]   Downloading Jinja2-3.1.2-py3-none-any.whl (133 kB)
[2023-07-20T22:55:56.067217Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB 21.7 MB/s eta 0:00:00
[2023-07-20T22:55:56.168364Z] Collecting jsonschema==4.18.4
[2023-07-20T22:55:56.180912Z]   Downloading jsonschema-4.18.4-py3-none-any.whl (80 kB)
[2023-07-20T22:55:56.190203Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 81.0/81.0 kB 14.6 MB/s eta 0:00:00
[2023-07-20T22:55:56.237173Z] Collecting jsonschema-specifications==2023.7.1
[2023-07-20T22:55:56.249801Z]   Downloading jsonschema_specifications-2023.7.1-py3-none-any.whl (17 kB)
[2023-07-20T22:55:56.359127Z] Collecting jupyter-client==8.3.0
[2023-07-20T22:55:56.371818Z]   Downloading jupyter_client-8.3.0-py3-none-any.whl (103 kB)
[2023-07-20T22:55:56.381938Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 103.2/103.2 kB 17.8 MB/s eta 0:00:00
[2023-07-20T22:55:56.455497Z] Collecting jupyter-core==5.3.1
[2023-07-20T22:55:56.470642Z]   Downloading jupyter_core-5.3.1-py3-none-any.whl (93 kB)
[2023-07-20T22:55:56.480208Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.7/93.7 kB 17.2 MB/s eta 0:00:00
[2023-07-20T22:55:56.518897Z] Collecting jupyterlab-pygments==0.2.2
[2023-07-20T22:55:56.531585Z]   Downloading jupyterlab_pygments-0.2.2-py2.py3-none-any.whl (21 kB)
[2023-07-20T22:55:56.680994Z] Collecting keyring==24.2.0
[2023-07-20T22:55:56.693458Z]   Downloading keyring-24.2.0-py3-none-any.whl (37 kB)
[2023-07-20T22:55:56.857302Z] Collecting markdown-it-py==3.0.0
[2023-07-20T22:55:56.857345Z]   Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB)
[2023-07-20T22:55:56.857372Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 kB 15.5 MB/s eta 0:00:00
[2023-07-20T22:55:56.960996Z] Collecting MarkupSafe==2.1.3
[2023-07-20T22:55:56.973525Z]   Downloading MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25 kB)
[2023-07-20T22:55:57.016686Z] Collecting matplotlib-inline==0.1.6
[2023-07-20T22:55:57.029168Z]   Downloading matplotlib_inline-0.1.6-py3-none-any.whl (9.4 kB)
[2023-07-20T22:55:57.068166Z] Collecting mccabe==0.7.0
[2023-07-20T22:55:57.080592Z]   Downloading mccabe-0.7.0-py2.py3-none-any.whl (7.3 kB)
[2023-07-20T22:55:57.119380Z] Collecting mdurl==0.1.2
[2023-07-20T22:55:57.131535Z]   Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB)
[2023-07-20T22:55:57.194630Z] Collecting mistune==3.0.1
[2023-07-20T22:55:57.207014Z]   Downloading mistune-3.0.1-py3-none-any.whl (47 kB)
[2023-07-20T22:55:57.215087Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.0/48.0 kB 9.8 MB/s eta 0:00:00
[2023-07-20T22:55:57.274144Z] Collecting more-itertools==4.2.0
[2023-07-20T22:55:57.288429Z]   Downloading more_itertools-4.2.0-py3-none-any.whl (45 kB)
[2023-07-20T22:55:57.297526Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 45.0/45.0 kB 7.8 MB/s eta 0:00:00
[2023-07-20T22:55:57.619789Z] Collecting mypy==1.4.1
[2023-07-20T22:55:57.642583Z]   Downloading mypy-1.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (11.9 MB)
[2023-07-20T22:55:57.858330Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 11.9/11.9 MB 54.4 MB/s eta 0:00:00
[2023-07-20T22:55:57.929907Z] Collecting mypy-extensions==1.0.0
[2023-07-20T22:55:57.942896Z]   Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
[2023-07-20T22:55:58.071129Z] Collecting nbclient==0.8.0
[2023-07-20T22:55:58.084059Z]   Downloading nbclient-0.8.0-py3-none-any.whl (73 kB)
[2023-07-20T22:55:58.093739Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.1/73.1 kB 12.4 MB/s eta 0:00:00
[2023-07-20T22:55:58.188433Z] Collecting nbconvert==7.7.2
[2023-07-20T22:55:58.203792Z]   Downloading nbconvert-7.7.2-py3-none-any.whl (254 kB)
[2023-07-20T22:55:58.216193Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 254.6/254.6 kB 31.3 MB/s eta 0:00:00
[2023-07-20T22:55:58.274638Z] Collecting nbformat==5.9.1
[2023-07-20T22:55:58.287342Z]   Downloading nbformat-5.9.1-py3-none-any.whl (77 kB)
[2023-07-20T22:55:58.296512Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.6/77.6 kB 13.7 MB/s eta 0:00:00
[2023-07-20T22:55:58.356564Z] Collecting nest-asyncio==1.5.6
[2023-07-20T22:55:58.369258Z]   Downloading nest_asyncio-1.5.6-py3-none-any.whl (5.2 kB)
[2023-07-20T22:55:59.048815Z] Collecting numpy==1.17.4
[2023-07-20T22:55:59.071123Z]   Downloading numpy-1.17.4-cp38-cp38-manylinux1_x86_64.whl (20.5 MB)
[2023-07-20T22:55:59.552440Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 20.5/20.5 MB 37.5 MB/s eta 0:00:00
[2023-07-20T22:55:59.651964Z] Collecting packaging==23.1
[2023-07-20T22:55:59.664352Z]   Downloading packaging-23.1-py3-none-any.whl (48 kB)
[2023-07-20T22:55:59.672328Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 9.9 MB/s eta 0:00:00
[2023-07-20T22:55:59.708236Z] Collecting pandocfilters==1.5.0
[2023-07-20T22:55:59.720667Z]   Downloading pandocfilters-1.5.0-py2.py3-none-any.whl (8.7 kB)
[2023-07-20T22:55:59.787471Z] Collecting parso==0.8.3
[2023-07-20T22:55:59.800218Z]   Downloading parso-0.8.3-py2.py3-none-any.whl (100 kB)
[2023-07-20T22:55:59.810053Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.8/100.8 kB 17.3 MB/s eta 0:00:00
[2023-07-20T22:55:59.852091Z] Collecting pathspec==0.11.1
[2023-07-20T22:55:59.864563Z]   Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
[2023-07-20T22:55:59.904788Z] Collecting pexpect==4.8.0
[2023-07-20T22:55:59.917311Z]   Downloading pexpect-4.8.0-py2.py3-none-any.whl (59 kB)
[2023-07-20T22:55:59.925707Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 59.0/59.0 kB 11.0 MB/s eta 0:00:00
[2023-07-20T22:55:59.961724Z] Collecting pickleshare==0.7.5
[2023-07-20T22:55:59.974160Z]   Downloading pickleshare-0.7.5-py2.py3-none-any.whl (6.9 kB)
[2023-07-20T22:56:00.211571Z] Collecting pipenv==2023.7.11
[2023-07-20T22:56:00.230536Z]   Downloading pipenv-2023.7.11-py3-none-any.whl (2.8 MB)
[2023-07-20T22:56:00.277705Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 MB 65.5 MB/s eta 0:00:00
[2023-07-20T22:56:00.343153Z] Collecting pkginfo==1.9.6
[2023-07-20T22:56:00.358104Z]   Downloading pkginfo-1.9.6-py3-none-any.whl (30 kB)
[2023-07-20T22:56:00.396952Z] Collecting pkgutil-resolve-name==1.3.10
[2023-07-20T22:56:00.409584Z]   Downloading pkgutil_resolve_name-1.3.10-py3-none-any.whl (4.7 kB)
[2023-07-20T22:56:00.477480Z] Collecting platformdirs==3.9.1
[2023-07-20T22:56:00.490025Z]   Downloading platformdirs-3.9.1-py3-none-any.whl (16 kB)
[2023-07-20T22:56:00.543926Z] Collecting pluggy==1.2.0
[2023-07-20T22:56:00.556575Z]   Downloading pluggy-1.2.0-py3-none-any.whl (17 kB)
[2023-07-20T22:56:00.677205Z] Collecting prompt-toolkit==3.0.39
[2023-07-20T22:56:00.691196Z]   Downloading prompt_toolkit-3.0.39-py3-none-any.whl (385 kB)
[2023-07-20T22:56:00.705711Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 385.2/385.2 kB 40.3 MB/s eta 0:00:00
[2023-07-20T22:56:01.023469Z] Collecting psutil==5.9.5
[2023-07-20T22:56:01.038527Z]   Downloading psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (282 kB)
[2023-07-20T22:56:01.051501Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 282.1/282.1 kB 33.7 MB/s eta 0:00:00
[2023-07-20T22:56:01.088502Z] Collecting ptyprocess==0.7.0
[2023-07-20T22:56:01.101616Z]   Downloading ptyprocess-0.7.0-py2.py3-none-any.whl (13 kB)
[2023-07-20T22:56:01.145906Z] Collecting pure-eval==0.2.2
[2023-07-20T22:56:01.158654Z]   Downloading pure_eval-0.2.2-py3-none-any.whl (11 kB)
[2023-07-20T22:56:01.209754Z] Collecting pycodestyle==2.10.0
[2023-07-20T22:56:01.222466Z]   Downloading pycodestyle-2.10.0-py2.py3-none-any.whl (41 kB)
[2023-07-20T22:56:01.230716Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 41.3/41.3 kB 7.2 MB/s eta 0:00:00
[2023-07-20T22:56:01.266189Z] Collecting pycparser==2.21
[2023-07-20T22:56:01.279162Z]   Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
[2023-07-20T22:56:01.289483Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 118.7/118.7 kB 19.3 MB/s eta 0:00:00
[2023-07-20T22:56:01.342590Z] Collecting pyflakes==3.0.1
[2023-07-20T22:56:01.355502Z]   Downloading pyflakes-3.0.1-py2.py3-none-any.whl (62 kB)
[2023-07-20T22:56:01.365108Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 10.5 MB/s eta 0:00:00
[2023-07-20T22:56:01.442250Z] Collecting Pygments==2.15.1
[2023-07-20T22:56:01.457666Z]   Downloading Pygments-2.15.1-py3-none-any.whl (1.1 MB)
[2023-07-20T22:56:01.481330Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 59.1 MB/s eta 0:00:00
[2023-07-20T22:56:01.548791Z] Collecting PyJWT==2.8.0
[2023-07-20T22:56:01.561315Z]   Downloading PyJWT-2.8.0-py3-none-any.whl (22 kB)
[2023-07-20T22:56:01.826969Z] Collecting pytest==7.4.0
[2023-07-20T22:56:01.826989Z]   Downloading pytest-7.4.0-py3-none-any.whl (323 kB)
[2023-07-20T22:56:01.827032Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 323.6/323.6 kB 36.5 MB/s eta 0:00:00
[2023-07-20T22:56:01.843405Z] Collecting pytest-cov==4.1.0
[2023-07-20T22:56:01.856169Z]   Downloading pytest_cov-4.1.0-py3-none-any.whl (21 kB)
[2023-07-20T22:56:01.914925Z] Collecting pytest-mypy==0.10.3
[2023-07-20T22:56:01.928100Z]   Downloading pytest_mypy-0.10.3-py3-none-any.whl (7.1 kB)
[2023-07-20T22:56:01.987595Z] Collecting python-dateutil==2.8.2
[2023-07-20T22:56:02.002442Z]   Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
[2023-07-20T22:56:02.017770Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 25.2 MB/s eta 0:00:00
[2023-07-20T22:56:02.168678Z] Collecting PyYAML==5.3.1
[2023-07-20T22:56:02.184140Z]   Downloading PyYAML-5.3.1.tar.gz (269 kB)
[2023-07-20T22:56:02.197571Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 269.4/269.4 kB 31.4 MB/s eta 0:00:00
[2023-07-20T22:56:02.416748Z]   Preparing metadata (setup.py): started
[2023-07-20T22:56:02.795936Z]   Preparing metadata (setup.py): finished with status 'done'
[2023-07-20T22:56:03.511303Z] Collecting pyzmq==25.1.1b2
[2023-07-20T22:56:03.530989Z]   Downloading pyzmq-25.1.1b2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (1.1 MB)
[2023-07-20T22:56:03.554503Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 56.5 MB/s eta 0:00:00
[2023-07-20T22:56:03.611005Z] Collecting readme-renderer==40.0
[2023-07-20T22:56:03.623445Z]   Downloading readme_renderer-40.0-py3-none-any.whl (14 kB)
[2023-07-20T22:56:03.759377Z] Collecting referencing==0.30.0
[2023-07-20T22:56:03.759397Z]   Downloading referencing-0.30.0-py3-none-any.whl (25 kB)
[2023-07-20T22:56:03.852358Z] Collecting requests==2.31.0
[2023-07-20T22:56:03.866031Z]   Downloading requests-2.31.0-py3-none-any.whl (62 kB)
[2023-07-20T22:56:03.876197Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.6/62.6 kB 9.6 MB/s eta 0:00:00
[2023-07-20T22:56:03.922293Z] Collecting requests-toolbelt==1.0.0
[2023-07-20T22:56:03.949451Z]   Downloading requests_toolbelt-1.0.0-py2.py3-none-any.whl (54 kB)
[2023-07-20T22:56:03.958439Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 54.5/54.5 kB 9.7 MB/s eta 0:00:00
[2023-07-20T22:56:04.001861Z] Collecting rfc3986==2.0.0
[2023-07-20T22:56:04.014438Z]   Downloading rfc3986-2.0.0-py2.py3-none-any.whl (31 kB)
[2023-07-20T22:56:04.218688Z] Collecting rich==13.4.2
[2023-07-20T22:56:04.234545Z]   Downloading rich-13.4.2-py3-none-any.whl (239 kB)
[2023-07-20T22:56:04.253084Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 239.4/239.4 kB 19.9 MB/s eta 0:00:00
[2023-07-20T22:56:04.611066Z] Collecting rpds-py==0.9.2
[2023-07-20T22:56:04.631431Z]   Downloading rpds_py-0.9.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.2 MB)
[2023-07-20T22:56:04.656091Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 57.9 MB/s eta 0:00:00
[2023-07-20T22:56:04.698347Z] Collecting SecretStorage==3.3.3
[2023-07-20T22:56:04.713454Z]   Downloading SecretStorage-3.3.3-py3-none-any.whl (15 kB)
[2023-07-20T22:56:04.822333Z] Collecting semver==2.13.0
[2023-07-20T22:56:04.822359Z]   Downloading semver-2.13.0-py2.py3-none-any.whl (12 kB)
[2023-07-20T22:56:04.935336Z] Collecting setuptools-scm==7.1.0
[2023-07-20T22:56:04.947589Z]   Downloading setuptools_scm-7.1.0-py3-none-any.whl (43 kB)
[2023-07-20T22:56:04.956146Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 43.8/43.8 kB 7.5 MB/s eta 0:00:00
[2023-07-20T22:56:05.002817Z] Collecting six==1.14.0
[2023-07-20T22:56:05.015622Z]   Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
[2023-07-20T22:56:05.080681Z] Collecting soupsieve==2.4.1
[2023-07-20T22:56:05.093841Z]   Downloading soupsieve-2.4.1-py3-none-any.whl (36 kB)
[2023-07-20T22:56:05.138366Z] Collecting stack-data==0.6.2
[2023-07-20T22:56:05.151360Z]   Downloading stack_data-0.6.2-py3-none-any.whl (24 kB)
[2023-07-20T22:56:05.194209Z] Collecting tinycss2==1.2.1
[2023-07-20T22:56:05.206807Z]   Downloading tinycss2-1.2.1-py3-none-any.whl (21 kB)
[2023-07-20T22:56:05.247500Z] Collecting toml==0.10.2
[2023-07-20T22:56:05.260079Z]   Downloading toml-0.10.2-py2.py3-none-any.whl (16 kB)
[2023-07-20T22:56:05.317714Z] Collecting tomli==2.0.1
[2023-07-20T22:56:05.330409Z]   Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
[2023-07-20T22:56:05.465412Z] Collecting tornado==6.3.2
[2023-07-20T22:56:05.482472Z]   Downloading tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (426 kB)
[2023-07-20T22:56:05.499052Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 426.9/426.9 kB 38.9 MB/s eta 0:00:00
[2023-07-20T22:56:05.561213Z] Collecting traitlets==5.9.0
[2023-07-20T22:56:05.573825Z]   Downloading traitlets-5.9.0-py3-none-any.whl (117 kB)
[2023-07-20T22:56:05.584365Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.4/117.4 kB 19.0 MB/s eta 0:00:00
[2023-07-20T22:56:05.663962Z] Collecting twine==4.0.2
[2023-07-20T22:56:05.676983Z]   Downloading twine-4.0.2-py3-none-any.whl (36 kB)
[2023-07-20T22:56:05.722495Z] Collecting types-click==7.1.8
[2023-07-20T22:56:05.856966Z]   Downloading types_click-7.1.8-py3-none-any.whl (12 kB)
[2023-07-20T22:56:05.856985Z] Collecting types-Flask==1.1.6
[2023-07-20T22:56:05.857002Z]   Downloading types_Flask-1.1.6-py3-none-any.whl (13 kB)
[2023-07-20T22:56:05.857018Z] Collecting types-Jinja2==2.11.9
[2023-07-20T22:56:05.857035Z]   Downloading types_Jinja2-2.11.9-py3-none-any.whl (18 kB)
[2023-07-20T22:56:05.889410Z] Collecting types-MarkupSafe==1.1.10
[2023-07-20T22:56:05.906051Z]   Downloading types_MarkupSafe-1.1.10-py3-none-any.whl (4.0 kB)
[2023-07-20T22:56:05.970848Z] Collecting types-six==1.16.21.9
[2023-07-20T22:56:05.985120Z]   Downloading types_six-1.16.21.9-py3-none-any.whl (14 kB)
[2023-07-20T22:56:06.029829Z] Collecting types-Werkzeug==1.0.9
[2023-07-20T22:56:06.043788Z]   Downloading types_Werkzeug-1.0.9-py3-none-any.whl (36 kB)
[2023-07-20T22:56:06.100779Z] Collecting typing-extensions==4.7.1
[2023-07-20T22:56:06.115274Z]   Downloading typing_extensions-4.7.1-py3-none-any.whl (33 kB)
[2023-07-20T22:56:06.225215Z] Collecting urllib3==2.0.4
[2023-07-20T22:56:06.239010Z]   Downloading urllib3-2.0.4-py3-none-any.whl (123 kB)
[2023-07-20T22:56:06.250359Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 123.9/123.9 kB 19.8 MB/s eta 0:00:00
[2023-07-20T22:56:06.479376Z] Collecting virtualenv==20.24.1
[2023-07-20T22:56:06.495787Z]   Downloading virtualenv-20.24.1-py3-none-any.whl (3.0 MB)
[2023-07-20T22:56:06.548706Z]      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.0/3.0 MB 60.4 MB/s eta 0:00:00
[2023-07-20T22:56:06.600622Z] Collecting virtualenv-clone==0.5.7
[2023-07-20T22:56:06.613094Z]   Downloading virtualenv_clone-0.5.7-py3-none-any.whl (6.6 kB)
[2023-07-20T22:56:06.656873Z] Collecting wcwidth==0.2.6
[2023-07-20T22:56:06.670126Z]   Downloading wcwidth-0.2.6-py2.py3-none-any.whl (29 kB)
[2023-07-20T22:56:06.704691Z] Collecting webencodings==0.5.1
[2023-07-20T22:56:06.723263Z]   Downloading webencodings-0.5.1-py2.py3-none-any.whl (11 kB)
[2023-07-20T22:56:06.870531Z] Collecting zipp==3.16.2
[2023-07-20T22:56:06.870573Z]   Downloading zipp-3.16.2-py3-none-any.whl (7.2 kB)
[2023-07-20T22:56:08.086674Z] INFO: pip is looking at multiple versions of jsonschema-specifications to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.087533Z] INFO: pip is looking at multiple versions of jsonschema to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.088330Z] INFO: pip is looking at multiple versions of jinja2 to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.089134Z] INFO: pip is looking at multiple versions of jeepney to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.089942Z] INFO: pip is looking at multiple versions of jedi to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.090723Z] INFO: pip is looking at multiple versions of jaraco-classes to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.091539Z] INFO: pip is looking at multiple versions of ipython to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.092361Z] INFO: pip is looking at multiple versions of ipykernel to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.093227Z] INFO: pip is looking at multiple versions of iniconfig to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.094084Z] INFO: pip is looking at multiple versions of importlib-resources to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.094849Z] INFO: pip is looking at multiple versions of importlib-metadata to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.095644Z] INFO: pip is looking at multiple versions of idna to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.096393Z] INFO: pip is looking at multiple versions of httpretty to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.097048Z] INFO: pip is looking at multiple versions of gdal to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.097669Z] INFO: pip is looking at multiple versions of funcsigs to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.098288Z] INFO: pip is looking at multiple versions of flake8 to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.098953Z] INFO: pip is looking at multiple versions of filelock to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.099624Z] INFO: pip is looking at multiple versions of fastjsonschema to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.100549Z] INFO: pip is looking at multiple versions of executing to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.100936Z] INFO: pip is looking at multiple versions of exceptiongroup to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.101665Z] INFO: pip is looking at multiple versions of docutils to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.102444Z] INFO: pip is looking at multiple versions of distlib to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.103037Z] INFO: pip is looking at multiple versions of defusedxml to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.103769Z] INFO: pip is looking at multiple versions of decorator to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.104427Z] INFO: pip is looking at multiple versions of debugpy to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.105099Z] INFO: pip is looking at multiple versions of cryptography to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.105760Z] INFO: pip is looking at multiple versions of coverage to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.106444Z] INFO: pip is looking at multiple versions of comm to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.107055Z] INFO: pip is looking at multiple versions of click to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.107712Z] INFO: pip is looking at multiple versions of charset-normalizer to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.108483Z] INFO: pip is looking at multiple versions of cffi to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.109198Z] INFO: pip is looking at multiple versions of certifi to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.110016Z] INFO: pip is looking at multiple versions of bleach to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.110735Z] INFO: pip is looking at multiple versions of black to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.111413Z] INFO: pip is looking at multiple versions of beautifulsoup4 to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.112167Z] INFO: pip is looking at multiple versions of backcall to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.112882Z] INFO: pip is looking at multiple versions of <Python from Requires-Python> to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.113684Z] INFO: pip is looking at multiple versions of attrs to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.114398Z] INFO: pip is looking at multiple versions of asttokens to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.115072Z] INFO: pip is looking at multiple versions of appdirs to determine which version is compatible with other requirements. This could take a while.
[2023-07-20T22:56:08.115971Z] ERROR: Cannot install -r /cloud/project/requirements.txt (line 41) and importlib-metadata==1.5.0 because these package versions have conflicting dependencies.
[2023-07-20T22:56:08.117620Z] The conflict is caused by:
[2023-07-20T22:56:08.117638Z]     The user requested importlib-metadata==1.5.0
[2023-07-20T22:56:08.117658Z]     jupyter-client 8.3.0 depends on importlib-metadata>=4.8.3; python_version < "3.10"
[2023-07-20T22:56:08.117711Z] To fix this you could try to:
[2023-07-20T22:56:08.117728Z] 1. loosen the range of package versions you've specified
[2023-07-20T22:56:08.117746Z] 2. remove package versions to allow pip attempt to solve the dependency conflict
[2023-07-20T22:56:08.118670Z] ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts
[2023-07-20T22:56:08.317622Z] [notice] A new release of pip is available: 23.0.1 -> 23.2
[2023-07-20T22:56:08.317644Z] [notice] To update, run: pip install --upgrade pip
[2023-07-20T22:56:27.733166Z] Running your code.
[2023-07-20T22:56:27.733183Z] Using quarto version: 1.4.221
[2023-07-20T22:56:27.733217Z] No secrets to load.
[2023-07-20T22:56:28.342229Z] Failed rendering output.
        [ERROR]: Application deployment failed with error: Job run application=2120519 job_run=1154 failed. lucid-bender-application-2120519-jobrun-1154-fxw5d-1393043835: Error (exit code 1)
Error: Application deployment failed with error: Job run application=2120519 job_run=1154 failed. lucid-bender-application-2120519-jobrun-1154-fxw5d-1393043835: Error (exit code 1)
/cloud/project/rsconnect-python$ 

❌ D. deploy quarto site, server-rendered

create a quarto site in a new folder - see: https://quarto.org/docs/projects/quarto-projects.html#metadata-includes
deploy site to posit.cloud using: rsconnect deploy quarto path/to/site/folder --name posit.cloud

Failed with

/cloud/project/rsconnect-python$ rsconnect deploy quarto /cloud/project/quartosite --name posit.cloud
Inspecting Quarto project...                     [ERROR]
Error: The following Quarto engine(s) are not supported: knitr

❌ The same tests should be runnable against Posit Connect
The 3 scenarios that failed on posit.cloud also failed on Colorado.
Failures on B and D are the same with:
Error: The following Quarto engine(s) are not supported: knitr

Scenario C had a different failure message:

2023/07/20 23:47:07.339702300   Downloading GDAL-3.0.4.tar.gz (577 kB)
2023/07/20 23:47:07.437503645      ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 577.2/577.2 kB 6.3 MB/s eta 0:00:00
2023/07/20 23:47:07.550085288   Preparing metadata (setup.py): started
2023/07/20 23:47:07.941880034   Preparing metadata (setup.py): finished with status 'error'
2023/07/20 23:47:07.951444795   error: subprocess-exited-with-error
2023/07/20 23:47:07.951458887   
2023/07/20 23:47:07.951590093   × python setup.py egg_info did not run successfully.
2023/07/20 23:47:07.951591783   │ exit code: 1
2023/07/20 23:47:07.951601028   ╰─> [6 lines of output]
2023/07/20 23:47:07.951602074       WARNING: numpy not available!  Array support will not be enabled
2023/07/20 23:47:07.951611647       /opt/rstudio-connect/mnt/app/python/env/lib/python3.8/site-packages/setuptools/_distutils/dist.py:265: UserWarning: Unknown distribution option: 'use_2to3_fixers'
2023/07/20 23:47:07.951629207         warnings.warn(msg)
2023/07/20 23:47:07.951638716       /opt/rstudio-connect/mnt/app/python/env/lib/python3.8/site-packages/setuptools/_distutils/dist.py:265: UserWarning: Unknown distribution option: 'use_2to3_exclude_fixers'
2023/07/20 23:47:07.951639727         warnings.warn(msg)
2023/07/20 23:47:07.951649225       error in GDAL setup command: use_2to3 is invalid.
2023/07/20 23:47:07.951650270       [end of output]
2023/07/20 23:47:07.951658685   
2023/07/20 23:47:07.951659705   note: This error originates from a subprocess, and is likely not a problem with pip.
2023/07/20 23:47:07.954772027 error: metadata-generation-failed
2023/07/20 23:47:07.954784363 
2023/07/20 23:47:07.954818551 × Encountered error while generating package metadata.
2023/07/20 23:47:07.954820532 ╰─> See above for output.
2023/07/20 23:47:07.954830090 
2023/07/20 23:47:07.954831107 note: This is an issue with the package mentioned above, not pip.
2023/07/20 23:47:07.954839940 hint: See above for details.
2023/07/20 23:47:09.166208281 pip install failed with exit code 1
Stopped session pings to http://service-95eac653-ddfc-4038-add8-ca1a5a677384.rstudio-connect:50734
Build error: nonzero exit status: 1
An error occurred while building the content (build-failed-error)
Error from Connect server: nonzero exit status: 1
Error: Task exited with status 1.

@scubastevew
Copy link

scubastevew commented Jul 25, 2023

Latest test results:

✅ Scenario A. deploy static html (client-rendered content) to posit.cloud

create an rmd file: testrmd.Rmd (File > New File > R Markdown document)
knit it to html file testrmd.html
deploy the html to posit.cloud using: rsconnect deploy html testrmd.html --name posit.cloud

✅ : Scenario B. deploy standalone quarto file with markdown, server-side

create a quarto file with markdown engine: markdown.qmd (File > New File > Quarto document)
deploy it to posit.cloud using: rsconnect deploy quarto markdown.qmd --name posit.cloud

✅ : Scenario C. deploy python-based quarto project, server-side

create a new directory called qproject
create a quarto file in qproject with jupyter engine / python kernel: jupyter.qmd (File > New File > Quarto document)
create a _quarto.yml file in qproject with content:
project:
  title: "qproject"
deploy project to posit.cloud using: rsconnect deploy quarto qproject/ --name posit.cloud

✅ Scenario D. deploy quarto site, server-rendered

create a quarto site in a new folder - see: https://quarto.org/docs/projects/quarto-projects.html#metadata-includes
deploy site to posit.cloud using: rsconnect deploy quarto path/to/site/folder --name posit.cloud

The same tests should be runnable against Posit Connect:
✅ Scenario A
✅ Scenario B
✅ Scenario C -> this required using a virtual environment from posit.cloud to publish to Posit Connect
✅ Scenario D -> this required using a virtual environment from posit.cloud to publish to Posit Connect

@omar-rs omar-rs merged commit d3e4ad7 into master Jul 27, 2023
@omar-rs omar-rs deleted the quarto_posit_cloud branch July 27, 2023 17:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add Posit Cloud support to rsconnect deploy quarto

6 participants