Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
43161fc
Finalizing for 2.4.2
jyaistMap Oct 13, 2025
f9292f1
enable prerelease docker image
jtroe Oct 13, 2025
d34914e
update text in link for obj det using second note
jyaistMap Oct 13, 2025
9cb597b
Fix incorrect text in the hyperlink for new guide
jyaistMap Oct 13, 2025
fc64381
remove quotation that was breaking link for new dl sample
jyaistMap Oct 13, 2025
4902621
Merge pull request #2394 from Esri/jy-fix-airplane-link
jyaistMap Oct 13, 2025
42305c1
remove tf deps
Oct 22, 2025
efc5e9f
replace erroneous method name
jyaistMap Oct 28, 2025
5cdc7af
Merge pull request #2403 from Esri/jy-fix-get-item
jyaistMap Oct 28, 2025
369d489
add living atlas guidelines note to appropriate guides
jyaistMap Oct 28, 2025
c0aec36
Merge pull request #2392 from Esri/JR/docker-prerelease
jyaistMap Oct 28, 2025
7871ef6
Merge pull request #2404 from Esri/jy-liv-atl-guidelines
jyaistMap Oct 30, 2025
bb57f42
updated administering the gis guide
tarunkukreja003 Nov 4, 2025
7ee6470
suggestions applied
tarunkukreja003 Nov 20, 2025
b977261
Merge pull request #2409 from Esri/tarun/administring-gis
nanaeaubry Nov 21, 2025
8a334a8
Revert "[Notebooks PR] Update coastline_classification_using_feature_…
priyankatuteja Dec 15, 2025
4e515f0
Merge pull request #2426 from Esri/revert-2355-notebooks_checking
priyankatuteja Dec 15, 2025
f53b8d2
Merge pull request #2427 from Esri/next
priyankatuteja Dec 15, 2025
afb1cb4
Update sedf to show mgdb access (#2430)
kgalliher Dec 17, 2025
0ce15ea
fixed data inconsistencies
ManushiM Dec 19, 2025
2b47ccb
updated tabular view of NZ data collections
ManushiM Dec 19, 2025
35069f4
Merge pull request #2433 from Esri/next
priyankatuteja Dec 29, 2025
1e39fef
Merge pull request #2400 from Esri/remove_tf_files
priyankatuteja Dec 29, 2025
c0adaed
Merge pull request #2431 from Esri/guide4-geoenrichment-fixes
ManushiM Jan 1, 2026
bdc6ed4
fixed broken links in 3 guides
ManushiM Feb 9, 2026
2d1a15b
Merge pull request #2449 from Esri/fix_deep_learning_guides_links
priyankatuteja Feb 9, 2026
98638cd
App Authentication added
tarunkukreja003 Mar 6, 2026
1af7a23
updated with client_secret parameter
tarunkukreja003 Mar 6, 2026
b46eb6a
removed client_secret from authentication
tarunkukreja003 Mar 6, 2026
b074e03
updated TokenPrivilege import statement
tarunkukreja003 Mar 9, 2026
10dd77e
app authentication with client_secret
tarunkukreja003 Mar 19, 2026
855c6a2
corrected the app-authentication workflow
tarunkukreja003 Mar 20, 2026
348b8ba
minor sentence update
tarunkukreja003 Mar 20, 2026
5fff62b
updated to snake_case
tarunkukreja003 Mar 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions .github/workflows/DockerBuild.NotebookImage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,27 @@ on:
version:
description: "Version of ArcGIS API for Python to install in the image"
type: string
default: "2.4.1"
default: "2.4.2"
arcgis_mapping_version:
description: "Version of arcgis-mapping to install in the image (only used if version >= 2.4.0)"
type: string
default: "4.33.0"
python_version:
description: "Python version to base image on"
type: string
default: "3.11"
default: "3.13"
is_latest_release:
description: "Version of ArcGIS API for Python is Latest current release"
type: boolean
default: false
arcgis_wheel_url:
description: "Use a custom version of ArcGIS API for Python from this wheel URL, if empty, use pypi.org; if provided, `-prerelease` will be appended to the image tag"
type: string
default: ""
arcgis_mapping_wheel_url:
description: "Use a custom version of arcgis-mapping from this wheel URL, if empty, install from pypi.org; if provided, `-prerelease` will be appended to the image tag"
type: string
default: ""
is_default_supported_python:
description: "Python version is default supported version (i.e. python used by Pro and Enterprise)"
type: boolean
Expand Down Expand Up @@ -52,10 +64,10 @@ jobs:
images: |
ghcr.io/esri/arcgis-python-api-notebook
tags: |
type=raw,value=${{ inputs.version }}-python${{ inputs.python_version }}
type=raw,value=${{ inputs.version }},enable=${{ inputs.is_default_supported_python && github.ref_name == github.event.repository.default_branch }}
type=raw,value=latest,enable=${{ inputs.is_latest_release && inputs.is_default_supported_python && github.ref_name == github.event.repository.default_branch }}
type=schedule,pattern={{date 'YY.MM'}},enable=${{ inputs.is_latest_release && inputs.is_default_supported_python && github.ref_name == github.event.repository.default_branch }}
type=raw,value=${{ inputs.version }}-python${{ inputs.python_version }}${{ inputs.arcgis_wheel_url != '' && '-prerelease' || '' }}
type=raw,value=${{ inputs.version }},enable=${{ inputs.is_default_supported_python && inputs.arcgis_wheel_url == '' && github.ref_name == github.event.repository.default_branch }}
type=raw,value=latest,enable=${{ inputs.arcgis_wheel_url == '' && inputs.is_latest_release && inputs.is_default_supported_python && github.ref_name == github.event.repository.default_branch }}
type=schedule,pattern={{date 'YY.MM'}},enable=${{ inputs.arcgis_wheel_url == '' && inputs.is_latest_release && inputs.is_default_supported_python && github.ref_name == github.event.repository.default_branch }}

- id: docker_build
name: Build image and push to GitHub Container Registry
Expand All @@ -67,6 +79,9 @@ jobs:
build-args: |
python_version=${{ inputs.python_version }}
arcgis_version=${{ inputs.version }}
arcgis_mapping_version=${{ inputs.arcgis_mapping_version }}
arcgis_wheel_url=${{ inputs.arcgis_wheel_url }}
arcgis_mapping_wheel_url=${{ inputs.arcgis_mapping_wheel_url }}
tags: ${{ steps.meta.outputs.tags }}
provenance: false
platforms: linux/amd64
Expand Down
20 changes: 14 additions & 6 deletions docker/NotebookImage.Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
ARG python_version="3.11"
ARG python_version="3.13"
FROM quay.io/jupyter/minimal-notebook:python-${python_version}

ARG python_version
ARG arcgis_version="2.4.1"
ARG gdal_version="3.10.2"
ARG arcgis_version="2.4.2"
ARG arcgis_mapping_version="4.33.0"
ARG gdal_version="3.11.4"
# If arcgis_wheel_url is provided, the Dockerfile will attempt to install the ArcGIS API for Python from that URL
ARG arcgis_wheel_url=""
ARG arcgis_mapping_wheel_url=""

ARG sampleslink="https://github.com/Esri/arcgis-python-api/releases/download/v${arcgis_version}/samples.zip"
ARG githubfolder="arcgis-python-api"
ARG env_name=arcgis
Expand All @@ -25,17 +30,20 @@ RUN conda install -n ${env_name} -c conda-forge gdal=${gdal_version} -y --quiet
&& conda clean --all -f -y \
&& find /opt/conda -name __pycache__ -type d -exec rm -rf {} +

RUN echo "${arcgis_wheel_url:-arcgis==${arcgis_version}.*}" > /tmp/arcgis_source.txt

# Install ArcGIS API for Python from pypi
RUN . activate ${env_name} \
# adding .* ensures the latest patch version is installed
&& python -m pip install "arcgis==${arcgis_version}.*" \
&& python -m pip install "$(cat /tmp/arcgis_source.txt)" \
&& conda clean --all -f -y \
&& find /opt/conda -name __pycache__ -type d -exec rm -rf {} +

RUN echo "${arcgis_mapping_wheel_url:-arcgis-mapping==${arcgis_mapping_version}.*}" > /tmp/arcgis_mapping_source.txt

# Install arcgis-mapping if arcgis_version >= 2.4.0
RUN (dpkg --compare-versions $arcgis_version ge 2.4.0 \
&& . activate ${env_name} \
&& python -m pip install arcgis-mapping \
&& python -m pip install "$(cat /tmp/arcgis_mapping_source.txt)" \
&& conda clean --all -f -y \
&& find /opt/conda -name __pycache__ -type d -exec rm -rf {} +;) \
|| echo "[INFO] Skipped installing arcgis-mapping for version $arcgis_version (>= 2.4.0 required for arcgis-mapping)"
Expand Down
25 changes: 12 additions & 13 deletions guide/01-getting-started/install-and-set-up.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,10 @@
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
"collapsed": true,
"jupyter": {
"outputs_hidden": true
}
},
"source": [
"## Install as a Docker image\n",
Expand Down Expand Up @@ -411,13 +414,11 @@
"source": [
"If you already have an environment with the `arcgis` package installed, you can further install its deep learning dependencies to take advantage of the `arcgis.learn` module. Some of the deep learning samples available [here](https://developers.arcgis.com/python/sample-notebooks/) can be referenced to understand the workflow.\n",
"\n",
"**Note:** To use the deep learning capabilities in ArcGIS Pro 2.9 / ArcGIS API for Python 1.9.0 onwards, the minimum required version of the Nvidia GPU driver is 456.38.\n",
"\n",
"### Using the Deep Learning Frameworks Installer\n",
"\n",
"To work with the deep learning tools in ArcGIS Pro 2.6 and later, you need to install supported deep learning frameworks packages.\n",
"\n",
"`Deep Learning Libraries Installer for ArcGIS` is now available at https://github.com/Esri/deep-learning-frameworks. This installer includes a broad collection of components, such as PyTorch, TensorFlow, Fast.ai and scikit-learn, for performing deep learning and machine learning tasks. Note that this will install the deep learning frameworks into your currently active Pro Python environment; if you wish to install in an environment aside from the default arcgispro-py3 environment, switch to that environment before running the MSI using either ArcGIS Pro's Python manager UI or on the command line with proswap. Any subsequent clones of that environment will also include this full collection of packages. \n",
"`Deep Learning Libraries Installer for ArcGIS` is now available at https://github.com/Esri/deep-learning-frameworks. This installer includes a broad collection of components, such as PyTorch, Fast.ai and scikit-learn, for performing deep learning and machine learning tasks. Note that this will install the deep learning frameworks into your currently active Pro Python environment; if you wish to install in an environment aside from the default arcgispro-py3 environment, switch to that environment before running the MSI using either ArcGIS Pro's Python manager UI or on the command line with proswap. Any subsequent clones of that environment will also include this full collection of packages. \n",
"\n",
"For instructions on how to install deep learning frameworks manually or over ArcGIS Image Server, click [here](https://github.com/Esri/deep-learning-frameworks/)."
]
Expand Down Expand Up @@ -446,31 +447,29 @@
"Alternatively, \n",
"for a cloned environment of ArcGIS Pro's default environment, `deep-learning-essentials` metapackage can be used to install the required dependencies which can be done using the following command, in the _`Python Command Prompt`_ <i>(included with ArcGIS Pro)</i>:\n",
"\n",
"`conda install deep-learning-essentials`\n"
"`conda install -c esri deep-learning-essentials`\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### For Anaconda users (Windows & Linux platforms):"
"#### For Anaconda users (Windows):"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`arcgis_learn` metapackage can be used for both windows and linux installations of Anaconda in a new environment.\n",
"`arcgis_learn` metapackage can be used for windows installation of Anaconda in a new environment.\n",
"\n",
"The following command will update Anaconda to the latest version.\n",
"\n",
"```conda update conda```\n",
"\n",
"After that, metapackage can be installed using the command below:\n",
"\n",
"```conda install -c esri arcgis_learn=2.1.0 python=3.9```\n",
"\n",
"Note: Python version 3.7 and 3.8 are also supported with this command."
"```conda install -c esri arcgis_learn=<api_version>```"
]
},
{
Expand Down Expand Up @@ -564,9 +563,9 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python [conda env:arcgispro-py3-clone] *",
"language": "python",
"name": "python3"
"name": "conda-env-arcgispro-py3-clone-py"
},
"language_info": {
"codemirror_mode": {
Expand All @@ -578,7 +577,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.16"
"version": "3.13.7"
},
"toc": {
"base_numbering": 1,
Expand Down
4 changes: 2 additions & 2 deletions guide/02-api-overview/release_notes_242.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
" * [Working with Branch Versioning](../guide/working-with-branch-versioning/) \n",
"* [Deep Learning](../)\n",
" * [3D Computer Vision](../)\n",
" * [Point cloud object detection using SECOND](../guide/point-cloud-classification-using-second)\n",
" * [Point cloud object detection using SECOND](../guide/point-cloud-object-detection-using-second)\n",
" * [Point cloud classification using Point Transformer](../guide/point-cloud-classification-using-point-transformer/)\n",
"* [Content Management](../)\n",
" * **Note:** Available since July '25\n",
Expand All @@ -32,7 +32,7 @@
"* [Deep Learning](/python/samples)\n",
" * [2D Computer Vision](/python/samples)\n",
" * [Object Detection](/python/samples)\n",
" * [Detecting airplanes in satellite imagery using deep learning](/python/latest/samples/detecting-airplanes-on-satellite-imagery-using-deep-learning/\") \n",
" * [Detecting airplanes in satellite imagery using deep learning](/python/latest/samples/detecting-airplanes-on-satellite-imagery-using-deep-learning/) \n",
" * [Tabular Data Forecasting](/python/samples)\n",
" * [Leveraging TabPFN for Human Activity Recognition Using Mobile Dataset](/python/latest/samples/classifying-human-activity-using-tabPFN-classifier) \n",
"\n",
Expand Down
2,406 changes: 2,405 additions & 1 deletion guide/03-the-gis/administering-your-gis.ipynb

Large diffs are not rendered by default.

121 changes: 120 additions & 1 deletion guide/03-the-gis/working-with-different-authentication-schemes.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,125 @@
"The recommended suggestion for non-interactive login scripts is to use the built-in identity provider instead of SAML."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## App Authentication using API Key Credentials"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This workflow demonstrates how to use an Administrative connection to register a new Application, define its security boundaries (Privileges, Expiration, and Referers), and subsequently initialize a restricted GIS session using the generated `access token`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### 1. Establish Administrative Connection\n",
"Before creating credentials, you must connect to your Portal as an Administrator. This \"Master Connection\" is used to manage the lifecycle of your application identities."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from arcgis.gis import GIS\n",
"\n",
"# Initialize the Admin session\n",
"gis_admin = GIS(url=\"your_organization_url\", username=\"your_admin_username\", password=\"your_admin_ password\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### 2. Creating the App Identity\n",
"\n",
"The `developer_credentials.create` is a method of the `DeveloperCredentialManager` class that registers the app. Here, we define the \"Security Perimeter\" of the application before it ever logs in."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from arcgis.gis.admin import TokenPrivilege\n",
"import datetime as dt\n",
"\n",
"# Define the restricted API Key Credentials\n",
"api_key_credentials = gis_admin.admin.developer_credentials.create(\n",
" title=\"API Key Credentials\",\n",
" privileges=[TokenPrivilege.PORTAL_USER_VIEWORGUSERS], # Restricted Scope\n",
" expiration=dt.datetime.now() + dt.timedelta(weeks=5), # Time-limit\n",
" referers=[\"http\"] # Domain-locked\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `DeveloperCredential` object has a method called `generate_token` which can be used to generate an `access token`"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"token = api_key_credentials.generate_token(slot=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"##### 3. Initializing the App Session (App Authentication)\n",
"\n",
"Now, we initialize a new GIS object using the `access token`. This session is App-authenticated. It does not represent the Admin; it represents the \"API Key Credentials\" app itself."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Authenticate as the App\n",
"gis_app = GIS(token=token[\"access_token\"])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"After running the above cell, `gis_app` will be app-authenticated."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can verify it by running `gis_app.users.me`. It will not return a `User` object"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"gis_app.users.me"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand Down Expand Up @@ -655,7 +774,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.13.5"
"version": "3.12.7"
},
"toc": {
"base_numbering": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,9 @@
"source": [
"<a id=\"querying-layers\"></a>\n",
"## Querying feature layers\n",
"Querying is a powerful operation that can be performed on a `FeatureLayer` object. Let's take a closer look here. To write meaningful queries, we need to know the names of fields present in the layer. This can be determined by calling the `fields` property:"
"Querying is a powerful operation that can be performed on a [`FeatureLayer`](/python/latest/api-reference/arcgis.features.toc.html#arcgis.features.FeatureLayer) object. Let's take a closer look here. To write meaningful queries, we need to know the names of fields present in the layer. This can be determined by calling the `fields` property:\n",
"\n",
"> **Note:** When leveraging Esri hosted content, organizations should review the [ArcGIS Online terms of use](https://doc.arcgis.com/en/arcgis-online/reference/terms-of-use.htm), as well as the terms of use for the data layer to ensure they are in compliance with extracting data and/or making it available in other systems."
]
},
{
Expand Down Expand Up @@ -1503,7 +1505,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
"version": "3.13.2"
},
"toc": {
"base_numbering": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@
"\n",
"The SEDF integrates with Esri's [`ArcPy` site-package](http://pro.arcgis.com/en/pro-app/arcpy/get-started/what-is-arcpy-.htm) as well as the open source [`pyshp`](https://github.com/GeospatialPython/pyshp/), [`shapely`](https://github.com/Toblerity/Shapely) and [`fiona`](https://github.com/Toblerity/Fiona) packages. This means the ArcGIS API for Python SEDF can use either of these geometry engines to provide you options for easily working with geospatial data regardless of your platform. The SEDF transforms data into the formats you desire so you can use Python functionality to analyze and visualize geographic information.\n",
"\n",
"Data can be read and scripted to automate workflows and just as easily visualized on maps in [`Jupyter Lab notebooks`](../using-the-jupyter-notebook-environment/). The SEDF can export data as feature classes or publish them directly to servers for sharing according to your needs. Let's explore some of the different options available with the versatile `Spatial Enabled DataFrame` namespaces:\n"
"Data can be read and scripted to automate workflows and just as easily visualized on maps in [`Jupyter Lab notebooks`](../using-the-jupyter-notebook-environment/). The SEDF can export data as feature classes or publish them directly to servers for sharing according to your needs. \n",
"\n",
"> **_Note:_** When leveraging Esri hosted content, organizations should review the [ArcGIS Online terms of use](https://doc.arcgis.com/en/arcgis-online/reference/terms-of-use.htm), as well as the terms of use for the data layer to ensure they are in compliance with extracting data and/or making it available in other systems.\n",
"\n",
"Let's explore some of the different options available with the versatile `Spatial Enabled DataFrame` namespaces:"
]
},
{
Expand Down Expand Up @@ -1418,7 +1422,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
"version": "3.13.2"
},
"toc": {
"base_numbering": 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"> _Note:_ Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the [Introduction to Data Engineering](../part1-introduction-to-dataengineering) guide series and then come here.\n"
"> _**Note:**_ Spatial Data Engineering using SeDF builds on top of core Data Engineering concepts in Python. If you are new to Pandas, NumPy and related libraries, we recommend you start with the [Introduction to Data Engineering](../part1-introduction-to-dataengineering) guide series and then come here.\n",
"\n",
"> **_Note:_** When leveraging Esri hosted content, organizations should review the [ArcGIS Online terms of use](https://doc.arcgis.com/en/arcgis-online/reference/terms-of-use.htm), as well as the terms of use for the data layer to ensure they are in compliance with extracting data and/or making it available in other systems."
]
},
{
Expand Down Expand Up @@ -1543,7 +1545,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.0"
"version": "3.13.2"
},
"toc": {
"base_numbering": 1,
Expand Down
Loading
Loading