Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .pylintrc
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
[MASTER]
extension-pkg-whitelist = PySide
init-hook = import sys; sys.path.append('./selenium.egg')

[MESSAGES CONTROL]
Expand Down
99 changes: 75 additions & 24 deletions client.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,31 +19,77 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.


import sys
from threading import Thread
import configparser
import errno
import os
from PySide.QtCore import QObject, Qt, Signal
from PySide.QtGui import QApplication
from PySide.QtWebKit import QWebView
from threading import current_thread, main_thread, Thread
from time import sleep

sys.path.append("./selenium.egg")

from selenium.webdriver import Firefox
def current_thread_is_main():
return current_thread() is main_thread()


def load_config():
config = configparser.ConfigParser()
config.read('config')
return config['Terminal']
class Browser(QObject):
# pylint: disable=too-many-public-methods

__execute_script_called = Signal(str)

def user_scanner(driver, package):
config = load_config()
scanner = open(config["user_scanner"])
def __init__(self):
super().__init__()

self.app = QApplication([])

self.webview = QWebView()
self.webview.setAttribute(Qt.WA_DeleteOnClose)
self.webview.destroyed.connect(self.app.quit)

self.__execute_script_called.connect(self.__execute_script)

def __execute_script(self, javascript_code: str):
assert current_thread_is_main()
self.webview.page().mainFrame().evaluateJavaScript(javascript_code)

def execute_script(self, javascript_code: str):
if current_thread_is_main():
self.__execute_script(javascript_code)
else:
self.__execute_script_called.emit(javascript_code)

def run(self, url):
assert current_thread_is_main()
self.webview.show()
self.webview.load(url)
self.app.exec_()


def opener_nonblock(path, mode):
return os.open(path, mode | os.O_NONBLOCK)


def readline_nonblock(fileobject) -> 'Optional[str]':
try:
return fileobject.readline() or None
except OSError as err:
if err.errno == errno.EAGAIN or err.errno == errno.EWOULDBLOCK:
return None


def user_scanner(config, browser):
scanner = open(config["user_scanner"], opener=opener_nonblock)
while True:
new_user = scanner.read().strip("\2\3\r\n")
driver.execute_script("user(" + new_user + ")")
data = readline_nonblock(scanner)
if data is not None:
new_user = data.strip("\2\3\r\n")
browser.execute_script("user(" + new_user + ")")
else:
sleep(0.1)


def book_scanner(driver, package):
config = load_config()
def book_scanner(config, browser):
while True:
scanner = open(config["book_scanner"], "rb")
i = 0
Expand All @@ -61,21 +107,26 @@ def book_scanner(driver, package):
break
print(number % 10)
barcode += str(number % 10)
driver.execute_script("barcode(" + barcode + ")")
browser.execute_script("barcode(" + barcode + ")")


def main():
driver = Firefox()
driver.get("http://yandex.ru/")
package = {
"user": "",
"book": "",
}
user = Thread(target=user_scanner, args=(driver, package))
book = Thread(target=book_scanner, args=(driver, package))
def load_config():
config = configparser.ConfigParser()
config.read('config')
return config['Terminal']

config = load_config()

browser = Browser()

user = Thread(target=user_scanner, args=(config, browser), daemon=True)
book = Thread(target=book_scanner, args=(config, browser), daemon=True)
user.start()
book.start()

browser.run(config['operations_url'])


if __name__ == '__main__':
main()
6 changes: 3 additions & 3 deletions config
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ librarian_pages = ["handed", "journal", "add", "operations", "users", "books"]
student_pages = ["handed", "books"]

[Terminal]
user_scanner = ""
book_scanner = "/dev/input/by-id/usb-WIT_Electron_Company_WIT_122-UFS_V2.03-event-kbd"
operations_url = "http://localhost"
user_scanner = user_scanner
book_scanner = /dev/input/by-id/usb-WIT_Electron_Company_WIT_122-UFS_V2.03-event-kbd
operations_url = http://localhost:1303
Binary file removed selenium-2.48.0-py3.4.egg
Binary file not shown.
1 change: 0 additions & 1 deletion selenium.egg

This file was deleted.

2 changes: 0 additions & 2 deletions test.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@
"--show-source",
"--ignore=" + ','.join([
'E251', # unexpected spaces around keyword / parameter equals
'E402', # module level import not at top of file
# for import selenium.egg
'W503', # line break before binary operator
]),
]
Expand Down