Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
# (номер, тип операции, название операции, номер FTP-сервера, папка-источник, имя архива, шаблон, папка назначения)
operations = [
(0, 'get', u'Обновить данные', 0, 'downdata', 'basa.zip', ('*',), 'data'),
(1, 'put', u'Отправить реестры', 0, srcdir, 'reestr.zip', ('*.db', '*.px',), 'updata'),
(2, 'get', u'Обновить программу', 0, 'ftpman', 'ftpman.zip', ('*',), 'bin'),
(3, 'get', u'Получить README.TXT', 1, 'pub/FreeBSD', 'README.TXT', ('*',), '.'),
]
Наиболее важными здесь являются список FTP-серверов и список операций. Код в начале сценария, помеченный как «предвычисляемый», нужен для динамического определения значения некоторых переменных, подставляемых в списки. В нашем примере в нем вычисляется значение переменной srcdir, которая задает папку-источник данных, используемую в операции 1 («Отправить реестры»). В качестве источника должна использоваться папка с именем вида Pay_NN, где NN – двузначное число, с наибольшим значением NN. Для того чтобы определить эту папку на данный момент, и нужен этот «предвычисляемый» код.
Список FTP-серверов задается как список кортежей, каждый из которых содержит адрес сервера, имя и пароль пользователя для доступа на этот сервер. В дальнейшем обращение к данным по тому или иному серверу выполняется по порядковому номеру записи (начиная с нуля). Например, имя пользователя, которое должно использоваться для доступа на ftp.freebsd.org, можно будет получить так: «ftpservers[1][1]».
Аналогично задается список операций. Назначения полей приведены в комментарии. Номер операции здесь указываем явно – так будет удобнее в дальнейшем. Второе поле задает саму операцию – получение данных (get) или отправка (put).
Конечно, формат нашего конфигурационного файла способен напугать кого угодно, однако пользователям не придется с ним работать, а администратор как-нибудь разберется.
Главный сценарий manager.py
Теперь попытаемся объединить все это в законченное приложение:
# -*- coding: cp866 -*-
from Tkinter import *
from myftp import getftp, putftp
VERBOSE = 1
if VERBOSE: print '================> manager.py запущен.'
# Служебно-декоративная функция. Нужна, чтобы менять текст метки в зависимости от состояния
def chStat(messvar, color, btn, btnrelief):
# изменяем границу кнопки так, чтобы в момент выполнения операции она выглядела вдавленной –
# исключительно «декоративный» эффект
btn.config(relief = btnrelief)
# меняем текст метки
status.config(text = messvar)
# меняем цвет метки
status.config(fg = color)