Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3492 posts.

Инструментальные средства разработки » Как настроить человеческий автокомплит Sublime Text 3 » Июль 17, 2017 12:02:36

Друзья, всем доброго времени суток. Такой вопрос, кто то знает как можно сделать человеческий атвокомплит функций в sublime 3, например если я ввел “pr” и сделал автокомплит на print, то чтобы сразу мне комплит шел со скобками, то есть print(“курсор вот тут”), хочется так сделать со всеми функциями, чтобы не нужно было время тратить. Снипеты писать руками не вариант, нужно чтобы все функции так работали, а не те которые я руками пропишу.
Следующий вопрос, кто знает как заставить его автокомплитить модули и библиотеки. То есть я пишу import, тут работает автокомплит и все классно, но начинаю писать time и он не предлагает мне его, то есть не автокомплитит. Дальше больше, например я импортировал requests, и где то в программе хочу вызвать метод get, в “здравом” автокоплите должно быть так, я пишу: requests. и получаю на выбор все функции которые есть, а если пишу requests.g то получаю предложение о функции get, однако у меня так не происходит, кто знает как такое настроить?
А еще, раз уже я тут про sublime начал, может кто расскажет как сделать цепочку команд на комбинацию клавиш. Сейчас чтобы запустить код мне нужно открыть еще одно окно, в нем запустить repl, вернуться в окно с кодом и запустить код, то есть передать текущий файл в repl, кто то знает как всю эту цепочку забиндить на одну комбинацию клавиш?

Python для новичков » requests редирект » Июль 14, 2017 14:26:40

Добрый день.

На странице есть ссылка вида -
http://site.com/?act=Search&CODE=getallposts&mid=123456, если по ней пройти в браузере, то в итоге оказываешься на странице -
http://site.com/?act=Search&nav=au&CODE=show&searchid=2262d402de1ca257ad8e238dbb1119e2&search_in=posts&result_type=posts
при этом searchid всегда разный, но содержимое страницы одинаковое.

Смотрел, что посылает браузер, там следующее -
GET 302 Redirect(cached)
GET (Cache) text/html
GET (Cache) text/css
GET (Cache) text/javascript
и т.д.

requests.session.get("http://site.com/?act=Search&CODE=getallposts&mid=123456") всегда выдает status_code 200 и не ту страницу, вернее ту, но редиректа нет, history - пустой, headers прописывал, allow_redirects=True. Как добиться нужного результата?

p/s: Нужный адрес есть в GET (Cache) text/html

Python для новичков » HELP! Python ZipFile » Июль 14, 2017 14:24:43

