Esempio n. 1
0
def main():
    setup_logger()
    args = parse_args()

    api = create_api(server=args.server,
                     username=args.username,
                     password=args.password)

    p = {
        'fields':
        'id,name,description,leftSide[expression],rightSide[expression]',
        'paging': False
    }
    data = api.get('validationRules', params=p).json()

    uid_cache = set()
    for i, rule in enumerate(data['validationRules'], 1):
        info_msg = "{}/{} Analyzing Validation Rule '{}' ({})"
        logger.info(
            info_msg.format(i, len(data['validationRules']), rule['name'],
                            rule['id']))

        uids_in_expressions = extract_uids(rule)
        for uid in uids_in_expressions:
            if uid not in uid_cache:
                try:
                    api.get('identifiableObjects/{}'.format(uid)).json()
                except APIException as exc:
                    if exc.code == 404:
                        logger.warn(
                            "UID in expression not identified: {}".format(uid))
                    else:
                        logger.error(exc)
                else:
                    uid_cache.add(uid)
Esempio n. 2
0
def main():
    args, password = parse_args()
    setup_logger(include_caller=False)
    api = create_api(server=args.server,
                     username=args.username,
                     password=password)
    validate_file(args.css)
    post_file(api, filename=args.css)
    logger.info(
        "{} CSS posted to {}. Clear your Browser cache / use Incognito.".
        format(args.css, api.api_url))
Esempio n. 3
0
def main():
    setup_logger(include_caller=False)
    args, password = parse_args()

    api = create_api(server=args.server,
                     username=args.username,
                     password=password)

    check_validation_rules(api)
    check_option_sets(api)
    check_category_options(api)
    check_categories(api)
    check_category_combos(api)
Esempio n. 4
0
def main():
    setup_logger(include_caller=False)
    args = parse_args()
    if args.logging_to_file:
        if args.debug:
            setup_logger(logfile=args.logging_to_file,
                         log_level=DEBUG,
                         include_caller=True)
        else:
            setup_logger(logfile=args.logging_to_file, include_caller=False)
    elif args.debug:
        setup_logger(log_level=DEBUG, include_caller=True)

    api = create_api(server=args.server,
                     username=args.username,
                     password=args.password,
                     api_version=args.api_version)
    validate_args(args, api.version_int)

    public_access = Permission.from_public_args(args.public_access)
    collection = ShareableObjectCollection(api, args.object_type, args.filter)
    usergroups = UserGroupsCollection(api, args.groups)
    validate_data_access(public_access, collection, usergroups,
                         api.version_int)

    logger.info(u"Public access ➜ {}".format(public_access))

    for i, element in enumerate(collection.elements, 1):
        update = ShareableObject(obj_type=element.obj_type,
                                 uid=element.uid,
                                 name=element.name,
                                 code=element.code,
                                 public_access=public_access,
                                 usergroup_accesses=usergroups.accesses)

        pointer = u"{0}/{1} {2} {3}".format(i, len(collection.elements),
                                            collection.name, element.uid)

        if not skip(args.overwrite, element, update):
            logger.info(u"{0} {1}".format(pointer, element.log_identifier))
            share(api, update)

        else:
            logger.warning(u'Not overwriting: {0} {1}'.format(
                pointer, element.log_identifier))
Esempio n. 5
0
def main():
    setup_logger(include_caller=False)
    args, password = parse_args()

    api = create_api(server=args.server,
                     username=args.username,
                     password=password,
                     api_version=args.api_version)

    file_name = '{}-{}.csv'.format(args.indicator_type,
                                   file_timestamp(api.api_url))

    if args.indicator_type == 'indicators':
        fields = ','.join(
            [x for x in indicator_fields.values() if x != 'type'])

    elif args.indicator_type == 'programIndicators':
        fields = ','.join([
            x for x in program_indicator_fields.values()
            if x not in ('type', 'program_name')
        ])

    else:
        raise SystemExit('Cannot process argument -t {}'.format(
            args.indicator_type))

    indicators = api.get(endpoint=args.indicator_type,
                         params=get_params(args.indicator_filter,
                                           fields)).json()
    message = analyze_result(args.indicator_type, indicators,
                             args.indicator_filter)
    logger.info(message)

    logger.info("Analyzing metadata...")
    object_mapping = object_map(api)

    write_to_csv(api, args.indicator_type, indicators, object_mapping,
                 file_name)
