{"id":1516582,"date":"2022-03-22T16:22:27","date_gmt":"2022-03-22T23:22:27","guid":{"rendered":"https:\/\/www.esri.com\/arcgis-blog\/?post_type=blog&#038;p=1516582"},"modified":"2022-11-01T11:00:54","modified_gmt":"2022-11-01T18:00:54","slug":"automate-attribute-rules-deployment","status":"publish","type":"blog","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment","title":{"rendered":"A Python script to Automate Attribute Rules Deployment"},"author":7511,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"closed","template":"","format":"standard","meta":{"_acf_changed":false,"_searchwp_excluded":""},"categories":[23851],"tags":[302212],"industry":[],"product":[36841,36561],"class_list":["post-1516582","blog","type-blog","status-publish","format-standard","hentry","category-data-management","tag-attribute-rules","product-api-python","product-arcgis-pro"],"acf":{"short_description":"Deploying changes to attribute rules can be challenging, this blog shares a python script example of how to simplify it","flexible_content":[{"acf_fc_layout":"content","content":"<p><a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/geodatabases\/overview\/an-overview-of-attribute-rules.htm\">Attribute rules<\/a> are authored using the <a href=\"https:\/\/developers.arcgis.com\/arcade\/\">Arcade scripting<\/a> language. They are deployed to the geodatabase, optionally published to ArcGIS Enterprise and can be consumed by various client applications. However attribute rules are not static; You might want to change them as you find issues with expressions you&#8217;ve authored, want to introduce a new feature to your script, enable new editing triggers, or simply add more verbose descriptions.<\/p>\n<p>When managing large number of attribute rules across multiple classes in your geodatabase it can become challenging to deploy fixes or updates to the attribute rules.\u00a0 In this short blog I describe how you can automate attribute rules deployments using Python when making changes to Arcade expressions.<\/p>\n"},{"acf_fc_layout":"content","content":"<p>Attribute rules are part of the geodatabase schema, just like fields, subtypes, domains etc. This means when attempting to update an attribute rule in a table, you will need to make sure the table is not opened by other applications or services. Stopping all services and applications using that table will release any shared lock that has been acquired and allow attribute rules to be changed (by acquiring an exclusive lock). <a href=\"https:\/\/pro.arcgis.com\/en\/pro-app\/latest\/help\/data\/geodatabases\/overview\/manage-geodatabase-locks.htm\">Locks<\/a> are a common practice in the geodatabase to maintain the consistency and integrity of the data definition in the geodatabase model. Attribute rules can be updated from the grid view in ArcGIS Pro, GP tools, or Python.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1516652,"id":1516652,"title":"The attribute rules grid view","filename":"b1.png","filesize":8284,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\/b1-2","alt":"The attribute rules grid view","author":"7511","description":"The attribute rules grid view","caption":"The attribute rules grid view","name":"b1-2","status":"inherit","uploaded_to":1516582,"date":"2022-03-17 22:45:39","modified":"2022-03-18 15:48:03","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":588,"height":276,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","medium-width":464,"medium-height":218,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","medium_large-width":588,"medium_large-height":276,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","large-width":588,"large-height":276,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","1536x1536-width":588,"1536x1536-height":276,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","2048x2048-width":588,"2048x2048-height":276,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","card_image-width":588,"card_image-height":276,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b1.png","wide_image-width":588,"wide_image-height":276}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"image","image":{"ID":1516632,"id":1516632,"title":"Attribute rules gp toolbox","filename":"b3.png","filesize":7052,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\/b3-5","alt":"Attribute rules gp toolbox","author":"7511","description":"Attribute rules gp toolbox","caption":"Attribute rules gp toolbox","name":"b3-5","status":"inherit","uploaded_to":1516582,"date":"2022-03-17 22:45:32","modified":"2022-03-18 15:48:17","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":297,"height":451,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","medium-width":172,"medium-height":261,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","medium_large-width":297,"medium_large-height":451,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","large-width":297,"large-height":451,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","1536x1536-width":297,"1536x1536-height":451,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","2048x2048-width":297,"2048x2048-height":451,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","card_image-width":297,"card_image-height":451,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b3.png","wide_image-width":297,"wide_image-height":451}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>It is common practice to update attribute rules in the primary geodatabase (source of truth) and later apply the changes to downstream geodatabases that might have been shared with other parties. Making these attribute rules changes manually can be daunting especially if you have hundreds of attribute rules spread across multiple classes.<\/p>\n"},{"acf_fc_layout":"image","image":{"ID":1516642,"id":1516642,"title":"b2","filename":"b2.png","filesize":3313,"url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","link":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\/b2-2","alt":"","author":"7511","description":"","caption":"","name":"b2-2","status":"inherit","uploaded_to":1516582,"date":"2022-03-17 22:45:36","modified":"2022-03-17 22:45:36","menu_order":0,"mime_type":"image\/png","type":"image","subtype":"png","icon":"https:\/\/www.esri.com\/arcgis-blog\/wp-includes\/images\/media\/default.png","width":224,"height":257,"sizes":{"thumbnail":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2-213x200.png","thumbnail-width":213,"thumbnail-height":200,"medium":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","medium-width":224,"medium-height":257,"medium_large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","medium_large-width":224,"medium_large-height":257,"large":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","large-width":224,"large-height":257,"1536x1536":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","1536x1536-width":224,"1536x1536-height":257,"2048x2048":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","2048x2048-width":224,"2048x2048-height":257,"card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","card_image-width":224,"card_image-height":257,"wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/b2.png","wide_image-width":224,"wide_image-height":257}},"image_position":"center","orientation":"horizontal","hyperlink":""},{"acf_fc_layout":"content","content":"<p>Shared below is a Python script that reads attribute rules across all classes from geodatabase\u00a0<strong>A<\/strong>\u00a0(source of truth). The script then updates the attribute rules in the corresponding target geodatabase\u00a0<strong>B<\/strong>. This script is provided as an example. Note that this script assumes all attribute rules already exist on the target and only updates the Arcade expression of the attribute rule. You can make modifications to the script to make it update triggers, rule descriptions, or other attribute rules properties.<\/p>\n"},{"acf_fc_layout":"sidebar","content":"<p>Python script<\/p>\n","image_reference":false,"layout":"code_snippet","image_reference_figure":"","snippet":"import os\r\nimport arcpy\r\nsourceGdb = \"C:\\\\temp\\\\A.gdb\"  # path to the source geodatabase where attribute rules will be read from\r\ntargetGdb = \"C:\\\\temp\\\\B.gdb\"  # path to the target geodatabase where attribute rules will be updated to\r\n# read all classes\/tables in the source geodatabase\r\nfor dirpath, dirnames, filenames in arcpy.da.Walk(sourceGdb, datatype=[\"Table\", \"FeatureClass\"]):\r\n    for filename in filenames:\r\n        source = os.path.join(sourceGdb, filename)\r\n        target = os.path.join(targetGdb, filename)\r\n        # for each attribute rule in each dataset\r\n        print(filename)\r\n        for ar in arcpy.Describe(source).attributeRules:\r\n            print(f\"\\t{ar.name}\")\r\n            # update attribute rule\r\n            arcpy.AlterAttributeRule_management(target, ar.name, script_expression=ar.scriptExpression)","spotlight_name":"","section_title":"","position":"Center","spotlight_image":false}],"authors":[{"ID":7511,"user_firstname":"Hussein","user_lastname":"Nasser","nickname":"Hussein Nasser","user_nicename":"hussein-nasser","display_name":"Hussein Nasser","user_email":"HNasser@esri.com","user_url":"http:\/\/www.husseinnasser.com","user_registered":"2018-03-21 18:21:21","user_description":"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.","user_avatar":"<img data-del=\"avatar\" src='https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png' class='avatar pp-user-avatar avatar-96 photo ' height='96' width='96'\/>"}],"related_articles":"","card_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/esri1.png","wide_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/esri2.png"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>A Python script to Automate Attribute Rules Deployment<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Python script to Automate Attribute Rules Deployment\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\" \/>\n<meta property=\"og:site_name\" content=\"ArcGIS Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/esrigis\/\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-01T18:00:54+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@ESRI\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":[\"Article\",\"BlogPosting\"],\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\"},\"author\":{\"name\":\"Hussein Nasser\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b\"},\"headline\":\"A Python script to Automate Attribute Rules Deployment\",\"datePublished\":\"2022-03-22T23:22:27+00:00\",\"dateModified\":\"2022-11-01T18:00:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\"},\"wordCount\":8,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"keywords\":[\"attribute rules\"],\"articleSection\":[\"Data Management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\",\"name\":\"A Python script to Automate Attribute Rules Deployment\",\"isPartOf\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\"},\"datePublished\":\"2022-03-22T23:22:27+00:00\",\"dateModified\":\"2022-11-01T18:00:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.esri.com\/arcgis-blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Python script to Automate Attribute Rules Deployment\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#website\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"name\":\"ArcGIS Blog\",\"description\":\"Get insider info from Esri product teams\",\"publisher\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#organization\",\"name\":\"Esri\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png\",\"width\":400,\"height\":400,\"caption\":\"Esri\"},\"image\":{\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/esrigis\/\",\"https:\/\/x.com\/ESRI\",\"https:\/\/www.linkedin.com\/company\/5311\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b\",\"name\":\"Hussein Nasser\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png\",\"contentUrl\":\"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png\",\"caption\":\"Hussein Nasser\"},\"description\":\"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.\",\"sameAs\":[\"http:\/\/www.husseinnasser.com\",\"https:\/\/www.linkedin.com\/in\/hnaser\/\",\"https:\/\/x.com\/hnasr\"],\"url\":\"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"A Python script to Automate Attribute Rules Deployment","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment","og_locale":"en_US","og_type":"article","og_title":"A Python script to Automate Attribute Rules Deployment","og_url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment","og_site_name":"ArcGIS Blog","article_publisher":"https:\/\/www.facebook.com\/esrigis\/","article_modified_time":"2022-11-01T18:00:54+00:00","twitter_card":"summary_large_image","twitter_site":"@ESRI","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":["Article","BlogPosting"],"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#article","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment"},"author":{"name":"Hussein Nasser","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b"},"headline":"A Python script to Automate Attribute Rules Deployment","datePublished":"2022-03-22T23:22:27+00:00","dateModified":"2022-11-01T18:00:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment"},"wordCount":8,"commentCount":2,"publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"keywords":["attribute rules"],"articleSection":["Data Management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment","url":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment","name":"A Python script to Automate Attribute Rules Deployment","isPartOf":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#website"},"datePublished":"2022-03-22T23:22:27+00:00","dateModified":"2022-11-01T18:00:54+00:00","breadcrumb":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.esri.com\/arcgis-blog\/products\/api-python\/data-management\/automate-attribute-rules-deployment#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.esri.com\/arcgis-blog\/"},{"@type":"ListItem","position":2,"name":"A Python script to Automate Attribute Rules Deployment"}]},{"@type":"WebSite","@id":"https:\/\/www.esri.com\/arcgis-blog\/#website","url":"https:\/\/www.esri.com\/arcgis-blog\/","name":"ArcGIS Blog","description":"Get insider info from Esri product teams","publisher":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.esri.com\/arcgis-blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.esri.com\/arcgis-blog\/#organization","name":"Esri","url":"https:\/\/www.esri.com\/arcgis-blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/04\/Esri.png","width":400,"height":400,"caption":"Esri"},"image":{"@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/esrigis\/","https:\/\/x.com\/ESRI","https:\/\/www.linkedin.com\/company\/5311\/"]},{"@type":"Person","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/78b7647b1db598b3c791d039593e5b2b","name":"Hussein Nasser","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.esri.com\/arcgis-blog\/#\/schema\/person\/image\/","url":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png","contentUrl":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2018\/06\/profile.png","caption":"Hussein Nasser"},"description":"Product Engineer at Esri, Author of several GIS books and Software Engineering Content Creator on YouTube and a podcast host.","sameAs":["http:\/\/www.husseinnasser.com","https:\/\/www.linkedin.com\/in\/hnaser\/","https:\/\/x.com\/hnasr"],"url":"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser"}]}},"text_date":"March 22, 2022","author_name":"Hussein Nasser","author_page":"https:\/\/www.esri.com\/arcgis-blog\/author\/hussein-nasser","custom_image":"https:\/\/www.esri.com\/arcgis-blog\/app\/uploads\/2022\/03\/esri2.png","primary_product":"ArcGIS API for Python","tag_data":[{"term_id":302212,"name":"attribute rules","slug":"attribute-rules","term_group":0,"term_taxonomy_id":302212,"taxonomy":"post_tag","description":"","parent":0,"count":35,"filter":"raw"}],"category_data":[{"term_id":23851,"name":"Data Management","slug":"data-management","term_group":0,"term_taxonomy_id":23851,"taxonomy":"category","description":"","parent":0,"count":921,"filter":"raw"}],"product_data":[{"term_id":36841,"name":"ArcGIS API for Python","slug":"api-python","term_group":0,"term_taxonomy_id":36841,"taxonomy":"product","description":"","parent":36601,"count":151,"filter":"raw"},{"term_id":36561,"name":"ArcGIS Pro","slug":"arcgis-pro","term_group":0,"term_taxonomy_id":36561,"taxonomy":"product","description":"","parent":0,"count":2038,"filter":"raw"}],"primary_product_link":"https:\/\/www.esri.com\/arcgis-blog\/?s=#&products=api-python","_links":{"self":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1516582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/users\/7511"}],"replies":[{"embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/comments?post=1516582"}],"version-history":[{"count":0,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/blog\/1516582\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/media?parent=1516582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/categories?post=1516582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/tags?post=1516582"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/industry?post=1516582"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.esri.com\/arcgis-blog\/wp-json\/wp\/v2\/product?post=1516582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}