コード例 #1
0
ファイル: test_main.py プロジェクト: vladdu/yglu
def test_process_failure():
    input = '''
        a: 1 
        b
    '''
    output = StringIO()
    errors = []
    process(input, output, None, errors)
    assert len(errors) == 1
コード例 #2
0
ファイル: server.py プロジェクト: lbovet/yglu-server
def process_doc():
    input = request.json
    errors = []
    output = StringIO()
    filename = input['filename'] if 'filename' in input else None
    process(input['doc'], output, filename, errors)
    if len(errors) == 0:
        return jsonify({'doc': output.getvalue()})
    else:
        return jsonify({'errors': list(build_errors(errors))})
コード例 #3
0
ファイル: test_main.py プロジェクト: vladdu/yglu
def test_process_ok():
    input = '''
        a: 1 
        b: 2
        ---
        c: 3
    '''
    output = StringIO()
    process(outdent(input), output)
    assert output.getvalue() == 'a: 1\nb: 2\n---\nc: 3\n'
コード例 #4
0
ファイル: ldap_to_gen3.py プロジェクト: umccr/g3po
def generate_user_yaml(
    in_yaml_path: str,
    ldap_server: str,
    ldap_user: str,
    ldap_password: str,
    ldap_search_base: str,
) -> Optional[List[str]]:
    """
    Transforms a yglu YAML file using information from an LDAP server into a user.yaml for gen3.

    :param in_yaml_path: the input YAML path but with yglu annotations
    :param ldap_server: the server
    :param ldap_user: the LDAP user to bind
    :param ldap_password: the LDAP user password for bind
    :param ldap_search_base: the search base for the users we will output
    :return: an array of transform error messages if any, otherwise None
    """
    # because yglu is restricted to importing local files (only in same directory as in the input file) - we want to
    # make a temporary directory and do all our activity there - even if that means we need to do an extra
    # file copy of our input. Otherwise we would be littering the real file system with ldap.yaml files..

    with tempfile.TemporaryDirectory() as tmp_dir_name:
        # get all the file paths we will need in our temp space
        tmp_input_path = os.path.join(tmp_dir_name, "user.in.yaml")
        tmp_output_path = os.path.join(tmp_dir_name, "user.yaml")
        tmp_ldap_path = os.path.join(tmp_dir_name, "ldap.yaml")

        # copy the specified input over into our working directory
        copyfile(in_yaml_path, tmp_input_path)

        # yglu kind of assumes all the files it is working on is in the current dir
        os.chdir(tmp_dir_name)

        server = Server(ldap_server)
        conn = Connection(
            server,
            ldap_user,
            ldap_password,
            client_strategy=SAFE_SYNC,
            auto_bind=True,
            read_only=True,
        )

        # An example search not using readers
        # status, result, response, _ = conn.search(
        #    search_base="ou=groups,o=UMCCR,o=CO,dc=biocommons,dc=org,dc=au",
        #    search_filter="(objectCategory=container)",
        #    search_scope=SUBTREE,
        #    attributes=ALL_ATTRIBUTES,
        # )

        obj_person = ObjectDef(["voPerson", "eduMember", "inetOrgPerson"],
                               conn)

        r = Reader(conn, obj_person, ldap_search_base)

        # make a temporary YAML containing all our ldap entries - for inclusion into the yaml transform
        # (we could also make a groups yaml etc)
        ldap_data = []

        with open(tmp_ldap_path, "w") as ldap_out_file:
            for x in r.search():
                ldap_data.append(x.entry_attributes_as_dict)

            yaml.dump(ldap_data, ldap_out_file)

        errors = []

        with open(tmp_input_path) as in_file:
            with open(tmp_output_path, "w") as out_file:
                process(in_file, out_file, "user.in.yaml", errors)

                if errors:
                    return errors

        # output to stdout to make the CLI tool flexible
        with open(tmp_output_path, "r") as out_file:
            print(out_file.read())

        # return none to indicate there were no errors generated
        return None