예제 #1
0
파일: __init__.py 프로젝트: iskitsas/MISP
def get_markings(obj, selectors=None, inherited=False, descendants=False):
    """
    Get all markings associated to the field(s).

    Args:
        obj: An SDO or SRO object.
        selectors: string or list of selectors strings relative to the SDO or
            SRO in which the properties appear.
        inherited: If True, include object level markings and granular markings
            inherited relative to the properties.
        descendants: If True, include granular markings applied to any children
            relative to the properties.

    Returns:
        list: Marking identifiers that matched the selectors expression.

    Note:
        If ``selectors`` is None, operation will be performed only on object
        level markings.

    """
    if selectors is None:
        return object_markings.get_markings(obj)

    results = granular_markings.get_markings(obj, selectors, inherited,
                                             descendants)

    if inherited:
        results.extend(object_markings.get_markings(obj))

    return list(set(results))
def is_marked(obj,
              marking=None,
              selectors=None,
              inherited=False,
              descendants=False):
    """
    Check if field(s) is marked by any marking or by specific marking(s).

    Args:
        obj: An SDO or SRO object.
        marking: identifier or list of marking identifiers that apply to the
            properties selected by `selectors`.
        selectors: string or list of selectors strings relative to the SDO or
            SRO in which the field(s) appear(s).
        inherited (bool): If True, include object level markings and granular
            markings inherited to determine if the properties is/are marked.
        descendants (bool): If True, include granular markings applied to any
            children of the given selector to determine if the properties
            is/are marked.

    Returns:
        bool: True if ``selectors`` is found on internal SDO or SRO collection.
            False otherwise.

    Note:
        When a list of marking identifiers is provided, if ANY of the provided
        marking identifiers match, True is returned.

        If ``selectors`` is None, operation will be performed only on object
        level markings.

    """
    if selectors is None:
        return object_markings.is_marked(obj, marking)

    result = granular_markings.is_marked(
        obj,
        marking,
        selectors,
        inherited,
        descendants,
    )

    if inherited:
        granular_marks = granular_markings.get_markings(obj, selectors)
        object_marks = object_markings.get_markings(obj)

        if granular_marks:
            result = granular_markings.is_marked(
                obj,
                granular_marks,
                selectors,
                inherited,
                descendants,
            )

        result = result or object_markings.is_marked(obj, object_marks)

    return result