Как сделать Python-проект в Sublime

[1]

Можно сперва сделать каталог для проекта на Python, заодно внутри можно сходу сделать первый файл. Одной командой:

mkdir -p project_folder/ && touch $_/project_file.py

[2]

В Sublime своё определение «проекта» — это просто список файлов, объединённых какой-то логикой. Они могут, как это обычно бывает, находиться в одном каталоге на hdd, а могут в разных.

На диске проект сублима (можно называть его «саблайм», но мне привычнее воспринимать это слово на румынский манер) выглядит как отдельный файл с расширением .sublime-project

Он ценен не только тем, что в нём перечислен список файлов, которые относятся к какой-то теме, но и тем, что в нём можно для каждого «проекта» указывать отдельные настройки, например, прописать путь до интерпретатора Python в virtualenv.

В Sublime:

  • File > Open… > зайти в папку проекта и выбрать нужный файл. Новый файл будет добавлен в общий список уже открытых файлов.
  • File > Open Folder… > выделить папку проекта (не заходя в нее) и кликнуть по ’Open’. Новое окно будет открыто, в Side Bar будет отображаться перечень файлов из выбранного каталога.
  • Project > Save Project As…

[3]

И если открыть в редакторе этот *.sublime-project, то можно наколотить всякого нужного, например:

{
    "folders":
    [
        {    // следовать по симв. ссылкам
            "follow_symlinks": true, 

            // путь к проекту от текущего файла
           "path": ".", 
        }
    ],
    "settings":
    {
        // точный путь до определенного интерпретатора
        "python_interpreter": "/usr/bin/python3.9",
    }
}

Как установить ту/иную версию Python

[1]

Засетапить (один раз и навсегда) своё окружение для сборки исходного кода Python:

sudo apt update && sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget

[2]

Go to https://www.python.org/ftp/python/ и выбрать нужную версию Python, например, 3.8.9.

Стянуть оттуда файл tar.xz

wget https://www.python.org/ftp/python/3.8.9/Python-3.8.9.tar.xz -P ~/Загрузки

[3]

Go to каталог загрузки, распаковать снятый архив (в подпапку).

tar -xf Python-3.8.9.tar.xz

и перейти в неё:

cd Python-3.8.9

[4]

Начинаем конфигурацию

./configure --enable-optimizations

Побежали checking for…

Ждём результат creating Makefile.

[5]

make -j 4

Тут 4 — количество ядер в процессоре ноутбука, которые будут рады выполнить нашу команду. Выяснить их количество можно заранее командой ’nproc’.

Подождать, пока отгудятся кулеры от нагрузки. Дело может и затянуться, там выполняется некое множество тестов.

[6]

Осторожно, не надо использовать тут стандартный make install, поскольку он перезапишет существующий системный двоичный файл python3.

sudo make altinstall

[7]

Проверка результата:

python3.8 --version

pipenv install

pip — инструмент для установки и управления зависимостями в проектах Python. Аналог aptitude в Debian.

env — инструмент для создания и управления виртуальным окружением в проектах Python.

pipenv — надстройка над pip. Умеет автоматически находить интерпретатор Python нужной версии, запускать вспомогательные скрипты для разработки, загружать переменные окружения из файла .env, проверять зависимости на наличие известных уязвимостей. Не путать с Pyenv.

Continue reading “pipenv install”

Генерация даты

Если в имени новосоздаваемого юзера влепить циферки с текущим временем (часыминутысекунды), то вероятность повторения такого имени очень мала. Одна секунда на 23 часа 59 минут и 59 секунд…

А профит в том, что можно будет четко знать, когда именно этот юзер был создан.

Как это сделать на JS:

var currentTime = new Date(); var hours = currentTime.getHours(); var minutes = currentTime.getMinutes(); var seconds = currentTime.getSeconds(); hours + "-" + minutes + "-" + seconds;

Результат сохранить в переменную, на основе которой генерировать имя очередного юзера.

Установка Python + Selenium + Eclipse/SublimeText3 в Debian

= 1 =
Установить Python

Вероятно, Python уже установлен в системе, и что ещё более вероятно, сразу несколько версий, и новая третья, и старая вторая, которая ещё нужна для каких-то приложений. Проверяем в консоли.

python --version

Ожидаемый результат: Python 2.7.13

python3 --version

Ожидаемый результат: Python 3.5.3 (или новее)

Continue reading “Установка Python + Selenium + Eclipse/SublimeText3 в Debian”

goBack()

Чтобы сделать в браузере “шаг назад”, надо написать команду:

execute script
window.history.back()

Это кажется раздражающе неочевидным, но это же обычный JavaScript. А там есть много всякого, если знать, что искать. Например:

  • window.history.back()
  • window.history.forward()

и много еще чего.

Selenium IDE снова в строю

Установить https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/

Разработка https://github.com/SeleniumHQ/selenium-ide

Firefox 61. Но есть и для Chrome.

Очевидно, что придётся заново перещупывать все команды.

Ну, и как всегда

Screenshot_20180901_234404

What’s new:

SIDE Runner

Can now run project files headlessly in command line

run

Use the run command to call tests from within tests.

link locator

link is deprecated in favor of linkText and partialLinkText, more info here.

Control Flow commands

You can now use conditional logic in your tests with commands if, else if, else, end, while, times, do, and repeat if.

assert and verify commands

Use the assert and verify commands to check the value of a variable against an expected value.

Firefox 54, а там посмотрим

Ну…

Firefox 55 and Selenium IDE

The bad news: from Firefox 55 onwards, Selenium IDE will no longer work.

The reasons for this are complex, but boil down to two main causes:

Browsers are complicated pieces of software that are constantly evolving. Mozilla has been working hard to make Firefox faster and more stable, while still retaining the flexibility and ease of extension that we’ve come to know and love. As part of that process, Firefox is switching extensions from the original “XPI” format, to a newer, more widely adopted “Web Extension” mechanism.

The Selenium project lacks someone with the time and energy to move the IDE forwards to take advantage of the new technologies.

Ну, ок, я пока притормозил обновления Firefox, №54 работает норм.

Удаление children pages в Confluence

Под родительской страницей 50 штук дочерних. Массовое удаление в силу ряда причин недоступно. Если удалить только родительскую страницу, дочерние останутся. Хочется экстерминировать всё семейство, но для этого надо заходить на каждую подстраницу и “убивать” ее персонально.

Название каждой подстраницы уникально, поэтому кликать по ссылке вроде бы затруднительно.

Но нет.

<tr>
    <td>label</td>
    <td>s</td>
    <td></td>
</tr>
<!--open next children page-->
<tr>
    <td>clickAndWait</td>
    <td>//div[@id='page-children' and @class='pageSectionBody children-loaded']/span[@class='child-display']/a</td>
    <td></td>
</tr>
<!--delete page-->
<tr>
    <td>click</td>
    <td>//a[@id='action-menu-link']/span/span</td>
    <td></td>
</tr>
<tr>
    <td>clickAndWait</td>
    <td>css=#action-remove-content-link &gt; span</td>
    <td></td>
</tr>
<tr>
    <td>clickAndWait</td>
    <td>id=confirm</td>
    <td></td>
</tr>
<tr>
    <td>gotolabel</td>
    <td>s</td>
    <td></td>
</tr>

Make it so.