SwiftApi.Executor (SwiftApi v0.3.0) View Source

Пример работы с api:

client = %SwiftApi.Client{user_name: "stage-user",
                      password: "password",
                      domain_id: "domain_id",
                      url: "url",
                      project_id: "project_id",
                      ca_certificate_path: ca_certificate_path,
                      container: container_name}

container = "my_test"
filename = "test_data2.html"
SwiftApi.Executor.object_temp_url(client, container, filename, 50)

# создадим контейнер
SwiftApi.Executor.create_container(client, "new_container") # => {:ok, ""}
# посмотрим назначенный на него ключ генерации временных ссылок - это же ключ и всего аккаунта по умолчанию
SwiftApi.IdentityTokenWorker.get_temp_url_key("new_container") # => "849df5780624b913595799ae01c90afe16a18a822b51b296"
SwiftApi.IdentityTokenWorker.get_temp_url_key() # => "849df5780624b913595799ae01c90afe16a18a822b51b296"

# прочитаем некий существующий файл
SwiftApi.Executor.get(client, "my_test", "test_data.html") # => {:ok, "<html><body><p>Hello, test user!</p></body></html>"}
# положим в существующий контейнер некоторые данные
SwiftApi.Executor.put(client, "my_test", "test_data", "new data") # => {:ok, ""}
# получим временную ссылку на этот новый файл
SwiftApi.Executor.object_temp_url(client, "my_test", "test_data", 50) # => object_temp_url # строка
# убедимся, что использовался ключ, заданный на этот ранее созданный контейнер
SwiftApi.IdentityTokenWorker.get_temp_url_key("my_test") # => "some_key"

Link to this section Summary

Functions

прочитать детали аккаунта

прочитать детали контейнера

создать при отсутствии контейнер

прочитать файл из хранилища

прочитать файл из хранилища

функция авторизации исполнителя (executor)

получить временную ссылку на файл

Обновить метаданные файла в хранилище

положить файл в хранилище

положить файл в хранилище

получить параметры для временной ссылки

Link to this section Functions

прочитать детали аккаунта

Link to this function

async_get(client, container, file)

View Source
Link to this function

container_details(client, container \\ nil)

View Source

прочитать детали контейнера

Link to this function

container_get(client, container, params \\ %{})

View Source
Link to this function

container_get(client, swift_url, container, params)

View Source
Link to this function

create_container(client, container)

View Source

создать при отсутствии контейнер

Link to this function

delete(client, container, file)

View Source

прочитать файл из хранилища

отличие от get/3 в том, что вторым аргументом передаётся полный путь файла с хранилищем.

SwiftApi.Executor.get(client, "my_test/test_data2.html") # => {:ok, "<html><body><p>user!!!!!111</p></body></html>"}

Важно! путь к файлу не должен начинаться со слэша ("/")!

Link to this function

get(client, container, file)

View Source

прочитать файл из хранилища

  • client - структура данных SwiftApi.Client
  • container - контейнер хранилища. при вызове с пустой строкой или nil в этом аргументе будет использован заданный client.container
  • file - имя файла в контейнере
    SwiftApi.Executor.get(%SwiftApi.Client{...}, nil, "first_name") # => {:ok, "some-data-aaaa", metadata}
    SwiftApi.Executor.get(%SwiftApi.Client{...}, "my_test", "test_data2.html") # => {:ok, "<html><body><p>user!!!!!111</p></body></html>", metadata}

Важно! контейнер не должен начинаться со слэша ("/")!

Link to this function

get_n_minute_valid_token(client, n)

View Source

функция авторизации исполнителя (executor)

в качестве параметра принимает структуру SwiftApi.Client

перед использованием api обязательно должна быть вызвана с успешным завершением

при неудачной аутентификации - когда код статуса отличен от 200, 201, 202, через три таких попытки возвращается ошибка

Link to this function

object_temp_url(client, file, ttl)

View Source

получить временную ссылку на файл

  • client - структура клиента swift, см. SwiftApi.Client
  • container - контейнер, где размещён файл. по умолчанию будет использован контейнер, заданный в клиенте (client.container)
  • file - имя файла, например, "filename.txt"
  • ttl - срок жизни ссылки. 60 - 1 минута, 60*60 = 3600 = 1 час, и т.д.
SwiftApi.Worker.object_temp_url(client, container, filename, 60)
# => "https://object.someurl.pro/v1/AUTH_somehash/my_test1_container1/test.txt?temp_url_sig=efa3e83eaa81a71d47350593d353f61af48506ba&temp_url_expires=1552462575"
Link to this function

object_temp_url(client, container, file, ttl)

View Source
Link to this function

post(client, path, headers)

View Source
Link to this function

post(client, container, file, headers)

View Source

Обновить метаданные файла в хранилище

  • client - структура данных SwiftApi.Client
  • container - контейнер хранилища. при вызове с пустой строкой или nil в этом аргументе будет использован заданный client.container
  • file - имя файла в контейнере
  • headers - метаданные
    SwiftApi.Executor.post(%SwiftApi.Client{...}, nil, "first_name", ["X-Object-Meta-{name}": value]) # => {:ok, [metadata]}

Пример ответа:

{:ok, [ {"content-length", "76"}, {"content-type", "text/html; charset=UTF-8"}, {"x-trans-id", "tx815c30837ddc4c6f89aac-005fb979ca"}, {"x-openstack-request-id", "tx815c30837ddc4c6f89aac-005fb979ca"}, {"date", "Sat, 21 Nov 2020 20:34:18 GMT"} ]}


**Важно!** контейнер не должен начинаться со слэша ("/")!
Link to this function

put(client, path, content)

View Source

положить файл в хранилище

отличие от put/4 в том, что вторым аргументом передаётся полный путь файла с хранилищем.

SwiftApi.Executor.put(client, "my_test/test_data2.html", "data") # => {:ok, ""}

Важно! путь к файлу не должен начинаться со слэша ("/")!

Link to this function

put(client, container, file, content)

View Source

положить файл в хранилище

  • client - структура данных SwiftApi.Client
  • container - контейнер хранилища. при вызове с пустой строкой или nil в этом аргументе будет использован заданный client.container
  • file - имя файла в контейнере
  • content - содержимое файла
    SwiftApi.Executor.put(%SwiftApi.Client{...}, nil, "first_name", "some_data") # => {:ok, ""}
    SwiftApi.Executor.put(%SwiftApi.Client{...}, "my_test", "test_data2.html", "some_data") # => {:ok, ""}

Важно! контейнер не должен начинаться со слэша ("/")!

Link to this function

temp_url_params(ttl, key, url, method \\ "GET")

View Source

получить параметры для временной ссылки

  • ttl - время жизни ссылки, например, 606024 = 86400 = 1 день
  • key - используемый ключ, в частности заголовок "X-Container-Meta-Temp-URL-Key"
  • url - путь до объекта, например: "/v1/AUTH_b31fb563c0b644c8a6a6c1da43258e88/my_test_container/test.txt"
  • method - тип запроса, по умолчанию GET

в результате вернётся пара {temp_url_sig, temp_url_expires}