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
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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))