def update_agol(url, fld, sequence_value, interval, seq_format='{}'): """Update fetures in an agol/portal service with id values Return next valid sequence value""" # Connect to org securityinfo = {} securityinfo[ 'security_type'] = 'Portal' # LDAP, NTLM, OAuth, Portal, PKI, ArcGIS securityinfo['username'] = username securityinfo['password'] = password securityinfo['org_url'] = orgURL securityinfo['proxy_url'] = None securityinfo['proxy_port'] = None securityinfo['referer_url'] = None securityinfo['token_url'] = None securityinfo['certificatefile'] = None securityinfo['keyfile'] = None securityinfo['client_id'] = None securityinfo['secret_id'] = None shh = securityhandlerhelper.securityhandlerhelper( securityinfo=securityinfo) if not shh.valid: return 'Could not connect to {}. Please verify paths and credentials.'.format( url) fl = FeatureLayer(url=url, securityHandler=shh.securityhandler, proxy_port=None, proxy_url=None, initialize=True) # Build SQL query to find features missing id sql = """{} is null""".format(fld) out_fields = ['objectid', fld] # Get features without id resFeats = fl.query(where=sql, out_fields=','.join(out_fields)) # For each feature for feat in resFeats: id_value = seq_format.format(sequence_value) # Update id feat.set_value(fld, id_value) # Increment sequence value sequence_value += interval update_results = fl.updateFeature(features=resFeats) for res in update_results['updateResults']: if res['success'] == False: return 'error {}: {}'.format(res['error']['code'], res['error']['description']) return sequence_value
securityinfo['referer_url'] = None securityinfo['token_url'] = None securityinfo['certificatefile'] = None securityinfo['keyfile'] = None securityinfo['client_id'] = None securityinfo['secret_id'] = None shh = securityhandlerhelper.securityhandlerhelper(securityinfo=securityinfo) if shh.valid == False: print shh.message else: fl= FeatureLayer( url=url, securityHandler=shh.securityhandler, proxy_port=proxy_port, proxy_url=proxy_url, initialize=True) out_fields = ['objectid'] for fld in fieldInfo: out_fields.append(fld['FieldName']) resFeats = fl.query(where=sql, out_fields=",".join(out_fields)) for feat in resFeats: for fld in fieldInfo: feat.set_value(fld["FieldName"],fld['ValueToSet']) print fl.updateFeature(features=resFeats)
securityinfo['proxy_port'] = proxy_port securityinfo['referer_url'] = None securityinfo['token_url'] = None securityinfo['certificatefile'] = None securityinfo['keyfile'] = None securityinfo['client_id'] = None securityinfo['secret_id'] = None shh = securityhandlerhelper.securityhandlerhelper( securityinfo=securityinfo) if shh.valid == False: print shh.message else: fl = FeatureLayer(url=url, securityHandler=shh.securityhandler, proxy_port=proxy_port, proxy_url=proxy_url, initialize=True) out_fields = ['objectid'] for fld in fieldInfo: out_fields.append(fld['FieldName']) resFeats = fl.query(where=sql, out_fields=",".join(out_fields)) for feat in resFeats: for fld in fieldInfo: feat.set_value(fld["FieldName"], fld['ValueToSet']) print fl.updateFeature(features=resFeats)
securityinfo['keyfile'] = None securityinfo['client_id'] = None securityinfo['secret_id'] = None shh = securityhandlerhelper.securityhandlerhelper(securityinfo=securityinfo) if shh.valid == False: print shh.message else: fl= FeatureLayer( url=url, securityHandler=shh.securityhandler, proxy_port=proxy_port, proxy_url=proxy_url, initialize=True) features = [] json_string={'geometry': { 'y': 1885855.2531960313, 'x': 1034495.0035156211} , 'attributes': { 'NAME': 'NameChange', 'OBJECTID': 1 }} features.append(Feature(json_string=json_string)) print fl.updateFeature(features=features)
sec_handle = securityhandlerhelper.securityhandlerhelper( securityinfo=securityinfo) if sec_handle.valid == False: print sec_handle.message else: #create a feature layer of the AGOL service feature_layer = FeatureLayer( url=url, securityHandler=sec_handle.securityhandler, proxy_port=None, proxy_url=None, initialize=True) out_fields = ['objectid'] #append the field info to each field for field in fieldInfo: out_fields.append(field['FieldName']) #query the feature layer query_feats = feature_layer.query(where=sql, out_fields=",".join(out_fields)) #loop over each feature and field to update for feat in query_feats: for field in fieldInfo: feat.set_value(field["FieldName"], field['ValueToSet']) #update features print feature_layer.updateFeature(features=query_feats)
securityinfo['keyfile'] = None securityinfo['client_id'] = None securityinfo['secret_id'] = None shh = securityhandlerhelper.securityhandlerhelper( securityinfo=securityinfo) if shh.valid == False: print shh.message else: fl = FeatureLayer(url=url, securityHandler=shh.securityhandler, proxy_port=proxy_port, proxy_url=proxy_url, initialize=True) features = [] json_string = { 'geometry': { 'y': 1885855.2531960313, 'x': 1034495.0035156211 }, 'attributes': { 'NAME': 'NameChange', 'OBJECTID': 1 } } features.append(Feature(json_string=json_string)) print fl.updateFeature(features=features)
def main(): """Scan fields in services looking for explicit/sensitive words (as defined). Features are updated if content is found so that a map filter can be used to hide this content""" filter_log = path.join(sys.path[0], 'filter_log.log') with open(filter_log, 'a') as log: log.write('\n{}\n'.format(dt.now())) try: # Build regular expression of explicit words (uppercase formatting) badwords = list(set([str(word).upper() for word in wordlist.bad_words])) badwordsexact = list(set([str(word).upper() for word in wordlist.bad_words_exact])) explicit_filter = '' if badwords: explicit_filter += build_expression(badwords) if badwordsexact: explicit_filter += '|{}'.format(build_expression(badwordsexact)) elif badwordsexact: explicit_filter += build_expression(badwordsexact) # Build regular expression of sensitive words (uppercase formatting) sensitivewords = list(set([str(word).upper() for word in wordlist.sensitive_words])) sensitive_filter = build_expression(sensitivewords) shh = get_shh() if isinstance(shh, str) or isinstance(shh, dict): raise Exception(m1.format(wordlist.orgURL)) # Process each of the services listed above for service in wordlist.services: try: fl = FeatureLayer(url=service['url'], securityHandler=shh.securityhandler, proxy_port=None, proxy_url=None, initialize=True) except: raise Exception(m1.format(service['url'])) # Build SQL query to find visible features if service['status field']: sql = """{} = '{}' AND {} = '{}'""".format(service['flag field'], wordlist.visible_value, service['status field'], wordlist.status_value) else: sql = """{} = '{}'""".format(service['flag field'], wordlist.visible_value) # Fields that will be returned by query out_fields = ['objectid', service['flag field']] + service['fields to scan'] if service['reason field']: out_fields.append(service['reason field']) # Get publicly visible features of the defined status resFeats = fl.query(where=sql, out_fields=",".join(out_fields)) # For each public feature for feat in resFeats: explicit_content = False sensitive_content = False # Check each field listed for explicit or sensitive content for field in service['fields to scan']: text = feat.get_value(field) text = text.upper() # Find words that are on the bad words list if explicit_filter: if re.search(explicit_filter, text): explicit_content = True break # Find words that are on the sensitive words list if sensitive_filter: if re.search(sensitive_filter, text): sensitive_content = True break if sensitive_content or explicit_content: if service['reason field']: reason = '' # Get current reason, if any, and append new reason cur_reason = feat.get_value(service['reason field']) if cur_reason: reason += "{} ".format(cur_reason) if explicit_content: reason += m2 elif sensitive_content: reason += m3 # Update reason feat.set_value(service['reason field'], reason) # Mark feature with hidden value feat.set_value(service['flag field'], wordlist.hidden_value) # Commit updates and print status status = fl.updateFeature(features=resFeats) log.write('{}\n'.format(status)) except Exception as ex: log.write('{}\n'.format(ex))