Всем привет!
Прошу помощи - ОС убунту, питон 3.4
Есть функция(во вложении), по ней jpg-ги складываются в архив, все работает, НО С КИРИЛЛИЦЕЙ БЕДА - при открытии в Windows названия паганятся на символы ((
пробовал encode decode, но сильно не преуспел ( Спасиб за ответы)

Python для новичков » как спрятать пароли от вывода cgitb? » Июль 14, 2017 13:35:37

Приветствую!

Возникла очень специфическая ситуация, помогите советом.

Вот кусок кода, в котором осуществляется подключение к БД.
Специально, чтобы спрятать логин/пароль/название базы от вывода в случае ошибки был придуман способ с конфигурационным файлом (раньше эти данные прописывались прямо в строке коннекта)
И это работало!

 ###     !!!     MYSQL Connect
f=open('/x/home/cfg/i5.mysql', 'r')
mysql_cfg=f.read()
f.close()
host,user,passwd,db=mysql_cfg.strip().split('|')
db = MySQLdb.connect(host=host, user=user, passwd=passwd, db=db, charset='cp1251')
cursor = db.cursor()

Но сегодня произошла ошибка другого характера(отсутствие коннекта до сервера с БД) и пароль опять высветился в выводе ошибок!

Подскажите пожалуйста, как правильно передавать логин и пароль, чтобы избежать подобных ситуаций.
Спасибо.

p.s. Конечно же, правильнее всего направить вывод ошибок в файл (так и сделано), но во время отладки это крайне неудобно и в такие моменты вывод делается на экран.

UPD! Вопрос решился изменением методов выкатывания файлов на продакшн и введением дополнительного конфига с параметром отладка вкл/выкл. Но вместо абсолютных путей будет использоваться абсолютные “../cfg/mysql.cfg”, “../cfg/debug.cfg”

Python для новичков » Robot Framework » Июль 14, 2017 08:59:17

Добрый день!

Возможно кому-то доводилось сталкиваться с этим замечательным фреймворком, надеюсь сможете дать дельных советов

Собственно вопрос: Имеется приложение “Х”, есть набор кейвордов, которые работают с конфигом для приложения “Х” (модификация, удаление и т.п.). Данные кейворды (для работы с конфигом) используют библиотеку на питоне.

Далее имеется набор сюитов, в которых имеются тест кейсы. Внутри этих кейсов я модифицирую конфиг приложения “Х”, используя “набор кейвордов для работы с конфигом”.

Проблема заключается в следующем - в моём случае питоновская библиотека для работы с конфигом по своей сути является “синглтоном” , а мне такое поведение неудобно/ненужно

Подскажите, пожалуйста могу ли я как-то создавать (экземпляры?) библиотеки (питоновской), чтобы в дальнейшем работать с экземпляром класса, а не синглтоном?

Пример работы с конфигом (по кейвордам):
1. Считать конфиг для приложения “Х”
2. Изменить параметр “А” для приложения “Х”
3. Изменить параметр “B” для приложения “Х”
4. Сохранить новую конфигурацию для “X”

Пример выше - работает ок, но вся проблема заключается в том, что весь мой конфиг (дерево, которое получается после парсинга конфига) хранится внутри питоновской библиотеки и никуда не сохраняется пока я не вызову “Сохранить новую конфигурацию”

Т.е. такая последовательность действий у меня не взлетит:
1. Считать конфиг для приложения “X”
2. Изменить параметр “А” для приложения “Х”
3. Изменить параметр “B” для приложения “Х”
4. Считать конфиг для приложения “Y” (здесь потеряется вся инфа об действиях 2,3)
5. Изменить параметр “C” для приложения “Y”
6. Сохранить новую конфигурацию для “Y” (тут всё ок будет)
7. Сохранить новую конфигурацию для “X” (а здесь мы ничего не поменяем, возможно даже будет ошибка, потому что “внутри” либы у нас сейчас находится совсем другой конфиг)

В итоге я хочу сделать так:
 ${x} =  Load Config For X
${y} =  Load Config For Y

И далее уже работать с {x} и {y}.
Надеюсь что смог объяснить, спасибо!

Python для новичков » Проблема в областях видимости при написании бота » Июль 10, 2017 09:32:37

Пишу бота на python, опыта разработки на этом ЯП почти минимально. Так вот, пишу музыкального дискорд бота чисто под свои нужды. В общем, по замыслу при вводе play (url) должна запускаться звук с видео с ютуба, с первым play проблем нет, можно стопить, ставить на паузу и тд, но со 2 *play возникают проблемы, песню невозможно стопить и производить с ней какие-либо действия, интерпретатор ссылался на то, что подпрограммы play, stop, resume находятся в главной подпрограмме play и при втором и более вызовах этой подпрограммы 2 раз инициализироваться эти же подпрограммы(play, stop и тд) не могут. Основная проблема в областях видимости, т.к одни подпрограммы находятся в другой, а по-другому нельзя, что делать? На скрине стрелкой показана главная подпрограмма.
 vc = await bot.join_voice_channel(voice_channel)
    vc_clients[message.server.id] = [vc]
@bot.command(pass_context=True)
    async def play(ctx, url):
        try:
            player = await vc.create_ytdl_player(url)
            player.start()
            @bot.command(pass_context=True)
            async def pause():
                player.pause()
                await bot.say('Музыка на паузе')
            @bot.command(pass_context=True)
            async def stop():
                player.stop()
                await bot.say('Музыка остановлена')
            @bot.command(pass_context=True)
            async def resume():
                player.resume()
        except:
            pass

Python для новичков » Проблема с livewires » Июль 9, 2017 14:07:25

Установил pygame и livewires, при попытке написания простейшего элемента столкнулся с такой проблемой:
 from livewires import games
games.init(screen_width = 640, screen_height = 480, fps = 50)
games.screen.mainloop()
при запуске интерпритатор выдает следующее:
Traceback (most recent call last):
File “/home/flex/Python/Panic at the pizzeria/main.py”, line 1, in <module>
from livewires import games
File “<frozen importlib._bootstrap>”, line 969, in _find_and_load
File “<frozen importlib._bootstrap>”, line 958, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 664, in _load_unlocked
File “<frozen importlib._bootstrap>”, line 634, in _load_backward_compatible
File “/usr/local/lib/python3.5/dist-packages/LiveWires-2.1-py3.5.egg/livewires/__init__.py”, line 32, in <module>
File “<frozen importlib._bootstrap>”, line 969, in _find_and_load
File “<frozen importlib._bootstrap>”, line 958, in _find_and_load_unlocked
File “<frozen importlib._bootstrap>”, line 664, in _load_unlocked
File “<frozen importlib._bootstrap>”, line 634, in _load_backward_compatible
File “/usr/local/lib/python3.5/dist-packages/LiveWires-2.1-py3.5.egg/livewires/beginners.py”, line 798, in <module>
AttributeError: module ‘tkinter’ has no attribute ‘tkinter’

Подскажите, пожалуйста, как решить данную проблему?

Python для экспертов » Отмена выполнения запущенных коррутин » Июль 6, 2017 10:13:12

Мне нужно как-то отменить некоторые из коррутин, которые я запустил. Я создаю коррутины и добавляю их в список, а потом объединяю их в 1 задачу и запускаю
 await asyncio.gather(*tasks)
Как мне отменить только эти коррутны? Я пока находил вариант как грохнуть все.

Флейм » [вакансия] Разработчик под шину PCI-E (C++, Windows) в г. Москва » Июль 4, 2017 14:32:29

Место работы: производственное предприятие в г. Москва, часть заказов - оборонного назначения. Удаленка, как Вы, наверное, уже понимаете, невозможна - строго офис.

Главное условие на эту(!) вакансию: вы уже разрабатывали драйвера под PCI-E на C++ под платформу Windows и у вас есть, чем это подтвердить.

Ваши плюсы (не обязательно, но желательно - влияет на итоговую сумму оффера):

1. Практический опыт с ПЛИС Altera и САПР Quartus II;
2. Знание Verilog;
3. Опыт разработки драйверов для USB, Ethernet, FW и прочих протоколов;
4. Опыт работы с SolidWorks;
5. Опыт разработки графических интерфейсов.

Если Вы не имеете опыта PCIe+Win+Cpp, но считаете, что можете быть интересны этой компании (см. блок “Ваши плюсы”), Ваше резюме, вполне возможно, тоже сможет заинтересовать компанию - есть и другие вакансии (все они НЕ публичные). Вместе с резюме просьба сразу указать контактный телефон и удобное время для звонка, чтобы оперативно обсудить детали (разговор займет не более 10-ти минут).

Резюме направлять на адрес: cppjob@inbox.ru

Спасибо за внимание!

Python для новичков » Итерация по листу с нахождением минимальных и максимальных значений функции » Июль 3, 2017 11:45:16

Здравствуйте.
Допустим есть лист 2, 3, 2, 1, 2, 3. Необходимо найти все локальные экстремумы, то есть результат должен быть таким: 2, 3, 1, 3, где 2, 1 это минимальные значения функции, а 3, 3 - максимальные. Результат может быть раздельным для минимальных и максимальных значений.
Что-то похожее на это:
 '''Идем по листу:
    if следующее значение больше:
        Записываем предыдущее значение как минимальное.
        Записываем временное значение как максимальное. 
    else:
        Записываем предыдущее значение как максимальное.
        Записываем временное значение как минимальное.'''
UPD. Парсер

Django » Необходимо сделать отправку данных с формы на email со всеми атрибутами указанными пользователем. » Июнь 30, 2017 18:47:03

Суть задачи такая, имеется модель(model.py) в виде заявки на ремонт пк данные введенные пользователем на ремонт передаются все ок! Атрибуты следующие:
Фио: —–
Проблема: ——
Адрес:——-
Кабинет:——

Так вот, все работает, кроме того, что я хочу сделать email оповещение админа о поступившей заявку с передачей всех указанных атрибутов выше! Но используя send_mail не получается. Получается передать только три максимум атрибута!
Помогите пожалуйста третий день не могу решить!(


views.py
def add_list (request):
form = FeedbackForm(request.POST or None)
if form.is_valid():
subject = request.POST.get('','ГБУ “ЖИЛИЩНИК РАЙОНА ЮЖНОЕ МЕДВЕДКОВО”')
message = request.POST.get('text')
from_email = request.POST.get('email')
send_mail(subject, message, from_email,, fail_silently=False)
return HttpResponse('Спасибо уважаемый пользователь! Ваше сообщение отправлено!')
form.save()
return HttpResponseRedirect('/index2/')
return render(request, ‘primer/add_list.html’,{'form':form})

GUI » QVideoWidget и WA_TranslucentBackground Помогите!!! » Июнь 30, 2017 18:14:39

Всем доброго времени суток!

Есть окно с прозрачным бек фоном через QT.WA_TranslucentBackground
В нем расположен QVideoWidget для проигрывания видео.
Но при активном флаге QT.WA_TranslucentBackground видео не показывается. Когда флаг отключаю и экран серый то все ок.


Нагуглила единственный вариант решения проблемы:
"I solve the problem .when we set the WA_TranslucentBackground flag and FramelessWindowHint attribute the QVideoWidget's QPainter going to QPainter::CompositionMode_DestinationOver mode and it cause to nothing to show or a shadow on the screen . in this case i use a custom video widget and in paintEvent after createing QPainter painter(this); add
painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination); or
painter.setCompositionMode(QPainter::RasterOp_SourceAndDestination);
to change the composition mode."
ссылка на stackoverflow
Только вот никак не могу понять где этот
painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination); or
painter.setCompositionMode(QPainter::RasterOp_SourceAndDestination);
прописывать. Очень надо!

пробовала создавать паинт ивент но не помогает
     def paintEvent(self, QPaintEvent):
        painter = QPainter(self)
        painter.setCompositionMode(QPainter.RasterOp_SourceAndNotDestination)
может не правильно прописываю?

Вот код моего файла если поможет:
 from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
from PyQt5.QtGui import *
from functions.main_funcs import (getScreen)
import os
import configparser
import config
class VideoPlayer(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
    def initUI(self):
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)  # окно без рамок и заголовка, не отображается на панели задач
        self.setAttribute(Qt.WA_TranslucentBackground)  # прозрачный бек окна
        self.setFixedSize(678, 398)
        self.setObjectName('VideoPlayer')
        # Объявляем позицию окна для последущей записи
        self.WF_wx = 0
        self.WF_wy = 0
        # CONFIG
        self.config = configparser.ConfigParser()
        # Media Player
        self.player = QMediaPlayer()
        self.player.setVolume(10)
        self.mediaFile = QMediaContent(None)
        # BG
        self.bg = QLabel(self)
        self.bg.setObjectName('bg')
        self.bg.setStyleSheet(
            "background-repeat: none; background-image: url(.data/img/videoPlayer2.png); background-position:0 0;")
        self.bg.setFixedSize(678, 398)
        self.bg.move(0, 0)
        self.bg.installEventFilter(self)
        # closeButton
        self.closeButton = QPushButton(self)
        self.closeButton.setObjectName('closeButton')
        style = """QPushButton {border-image: url(.data/img/x.png) 0 0 0 0 stretch stretch;
                                                                             border: 0px solid transparent;}
                   QPushButton:hover {border-image: url(.data/img/x2.png) 0 0 0 0 stretch stretch;
                                                                             border: 0px solid transparent;}
                """
        self.closeButton.setStyleSheet(style)
        self.closeButton.setCursor(Qt.PointingHandCursor)
        self.closeButton.setFixedSize(23, 22)
        self.closeButton.move(614, -1)
        self.closeButton.installEventFilter(self)
        self.closeButton.clicked.connect(self.closePlayer)
        # Total time
        self.totalTime = QLabel("00:00:00", self)
        self.totalTime.setObjectName('totalTime')
        self.totalTime.setStyleSheet("background: transparent; color:#409aff; font: 10px;")
        font = QFont("Tahoma")
        self.totalTime.setFont(font)
        self.totalTime.setFixedSize(40, 16)
        self.totalTime.move(46, 2)
        # Black Layer BG
        self.bg2 = QLabel(self)
        self.bg2.setObjectName('bg2')
        self.bg2.setStyleSheet("background: #000000;")
        self.bg2.setFixedSize(640, 360)
        self.bg2.move(19, 19)
        # VIDEO WIDGET
        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.videoWidget = QVideoWidget(self)
        self.videoWidget.setObjectName('videoWidget')
        self.videoWidget.setFixedSize(640, 360)
        self.videoWidget.move(19, 19)
        self.videoWidget.show()
        self.mediaPlayer.setVideoOutput(self.videoWidget)
        self.mediaPlayer.setMedia(QMediaContent(QUrl("https://cs1-67v4.vk-cdn.net/p21/0f8a674b8080.1080.mp4")))
        self.mediaPlayer.setVolume(10)
        self.mediaPlayer.play()
        self.show()
        # Получаем данные о расположении окна и записываем в конфиг положение окна если его нет
        screen = getScreen()
        widget_xy_x = int((screen[0] / 2) - 339)
        widget_xy_y = int((screen[1] / 2) - 199)
        try:
            self.config.read('config.ini', 'utf8')
            widget_xy_x = int(self.config.get('videPlayerXY', 'x'))
            widget_xy_y = int(self.config.get('videPlayerXY', 'y'))
        except configparser.NoSectionError:
            self.config.add_section('videPlayerXY')
            self.config.set('videPlayerXY', 'x', '0')
            self.config.set('videPlayerXY', 'y', '0')
            with open('config.ini', 'w', encoding='utf8') as configfile:
                self.config.write(configfile)
        finally:
            self.move(widget_xy_x, widget_xy_y)
    def handleError(self):
        print(self.mediaPlayer.errorString())
    def closePlayer(self):
        # Закрываем окно
        self.mediaFile = QMediaContent(QUrl.fromLocalFile('.data/sounds/clickM.wav'))
        self.player.setMedia(self.mediaFile)
        self.player.play()
        self.hide()
    # Ловим события hover/click и т.д.
    def eventFilter(self, obj, event):
        # print(event.type())
        if event.type() == 3:  # clickButton
            pass
        elif event.type() == 10:  # mouseEnter
            if obj.objectName() == 'closeButton':
                self.mediaFile = QMediaContent(QUrl.fromLocalFile('.data/sounds/hover.wav'))
                self.player.setMedia(self.mediaFile)
                self.player.play()
        elif event.type() == 11:  # mouseLeave
            pass
        return False
    # Возможность перемещения окна
    def mousePressEvent(self, event):
        self.offset = event.pos()
    def mouseMoveEvent(self, event):
        x = event.globalX()
        y = event.globalY()
        x_w = self.offset.x()
        y_w = self.offset.y()
        w_x = x - x_w
        w_y = y - y_w
        # Вычисляем размеры экрана и не даем окну выходить за его пределы
        if (w_x < 0): w_x = 0
        if (w_y < 0): w_y = 0
        screen = getScreen()
        screen_w = screen[0]
        screen_h = screen[1]
        win_w = self.width()
        win_h = self.height()
        if (w_x > (screen_w - win_w)): w_x = screen_w - win_w
        if (w_y > (screen_h - win_h)): w_y = screen_h - win_h
        self.WF_wx = w_x
        self.WF_wy = w_y
        # двигаем окно по позиции
        self.move(w_x, w_y)
    def mouseReleaseEvent(self, event):
        # Записываем в конфиг положение окна после перетаскивания
        self.config.read('config.ini', 'utf8')
        self.config.set('videPlayerXY', 'x', str(self.WF_wx))
        self.config.set('videPlayerXY', 'y', str(self.WF_wy))
        with open('config.ini', 'w', encoding='utf8') as configfile:
            self.config.write(configfile)
    def toggle(self):
        if self.isHidden():
            self.show()
            self.activateWindow()
        else:
            self.hide()

Python для новичков » перезагрузка модуля, проблема с потоками » Июнь 29, 2017 18:30:12

Имеется приложение на C++ (Qt), к которому прикручен python (3.5) для написания модулей. Приложение следит за файлами *.py при помощи inotify, и при их изменении перегружает модуль.
Всё нормально работает, до тех пор пока код на python не создаёт потоки. Если создаёт, то после PyImport_ReloadModule() старые потоки не останавливаются…
bool SM_PythonModule::reloadModule()
{
PyObject *mod;
PyObject *py_result;
PyGILState_STATE gilstate;

logMessage(tr("reloadModule() %1").arg(m_name),e_notify);

...... лишнее вырезано .......

gilstate = PyGILState_Ensure();
mod=PyImport_ReloadModule((PyObject *)m_module);
if (mod==NULL)
{
PyErr_Print();
PyGILState_Release(gilstate);
m_isActive=false;
logMessage(tr("reloadModule() ERROR"),e_notify);
return false;
};
m_module=mod;
m_executeRequestGet = PyObject_GetAttrString(mod, "executeRequestGet");
m_executeRequestSet = PyObject_GetAttrString(mod, "executeRequestSet");
m_broadcastNotification = PyObject_GetAttrString(mod, "broadcastNotification");

...... лишнее вырезано .......

PyGILState_Release(gilstate);


Центр помощи » DCT матрица_аудио обрабока » Июнь 29, 2017 13:00:50

Добрый день. Нужна ваша помощь. Не могу понять как исправить бак со звуком.
Использую матрицу DCT4 как фильтр. И потом беру транспонированную (inv), чтобы восстановить аудио. Предваритльно разделив файл на 8 блоков функцией reshape. Как я понимаю, использовав эту функцию, после восстановления я долден снова ее использовать, верно? Но вот, все рано не выходит.
Приложу свои наработки

https://glot.io/snippets/er9791lux0

ЗАранее спасибо

Python проекты » Просьба написать (за деньги) » Июнь 23, 2017 15:39:58

Есть код подключения и получения данных по API
1)необходимо получить данные всех валют для всех маркетов , а именно название маркета, название валюты, все заявки на покупку/продажу и лучшие заявки на покупку/продажу, объем торгов, данные счета.
2)данные должны записываться в переменные для их последующей обработки, а именно название валюты, лучшая покупка лучшая продажа
Пример кода
 import urllib