Esempio n. 6
0
def main():
    setup_logger()
    args = parse_args()
    api = create_api(server=args.server,
                     username=args.username,
                     password=args.password)

    Attribute = namedtuple('Attribute', 'uid name')
    Attribute.uid = args.attribute_uid
    Attribute.name = get_attribute_name(api, args.attribute_uid)
    typ = args.object_type

    attribute_is_on_model(api, Attribute, typ)

    data = list(load_csv(args.source_csv))
    validate_csv(data)

    logger.info(u"Updating values for Attribute '{}' ({}) on {} {} ...".format(
        Attribute.name, Attribute.uid, len(data), typ))
    for i in range(3, 0, -1):
        time.sleep(i)
        print('Proceeding in {}...'.format(i))

    for i, obj in enumerate(data, 1):
        obj_uid = obj['uid']
        attribute_value = obj['attributeValue']

        obj_old = api.get('{}/{}'.format(args.object_type, obj_uid),
                          params={
                              'fields': ':owner'
                          }).json()
        obj_updated = create_or_update_attribute_values(
            obj_old, Attribute.uid, attribute_value)

        api.put('{}/{}'.format(typ, obj_uid), data=obj_updated)
        logger.info(u"{}/{} - Updated AttributeValue: {} - {}: {}".format(
            i, len(data), attribute_value, typ[:-1], obj_uid))
Esempio n. 7
0
def main():
    setup_logger(include_caller=False)
    args, password = parse_args()
    if args.logging_to_file:
        if args.debug:
            setup_logger(logfile=args.logging_to_file,
                         log_level=DEBUG,
                         include_caller=True)
        else:
            setup_logger(logfile=args.logging_to_file, include_caller=False)
    elif args.debug:
        setup_logger(log_level=DEBUG, include_caller=True)

    api = create_api(server=args.server,
                     username=args.username,
                     password=password,
                     api_version=args.api_version)
    validate_args(args, api.version_int)

    public_access_permission = Permission.from_public_args(args.public_access)
    collection = ShareableObjectCollection(api, args.object_type, args.filter)
    usergroups = UserGroupsCollection(api, args.groups)
    validate_data_access(public_access_permission, collection, usergroups,
                         api.version_int)

    # sort by name
    try:
        elements = sorted(collection.elements, key=operator.attrgetter('name'))
    except AttributeError:
        elements = collection.elements

    # handle log messages and collection-wide public access and usergroup access if applicable
    if args.extend:
        if not args.public_access:
            logger.warning(u"Public access {} INHERIT".format(ARROW))
        else:
            logger.info(u"Public access {} {}".format(
                ARROW, public_access_permission))
            public_access = Permission.from_public_args(args.public_access)
        logger.warning(u"Extending with additional User Groups...")

    else:
        logger.info(u"Public access {} {}".format(ARROW,
                                                  public_access_permission))
        public_access = Permission.from_public_args(args.public_access)
        usergroup_accesses = usergroups.accesses

    time.sleep(2)

    for i, element in enumerate(elements, 1):
        if args.extend:
            # merge user group accesses
            usergroup_accesses = merge(server_uga=element.usergroup_accesses,
                                       local_uga=usergroups.accesses)
            # if public access is not provided via argument, re-use public access from object on server
            if not args.public_access:
                public_access = element.public_access

        # no issue for public_access and usergroup_accesses since it's set above with same if/else check
        # to improve performance and allow for logical logging message placement
        # noinspection PyUnboundLocalVariable
        update = ShareableObject(obj_type=element.obj_type,
                                 uid=element.uid,
                                 name=element.name,
                                 code=element.code,
                                 public_access=public_access,
                                 usergroup_accesses=usergroup_accesses)

        pointer = u"{0}/{1} {2} {3}".format(i, len(collection.elements),
                                            collection.name, element.uid)

        if not skip(args.overwrite, element, update):
            logger.info(u"{0} {1}".format(pointer, element.log_identifier))
            share(api, update)

        else:
            logger.warning(u'Skipping (already shared): {0} {1}'.format(
                pointer, element.log_identifier))