From 141afaf6ec65e19327371c0cf8d98fc45cd89ef2 Mon Sep 17 00:00:00 2001 From: antoine Date: Sat, 23 Jul 2016 21:32:40 +0200 Subject: [PATCH] remove i3-py and floating mode enable for kivy cause windows is already in floating mode with kivy.config --- VDMAPI/Display/kivyDisplay.py | 2 - VDM_API.egg-info/PKG-INFO | 60 ++++++++++++++++++ VDM_API.egg-info/SOURCES.txt | 22 +++++++ VDM_API.egg-info/dependency_links.txt | 1 + VDM_API.egg-info/entry_points.txt | 3 + VDM_API.egg-info/top_level.txt | 1 + build/lib/VDMAPI/Display/__init__.py | 7 +++ build/lib/VDMAPI/Display/console.py | 12 ++++ build/lib/VDMAPI/Display/i3.py | 20 ++++++ build/lib/VDMAPI/Display/kivy.kv | 23 +++++++ build/lib/VDMAPI/Display/kivyDisplay.py | 80 ++++++++++++++++++++++++ build/lib/VDMAPI/Display/pyside.py | 13 ++++ build/lib/VDMAPI/Display/tkinter.py | 51 +++++++++++++++ build/lib/VDMAPI/Display/windows.py | 12 ++++ build/lib/VDMAPI/Display/wxpython.py | 18 ++++++ build/lib/VDMAPI/HtmlParser.py | 26 ++++++++ build/lib/VDMAPI/VDM.py | 36 +++++++++++ build/lib/VDMAPI/__init__.py | 0 build/lib/VDMAPI/version.py | 1 + dist/VDM API-1.1.tar.gz | Bin 0 -> 5612 bytes dist/VDM_API-1.1-py2.py3-none-any.whl | Bin 0 -> 8881 bytes 21 files changed, 386 insertions(+), 2 deletions(-) create mode 100644 VDM_API.egg-info/PKG-INFO create mode 100644 VDM_API.egg-info/SOURCES.txt create mode 100644 VDM_API.egg-info/dependency_links.txt create mode 100644 VDM_API.egg-info/entry_points.txt create mode 100644 VDM_API.egg-info/top_level.txt create mode 100644 build/lib/VDMAPI/Display/__init__.py create mode 100644 build/lib/VDMAPI/Display/console.py create mode 100644 build/lib/VDMAPI/Display/i3.py create mode 100644 build/lib/VDMAPI/Display/kivy.kv create mode 100644 build/lib/VDMAPI/Display/kivyDisplay.py create mode 100644 build/lib/VDMAPI/Display/pyside.py create mode 100644 build/lib/VDMAPI/Display/tkinter.py create mode 100644 build/lib/VDMAPI/Display/windows.py create mode 100644 build/lib/VDMAPI/Display/wxpython.py create mode 100644 build/lib/VDMAPI/HtmlParser.py create mode 100644 build/lib/VDMAPI/VDM.py create mode 100644 build/lib/VDMAPI/__init__.py create mode 100644 build/lib/VDMAPI/version.py create mode 100644 dist/VDM API-1.1.tar.gz create mode 100644 dist/VDM_API-1.1-py2.py3-none-any.whl diff --git a/VDMAPI/Display/kivyDisplay.py b/VDMAPI/Display/kivyDisplay.py index 61d80bf..8a6b525 100755 --- a/VDMAPI/Display/kivyDisplay.py +++ b/VDMAPI/Display/kivyDisplay.py @@ -2,7 +2,6 @@ from ..VDM import VDM import os -import i3 # get screen resolution import tkinter @@ -47,7 +46,6 @@ class guiApp(GridLayout): self.v = VDM() self.vdm = self.v.get() self.render() - i3.msg("command", "floating enable") def _nextAction(self): if self.indice == len(self.vdm)-1: diff --git a/VDM_API.egg-info/PKG-INFO b/VDM_API.egg-info/PKG-INFO new file mode 100644 index 0000000..352ff7b --- /dev/null +++ b/VDM_API.egg-info/PKG-INFO @@ -0,0 +1,60 @@ +Metadata-Version: 1.1 +Name: VDM-API +Version: 1.1 +Summary: VDM API: an API for recover random VDM from vdm.fr website +Home-page: git://176.189.130.29/python/vdmAPI.git +Author: Antoine Roux +Author-email: antoinroux@hotmail.fr +License: Beerware +Download-URL: git://176.189.130.29/python/vdmAPI.git/tags +Description: ******* + VDM API + ******* + V1.0 + + **VDM API** is a python api for pull random api. + + Use case + ======== + You can use this API in python langage by instanciate a VDM() object : + :: + + from VDMAPI.VDM import VDM + + if __name__ == "__main__": + vdm = VDM() + lstAllVDM = vdm.get() + for i, vdm in enumerate(lstAllVDM): + print(str(i)+" : "+vdm) + + + Available GUI + ============= + + **VDM API** include four display mode : + + - **i3** : this GUI use dmenu for display the list of VDM + - **tkinter** : this use tkinter native interface + - **kivy** : use kivy library + - **console** : this last mode display the list of VDM in plain text mode + + Installing + ========== + + For **setup** you could do with this : + :: + + pip install --no-index --find-links= VDM_API + +Platform: any +Classifier: License :: FSF approved :: Beerware License +Classifier: Operating System :: POSIX :: Linux +Classifier: Programming Language :: Python +Classifier: Programming Language :: Python :: 2.6 +Classifier: Programming Language :: Python :: 2.7 +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 3.2 +Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 +Classifier: Programming Language :: Python :: 3.5 +Classifier: Topic :: Software Development :: Libraries :: Python Modules diff --git a/VDM_API.egg-info/SOURCES.txt b/VDM_API.egg-info/SOURCES.txt new file mode 100644 index 0000000..946b9c3 --- /dev/null +++ b/VDM_API.egg-info/SOURCES.txt @@ -0,0 +1,22 @@ +MANIFEST.in +README.html +README.rst +setup.py +VDMAPI/HtmlParser.py +VDMAPI/VDM.py +VDMAPI/__init__.py +VDMAPI/version.py +VDMAPI/Display/__init__.py +VDMAPI/Display/console.py +VDMAPI/Display/i3.py +VDMAPI/Display/kivy.kv +VDMAPI/Display/kivyDisplay.py +VDMAPI/Display/pyside.py +VDMAPI/Display/tkinter.py +VDMAPI/Display/windows.py +VDMAPI/Display/wxpython.py +VDM_API.egg-info/PKG-INFO +VDM_API.egg-info/SOURCES.txt +VDM_API.egg-info/dependency_links.txt +VDM_API.egg-info/entry_points.txt +VDM_API.egg-info/top_level.txt \ No newline at end of file diff --git a/VDM_API.egg-info/dependency_links.txt b/VDM_API.egg-info/dependency_links.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/VDM_API.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/VDM_API.egg-info/entry_points.txt b/VDM_API.egg-info/entry_points.txt new file mode 100644 index 0000000..6b89213 --- /dev/null +++ b/VDM_API.egg-info/entry_points.txt @@ -0,0 +1,3 @@ +[console_scripts] +vdm = VDMAPI:main + diff --git a/VDM_API.egg-info/top_level.txt b/VDM_API.egg-info/top_level.txt new file mode 100644 index 0000000..b60ebbe --- /dev/null +++ b/VDM_API.egg-info/top_level.txt @@ -0,0 +1 @@ +VDMAPI diff --git a/build/lib/VDMAPI/Display/__init__.py b/build/lib/VDMAPI/Display/__init__.py new file mode 100644 index 0000000..7bcea61 --- /dev/null +++ b/build/lib/VDMAPI/Display/__init__.py @@ -0,0 +1,7 @@ +# import all module include into current package +__name__ = "VDMAPI" +__version__ = 1.0 +__author__ = "antoine roux" +__author_email__= "antoinroux@hotmail.fr" +__url__ = "antoine-roux.tk" +__description__ = "an api for recover a list of random vdm from vdm.fr and display it on different GUI (i3, tkinter, windows or commande line" diff --git a/build/lib/VDMAPI/Display/console.py b/build/lib/VDMAPI/Display/console.py new file mode 100644 index 0000000..7317811 --- /dev/null +++ b/build/lib/VDMAPI/Display/console.py @@ -0,0 +1,12 @@ +from ..VDM import VDM + +class console(object): + """display all vdm into console""" + def __init__(self): + super(console, self).__init__() + self.v = VDM() + + def render(self): + lstAllVDM = self.v.get() + for i, vdm in enumerate(lstAllVDM): + print(str(i)+" : "+vdm) diff --git a/build/lib/VDMAPI/Display/i3.py b/build/lib/VDMAPI/Display/i3.py new file mode 100644 index 0000000..9fb48b3 --- /dev/null +++ b/build/lib/VDMAPI/Display/i3.py @@ -0,0 +1,20 @@ +from ..VDM import VDM +import subprocess +import i3 + +class i3(object): + """display all vdm into i3 menu""" + def __init__(self): + super(i3, self).__init__() + self.v = VDM() + + def render(self): + lstAllVDM = self.v.get() + + dmenu = subprocess.Popen(['/usr/bin/dmenu', '-i','-l', str(len(lstAllVDM))], + stdin=subprocess.PIPE, + stdout=subprocess.PIPE) + + menu_str = '\n'.join(lstAllVDM) + win_str = dmenu.communicate(menu_str.encode('utf-8'))[0].decode('utf-8').rstrip() + print(win_str) \ No newline at end of file diff --git a/build/lib/VDMAPI/Display/kivy.kv b/build/lib/VDMAPI/Display/kivy.kv new file mode 100644 index 0000000..90b13c4 --- /dev/null +++ b/build/lib/VDMAPI/Display/kivy.kv @@ -0,0 +1,23 @@ +#:kivy 1.0 + +: + Button: + id: prev + + size_hint_x: None + width: 100 + + text: '<<' + on_press: root._prevAction() + Label: + text_size: 300, None + id: Message + text: 'no VDM load for the moment' + Button: + id: next + + size_hint_x: None + + width: 100 + text: '>>' + on_press: root._nextAction() \ No newline at end of file diff --git a/build/lib/VDMAPI/Display/kivyDisplay.py b/build/lib/VDMAPI/Display/kivyDisplay.py new file mode 100644 index 0000000..8a6b525 --- /dev/null +++ b/build/lib/VDMAPI/Display/kivyDisplay.py @@ -0,0 +1,80 @@ +#!/usr/bin/env python + +from ..VDM import VDM +import os + +# get screen resolution +import tkinter +root = tkinter.Tk() +width = root.winfo_screenwidth() +height = root.winfo_screenheight() + +from kivy.config import Config +Config.set('graphics','fullscreen', 0) +Config.set('graphics','resizable',0) +Config.set('graphics','position', 'custom') +Config.set('graphics','width', 600) +Config.set('graphics','height', 150) + +# align bottom and 50 px from right +Config.set('graphics','left', width-Config.getint('graphics', 'width')-45) +Config.set('graphics','top', height-Config.getint('graphics', 'height')-17) + +from kivy.core.window import Window + +import kivy +from kivy.app import App +from kivy.properties import * +from kivy.uix.gridlayout import GridLayout + +class guiApp(GridLayout): + """ display all vdm into kivy interface """ + + # https://kivy.org/docs/api-kivy.properties.html#kivy.properties.ListProperty + # NumericProperty, StringProperty, ListProperty, ObjectProperty, + # BooleanProperty, BoundedNumericProperty, OptionProperty, ReferenceListProperty, AliasProperty, DictProperty + + indice = NumericProperty(0) + vdm = ListProperty([]) + + def __init__(self, **kwargs): + super(guiApp, self).__init__(**kwargs) + + self._keyboard = Window.request_keyboard(self._keyboard_closed, self) + self._keyboard.bind(on_key_down = self._on_keyboard_down) + + self.v = VDM() + self.vdm = self.v.get() + self.render() + + def _nextAction(self): + if self.indice == len(self.vdm)-1: + self.vdm = self.v.get() + self.indice = 0 + else: + self.indice += 1 + self.render() + + def _prevAction(self): + if self.indice > 0: + self.indice -= 1 + self.render() + + def _keyboard_closed(self): + self._keyboard.unbind(on_key_down = self._on_keyboard_down) + self._keyboard = None + + def _on_keyboard_down(self, *args): + if args[1][1] == 'right': + self._nextAction() + + elif args[1][1] == 'left': + self._prevAction() + + def render(self): + print(self.indice) + self.ids["Message"].text = self.vdm[self.indice] + +class kivyApp(App): + def build(self): + return guiApp(cols=3, pos=(0,0)) diff --git a/build/lib/VDMAPI/Display/pyside.py b/build/lib/VDMAPI/Display/pyside.py new file mode 100644 index 0000000..760e267 --- /dev/null +++ b/build/lib/VDMAPI/Display/pyside.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import sys +import PySide + +app = QtGui.QApplication(sys.argv) + +hello = QtGui.QLabel("hello Qt") +hello.show() +x, y, w, h = 100, 100, 100, 100 +hello.setGeometry(x, y, w, h) + +sys.exit(app.exec_()) \ No newline at end of file diff --git a/build/lib/VDMAPI/Display/tkinter.py b/build/lib/VDMAPI/Display/tkinter.py new file mode 100644 index 0000000..0f8d2fe --- /dev/null +++ b/build/lib/VDMAPI/Display/tkinter.py @@ -0,0 +1,51 @@ +from ..VDM import VDM +import tkinter as tk +import i3 +from tkinter import ttk +import os + +class tkinter: + def __init__(self): + """ init vdm object and create GUI """ + self.v = VDM() + self.indice = 0 + self.vdm = self.v.get() + + self.root = tk.Tk() + self.gui(self.root) + + def nextAction(self, event=None): + if self.indice == len(self.vdm)-1: + self.vdm = self.v.get() + self.indice = 0 + else: + self.indice+=1 + self.render() + + def prevAction(self, event=None): + if self.indice > 0: + self.indice-=1 + self.render() + + def gui(self, master): + self.mainwindow = ttk.Frame(master) + self.message = tk.Message(master, text="No VDM load for the moment", width="400") + + self.next = ttk.Button(master, text=">>", command=self.nextAction) + self.prev = ttk.Button(master, text="<<", command=self.prevAction) + self.root.bind('', self.prevAction) + self.root.bind('', self.nextAction) + + self.message.pack(fill="y", side="left", padx="5", pady="5") + self.prev.pack(fill="y", side="left", pady="1") + self.next.pack(fill="y", side="right", pady="1") + + def _floatingDisabler(self): + i3.msg("command", "floating enable") + + def render(self): + print("indice {}".format(self.indice)) + + self.message.configure(text=self.vdm[self.indice]) + self.root.after(1, self._floatingDisabler) + self.root.mainloop() diff --git a/build/lib/VDMAPI/Display/windows.py b/build/lib/VDMAPI/Display/windows.py new file mode 100644 index 0000000..8974669 --- /dev/null +++ b/build/lib/VDMAPI/Display/windows.py @@ -0,0 +1,12 @@ +from ..VDM import VDM + +class windows(object): + """display all vdm into windows os""" + def __init__(self): + super(windows, self).__init__() + v = VDM() + + def render(self): + lstAllVDM = self.v.get() + for i, vdm in enumerate(lstAllVDM): + print(str(i)+" : "+vdm) \ No newline at end of file diff --git a/build/lib/VDMAPI/Display/wxpython.py b/build/lib/VDMAPI/Display/wxpython.py new file mode 100644 index 0000000..684c194 --- /dev/null +++ b/build/lib/VDMAPI/Display/wxpython.py @@ -0,0 +1,18 @@ +#!/usr/bin/python + +import wx + +def onButton(event): + print "Button pressed." + +app = wx.App() +frame = wx.Frame(None, -1, 'win.py') +frame.SetDimensions(0,0,200,50) + +panel = wx.Panel(frame, wx.ID_ANY) +button = wx.Button(panel, wx.ID_ANY, 'Test', (10, 10)) +button.Bind(wx.EVT_BUTTON, onButton) + +frame.Show() +frame.Centre() +app.MainLoop() \ No newline at end of file diff --git a/build/lib/VDMAPI/HtmlParser.py b/build/lib/VDMAPI/HtmlParser.py new file mode 100644 index 0000000..c03a52d --- /dev/null +++ b/build/lib/VDMAPI/HtmlParser.py @@ -0,0 +1,26 @@ +from html.parser import HTMLParser +from html.entities import name2codepoint + +class MyHTMLParser(HTMLParser): + def __init__(self): + super(MyHTMLParser, self).__init__() + self.vdm = [] + self.save = False + + def _searchClass(self, listTuple, className="post article"): + for v in listTuple: + if v[0] == 'class' and v[1] == className: + return True + return False + + def handle_starttag(self, tag, attrs): + if tag == "p" and self._searchClass(attrs, className="content"): + self.save = True + + def handle_data(self, data): + if self.save: + self.vdm.append(data) + self.save = False + + def getText(self): + return self.vdm \ No newline at end of file diff --git a/build/lib/VDMAPI/VDM.py b/build/lib/VDMAPI/VDM.py new file mode 100644 index 0000000..9717016 --- /dev/null +++ b/build/lib/VDMAPI/VDM.py @@ -0,0 +1,36 @@ +from .HtmlParser import MyHTMLParser +import requests + +class VDM(object): + """VDM module for recover random VDM""" + + def __init__(self): + self.url = "http://www.viedemerde.fr/aleatoire" + self.vdm = {} + + def get(self): + try: + r = requests.get(self.url) + r.encoding = 'utf-8' # ISO-8859-1 + + if(r.status_code == requests.codes.ok): + parser = MyHTMLParser() + parser.feed(r.text) + self.vdm = parser.getText() + + print("Sucess {}".format(r.status_code)) + + return self.vdm + else: + print("Error {}".format(r.status_code)) + + except requests.exceptions.ConnectionError as e: + raise errorVDM("network error") + + except HTTPError as e: + raise errorVDM("HTTP Error") + +class errorVDM(Exception): + def __init__(self, message): + super(errorVDM, self).__init__(message) + \ No newline at end of file diff --git a/build/lib/VDMAPI/__init__.py b/build/lib/VDMAPI/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/build/lib/VDMAPI/version.py b/build/lib/VDMAPI/version.py new file mode 100644 index 0000000..e6956dc --- /dev/null +++ b/build/lib/VDMAPI/version.py @@ -0,0 +1 @@ +version = '1.1' diff --git a/dist/VDM API-1.1.tar.gz b/dist/VDM API-1.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e05a5a3b733ce34c4a9cdb4c7872e8f3094d96da GIT binary patch literal 5612 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 Gpa1~ALp^r@ literal 0 HcmV?d00001 diff --git a/dist/VDM_API-1.1-py2.py3-none-any.whl b/dist/VDM_API-1.1-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8dda789405164353e774eb138aba69b2b68955e5 GIT binary patch literal 8881 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 literal 0 HcmV?d00001