import urllib2
import json
import time
import hmac,hashlib
 
def createTimeStamp(datestr, format="%Y-%m-%d %H:%M:%S"):
    return time.mktime(time.strptime(datestr, format))
 
class poloniex:
    def __init__(self, APIKey, Secret):
        self.APIKey = APIKey
        self.Secret = Secret
 
    def post_process(self, before):
        after = before
 
        # Add timestamps if there isnt one but is a datetime
        if('return' in after):
            if(isinstance(after['return'], list)):
                for x in xrange(0, len(after['return'])):
                    if(isinstance(after['return'][x], dict)):
                        if('datetime' in after['return'][x] and 'timestamp' not in after['return'][x]):
                            after['return'][x]['timestamp'] = float(createTimeStamp(after['return'][x]['datetime']))
                           
        return after
 
    def api_query(self, command, req={}):
 
        if(command == "returnTicker" or command == "return24Volume"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command))
            return json.loads(ret.read())
        elif(command == "returnOrderBook"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        elif(command == "returnMarketTradeHistory"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + "returnTradeHistory" + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        else:
            req['command'] = command
            req['nonce'] = int(time.time()*1000)
            post_data = urllib.urlencode(req)
 
            sign = hmac.new(self.Secret, post_data, hashlib.sha512).hexdigest()
            headers = {
                'Sign': sign,
                'Key': self.APIKey
            }
 
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', post_data, headers))
            jsonRet = json.loads(ret.read())
            return self.post_process(jsonRet)
 
 
    def returnTicker(self):
        return self.api_query("returnTicker")
 
    def return24Volume(self):
        return self.api_query("return24Volume")
 
    def returnOrderBook (self, currencyPair):
        return self.api_query("returnOrderBook", {'currencyPair': currencyPair})
 
    def returnMarketTradeHistory (self, currencyPair):
        return self.api_query("returnMarketTradeHistory", {'currencyPair': currencyPair})
 
 

Полное описание API https://m.poloniex.com/support/api/
Просьба озвучивать цены и сроки в теме или в личку

Флейм » Распродажа доменов .RU всего по 92 руб. (1.55$).  » Июнь 22, 2017 11:44:23

Компания ProHoster проводит распродажу доменов в зоне .RU. Успей купить свой домен до 1.07 всего за 92 руб. (1.55$). В связи с вступившими новыми правилами доменной зоны .RU с 1.07 значительно поднимается цена регистрации доменов, так что у вас еще есть пару дней, что бы закупиться доменами по супер выгодным ценам.
Для покупки домена регистрируемся на сайте https://prohoster.info/manager/billmgr и в разделе Домены делаем свой заказ.

Python для новичков » Вопрос по работе с API от полного новичка » Июнь 21, 2017 19:18:44

Уважаемые форумчане! Только начинаю изучать питон потому буду благодарен за любую консультацию, особенно за развернутую .
Суть вопроса вот в чем:
Есть код подключения и получения данных по API
1)необходимо получить данные всех валют для всех маркетов , а именно название маркета, название валюты, все заявки на покупку/продажу и лучшие заявки на покупку/продажу, объем торгов, данные счета.
2)данные должны записываться в переменные для их последующей обработки, а именно название валюты, лучшая покупка лучшая продажа
Пример кода
 import urllib
