def test_csv_reader(self):
     values, i = [('David', 'Vélo'), ('Michaël', 'Tennis de table'), ('Loïc', 'Piano')], 0
     for name, hobby in csv_reader(os.path.join(here, 'unicode.csv')):
         self.tuple_equal((name, hobby), values[i])
         i += 1
Exemple #2
0
 def test_csv_reader(self):
     values, i = [('David', 'Vélo'), ('Michaël', 'Tennis de table'),
                  ('Loïc', 'Piano')], 0
     for name, hobby in csv_reader(os.path.join(here, 'unicode.csv')):
         self.tuple_equal((name, hobby), values[i])
         i += 1
Exemple #3
0
def init_api(api_core_or_client, api_init_csv_directory, flush=False, add_users=True, add_profiles=True,
             add_medias=True, add_tasks=False, backup_medias_in_remote=True, wait_started=False, timeout=0,
             min_polling_delay=10):
    u"""
    Initialize an instance of ``OrchestraAPICore`` or use provided instance of ``OrchestraAPIClient`` to initialize a
    remote orchestration unit.
    """
    is_core = isinstance(api_core_or_client, OrchestraAPICore)
    orchestra = api_core_or_client if is_core else None
    api_client = api_core_or_client if not is_core else None
    is_standalone = orchestra.is_standalone if is_core else api_client.api_local_config.is_standalone

    if api_client and wait_started:
        time_start = time.time()
        print(u'wait for API to be accessible, timeout {0}'.format(timeout))
        while (timeout == 0) or (time.time() - time_start < timeout):
            time_zero = time.time()
            try:
                print(api_client.about)  # wait for orchestra to answer to HTTP requests
                break
            except Exception as e:
                print(repr(e))
                elapsed = time.time() - time_start
                print('\telapsed: {0}:{1}:{2}'.format(int(elapsed // 3600),       # hours
                                                      int(elapsed % 3600 // 60),  # minutes
                                                      int(elapsed % 3600 % 60)))  # seconds
                time.sleep(max(0, min_polling_delay - (time.time() - time_zero)))

    if flush:
        if is_core:
            orchestra.flush_db()
            # FIXME remove media files
        else:
            api_client.flush()
            api_client.remove_medias()

    user_name = None
    if not is_standalone:
        add_users = False    # ensure that no user is added when the user API is disabled
        user_name = u'root'  # trick to bypass the user.name and display 'root' in the various calls to print()

    users, reader = [], csv_reader(os.path.join(api_init_csv_directory, u'users.csv'))
    for first_name, last_name, email, secret, admin_platform in reader:
        user = User(first_name, last_name, email, secret, admin_platform)
        users.append(user)
        if not add_users:
            continue
        print(u'Adding user {0}'.format(user.name))
        if is_core:
            orchestra.save_user(user, hash_secret=True)
        else:
            api_client.users.add(user)
    users = orchestra.get_users() if is_core and is_standalone else users  # api_client.users.list()

    if add_profiles:
        i, reader = 0, csv_reader(os.path.join(api_init_csv_directory, u'tprofiles.csv'))
        for title, description, encoder_name, encoder_string in reader:
            user = users[i]
            profile = TransformProfile(title=title, description=description, encoder_name=encoder_name,
                                       encoder_string=encoder_string)
            print(u'Adding transformation profile {0} as user {1}'.format(profile.title, user_name or user.name))
            if is_core:
                orchestra.save_transform_profile(profile)
            else:
                if is_standalone:
                    api_client.auth = user
                api_client.transform_profiles.add(profile)
            i = (i + 1) % len(users)

    if add_medias:
        i, reader = 0, csv_reader(os.path.join(api_init_csv_directory, u'medias.csv'))
        for local_filename, filename, title in reader:
            local_filename = os.path.abspath(os.path.expanduser(local_filename))
            user = users[i]
            media = Media(user_id=user._id, filename=filename, metadata={u'title': title}, status=u'READY')
            if not os.path.exists(local_filename):
                print(u'Skip media asset {0}, file "{1}" Not found.'.format(media.metadata[u'title'], local_filename))
                continue
            print(u'Adding media asset {0} as user {1}'.format(media.metadata[u'title'], user_name or user.name))
            if is_core:
                #orchestra.config. bla bla -> get media.uri
                orchestra.save_media(media)
            else:
                if is_standalone:
                    api_client.auth = user
                media.uri = api_client.upload_media(local_filename, backup_in_remote=backup_medias_in_remote)
                api_client.medias.add(media)
            i = (i + 1) % len(users)

    if not is_core:
        return

    if add_tasks:
        reader = csv_reader(os.path.join(api_init_csv_directory, u'ttasks.csv'))
        for user_email, in_filename, profile_title, out_filename, out_title, send_email, queue in reader:
            user = orchestra.get_user({u'mail': user_email}) if is_standalone else User(_id=uuid.uuid4())
            if not user:
                raise IndexError(to_bytes(u'No user with e-mail address {0}.'.format(user_email)))
            for media in orchestra.get_medias():
                print(media.filename)
            media_in = orchestra.get_media({u'filename': in_filename})
            if not media_in:
                raise IndexError(to_bytes(u'No media asset with filename {0}.'.format(in_filename)))
            profile = orchestra.get_transform_profile({u'title': profile_title})
            if not profile:
                raise IndexError(to_bytes(u'No transformation profile with title {0}.'.format(profile_title)))
            print(u'Launching transformation task {0} with profile {1} as user {2}.'.format(
                  media_in.metadata[u'title'], profile.title, user.name))
            metadata = {u'title': out_title}
            orchestra.launch_transform_task(user._id, media_in._id, profile._id, out_filename, metadata, send_email,
                                            queue, u'/transform/callback')
 def test_csv_reader(self):
     values, i = [(u'David', u'Vélo'), (u'Michaël', u'Tennis de table'), (u'Loïc', u'Piano')], 0
     for name, hobby in csv_reader(os.path.join(here, u'unicode.csv')):
         assert_equal((name, hobby), values[i])
         i += 1