├── .gitignore
├── tests
├── data
│ ├── file-to-upload.txt
│ └── fixture
│ │ ├── test-folder
│ │ ├── file1.txt
│ │ ├── file2.txt
│ │ └── public_file.txt
│ │ └── public_folder
│ │ ├── public_file.txt
│ │ └── file_from_public_folder.txt
├── urlhelpers-test.os
└── yadisk-test.os
├── lib.config
├── packagedef
├── src
├── urlhelpers.os
└── yadisk.os
├── README.md
└── LICENSE
/.gitignore:
--------------------------------------------------------------------------------
1 | oauth_token.txt
--------------------------------------------------------------------------------
/tests/data/file-to-upload.txt:
--------------------------------------------------------------------------------
1 | Hello!
--------------------------------------------------------------------------------
/tests/data/fixture/test-folder/file1.txt:
--------------------------------------------------------------------------------
1 | Hello!
2 |
--------------------------------------------------------------------------------
/tests/data/fixture/test-folder/file2.txt:
--------------------------------------------------------------------------------
1 | Hello!
2 |
--------------------------------------------------------------------------------
/tests/data/fixture/test-folder/public_file.txt:
--------------------------------------------------------------------------------
1 | Hello!
2 |
--------------------------------------------------------------------------------
/tests/data/fixture/public_folder/public_file.txt:
--------------------------------------------------------------------------------
1 | Hello!
2 |
--------------------------------------------------------------------------------
/tests/data/fixture/public_folder/file_from_public_folder.txt:
--------------------------------------------------------------------------------
1 | Hello!
2 |
--------------------------------------------------------------------------------
/lib.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/packagedef:
--------------------------------------------------------------------------------
1 |
2 | Описание.Имя("yadisk")
3 | .Версия("1.0")
4 | .ВключитьФайл("src")
5 | .ВключитьФайл("tests")
6 | .ВключитьФайл("lib.config")
--------------------------------------------------------------------------------
/src/urlhelpers.os:
--------------------------------------------------------------------------------
1 |
2 | // Формирует строку запроса в формате URL-encoded (query string)
3 | Функция СформироватьСтрокуЗапроса(ПараметрыЗапроса) Экспорт
4 | СтрокаЗапроса = "";
5 |
6 | Если ПараметрыЗапроса.Количество() > 0 Тогда
7 | Для каждого Элемент из ПараметрыЗапроса Цикл
8 | Если НЕ ПустаяСтрока(СтрокаЗапроса) Тогда
9 | СтрокаЗапроса = СтрокаЗапроса + "&";
10 | КонецЕсли;
11 | СтрокаЗапроса = СтрокаЗапроса + КодироватьСтроку(Элемент.Ключ, СпособКодированияСтроки.КодировкаURL) +
12 | "=" + КодироватьСтроку(Значение1СвЗначениеJS(Элемент.Значение), СпособКодированияСтроки.КодировкаURL);
13 | КонецЦикла;
14 | КонецЕсли;
15 |
16 | Возврат СтрокаЗапроса;
17 | КонецФункции
18 |
19 | Функция СформироватьСтруктуруПараметровЗапроса(СтрокаИменДопустимыхПараметров, СтруктураОбязательныхПараметров, СтруктураДополнительныхПараметров=Неопределено) Экспорт
20 | СтруктураПараметровЗапроса = Новый Структура;
21 | СтруктураДопустимыхПараметров = Новый Структура(СтрокаИменДопустимыхПараметров);
22 |
23 | Если СтруктураОбязательныхПараметров <> Неопределено Тогда
24 | ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураОбязательныхПараметров, СтруктураДопустимыхПараметров);
25 | КонецЕсли;
26 |
27 | Если СтруктураДополнительныхПараметров <> Неопределено Тогда
28 | ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураДополнительныхПараметров, СтруктураДопустимыхПараметров);
29 | КонецЕсли;
30 |
31 | Возврат СтруктураПараметровЗапроса;
32 | КонецФункции
33 |
34 | Процедура ДобавитьПараметры(СтруктураПараметровЗапроса, СтруктураСоЗначениямиПараметров, СтруктураДопустимыхПараметров)
35 | Для каждого ЭлементСтруктуры из СтруктураСоЗначениямиПараметров Цикл
36 | Если НЕ СтруктураДопустимыхПараметров.Свойство(ЭлементСтруктуры.Ключ) Тогда
37 | ВызватьИсключение ИсключениеНедопустимыйПараметрЗапроса(ЭлементСтруктуры.Ключ);
38 | КонецЕсли;
39 | СтруктураПараметровЗапроса.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение);
40 | КонецЦикла;
41 | КонецПроцедуры
42 |
43 | Функция Значение1СвЗначениеJS(Значение)
44 | Тип = ТипЗнч(Значение);
45 | Если (Значение = Неопределено) или (Значение = Null) Тогда
46 | Возврат "null";
47 | ИначеЕсли (Тип = Тип("Дата")) Тогда
48 | Возврат """" + ДатаJSON(Значение) + "Z""";
49 | ИначеЕсли Тип = Тип("Булево") Тогда
50 | Возврат ?(Значение = Истина, "true", "false");
51 | ИначеЕсли (Тип = Тип("УникальныйИдентификатор")) Тогда
52 | Возврат """" + Значение + """";
53 | КонецЕсли;
54 | Возврат Строка(Значение);
55 | КонецФункции
56 |
57 | Функция ДатаJSON(Знач Дата)
58 |
59 | Если Не ЗначениеЗаполнено(Дата) Тогда
60 | Возврат "";
61 | КонецЕсли;
62 |
63 | Возврат "" + Год(Дата) + "-" + ФорматДвузначноеЧисло(Месяц(Дата)) + "-" + ФорматДвузначноеЧисло(День(Дата)) + "T"
64 | + ФорматДвузначноеЧисло(Час(Дата)) + ":" + ФорматДвузначноеЧисло(Минута(Дата)) + ":" + ФорматДвузначноеЧисло(Секунда(Дата));
65 |
66 | КонецФункции
67 |
68 | Функция ФорматДвузначноеЧисло(ЗначениеЧисло)
69 | С = Строка(ЗначениеЧисло);
70 | Если СтрДлина(С) < 2 Тогда
71 | С = "0" + С;
72 | КонецЕсли;
73 | Возврат С;
74 | КонецФункции
75 |
76 | Функция ИсключениеНедопустимыйПараметрЗапроса(ИмяПараметра)
77 | Возврат "В запрос передан недопустимый параметр " + ИмяПараметра;
78 | КонецФункции
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Реализация API Яндекс.Диска для 1Script
2 |
3 | Библиотека предоставляет возможность взаимодействия с [REST API Яндекс.Диска](https://tech.yandex.ru/disk/rest/) на языке [1Script](http://oscript.io).
4 |
5 | Реализована поддержка всех методов REST API Яндекс.Диска за исключением [метода установки дополнительных (custom) свойств](https://tech.yandex.ru/disk/api/reference/meta-add-docpage/) ресурсов (папок или файлов).
6 |
7 | ## Установка
8 |
9 | Для работы библиотеки необходимо **oscript-yadisk** предварительно установить [Стандартную библиотеку скриптов](http://oscript.io/library) 1Script.
10 |
11 | ### Из исходников
12 |
13 | 1. Клонируйте репозиторий библиотеки:
14 |
15 | ```
16 | git clone https://github.com/kuntashov/oscript-yadisk.git
17 | ```
18 |
19 | 2. Добавьте в конфигурационном файле 1Script `oscript.cfg` в список дополнительных библиотек путь к каталогу, в который вы клонировали репозиторий:
20 |
21 | ```
22 | lib.additional = C:\libs\oscript-yadisk;
23 | ```
24 |
25 | ### Из пакетов opm
26 |
27 | opm install yadisk
28 |
29 | ## Использование
30 |
31 | Библиотека к вашему скрипту подключается с помощью директивы `#Использовать yadisk`. После этого в области видимости скрипта будет доступен класс `ЯндексДиск`:
32 |
33 | #Использовать yadisk
34 |
35 | Перем OAuth_Токен;
36 |
37 | OAuth_Токен = "..."; // Используйте полученный токен для вашего приложения.
38 |
39 | ЯндексДиск = Новый ЯндексДиск;
40 | ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен);
41 |
42 | СвойстваДиска = ЯндексДиск.ПолучитьСвойстваДиска();
43 | Сообщить(СтрШаблон("Всего доступно %1 байт", СвойстваДиска.total_space));
44 | Сообщить(СтрШаблон("Из них занято %1 байт", СвойстваДиска.used_space));
45 |
46 | С другими примерами использования возможностей библиотеки можно познакомиться, изучив код автоматических тестов, которые поставляются вместе с библиотекой в каталоге `tests`.
47 |
48 | **Примечание.** В linux для корректной работы HTTPS-соединения может потребоваться выполнить команду
49 |
50 | mozroots --import --sync
51 |
52 | ## Запуск тестов библиотеки
53 |
54 | Запуск тестов библиотеки осуществляется при помощи скрипта `testrunner.os`, который входит в состав [исходных кодов 1Script](https://bitbucket.org/EvilBeaver/1script/src/) (находится в папке `tests`).
55 |
56 | ### OAuth-токен авторизации для запуска тестов
57 |
58 | Для запуска автоматических тестов библиотеки необходимо тестам передать [OAuth-токен авторизации](https://tech.yandex.ru/oauth/).
59 |
60 | Получить токен авторизации можно вручную, перейдя в браузере по ссылке вида:
61 |
62 | https://oauth.yandex.ru/authorize?response_type=token&client_id=
63 |
64 | где `` - идентификатор вашего приложения, зарегистрированного на Яндексе (https://oauth.yandex.ru/client/new).
65 |
66 | Приложению необходимо назначить права на использование Яндекс.Диск REST API в том объеме, в котором необходимо для вашего приложения. Для целей запуска автоматизированных тестов необходимо указать все права (Доступ к информации о Диске, Доступ к папке приложения на Диске, Запись в любом месте на Диске, Чтение всего Диска).
67 |
68 | Токен авторизации в тесты может быть передан либо через переменную окружения `YADISK_OAUTH_TOKEN`, либо через файл `oauth_token.txt`, в который надо сохранить полученный токен авторизации. Сам файл необходимо разместить рядом с тестами в папке `tests`.
69 |
70 | **Важно!** Не рекомедуется запускать тесты для действующего аккаунта Яндекс.Диска, т.к. в процессе выполнения тестов выполняются различные операции над содержимым Диска. Рекомендуется для целей тестирования создать отдельную учетную запись на сервисах Яндекса и использовать ее.
71 |
72 | ## Лицензия
73 |
74 | Библиотека **oscript-yadisk** распространяется под лицензией *Apache 2.0*, ее текст находится в файле [LICENSE](LICENSE). Лицензия распространяется только на код библиотеки **oscript-yadisk**. Использование API Яндекс.Диска регламентируется [Условиями использования сервиса "API Яндекс.Диска"](https://yandex.ru/legal/disk_api/) (https://yandex.ru/legal/disk_api/).
75 |
--------------------------------------------------------------------------------
/tests/urlhelpers-test.os:
--------------------------------------------------------------------------------
1 | #Использовать ".."
2 |
3 | Перем юТест;
4 |
5 | Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
6 |
7 | юТест = ЮнитТестирование;
8 |
9 | СписокТестов = Новый Массив;
10 |
11 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапроса");
12 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиПараметрОдин");
13 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиСписокПараметровПуст");
14 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтрокиЗапросаКогдаКлючиЭлементыМассива");
15 |
16 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапроса");
17 | СписокТестов.Добавить("ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапросаСЛишнимПараметром");
18 |
19 | Возврат СписокТестов;
20 |
21 | КонецФункции
22 |
23 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапроса() Экспорт
24 |
25 |
26 | Эталон1 = "param=value&%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80=%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5";
27 |
28 | Параметры1 = Новый Соответствие;
29 | Параметры1.Вставить("param", "value");
30 | Параметры1.Вставить("параметр", "значение");
31 |
32 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1));
33 |
34 | КонецПроцедуры
35 |
36 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиСписокПараметровПуст() Экспорт
37 |
38 | Эталон1 = "";
39 |
40 | Параметры1 = Новый Соответствие;
41 |
42 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1));
43 |
44 | КонецПроцедуры
45 |
46 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаЕслиПараметрОдин() Экспорт
47 |
48 | Эталон1 = "param=value";
49 |
50 | Параметры1 = Новый Соответствие;
51 | Параметры1.Вставить("param", "value");
52 |
53 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1));
54 |
55 | КонецПроцедуры
56 |
57 | Процедура ТестДолжен_ПроверитьФормированиеСтрокиЗапросаКогдаКлючиЭлементыМассива() Экспорт
58 |
59 | Эталон1 = "F%5B0%5D=val1&F%5B1%5D=val2&F%5B2%5D=val3&F%5B3%5D=val4";
60 |
61 | Параметры1 = Новый Соответствие;
62 | Параметры1.Вставить("F[0]", "val1");
63 | Параметры1.Вставить("F[1]", "val2");
64 | Параметры1.Вставить("F[2]", "val3");
65 | Параметры1.Вставить("F[3]", "val4");
66 |
67 | юТест.ПроверитьРавенство(Эталон1, РаботаСUrl.СформироватьСтрокуЗапроса(Параметры1));
68 |
69 | КонецПроцедуры
70 |
71 | Процедура ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапроса() Экспорт
72 |
73 | Эталон = Новый Структура("param1,param2,param3", "required", "value1", "value2");
74 |
75 | ОбязательныеПараметры = Новый Структура("param1", "required");
76 | ДополнительныеПараметры = Новый Структура("param2,param3", "value1", "value2");
77 |
78 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
79 | "param1,param2,param3,param4",
80 | ОбязательныеПараметры,
81 | ДополнительныеПараметры
82 | );
83 |
84 | юТест.ПроверитьИстину(СтруктурыИдентичны(Эталон, ПараметрыЗапроса), "Ожидали, что Эталон и ПараметрыЗапроса будут идентичны, а на самом деле - нет");
85 |
86 | КонецПроцедуры
87 |
88 | Процедура ТестДолжен_ПроверитьФормированиеСтруктурыПараметровЗапросаСЛишнимПараметром() Экспорт
89 |
90 | Параметры = Новый Структура("param1,param2,param3", "value1", "value2", "value3");
91 |
92 | МассивАргументов = Новый Массив;
93 | МассивАргументов.Добавить("param1,param2");
94 | МассивАргументов.Добавить(Параметры);
95 | МассивАргументов.Добавить(Неопределено);
96 |
97 | ПроверитьЧтоВызовВыбрасываетИсключение(РаботаСUrl, "СформироватьСтруктуруПараметровЗапроса", МассивАргументов, "В запрос передан недопустимый параметр param3");
98 |
99 | КонецПроцедуры
100 |
101 | Процедура ПроверитьЧтоВызовВыбрасываетИсключение(Объект, ИмяМетода, МассивАргументовМетода, ФрагментИсключения="")
102 |
103 | ИсключениеВозникло = Ложь;
104 |
105 | Попытка
106 | Рефлектор = Новый Рефлектор;
107 | Рефлектор.ВызватьМетод(Объект, ИмяМетода, МассивАргументовМетода);
108 | Исключение
109 | ИсключениеВозникло = Истина;
110 | ТекстИсключения = ОписаниеОшибки();
111 | КонецПопытки;
112 |
113 | юТест.ПроверитьИстину(
114 | ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0,
115 | "Ожидали, что " + ИмяМетода + " ВЫБРОСИТ ИСКЛЮЧЕНИЕ" +
116 | ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", "")
117 | );
118 |
119 | КонецПроцедуры
120 |
121 | Функция СтруктурыИдентичны(Структура1, Структура2)
122 | Если Структура1.Количество() = Структура2.Количество() Тогда
123 | Для каждого ЭлементСтруктуры из Структура1 Цикл
124 | Если НЕ Структура2.Свойство(ЭлементСтруктуры.Ключ) Тогда
125 | Возврат Ложь;
126 | КонецЕсли;
127 | Если Структура1[ЭлементСтруктуры.Ключ] <> Структура2[ЭлементСтруктуры.Ключ] Тогда
128 | Возврат Ложь;
129 | КонецЕсли
130 | КонецЦикла;
131 | КонецЕсли;
132 | Возврат Истина;
133 | КонецФункции
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
203 |
--------------------------------------------------------------------------------
/tests/yadisk-test.os:
--------------------------------------------------------------------------------
1 | #Использовать ".."
2 |
3 | Перем юТест;
4 | Перем ЯндексДиск;
5 |
6 | Перем Лог;
7 |
8 | Функция Инициализировать()
9 |
10 | ЯндексДиск = Новый ЯндексДиск;
11 | ЯндексДиск.УстановитьРежимОтладки(РежимОтладки());
12 | Лог = ЯндексДиск.ПолучитьЛог();
13 |
14 | OAuth_Токен = ПолучитьТокенАвторизации();
15 | ЯндексДиск.УстановитьТокенАвторизации(OAuth_Токен);
16 |
17 | КонецФункции
18 |
19 | Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
20 |
21 | юТест = ЮнитТестирование;
22 |
23 | СписокТестов = Новый Массив;
24 |
25 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствДиска");
26 |
27 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствФайла");
28 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствПапки");
29 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствНесуществующегоФайла");
30 |
31 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСвойствФайлаВКорзине");
32 |
33 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаФайлов_БезАргументов");
34 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаФайлов_САргументами");
35 |
36 | СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаПоследнихЗагруженныхФайлов");
37 |
38 | СписокТестов.Добавить("ТестДолжен_ПроверитьЗагрузкуФайлаНаДиск");
39 |
40 | СписокТестов.Добавить("ТестДолжен_ПроверитьУстановкуПроизвольногоСвойстваФайла");
41 |
42 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаИзИнтернета");
43 |
44 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ССохранениемОригинальногоИмени");
45 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_СНазначениемНовогоИмени");
46 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ВНесуществующийКаталог");
47 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИПерезаписыватьНельзя");
48 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИНадоПерезаписать");
49 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаСкачиваетсяПапка");
50 |
51 | СписокТестов.Добавить("ТестДолжен_ПроверитьУдалениеФайла_ВКорзину");
52 | СписокТестов.Добавить("ТестДолжен_ПроверитьУдалениеФайла_Безвозвратно");
53 |
54 | СписокТестов.Добавить("ТестДолжен_ПроверитьКопированиеФайла");
55 | СписокТестов.Добавить("ТестДолжен_ПроверитьПеремещениеФайла");
56 | СписокТестов.Добавить("ТестДолжен_ПроверитьСозданиеПапки");
57 |
58 | СписокТестов.Добавить("ТестДолжен_ПроверитьПубликациюРесурсаИОтменуПубликации");
59 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеПубличногоРесурса");
60 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеОтдельногоФайлаИзПубличнойПапки");
61 | СписокТестов.Добавить("ТестДолжен_ПроверитьСкачиваниеПубличногоРесурсаВЗагрузки");
62 |
63 | СписокТестов.Добавить("ТестДолжен_ПроверитьОчисткуКорзины");
64 | СписокТестов.Добавить("ТестДолжен_ПроверитьВосстановлениеИзКорзины");
65 |
66 | Возврат СписокТестов;
67 |
68 | КонецФункции
69 |
70 | ///////////////////////////////////////////////////////////////////
71 | // Тесты
72 |
73 | Процедура ТестДолжен_ПроверитьПолучениеСвойствДиска() Экспорт
74 |
75 | СвойстваДиска = ЯндексДиск.ПолучитьСвойстваДиска();
76 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваДиска));
77 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("trash_size"));
78 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("total_space"));
79 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("used_space"));
80 | юТест.ПроверитьИстину(СвойстваДиска.Свойство("system_folders"));
81 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваДиска.system_folders));
82 |
83 | КонецПроцедуры
84 |
85 | Процедура ТестДолжен_ПроверитьПолучениеСпискаФайлов_БезАргументов() Экспорт
86 |
87 | СписокФайлов = ЯндексДиск.ПолучитьСписокВсехФайлов();
88 |
89 | юТест.ПроверитьИстину(СписокФайлов.Свойство("items"));
90 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокФайлов.items));
91 |
92 | юТест.ПроверитьРавенство(20, СписокФайлов.limit);
93 | юТест.ПроверитьРавенство(0, СписокФайлов.offset);
94 |
95 | КонецПроцедуры
96 |
97 | Процедура ТестДолжен_ПроверитьПолучениеСпискаФайлов_САргументами() Экспорт
98 |
99 | Параметры = Новый Структура();
100 | Параметры.Вставить("limit", 2);
101 | Параметры.Вставить("offset", 1);
102 |
103 | СписокФайлов = ЯндексДиск.ПолучитьСписокВсехФайлов(Параметры);
104 |
105 | юТест.ПроверитьИстину(СписокФайлов.Свойство("items"));
106 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокФайлов.items));
107 | юТест.ПроверитьРавенство(2, СписокФайлов.items.Количество());
108 |
109 | юТест.ПроверитьРавенство(2, СписокФайлов.limit);
110 | юТест.ПроверитьРавенство(1, СписокФайлов.offset);
111 |
112 | КонецПроцедуры
113 |
114 | Процедура ТестДолжен_ПроверитьПолучениеСвойствФайла() Экспорт
115 |
116 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/test-folder/file1.txt");
117 |
118 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("name"));
119 | юТест.ПроверитьРавенство("file1.txt", СвойстваФайла.name);
120 |
121 | КонецПроцедуры
122 |
123 | Процедура ТестДолжен_ПроверитьПолучениеСвойствПапки() Экспорт
124 |
125 | СвойстваПапки = ЯндексДиск.ПолучитьСвойстваРесурса("/test-folder");
126 |
127 | юТест.ПроверитьИстину(СвойстваПапки.Свойство("name"));
128 | юТест.ПроверитьРавенство("test-folder", СвойстваПапки.name);
129 | юТест.ПроверитьРавенство("dir", СвойстваПапки.type);
130 |
131 | КонецПроцедуры
132 |
133 | Процедура ТестДолжен_ПроверитьПолучениеСвойствНесуществующегоФайла() Экспорт
134 |
135 | МассивАргументов = Новый Массив;
136 | МассивАргументов.Добавить("/test-folder/file-does-not-exists.txt");
137 | МассивАргументов.Добавить(Неопределено);
138 |
139 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "Яндекс.Диск ответил кодом ошибки 404: Resource not found");
140 |
141 | КонецПроцедуры
142 |
143 | Процедура ТестДолжен_ПроверитьПолучениеСвойствФайлаВКорзине() Экспорт
144 |
145 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
146 | ПутьНаДиске = "/test-folder/" + ИмяФайла;
147 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьНаДиске);
148 | ЯндексДиск.Удалить(ПутьНаДиске, Ложь, Истина);
149 |
150 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине(ИмяФайла);
151 |
152 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("name"));
153 | юТест.ПроверитьРавенство(ИмяФайла, СвойстваФайла.name);
154 |
155 | // Прибираем за собой.
156 | ЯндексДиск.ОчиститьКорзину();
157 |
158 | КонецПроцедуры
159 |
160 | Процедура ТестДолжен_ПроверитьПолучениеСпискаПоследнихЗагруженныхФайлов() Экспорт
161 |
162 | Параметры = Новый Структура;
163 | Параметры.Вставить("limit", 2);
164 |
165 | СписокПоследних = ЯндексДиск.ПолучитьСписокПоследнихЗагруженныхФайлов(Параметры);
166 |
167 | юТест.ПроверитьИстину(СписокПоследних.Свойство("items"));
168 | юТест.ПроверитьРавенство(Тип("Массив"), ТипЗнч(СписокПоследних.items));
169 | юТест.ПроверитьРавенство(2, СписокПоследних.limit);
170 |
171 | КонецПроцедуры
172 |
173 | Процедура ТестДолжен_ПроверитьЗагрузкуФайлаНаДиск() Экспорт
174 |
175 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
176 | ПутьНаДиске = "/test-folder/" + ИмяФайла;
177 |
178 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьНаДиске);
179 |
180 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьНаДиске);
181 | юТест.ПроверитьРавенство(ИмяФайла, СвойстваФайла.name);
182 |
183 | КонецПроцедуры
184 |
185 | Процедура ТестДолжен_ПроверитьУстановкуПроизвольногоСвойстваФайла() Экспорт
186 |
187 | ЗначениеСвойства = Строка(Новый УникальныйИдентификатор);
188 |
189 | ЯндексДиск.УстановитьДопСвойствоРесурса("/test-folder/file1.txt", "MyProperty", ЗначениеСвойства);
190 |
191 | юТест.ПроверитьРавенство(ЗначениеСвойства, ЯндексДиск.ПолучитьДопСвойствоРесурса("/test-folder/file1.txt", "MyProperty"));
192 |
193 | КонецПроцедуры
194 |
195 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаИзИнтернета() Экспорт
196 |
197 | СсылкаПроверкиСтатуса = ЯндексДиск.СкачатьНаДискИзИнтернета("/test-folder/onescript-nightly.zip", "http://oscript.io/downloads/night-build/zip");
198 | СтатусОперации = ЯндексДиск.ПолучитьСтатусОперации(СсылкаПроверкиСтатуса);
199 | юТест.ПроверитьВхождение("in-progress,success,failure", СтатусОперации);
200 |
201 | КонецПроцедуры
202 |
203 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ССохранениемОригинальногоИмени() Экспорт
204 |
205 | ЦелевойКаталог = КаталогВременныхФайлов();
206 | ПутьКЦелевомуФайлу = ОбъединитьПути(ЦелевойКаталог, "file1.txt");
207 | Если (Новый Файл(ПутьКЦелевомуФайлу)).Существует() Тогда
208 | УдалитьФайлы(ПутьКЦелевомуФайлу);
209 | КонецЕсли;
210 |
211 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ЦелевойКаталог, "/test-folder/file1.txt");
212 |
213 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
214 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу);
215 |
216 | Попытка
217 | УдалитьФайлы(ПутьКЦелевомуФайлу);
218 | Исключение
219 | КонецПопытки;
220 |
221 | КонецПроцедуры
222 |
223 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_СНазначениемНовогоИмени() Экспорт
224 |
225 | ПутьКЦелевомуФайлу = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор));
226 |
227 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder/file1.txt");
228 |
229 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
230 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу);
231 |
232 | Попытка
233 | УдалитьФайлы(ПутьКЦелевомуФайлу);
234 | Исключение
235 | КонецПопытки;
236 |
237 | КонецПроцедуры
238 |
239 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_ВНесуществующийКаталог() Экспорт
240 |
241 | ФайлВНесуществующемКаталоге = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор), "test.txt");
242 |
243 | МассивАргументов = Новый Массив;
244 | МассивАргументов.Добавить(ФайлВНесуществующемКаталоге);
245 | МассивАргументов.Добавить("/test-folder/file1.txt");
246 | МассивАргументов.Добавить(Ложь);
247 |
248 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "СкачатьФайлСДиска", МассивАргументов, "Каталог не существует");
249 |
250 | КонецПроцедуры
251 |
252 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИПерезаписыватьНельзя() Экспорт
253 |
254 | ИмяФайла = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор));
255 |
256 | ЗаписьТекста = Новый ЗаписьТекста(ИмяФайла);
257 | ЗаписьТекста.Закрыть();
258 |
259 | МассивАргументов = Новый Массив;
260 | МассивАргументов.Добавить(ИмяФайла);
261 | МассивАргументов.Добавить("/test-folder/file1.txt");
262 | МассивАргументов.Добавить(Ложь);
263 |
264 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "СкачатьФайлСДиска", МассивАргументов, "Файл существует");
265 |
266 | Попытка
267 | УдалитьФайлы(ИмяФайла);
268 | Исключение
269 | КонецПопытки;
270 |
271 | КонецПроцедуры
272 |
273 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаЦелевойФайлСуществуетИНадоПерезаписать() Экспорт
274 |
275 | ПутьКЦелевомуФайлу = ОбъединитьПути(КаталогВременныхФайлов(), Строка(Новый УникальныйИдентификатор));
276 | ЗаписьТекста = Новый ЗаписьТекста(ПутьКЦелевомуФайлу);
277 | ЗаписьТекста.Закрыть();
278 |
279 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder/file1.txt", Истина);
280 |
281 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
282 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу);
283 |
284 | // Проверим, по содержимому, что это именно тот файл, что мы скачивали.
285 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКЦелевомуФайлу);
286 | Содержимое = ЧтениеТекста.Прочитать();
287 | ЧтениеТекста.Закрыть();
288 |
289 | юТест.ПроверитьРавенство("Hello!", СокрЛП(Содержимое));
290 |
291 | Попытка
292 | УдалитьФайлы(ПутьКЦелевомуФайлу);
293 | Исключение
294 | КонецПопытки;
295 |
296 | КонецПроцедуры
297 |
298 | Процедура ТестДолжен_ПроверитьСкачиваниеФайлаСДиска_КогдаСкачиваетсяПапка() Экспорт
299 |
300 | ЦелевойКаталог = КаталогВременныхФайлов();
301 | ПутьКЦелевомуФайлу = ОбъединитьПути(ЦелевойКаталог, "test-folder.zip");
302 | Если (Новый Файл(ПутьКЦелевомуФайлу)).Существует() Тогда
303 | УдалитьФайлы(ПутьКЦелевомуФайлу);
304 | КонецЕсли;
305 |
306 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьФайлСДиска(ПутьКЦелевомуФайлу, "/test-folder");
307 |
308 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
309 | юТест.ПроверитьРавенство(ПутьКЦелевомуФайлу, ПутьКСкачанномуФайлу);
310 |
311 | Попытка
312 | УдалитьФайлы(ПутьКЦелевомуФайлу);
313 | Исключение
314 | КонецПопытки;
315 |
316 | КонецПроцедуры
317 |
318 | Процедура ТестДолжен_ПроверитьУдалениеФайла_ВКорзину() Экспорт
319 |
320 | ПутьКЦелевомуФайлу = "/" + Строка(Новый УникальныйИдентификатор) + ".txt";
321 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКЦелевомуФайлу);
322 |
323 | юТест.ПроверитьИстину(ЯндексДиск.Удалить(ПутьКЦелевомуФайлу));
324 |
325 | // Проверяем, что на диске файла больше нет.
326 | МассивАргументов = Новый Массив;
327 | МассивАргументов.Добавить(ПутьКЦелевомуФайлу);
328 | МассивАргументов.Добавить(Новый Структура("fields", "name"));
329 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404");
330 |
331 | // Но при этом файл оказался в корзине.
332 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине(ПутьКЦелевомуФайлу, Новый Структура("fields", "name"));
333 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла));
334 |
335 | КонецПроцедуры
336 |
337 | Процедура ТестДолжен_ПроверитьУдалениеФайла_Безвозвратно() Экспорт
338 |
339 | ПутьКЦелевомуФайлу = "/" + Строка(Новый УникальныйИдентификатор) + ".txt";
340 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКЦелевомуФайлу);
341 |
342 | юТест.ПроверитьИстину(ЯндексДиск.Удалить(ПутьКЦелевомуФайлу, Истина));
343 |
344 | // Проверяем, что файла больше нет.
345 | МассивАргументов = Новый Массив;
346 | МассивАргументов.Добавить(ПутьКЦелевомуФайлу);
347 | МассивАргументов.Добавить(Новый Структура("fields", "name"));
348 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404");
349 |
350 | // Проверяем, что в корзине файла тоже нет.
351 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурсаВКорзине", МассивАргументов, "404")
352 |
353 | КонецПроцедуры
354 |
355 | Процедура ТестДолжен_ПроверитьКопированиеФайла() Экспорт
356 |
357 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
358 | ПутьКИсходномуФайлу = "/" + ИмяФайла;
359 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
360 |
361 | ПутьККопии = "/test-folder/" + ИмяФайла;
362 |
363 | юТест.ПроверитьИстину(ЯндексДиск.Копировать(ПутьКИсходномуФайлу, ПутьККопии));
364 |
365 | // Проверяем, что файл скопировался.
366 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьККопии, Новый Структура("fields", "name"));
367 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла));
368 |
369 | // Прибираем за собой.
370 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина);
371 | ЯндексДиск.Удалить(ПутьККопии, Истина);
372 |
373 | КонецПроцедуры
374 |
375 | Процедура ТестДолжен_ПроверитьПеремещениеФайла() Экспорт
376 |
377 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
378 | ПутьКИсходномуФайлу = "/" + ИмяФайла;
379 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
380 |
381 | ПутьВПапкеНазначения = "/test-folder/" + ИмяФайла;
382 |
383 | юТест.ПроверитьИстину(ЯндексДиск.Переместить(ПутьКИсходномуФайлу, ПутьВПапкеНазначения));
384 |
385 | // Проверяем, что файл Переместился: по пути назначения он появился
386 | СвойстваУдаленногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьВПапкеНазначения, Новый Структура("fields", "name"));
387 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваУдаленногоФайла));
388 |
389 | // а по исходному пути его больше нет.
390 | МассивАргументов = Новый Массив;
391 | МассивАргументов.Добавить(ПутьКИсходномуФайлу);
392 | МассивАргументов.Добавить(Новый Структура("fields", "name"));
393 | ПроверитьЧтоВызовВыбрасываетИсключение(ЯндексДиск, "ПолучитьСвойстваРесурса", МассивАргументов, "404");
394 |
395 | // Прибираем за собой.
396 | ЯндексДиск.Удалить(ПутьВПапкеНазначения, Истина);
397 |
398 | КонецПроцедуры
399 |
400 | Процедура ТестДолжен_ПроверитьСозданиеПапки() Экспорт
401 |
402 | ПутьКНовойПапке = "/test-folder/" + Строка(Новый УникальныйИдентификатор);
403 |
404 | ЯндексДиск.СоздатьПапку(ПутьКНовойПапке);
405 |
406 | // Проверяем, что папка была создана.
407 | СвойстваПапки = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКНовойПапке, Новый Структура("fields", "name"));
408 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваПапки));
409 |
410 | // Прибираем за собой.
411 | ЯндексДиск.Удалить(ПутьКНовойПапке, Истина);
412 |
413 | КонецПроцедуры
414 |
415 | Процедура ТестДолжен_ПроверитьПубликациюРесурсаИОтменуПубликации() Экспорт
416 |
417 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt";
418 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
419 |
420 | ПубличныйUrl = ЯндексДиск.Опубликовать(ПутьКИсходномуФайлу);
421 |
422 | // Получили публичную ссылку.
423 | юТест.ПроверитьВхождение(ПубличныйUrl, "https://yadi.sk");
424 |
425 | // Стал доступен публичный ключ файла.
426 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу);
427 | юТест.ПроверитьИстину(СвойстваФайла.Свойство("public_key"));
428 |
429 | ЯндексДиск.ОтменитьПубликацию(ПутьКИсходномуФайлу);
430 |
431 | // Теперь публичный ключ больше не доступен.
432 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу);
433 | юТест.ПроверитьЛожь(СвойстваФайла.Свойство("public_key"));
434 |
435 | // Прибираем за собой.
436 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина);
437 |
438 | КонецПроцедуры
439 |
440 | Процедура ТестДолжен_ПроверитьСкачиваниеПубличногоРесурса() Экспорт
441 |
442 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt";
443 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
444 | ПубличныйUrl = ЯндексДиск.Опубликовать(ПутьКИсходномуФайлу);
445 |
446 | ЦелевойКаталог = КаталогВременныхФайлов();
447 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьПубличныйРесурс(ЦелевойКаталог, ПубличныйUrl);
448 |
449 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
450 |
451 | // Прибираем за собой.
452 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина);
453 | УдалитьФайлы(ПутьКСкачанномуФайлу);
454 |
455 | КонецПроцедуры
456 |
457 | Процедура ТестДолжен_ПроверитьСкачиваниеОтдельногоФайлаИзПубличнойПапки() Экспорт
458 |
459 | // Ссылка на публичную папку https://yadi.sk/d/Skw4ZnU8meYy8
460 | СвойстваПубличнойПапки = ЯндексДиск.ПолучитьСвойстваРесурса("/public_folder", Новый Структура("fields", "public_key"));
461 |
462 | ЦелевойКаталог = КаталогВременныхФайлов();
463 | ПутьКСкачанномуФайлу = ЯндексДиск.СкачатьПубличныйРесурс(ЦелевойКаталог, СвойстваПубличнойПапки.public_key, "/file_from_public_folder.txt");
464 |
465 | юТест.ПроверитьИстину((Новый Файл(ПутьКСкачанномуФайлу)).Существует());
466 |
467 | // Прибираем за собой.
468 | УдалитьФайлы(ПутьКСкачанномуФайлу);
469 |
470 | КонецПроцедуры
471 |
472 | Процедура ТестДолжен_ПроверитьСкачиваниеПубличногоРесурсаВЗагрузки() Экспорт
473 |
474 | // Ссылка на публичную папку https://yadi.sk/d/Skw4ZnU8meYy8
475 | СвойстваПубличногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/public_folder/public_file.txt");
476 |
477 | юТест.ПроверитьИстину(ЯндексДиск.СохранитьПубличныйРесурсВЗагрузки(СвойстваПубличногоФайла.public_key));
478 |
479 | // Убедимся, что файл появился в папке "Загрузки":
480 | СвойстваСкачанногоФайла = ЯндексДиск.ПолучитьСвойстваРесурса("/Загрузки/public_file.txt", Новый Структура("fields", "name"));
481 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваСкачанногоФайла));
482 |
483 | // Прибираем за собой.
484 | ЯндексДиск.Удалить("/Загрузки/public_file.txt", Истина);
485 |
486 | КонецПроцедуры
487 |
488 | Процедура ТестДолжен_ПроверитьОчисткуКорзины() Экспорт
489 |
490 | ПутьКИсходномуФайлу = "/test-folder/" + Строка(Новый УникальныйИдентификатор) + ".txt";
491 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
492 |
493 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу);
494 |
495 | СписокФайловВКорзине = ЯндексДиск.ПолучитьСвойстваРесурсаВКорзине("/", Новый Структура("fields", "_embedded.items.name"));
496 | юТест.ПроверитьБольше(СписокФайловВКорзине._embedded.items.Количество(), 0);
497 |
498 | СсылкаНаСостояниеОперации = ЯндексДиск.ОчиститьКорзину();
499 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СсылкаНаСостояниеОперации));
500 |
501 | КонецПроцедуры
502 |
503 | Процедура ТестДолжен_ПроверитьВосстановлениеИзКорзины() Экспорт
504 |
505 | ИмяФайла = Строка(Новый УникальныйИдентификатор) + ".txt";
506 |
507 | ПутьКИсходномуФайлу = "/test-folder/" + ИмяФайла;
508 |
509 | ЯндексДиск.ЗагрузитьНаДиск(ПолучитьАбсолютныйПуть("data/file-to-upload.txt"), ПутьКИсходномуФайлу);
510 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Ложь, Истина);
511 |
512 | юТест.ПроверитьИстину(ЯндексДиск.ВосстановитьРесурсИзКорзины(ИмяФайла,,,Истина));
513 |
514 | // Убедимся, что файл восстановлен.
515 | СвойстваФайла = ЯндексДиск.ПолучитьСвойстваРесурса(ПутьКИсходномуФайлу, Новый Структура("fields", "name"));
516 | юТест.ПроверитьРавенство(Тип("Структура"), ТипЗнч(СвойстваФайла));
517 |
518 | // Прибираем за собой.
519 | ЯндексДиск.Удалить(ПутьКИсходномуФайлу, Истина);
520 |
521 | КонецПроцедуры
522 |
523 | ///////////////////////////////////////////////////////////////////
524 | // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ
525 | ///////////////////////////////////////////////////////////////////
526 |
527 | Процедура ПроверитьЧтоВызовВыбрасываетИсключение(Объект, ИмяМетода, МассивАргументовМетода, ФрагментИсключения="")
528 |
529 | ИсключениеВозникло = Ложь;
530 |
531 | Попытка
532 | Рефлектор = Новый Рефлектор;
533 | Рефлектор.ВызватьМетод(Объект, ИмяМетода, МассивАргументовМетода);
534 | Исключение
535 | ИсключениеВозникло = Истина;
536 | ТекстИсключения = ОписаниеОшибки();
537 | КонецПопытки;
538 |
539 | юТест.ПроверитьИстину(
540 | ИсключениеВозникло И Найти(ТекстИсключения, ФрагментИсключения) > 0,
541 | "Ожидали, что " + ИмяМетода + " ВЫБРОСИТ ИСКЛЮЧЕНИЕ" +
542 | ?(ЗначениеЗаполнено(ФрагментИсключения), " СОДЕРЖАЩЕЕ ТЕКСТ <" + ФрагментИсключения + ">, а был текст <" + ТекстИсключения + ">.", "")
543 | );
544 |
545 | КонецПроцедуры
546 |
547 | Функция ПолучитьАбсолютныйПуть(ОтносительныйПуть)
548 | ТекущийПуть = Новый Файл(ТекущийСценарий().Источник).Путь;
549 | Возврат ОбъединитьПути(ТекущийПуть, ОтносительныйПуть);
550 | КонецФункции
551 |
552 | Функция РежимОтладки()
553 | Для каждого АргументКомСтроки из АргументыКоманднойСтроки Цикл
554 | Если НРег(АргументКомСтроки) = "--debug" Тогда
555 | Возврат Истина;
556 | КонецЕсли;
557 | КонецЦикла;
558 | Возврат Ложь;
559 | КонецФункции
560 |
561 | Функция ПолучитьПеременнуюСреды(ИмяПеременной)
562 | СистемнаяИнформация = Новый СистемнаяИнформация;
563 | Возврат СистемнаяИнформация.ПолучитьПеременнуюСреды(ИмяПеременной);
564 | КонецФункции
565 |
566 | Функция ПолучитьТокенАвторизации()
567 | Токен = ПолучитьПеременнуюСреды("YADISK_OAUTH_TOKEN");
568 | Если ПустаяСтрока(Токен) Тогда
569 | ПутьКФайлуСТокеном = ОбъединитьПути(Новый Файл(ТекущийСценарий().Источник).Путь, "oauth_token.txt");
570 | Если (Новый Файл(ПутьКФайлуСТокеном)).Существует() Тогда
571 | ЧтениеТекста = Новый ЧтениеТекста(ПутьКФайлуСТокеном);
572 | Токен = СокрЛП(ЧтениеТекста.Прочитать());
573 | ЧтениеТекста.Закрыть();
574 | Лог.Отладка("Токен получен из файла " + ПутьКФайлуСТокеном);
575 | КонецЕсли;
576 | Иначе
577 | Лог.Отладка("Токен получен из переменной среды YADISK_OAUTH_TOKEN");
578 | КонецЕсли;
579 | Если ПустаяСтрока(Токен) Тогда
580 | Лог.Отладка("Токен пустой");
581 | КонецЕсли;
582 | Возврат Токен;
583 | КонецФункции
584 |
585 | ///////////////////////////////////////////////////////////////////
586 | // Точка входа
587 |
588 | Инициализировать();
--------------------------------------------------------------------------------
/src/yadisk.os:
--------------------------------------------------------------------------------
1 | #Использовать json
2 | #Использовать logos
3 |
4 | Перем ТокенАвторизации;
5 | Перем АдресСервиса;
6 | Перем ВерсияAPI;
7 |
8 | Перем Соединение;
9 | Перем ПарсерJSON;
10 | Перем Лог;
11 |
12 | // Важно!!! Под linux для корректной работы HTTPS-соединения нужно выполнить команду
13 | // mozroots --import --sync
14 |
15 | Процедура Инициализировать()
16 |
17 | АдресСервиса = "https://cloud-api.yandex.net";
18 | ВерсияAPI = "v1";
19 |
20 | Соединение = Новый HTTPСоединение(ПолучитьАдресСервиса());
21 | ПарсерJSON = Новый ПарсерJSON;
22 |
23 | Лог = Логирование.ПолучитьЛог("oscript.lib.yadisk");
24 |
25 | КонецПроцедуры
26 |
27 | ///////////////////////////////////////////////////////////////////////////////
28 | // ПУБЛИЧНЫЕ МЕТОДЫ
29 | ///////////////////////////////////////////////////////////////////////////////
30 |
31 | Процедура УстановитьТокенАвторизации(Токен) Экспорт
32 | ТокенАвторизации = Токен;
33 | КонецПроцедуры
34 |
35 | Процедура УстановитьРежимОтладки(Включить=Истина) Экспорт
36 | Лог.УстановитьУровень(?(Включить, УровниЛога.Отладка, УровниЛога.Информация));
37 | КонецПроцедуры
38 |
39 | Функция ПолучитьВерсиюAPI() Экспорт
40 | Возврат ВерсияAPI;
41 | КонецФункции
42 |
43 | Функция ПолучитьАдресСервиса() Экспорт
44 | Возврат АдресСервиса;
45 | КонецФункции
46 |
47 | Функция ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса=Неопределено, Относительный=Истина) Экспорт
48 |
49 | СтрокаЗапроса = ?(ПараметрыЗапроса = Неопределено, "", РаботаСUrl.СформироватьСтрокуЗапроса(ПараметрыЗапроса));
50 | Если НЕ ПустаяСтрока(СтрокаЗапроса) Тогда
51 | СтрокаЗапроса = "?" + СтрокаЗапроса;
52 | КонецЕсли;
53 |
54 | Возврат ?(Относительный, "", ПолучитьАдресСервиса()) + "/" + ПолучитьВерсиюAPI() + Ресурс + СтрокаЗапроса;
55 |
56 | КонецФункции
57 |
58 | Функция ПолучитьЛог() Экспорт
59 | Возврат Лог;
60 | КонецФункции
61 |
62 | ///////////////////////////////////////////////////////////////////////////////
63 | // API Яндекс.Диска
64 | ///////////////////////////////////////////////////////////////////////////////
65 |
66 | //@see https://tech.yandex.ru/disk/api/reference/capacity-docpage/
67 | Функция ПолучитьСвойстваДиска() Экспорт
68 |
69 | Возврат ВыполнитьЗапросМетодомGET("/disk");
70 |
71 | КонецФункции
72 |
73 | //@see https://tech.yandex.ru/disk/api/reference/meta-docpage/
74 | Функция ПолучитьСвойстваРесурса(ПутьНаДиске, СтруктураДополнительныхПараметров=Неопределено) Экспорт
75 |
76 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
77 | "path,sort,limit,offset,fields,preview_size,preview_crop",
78 | Новый Структура("path", ПутьНаДиске),
79 | СтруктураДополнительныхПараметров
80 | );
81 |
82 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources", ПараметрыЗапроса);
83 |
84 | КонецФункции
85 |
86 | //@see https://tech.yandex.ru/disk/api/reference/meta-docpage/
87 | Функция ПолучитьСвойстваРесурсаВКорзине(ПутьВКорзине, СтруктураДополнительныхПараметров=Неопределено) Экспорт
88 |
89 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
90 | "path,sort,limit,offset,fields,preview_size,preview_crop",
91 | Новый Структура("path", ПутьВКорзине),
92 | СтруктураДополнительныхПараметров
93 | );
94 |
95 | Возврат ВыполнитьЗапросМетодомGET("/disk/trash/resources", ПараметрыЗапроса);
96 |
97 | КонецФункции
98 |
99 | //@see https://tech.yandex.ru/disk/api/reference/all-files-docpage/
100 | Функция ПолучитьСписокВсехФайлов(СтруктураДополнительныхПараметров=Неопределено) Экспорт
101 |
102 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
103 | "limit,media_type,offset,fields,preview_size,preview_crop",
104 | Неопределено,
105 | СтруктураДополнительныхПараметров
106 | );
107 |
108 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/files", ПараметрыЗапроса);
109 |
110 | КонецФункции
111 |
112 | //@see https://tech.yandex.ru/disk/api/reference/recent-upload-docpage/
113 | Функция ПолучитьСписокПоследнихЗагруженныхФайлов(СтруктураДополнительныхПараметров=Неопределено) Экспорт
114 |
115 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
116 | "limit,media_type,fields,preview_size,preview_crop", //WTF? В запросе почему-то нет параметра offset (в документации Яндекса его тоже нет)
117 | Неопределено,
118 | СтруктураДополнительныхПараметров
119 | );
120 |
121 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/last-uploaded", ПараметрыЗапроса);
122 |
123 | КонецФункции
124 |
125 | //@see https://tech.yandex.ru/disk/api/reference/meta-add-docpage/
126 | Функция УстановитьДопСвойстваРесурса(ПутьНаДиске, Свойства) Экспорт
127 |
128 | ВызватьИсключение ИсключениеМетодНеПоддерживается("HTTPСоединение в 1Script не поддерживает отправку запросов методом PATCH");
129 |
130 | КонецФункции
131 |
132 | Функция ПолучитьДопСвойстваРесурса(ПутьНаДиске, ИменаСвойств="") Экспорт
133 |
134 | ВызватьИсключение ИсключениеМетодНеПоддерживается();
135 |
136 | КонецФункции
137 |
138 | Функция УстановитьДопСвойствоРесурса(ПутьНаДиске, ИмяСвойства, ЗначениеСвойства) Экспорт
139 |
140 | Свойства = Новый Соответствие;
141 | Свойства.Вставить(ИмяСвойства, ЗначениеСвойства);
142 |
143 | Возврат УстановитьДопСвойстваРесурса(ПутьНаДиске, Свойства);
144 |
145 | КонецФункции
146 |
147 | Функция ПолучитьДопСвойствоРесурса(ПутьНаДиске, ИмяСвойства) Экспорт
148 |
149 | Свойства = ПолучитьДопСвойстваРесурса(ПутьНаДиске, ИмяСвойства);
150 |
151 | Возврат ?(Свойства = Неопределено, Неопределено, Свойства[ИмяСвойства]);
152 |
153 | КонецФункции
154 |
155 | //@see https://tech.yandex.ru/disk/api/reference/upload-docpage/
156 | Процедура ЗагрузитьНаДиск(ЛокальныйПуть, ПутьНаДиске, Перезаписывать=Ложь) Экспорт
157 |
158 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
159 | "path,overwrite,fields",
160 | Новый Структура("path", ПутьНаДиске),
161 | Новый Структура("overwrite", Перезаписывать)
162 | );
163 |
164 | Ссылка = ВыполнитьЗапросМетодомGET("/disk/resources/upload", ПараметрыЗапроса);
165 |
166 | Запрос = Новый HTTPЗапрос(Ссылка.href, СформироватьHTTPЗаголовки(Ложь));
167 | Запрос.УстановитьИмяФайлаТела(ЛокальныйПуть);
168 |
169 | Ответ = Соединение.Записать(Запрос);
170 | Если Ответ.КодСостояния <> 201 Тогда
171 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"ЗагрузитьНаДиск");
172 | КонецЕсли;
173 |
174 | КонецПроцедуры
175 |
176 | //@see https://tech.yandex.ru/disk/api/reference/upload-ext-docpage/
177 | Функция СкачатьНаДискИзИнтернета(ПутьНаДиске, UrlФайла, ЗапретитьРедитекты=Ложь) Экспорт
178 |
179 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
180 | "url,path,fields,disable_redirects",
181 | Новый Структура("url,path", UrlФайла, ПутьНаДиске),
182 | Новый Структура("disable_redirects", ЗапретитьРедитекты)
183 | );
184 |
185 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос(
186 | ПолучитьАдресРесурса("/disk/resources/upload", ПараметрыЗапроса),
187 | СформироватьHTTPЗаголовки()
188 | ));
189 |
190 | Если Ответ.КодСостояния = 202 Тогда
191 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
192 | Лог.Отладка(СтрокаОтвета);
193 | Ссылка = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
194 | Возврат Ссылка;
195 | КонецЕсли;
196 |
197 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
198 |
199 | КонецФункции
200 |
201 | //@see https://tech.yandex.ru/disk/api/reference/content-docpage/
202 | Функция СкачатьФайлСДиска(ЛокальныйПуть, ПутьНаДиске, Перезаписывать=Ложь) Экспорт
203 |
204 | ЛокальныйПутьКФайлу = СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьНаДиске, Неопределено, Перезаписывать);
205 |
206 | Параметры = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
207 | "path,fields",
208 | Новый Структура("path", ПутьНаДиске)
209 | );
210 |
211 | СсылкаДляСкачивания = ВыполнитьЗапросМетодомGET("/disk/resources/download", Параметры);
212 |
213 | Запрос = Новый HTTPЗапрос(СсылкаДляСкачивания.href, СформироватьHTTPЗаголовки());
214 |
215 | Ответ = Соединение.Получить(Запрос);
216 | Если Ответ.КодСостояния = 200 Тогда
217 |
218 | ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
219 | ДвоичныеДанные.Записать(ЛокальныйПутьКФайлу);
220 |
221 | Возврат ЛокальныйПутьКФайлу;
222 |
223 | КонецЕсли;
224 |
225 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
226 |
227 | КонецФункции
228 |
229 | //@see https://tech.yandex.ru/disk/api/reference/copy-docpage/
230 | Функция Копировать(ПутьИсточникаНаДиске, ПутьНазначенияНаДиске, Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт
231 |
232 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
233 | "from,path,overwrite,fields",
234 | Новый Структура("from,path", ПутьИсточникаНаДиске, ПутьНазначенияНаДиске),
235 | Новый Структура("overwrite", Перезаписывать)
236 | );
237 |
238 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос(
239 | ПолучитьАдресРесурса("/disk/resources/copy", ПараметрыЗапроса),
240 | СформироватьHTTPЗаголовки()
241 | ));
242 |
243 | Если Ответ.КодСостояния = 202 Тогда
244 |
245 | // Копируется непуская папка
246 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
247 | Лог.Отладка(СтрокаОтвета);
248 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
249 |
250 | Если ДожидатьсяРезультатаВыполнения Тогда
251 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Копировать") = "success");
252 | КонецЕсли;
253 |
254 | Возврат СсылкаНаСтатусОперации;
255 |
256 | ИначеЕсли Ответ.КодСостояния = 201 Тогда
257 | Возврат Истина;
258 | КонецЕсли;
259 |
260 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
261 |
262 | КонецФункции
263 |
264 | //@see https://tech.yandex.ru/disk/api/reference/move-docpage/
265 | Функция Переместить(ПутьИсточникаНаДиске, ПутьНазначенияНаДиске, Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт
266 |
267 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
268 | "from,path,overwrite,fields",
269 | Новый Структура("from,path", ПутьИсточникаНаДиске, ПутьНазначенияНаДиске),
270 | Новый Структура("overwrite", Перезаписывать)
271 | );
272 |
273 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос(
274 | ПолучитьАдресРесурса("/disk/resources/move", ПараметрыЗапроса),
275 | СформироватьHTTPЗаголовки()
276 | ));
277 |
278 | Если Ответ.КодСостояния = 202 Тогда
279 |
280 | // Перемещается непуская папка
281 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
282 | Лог.Отладка(СтрокаОтвета);
283 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
284 |
285 | Если ДожидатьсяРезультатаВыполнения Тогда
286 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Переместить") = "success");
287 | КонецЕсли;
288 |
289 | Возврат СсылкаНаСтатусОперации;
290 |
291 | ИначеЕсли Ответ.КодСостояния = 201 Тогда
292 | Возврат Истина;
293 | КонецЕсли;
294 |
295 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
296 |
297 | КонецФункции
298 |
299 | //@see https://tech.yandex.ru/disk/api/reference/delete-docpage/
300 | Функция Удалить(ПутьНаДиске, Безвозвратно=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт
301 |
302 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
303 | "path,permanently,fields",
304 | Новый Структура("path", ПутьНаДиске),
305 | Новый Структура("permanently", Безвозвратно)
306 | );
307 |
308 | Лог.Отладка(ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса));
309 |
310 | Ответ = Соединение.Удалить(Новый HTTPЗапрос(
311 | ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса),
312 | СформироватьHTTPЗаголовки()
313 | ));
314 |
315 | Если Ответ.КодСостояния = 202 Тогда
316 |
317 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
318 | Лог.Отладка(СтрокаОтвета);
319 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
320 |
321 | Если ДожидатьсяРезультатаВыполнения Тогда
322 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "Удалить") = "success");
323 | КонецЕсли;
324 |
325 | Возврат СсылкаНаСтатусОперации;
326 |
327 | ИначеЕсли Ответ.КодСостояния = 204 Тогда
328 | Возврат Истина;
329 | КонецЕсли;
330 |
331 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
332 |
333 | КонецФункции
334 |
335 | Функция ИсключениеТаймаутОжиданияВыполненияОперации(ИмяОперации)
336 | Возврат "Таймаут ожидания завершени операции " + ИмяОперации;
337 | КонецФункции
338 |
339 | //@see https://tech.yandex.ru/disk/api/reference/create-folder-docpage/
340 | Функция СоздатьПапку(ПутьНаДиске) Экспорт
341 |
342 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
343 | "path,fields",
344 | Новый Структура("path", ПутьНаДиске),
345 | Неопределено
346 | );
347 |
348 | Ответ = Соединение.Записать(Новый HTTPЗапрос(
349 | ПолучитьАдресРесурса("/disk/resources", ПараметрыЗапроса),
350 | СформироватьHTTPЗаголовки()
351 | ));
352 |
353 | Если Ответ.КодСостояния <> 201 Тогда
354 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку");
355 | КонецЕсли;
356 |
357 | КонецФункции
358 |
359 | //@see https://tech.yandex.ru/disk/api/reference/publish-docpage/
360 | Функция Опубликовать(ПутьНаДиске) Экспорт
361 |
362 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
363 | "path",
364 | Новый Структура("path", ПутьНаДиске),
365 | Неопределено
366 | );
367 |
368 | Ответ = Соединение.Записать(Новый HTTPЗапрос(
369 | ПолучитьАдресРесурса("/disk/resources/publish", ПараметрыЗапроса),
370 | СформироватьHTTPЗаголовки()
371 | ));
372 |
373 | Если Ответ.КодСостояния = 200 Тогда
374 | // Получим публичный URL.
375 | СвойстваРесурса = ПолучитьСвойстваРесурса(ПутьНаДиске, Новый Структура("fields", "public_url"));
376 | Возврат СвойстваРесурса.public_url;
377 | КонецЕсли;
378 |
379 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку");
380 |
381 | КонецФункции
382 |
383 | //@see https://tech.yandex.ru/disk/api/reference/publish-docpage/#unpublish-q
384 | Функция ОтменитьПубликацию(ПутьНаДиске) Экспорт
385 |
386 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
387 | "path",
388 | Новый Структура("path", ПутьНаДиске),
389 | Неопределено
390 | );
391 |
392 | Ответ = Соединение.Записать(Новый HTTPЗапрос(
393 | ПолучитьАдресРесурса("/disk/resources/unpublish", ПараметрыЗапроса),
394 | СформироватьHTTPЗаголовки()
395 | ));
396 |
397 | Если Ответ.КодСостояния <> 200 Тогда
398 | ВызватьИсключение ИсключениеЯндексДиска(Ответ,"СоздатьПапку");
399 | КонецЕсли;
400 |
401 | КонецФункции
402 |
403 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#meta
404 | Функция ПолучитьСвойстваПубличногоРесурса(КлючПубличногоРесурса, СтруктураДополнительныхПараметров=Неопределено) Экспорт
405 |
406 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
407 | "public_key,path,sort,limit,offset,preview_size,preview_crop",
408 | Новый Структура("public_key", КлючПубличногоРесурса),
409 | СтруктураДополнительныхПараметров
410 | );
411 |
412 | Возврат ВыполнитьЗапросМетодомGET("/disk/public/resources", ПараметрыЗапроса);
413 |
414 | КонецФункции
415 |
416 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#download
417 | Функция СкачатьПубличныйРесурс(ЛокальныйПуть, КлючПубличногоРесурса, ПутьВнутриПубличнойПапки="", Перезаписывать=Ложь) Экспорт
418 |
419 | ЛокальныйПутьКФайлу = СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьВнутриПубличнойПапки, КлючПубличногоРесурса, Перезаписывать);
420 |
421 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
422 | "public_key,path",
423 | Новый Структура("public_key", КлючПубличногоРесурса),
424 | ?(ПустаяСтрока(ПутьВнутриПубличнойПапки), Неопределено, Новый Структура("path", ПутьВнутриПубличнойПапки))
425 | );
426 |
427 | СсылкаДляСкачивания = ВыполнитьЗапросМетодомGET("/disk/public/resources/download", ПараметрыЗапроса);
428 |
429 | Запрос = Новый HTTPЗапрос(СсылкаДляСкачивания.href, СформироватьHTTPЗаголовки());
430 |
431 | Ответ = Соединение.Получить(Запрос);
432 | Если Ответ.КодСостояния = 200 Тогда
433 |
434 | ДвоичныеДанные = Ответ.ПолучитьТелоКакДвоичныеДанные();
435 | ДвоичныеДанные.Записать(ЛокальныйПутьКФайлу);
436 |
437 | Возврат ЛокальныйПутьКФайлу;
438 |
439 | КонецЕсли;
440 |
441 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
442 |
443 | КонецФункции
444 |
445 | //@see https://tech.yandex.ru/disk/api/reference/public-docpage/#save
446 | Функция СохранитьПубличныйРесурсВЗагрузки(КлючПубличногоРесурса, ПутьВнутриПубличнойПапки="", НовоеИмя="") Экспорт
447 |
448 | СтруктураДополнительныхПараметров = Новый Структура;
449 | Если НЕ ПустаяСтрока(ПутьВнутриПубличнойПапки) Тогда
450 | СтруктураДополнительныхПараметров.Вставить("path", ПутьВнутриПубличнойПапки);
451 | КонецЕсли;
452 | Если НЕ ПустаяСтрока(НовоеИмя) Тогда
453 | СтруктураДополнительныхПараметров.Вставить("name", НовоеИмя);
454 | КонецЕсли;
455 |
456 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
457 | "public_key,path,name",
458 | Новый Структура("public_key", КлючПубличногоРесурса),
459 | СтруктураДополнительныхПараметров
460 | );
461 |
462 | Ответ = Соединение.ОтправитьДляОбработки(Новый HTTPЗапрос(
463 | ПолучитьАдресРесурса("/disk/public/resources/save-to-disk/", ПараметрыЗапроса),
464 | СформироватьHTTPЗаголовки()
465 | ));
466 |
467 | Если Ответ.КодСостояния = 202 Тогда
468 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
469 | Лог.Отладка(СтрокаОтвета);
470 | Ссылка = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
471 | Возврат Ссылка;
472 | ИначеЕсли Ответ.КодСостояния = 201 Тогда
473 | Возврат Истина;
474 | КонецЕсли;
475 |
476 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
477 |
478 | КонецФункции
479 |
480 | //@see https://tech.yandex.ru/disk/api/reference/recent-public-docpage/
481 | Функция ПолучитьСписокОпубликованныхРесурсов(СтруктураДополнительныхПараметров=Неопределено) Экспорт
482 |
483 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
484 | "limit,offset,type,fields,preview_size",
485 | Неопределено,
486 | СтруктураДополнительныхПараметров
487 | );
488 |
489 | Возврат ВыполнитьЗапросМетодомGET("/disk/resources/public", ПараметрыЗапроса);
490 |
491 | КонецФункции
492 |
493 | Функция ПолучитьФайлыВКорзине() Экспорт
494 | Возврат ВыполнитьЗапросМетодомGET("/disk/trash/resources/");
495 | КонецФункции
496 |
497 | //@see https://tech.yandex.ru/disk/api/reference/trash-delete-docpage/
498 | Функция ОчиститьКорзину(ПутьВКорзине="", ДожидатьсяРезультатаВыполнения=Ложь) Экспорт
499 |
500 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
501 | "path",
502 | Неопределено,
503 | ?(ПустаяСтрока(ПутьВКорзине), Неопределено, Новый Структура("path", ПутьВКорзине))
504 | );
505 |
506 | Ответ = Соединение.Удалить(Новый HTTPЗапрос(
507 | ПолучитьАдресРесурса("/disk/trash/resources/", ПараметрыЗапроса),
508 | СформироватьHTTPЗаголовки()
509 | ));
510 |
511 | Если Ответ.КодСостояния = 202 Тогда
512 |
513 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
514 | Лог.Отладка(СтрокаОтвета);
515 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
516 |
517 | Если ДожидатьсяРезультатаВыполнения Тогда
518 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "ОчиститьКорзину") = "success");
519 | КонецЕсли;
520 |
521 | Возврат СсылкаНаСтатусОперации;
522 |
523 | ИначеЕсли Ответ.КодСостояния = 204 Тогда
524 | Возврат Истина;
525 | КонецЕсли;
526 |
527 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
528 |
529 | КонецФункции
530 |
531 | //@see https://tech.yandex.ru/disk/api/reference/trash-restore-docpage/
532 | Функция ВосстановитьРесурсИзКорзины(ПутьВКорзине, НовоеИмя="", Перезаписывать=Ложь, ДожидатьсяРезультатаВыполнения=Ложь) Экспорт
533 |
534 | СтруктураДополнительныхПараметров = Новый Структура;
535 | Если НЕ ПустаяСтрока(НовоеИмя) Тогда
536 | СтруктураДополнительныхПараметров.Вставить("name", НовоеИмя);
537 | КонецЕсли;
538 | Если Перезаписывать Тогда
539 | СтруктураДополнительныхПараметров.Вставить("overwrite", Перезаписывать);
540 | КонецЕсли;
541 |
542 | ПараметрыЗапроса = РаботаСUrl.СформироватьСтруктуруПараметровЗапроса(
543 | "path,name,overwrite",
544 | Новый Структура("path", ПутьВКорзине),
545 | СтруктураДополнительныхПараметров
546 | );
547 |
548 | Ответ = Соединение.Записать(Новый HTTPЗапрос(
549 | ПолучитьАдресРесурса("/disk/trash/resources/restore", ПараметрыЗапроса),
550 | СформироватьHTTPЗаголовки()
551 | ));
552 |
553 | Если Ответ.КодСостояния = 202 Тогда
554 |
555 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
556 | Лог.Отладка(СтрокаОтвета);
557 |
558 | СсылкаНаСтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
559 |
560 | Если ДожидатьсяРезультатаВыполнения Тогда
561 | Возврат (ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, "ВосстановитьРесурсИзКорзины") = "success");
562 | КонецЕсли;
563 |
564 | Возврат СсылкаНаСтатусОперации;
565 |
566 | ИначеЕсли Ответ.КодСостояния = 201 Тогда
567 | Возврат Истина;
568 | КонецЕсли;
569 |
570 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
571 |
572 | КонецФункции
573 |
574 | //@see https://tech.yandex.ru/disk/api/reference/operations-docpage/
575 | Функция ПолучитьСтатусОперации(Ссылка) Экспорт
576 |
577 | Запрос = Новый HTTPЗапрос(Ссылка.href, СформироватьHTTPЗаголовки());
578 |
579 | Ответ = Соединение.Получить(Запрос);
580 |
581 | Если Ответ.КодСостояния = 200 Тогда
582 |
583 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
584 | Лог.Отладка(СтрокаОтвета);
585 |
586 | СтатусОперации = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
587 | Возврат СтатусОперации.status;
588 |
589 | КонецЕсли;
590 |
591 | ВызватьИсключение ИсключениеЯндексДиска(Ответ);
592 |
593 | КонецФункции
594 |
595 | Функция ДождатьсяРезультатаВыполненияОперации(СсылкаНаСтатусОперации, ИмяОперации) Экспорт
596 | Лог.Отладка("Ожидаем результата выполнения операции " + ИмяОперации);
597 |
598 | КоличествоПопыток = 10;
599 | Пока Истина Цикл
600 |
601 | ТекущийСтатус = ПолучитьСтатусОперации(СсылкаНаСтатусОперации);
602 | Если ТекущийСтатус <> "in-progress" Тогда
603 | Лог.Отладка(СтрШаблон("Получен результат операции %1: %2", ИмяОперации, ТекущийСтатус));
604 | Возврат ТекущийСтатус;
605 | КонецЕсли;
606 |
607 | КоличествоПопыток = КоличествоПопыток - 1;
608 | Если КоличествоПопыток = 0 Тогда
609 | ВызватьИсключение ИсключениеТаймаутОжиданияВыполненияОперации(ИмяОперации);
610 | КонецЕсли;
611 |
612 | Приостановить(1000);
613 |
614 | КонецЦикла;
615 |
616 | Возврат Неопределено;
617 |
618 | КонецФункции
619 |
620 | ///////////////////////////////////////////////////////////////////////////////
621 | // ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ
622 | ///////////////////////////////////////////////////////////////////////////////
623 |
624 | Функция ИсключениеМетодНеПоддерживается(ДополнительнаяИнформация = "")
625 | Возврат "Метод в настоящий момент не поддерживается" + ?(ПустаяСтрока(ДополнительнаяИнформация), "", ": " + ДополнительнаяИнформация);
626 | КонецФункции
627 |
628 | Функция ИсключениеКаталогНеСуществует(Путь)
629 | Возврат "Каталог не существует: " + Путь;
630 | КонецФункции
631 |
632 | Функция ИсключениеФайлСуществует(Путь)
633 | Возврат "Файл существует: " + Путь;
634 | КонецФункции
635 |
636 | Функция ИсключениеЯндексДиска(HTTPОтвет, МеткаДляОтладки="")
637 | ТелоОтвета = HTTPОтвет.ПолучитьТелоКакСтроку();
638 |
639 | Попытка
640 | ОбъектОшибки = ПарсерJSON.ПрочитатьJSON(ТелоОтвета,,,Истина);
641 | ОписаниеОшибки = ОбъектОшибки.description;
642 | Исключение
643 | ОписаниеОшибки = ТелоОтвета;
644 | КонецПопытки;
645 |
646 | ТекстИсключения = СтрШаблон("Яндекс.Диск ответил кодом ошибки %1: %2", HTTPОтвет.КодСостояния, ОписаниеОшибки);
647 |
648 | Лог.Ошибка(?(ПустаяСтрока(МеткаДляОтладки), "", " [" + МеткаДляОтладки + "] ") + ТекстИсключения);
649 |
650 | Возврат ТекстИсключения;
651 | КонецФункции
652 |
653 | Функция СформироватьHTTPЗаголовки(ДобавлятьТокенАвторизации=Истина)
654 | Заголовки = Новый Соответствие();
655 | Заголовки.Вставить("Accept", "application/json");
656 | Заголовки.Вставить("Content-Type", "application/json");
657 | Если ДобавлятьТокенАвторизации Тогда
658 | Заголовки.Вставить("Authorization", ТокенАвторизации);
659 | КонецЕсли;
660 | Возврат Заголовки;
661 | КонецФункции
662 |
663 | Функция ВыполнитьЗапросМетодомGET(Ресурс, ПараметрыЗапроса=Неопределено)
664 | Запрос = Новый HTTPЗапрос(
665 | ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса),
666 | СформироватьHTTPЗаголовки()
667 | );
668 |
669 | Лог.Отладка(ПолучитьАдресРесурса(Ресурс, ПараметрыЗапроса));
670 |
671 | Ответ = Соединение.Получить(Запрос);
672 |
673 | Если Ответ.КодСостояния = 200 Тогда
674 | СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
675 | Лог.Отладка(СтрокаОтвета);
676 | Объект = ПарсерJSON.ПрочитатьJSON(СтрокаОтвета,,,Истина);
677 | Возврат Объект;
678 | КонецЕсли;
679 |
680 | ВызватьИсключение ИсключениеЯндексДиска(Ответ, "ВыполнитьЗапросМетодомGET");
681 | КонецФункции
682 |
683 | Функция СформироватьПроверитьЛокальныйПутьСкачиваемогоФайла(ЛокальныйПуть, ПутьНаДиске, КлючПубличногоРесурса, Перезаписывать)
684 |
685 | // Определяем локальный каталог, в который будем скачивать файл и имя скачанного файла.
686 | ИмяФайла = "";
687 | КаталогНазначения = Новый Файл(ЛокальныйПуть);
688 |
689 | Если КаталогНазначения.ЭтоФайл() Тогда
690 |
691 | Лог.Отладка("Локальный путь - это файл: " + ЛокальныйПуть);
692 | ИмяФайла = КаталогНазначения.Имя;
693 | КаталогНазначения = Новый Файл(КаталогНазначения.Путь);
694 |
695 | ИначеЕсли КаталогНазначения.ЭтоКаталог() Тогда
696 |
697 | // Если ЛокальныйПуть - это каталог, в который надо скачать файл,
698 | // то сохраним исходное имя файла, как оно было задано на Диске.
699 | Лог.Отладка("Локальный путь - это каталог: " + ЛокальныйПуть);
700 | СвойстваРесурса = ?(КлючПубличногоРесурса = Неопределено,
701 | ПолучитьСвойстваРесурса(ПутьНаДиске, Новый Структура("fields", "name,type")),
702 | ПолучитьСвойстваПубличногоРесурса(КлючПубличногоРесурса, Новый Структура("path", ПутьНаДиске))
703 | );
704 |
705 | ИмяФайла = СвойстваРесурса.name;
706 | Если СвойстваРесурса.type = "dir" Тогда
707 | // Папки скачиваются как zip-архив.
708 | ИмяФайла = ИмяФайла + ".zip";
709 | КонецЕсли;
710 |
711 | КонецЕсли;
712 |
713 | // Каталог, в который скачиваем файл должен существовать.
714 | Если НЕ КаталогНазначения.Существует() Тогда
715 | ВызватьИсключение ИсключениеКаталогНеСуществует(КаталогНазначения);
716 | КонецЕсли;
717 |
718 | ФайлНазначения = Новый Файл(ОбъединитьПути(КаталогНазначения.ПолноеИмя, ИмяФайла));
719 | Если ФайлНазначения.Существует() И НЕ Перезаписывать Тогда
720 | ВызватьИсключение ИсключениеФайлСуществует(ФайлНазначения.ПолноеИмя);
721 | КонецЕсли;
722 |
723 | Возврат ФайлНазначения.ПолноеИмя
724 |
725 | КонецФункции
726 |
727 | ///////////////////////////////////////////////////////////////////////////////
728 | // ТОЧКА ВХОДА
729 | ///////////////////////////////////////////////////////////////////////////////
730 |
731 | Инициализировать();
--------------------------------------------------------------------------------