BLOG
|
Because the deadline for submitting recorded user presentations for DevSummit 2021 was so tight (February 15!), there were some issues I ran into that I could not resolve in time, mainly revolving around the use of arcpy.mp in ArcGIS Server 10.8.1. As a workaround for the presentation, I created a standalone enterprise 10.8 install on a test box in Flagstaff, which was quite slow. The recorded presentation is available here: https://www.youtube.com/watch?v=19eQ7Gp1LoI The slides and sample code are also available here: http://www.pierssen.com/arcgis/python.htm Arcpy.mp Errors It turns out that most of the issues I encountered at 10.8.1 were fixed by a single patch, the "Print Service and Text Element Patch," available here: https://support.esri.com/en/Products/Enterprise/arcgis-server/ArcGIS-Server/10-8-1#downloads?id=7868 Here’s a list of the problems I encountered which were fixed by the patch: Layout.listElements("TEXT_ELEMENT") fails: "java.lang.Exception: Could not service request." Setting TextElement.text fails: "java.lang.Exception: Could not service request." UniqueValueRenderer.listMissingValues crashes Layout.exportToPDF fails: "OSERROR" Since installing the patch, I was able to implement the web tool and application on our 10.8.1 Q Portal in Tucson, which is considerably faster. The COTTONWOOD 1 map, which took 51 seconds to run in the presentation, took only 14 seconds to run in the Q Portal. Authentication: arcpy vs. ArcGIS API for Python Another issue that I ran into was authentication. While the ArcGIS API for Python correctly encapsulates the identity of the user of the web tool, the arcpy identity is the owner of the ArcSOC process. Why is this a problem? If the layers in a Pro project are not available to the ArcSOC owner, they will not render in the exported PDF. Currently, there is no way for arcpy to sign into portal using the credentials of the web tool user. [If this is a concern to you, please vote up my idea here: https://community.esri.com/t5/python-ideas/arcpy-sign-into-portal-using-python-api/idi-p/1039109 ] For the presentation, I worked around the problem by sharing the layers with everyone. However, this is not acceptable for sensitive map data in a Portal which is exposed to the public. The workaround I settled upon is to use the “cryptography” module which is included with ArcGIS Pro: https://pypi.org/project/cryptography/ I created a built-in user in Portal which could access the layers in the Pro project, and created a text file in the project folder containing the encryption key and the encrypted user name and password. I then used that file to sign arcpy into Portal: def _SignIn(self):
# Retrieve credentials and sign in to Portal
from cryptography.fernet import Fernet
sKeyFile = os.path.join(self.__sProjectDir, "Encrypted.txt")
with open(sKeyFile) as f:
sContent = f.read()
tok = sContent.split("\n")
sKey = bytes(tok[0], encoding="utf-8")
sUserTok = bytes(tok[1], encoding="utf-8")
sPassTok = bytes(tok[2], encoding="utf-8")
f = Fernet(sKey)
sUser = f.decrypt(sUserTok)
sPass = f.decrypt(sPassTok)
sPortal = arcpy.GetActivePortalURL()
arcpy.SignInToPortal(sPortal, sUser, sPass)
return See the updated version of the Python toolbox (attached) for more info.
... View more
04-09-2021
02:06 PM
|
0
|
0
|
1338
|
BLOG
|
While the above web tool example works at Server 10.8, it broke for me at 10.8.1. However, there is a patch which fixed the problem: "Print Service and Text Element Patch." For more information, see my blog post: "Follow-up: Utility Network, ArcPy.mp, and JSAPI Enable Map Product Delivery via Portal."
... View more
04-09-2021
01:54 PM
|
0
|
0
|
594
|
POST
|
I don't seem to be able to create blog posts anymore. As a follow-up to my DevSummit 2021 user presentation, I tried adding a comment to an existing blog post of mine, and the comment winked out of existence. I tried it again with the same result. Now my old blog post indicates 2 comments, but displays nothing. https://community.esri.com/t5/developers-blog/migrating-a-plot-from-arcobjects-and-arcmap-to-arcpy-mp-and/ba-p/892273 [Updated Url - somehow a bad one crept in]
... View more
04-09-2021
10:25 AM
|
0
|
2
|
1114
|
POST
|
Whoa! Here at the former GeoNet, the Community UI booted me right out and required my signing in again. Naughty, naughty! Aside from that, my favorite DevSummit streaming peeves: buffering, buffering, dropping out, skipping, etc. I totally dropped connection twice so far. On the other hand, I am glad that I could download slide decks right away (ahem! only for certain sessions). Push comes to shove, this is no replacement for the real thing. But I commend the Esri staff for doing what they can.
... View more
04-07-2021
10:31 PM
|
1
|
0
|
1221
|
IDEA
|
When a Python tool is published as a web tool, the user's credentials are available via the GIS object in the Python API. However, those credentials cannot be used in arcpy.SignInToPortal in order to access Portal layers in a Pro project. I would like to see either a new method on the GIS object to sign in arcpy, or else allow the GIS object as an argument in the arcpy function.
... View more
03-21-2021
01:14 PM
|
3
|
1
|
1342
|
POST
|
I ended up creating a special account and storing the encrypted password. I'm not incredibly happy with that approach, but it at least prevents hard-coding credentials.
... View more
03-21-2021
01:00 PM
|
0
|
0
|
1022
|
POST
|
I have a web tool that uses both arcpy and Python API. The arcgis.gis.GIS object correctly sees the user of the web tool, but arcpy sees the owner of the ArcSOC process. I would like arcpy to sign into Portal as the web tool user [so that layers in a Pro project will be visible, which I don't want to share with Everyone]. Is there any way to do this?
... View more
03-16-2021
09:27 AM
|
0
|
2
|
1060
|
POST
|
I'm seeing this problem in Pro 2.5 through 2.7. print("Initializing...")
import arcgis
def ExtentTest():
sUrl = "https://services5.arcgis.com/4LKAHwqnBooVDUlX/ArcGIS/rest/services/ParkBoundaries/FeatureServer/0"
sWhere = "ParkName = 'Alta Lake'"
lyr = arcgis.features.FeatureLayer(sUrl)
result = lyr.query(sWhere, return_extent_only=True)
env = arcgis.geometry.Geometry(result["extent"])
print("Env: " + str(env))
sr = env.spatial_reference.as_arcpy
print("SR (arcpy): " + str(sr))
# arcgis.geometry.Envelope.as_arcpy blows away spatial reference
ext = env.as_arcpy
print("Env (arcpy) sr: " + str(ext.spatialReference))
return
print("Running...")
ExtentTest()
print("Done.")
... View more
01-30-2021
12:13 PM
|
0
|
2
|
1290
|
BLOG
|
NOTE: The weather service has stopped maintaining the radar imagery site. Therefore, the above examples will no longer work.
... View more
12-18-2020
10:47 AM
|
0
|
0
|
996
|
POST
|
I notice that you're using the same engine for registration and user presentation submittals, which requires resubmitting information every time I sign in. That's okay, I'll give you a pass. This has been a tough year.
... View more
12-17-2020
11:26 AM
|
0
|
0
|
825
|
IDEA
|
While we're at it, let's add a "network" mode for Utility Network data. I've had to write my own geometry repair code because even on a file GDB the tool is too lax for data migration.
... View more
10-14-2020
07:55 AM
|
2
|
0
|
2046
|
POST
|
It turns out to be a file geodatabase issue again. If 2.6.2 creates and processes the source file GDB, and then creates the MMPK, it will be bad. If 2.5.2 creates and processes the file GDB, 2.6.2 will generate a good MMPK. Since 2.6.x is already known to have multiple issues with file geodatabases, I don't see the value in opening another support case.
... View more
10-12-2020
12:48 PM
|
0
|
0
|
1515
|
POST
|
No dice. Back to 2.5.2. In the meantime, I'm putting together some sample data for Esri tech support.
... View more
10-08-2020
02:29 PM
|
0
|
0
|
1515
|
Title | Kudos | Posted |
---|---|---|
1 | 01-04-2012 06:42 AM | |
1 | 09-23-2021 10:42 AM | |
2 | 09-28-2021 07:07 AM | |
1 | 04-07-2021 10:31 PM | |
3 | 03-21-2021 01:14 PM |
Online Status |
Offline
|
Date Last Visited |
01-07-2022
08:31 AM
|