import urllib2
import json
import time
import hmac,hashlib
 
def createTimeStamp(datestr, format="%Y-%m-%d %H:%M:%S"):
    return time.mktime(time.strptime(datestr, format))
 
class poloniex:
    def __init__(self, APIKey, Secret):
        self.APIKey = APIKey
        self.Secret = Secret
 
    def post_process(self, before):
        after = before
 
        # Add timestamps if there isnt one but is a datetime
        if('return' in after):
            if(isinstance(after['return'], list)):
                for x in xrange(0, len(after['return'])):
                    if(isinstance(after['return'][x], dict)):
                        if('datetime' in after['return'][x] and 'timestamp' not in after['return'][x]):
                            after['return'][x]['timestamp'] = float(createTimeStamp(after['return'][x]['datetime']))
                           
        return after
 
    def api_query(self, command, req={}):
 
        if(command == "returnTicker" or command == "return24Volume"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command))
            return json.loads(ret.read())
        elif(command == "returnOrderBook"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + command + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        elif(command == "returnMarketTradeHistory"):
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/public?command=' + "returnTradeHistory" + '&currencyPair=' + str(req['currencyPair'])))
            return json.loads(ret.read())
        else:
            req['command'] = command
            req['nonce'] = int(time.time()*1000)
            post_data = urllib.urlencode(req)
 
            sign = hmac.new(self.Secret, post_data, hashlib.sha512).hexdigest()
            headers = {
                'Sign': sign,
                'Key': self.APIKey
            }
 
            ret = urllib2.urlopen(urllib2.Request('https://poloniex.com/tradingApi', post_data, headers))
            jsonRet = json.loads(ret.read())
            return self.post_process(jsonRet)
 
 
    def returnTicker(self):
        return self.api_query("returnTicker")
 
    def return24Volume(self):
        return self.api_query("return24Volume")
 
    def returnOrderBook (self, currencyPair):
        return self.api_query("returnOrderBook", {'currencyPair': currencyPair})
 
    def returnMarketTradeHistory (self, currencyPair):
        return self.api_query("returnMarketTradeHistory", {'currencyPair': currencyPair})
 
 
Полное описание API https://m.poloniex.com/support/api/
Кроме того готов получить личную консультацию например через скайп от специалистов за символическую плату.

Python для новичков » Python и OpenCV для web камеры » Июнь 20, 2017 16:25:32

Доброго времени суток! Вопрос кратко: есть внешняя web камера, по характеристикам (подтверждено через VLC) поддерживает MGPEG с разрешением 1920*1080 30 fps. При попытке заграбить видео через OpenCV, формат захвата (fourcc) по-любому автоматически выставляется YUY. Попытки насильно поменять fourcc на MJPEG не помогают (т.е. VideoCapture.set(cv2.CAP_PROP_FOURCC, 1196444237.0) выдает True, но на самом деле ничего не меняет) . Может кто сталкивался с такой проблемой? (ЗЫ: у YUY при таком разрешении fps максимум 5, а у MGPEG 30)
собственно сам код:

import numpy as np
import cv2

cap = cv2.VideoCapture(1)# это вторая web камера
w = 1920
h = 1080
fps = 30.0
cap.set(6, 1196444237.0)#6 (при YUY значение 844715353.0, при MJPEG 1196444237.0)
cap.set(3, w)#3
cap.set(4, h)#4
cap.set(cv2.CAP_PROP_FPS, fps)#10?
fourcc = cv2.VideoWriter_fourcc(*'MJPG')

out = cv2.VideoWriter('output.avi',fourcc, fps, (w,h))

while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
#for i in range(27):
# print(cap.get(i)) можно распечатать значения которые на камере
cap.release()
out.release()
cv2.destroyAllWindows()

GUI » Взаимодействие между элементами » Июнь 20, 2017 15:19:38

Добрый день
Интересует довольно базовый вопрос

есть окошко с ComboBoxText и Switch, в первом обычный текстовый список значений, второй живет сам по себе.


Хотелось бы привязать событие измениения выбора в списке - на состояние переключателя.
Т.е. ткнул на определенную строку в комбобоксе, чекнул откуда нибудь bool и скормил в switcher.set_active()

код класса
 class ComboBoxWindow(Gtk.Window):
    def __init__(self):
        Gtk.Window.__init__(self, title="ComboBox Example")
        self.set_border_width(10)
        vbox = Gtk.Box(spacing=6)
        ifaces_combo = Gtk.ComboBoxText()
        ifaces_combo.set_entry_text_column(0)
        ifaces_combo.connect("changed", self.on_ifaces_combo_changed, self.on_ifaces_combo_changed)
        for iface in ifaces:
            ifaces_combo.append_text(iface)
        switch = Gtk.Switch()
        switch.connect("notify::active", self.on_switch_activated)
        switch.set_active(False)
        vbox.pack_start(ifaces_combo, False, False, 0)
        vbox.pack_start(switch, True, True, 0)
        self.add(vbox)
    def on_ifaces_combo_changed(self, combo):
        sel_iface = combo.get_active_text()
        if sel_iface != None:
            print("Selected interface =%s" % sel_iface)
    def on_switch_activated(self, switch, gparam):
        if switch.get_active():
            state = "on"
        else:
            state = "off"
        print("Switch was turned", state)
win = ComboBoxWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

Thanks in advance

Python для новичков » Jythone - получить размер таблицы (Мб) и записать результат в файл » Июнь 19, 2017 20:35:45

Создал в ODI код. Нужно записать в файл рядом с названием таблицы её размер. Пока что только записывает название.

 def prepareSQL():
     con=odiRef.getJDBCConnection("SRC")                 #соединение с БД
     sql='''<%=odiRef.getOption("zapis")%> '''            #Выполнение запроса - возвращает названия 
     return con.prepareStatement(sql)                        #нужных таблиц из системной
     
 
prep = prepareSQL()
rs=prep.executeQuery()
f=open("C:\Temp\droptab4.txt","a")                       # Открываем файл на компе для записи
while(rs.next()):                                                #Пока есть записи записываем названия таблиц в файл. 
        data=rs.getString("OBJ_NAME")                      #В этот же файл должна быть запись размера таблиц в мб
        f.write(data +" \n")
f.close()                                                              # Закрываем файл
prep.close()
я думаю как то так решить
 while(rs.next()):
        data=rs.getString("OBJ_NAME")
        s=os.path.getsize(data)
        f.write(data +" \n" + s)
f.close()
prep.close()
но os.path.getsize используется для поиска размера файлов на компе.
А как узнать размер таблицы из списка???