jenkins-bot has submitted this change and it was merged.
Change subject: Tk: Migrated Tkdialog class to gui.py
......................................................................
Tk: Migrated Tkdialog class to gui.py
Migrated Tkdialog class from scripts/flickrripper.py to
pywikibot/userinterfaces/gui.py Added packages dependencies in setup.py
and tests/scripts_tests.py. Added test to tests/tk_tests.py
Bug: T78505
Change-Id: I0001ec541f2b6679354314b92331f0cfcd381383
---
M pywikibot/userinterfaces/gui.py
M scripts/flickrripper.py
M setup.py
M tests/script_tests.py
M tests/tk_tests.py
5 files changed, 129 insertions(+), 129 deletions(-)
Approvals:
John Vandenberg: Looks good to me, approved
jenkins-bot: Verified
diff --git a/pywikibot/userinterfaces/gui.py b/pywikibot/userinterfaces/gui.py
index 8bd2800..0d8123f 100644
--- a/pywikibot/userinterfaces/gui.py
+++ b/pywikibot/userinterfaces/gui.py
@@ -30,6 +30,8 @@
from idlelib.configHandler import idleConf
from idlelib.MultiCall import MultiCallCreator
+import pywikibot
+
class TextEditor(ScrolledText):
@@ -439,3 +441,106 @@
self.listbox.config(height=laenge, width=maxbreite + 2)
# wait for user to push a button which will destroy (close) the window
return self.list
+
+
+class Tkdialog:
+
+ """ The dialog window for image info."""
+
+ def __init__(self, photo_description, photo, filename):
+ """Constructor."""
+ self.root = Tkinter.Tk()
+ # "%dx%d%+d%+d" % (width, height, xoffset, yoffset)
+ self.root.geometry("%ix%i+10-10" % (pywikibot.config.tkhorsize,
+ pywikibot.config.tkvertsize))
+
+ self.root.title(filename)
+ self.photo_description = photo_description
+ self.filename = filename
+ self.photo = photo
+ self.skip = False
+ self.exit = False
+
+ # --Init of the widgets
+ # The image
+ self.image = self.get_image(self.photo, 800, 600)
+ self.image_panel = Tkinter.Label(self.root, image=self.image)
+
+ self.image_panel.image = self.image
+
+ # The filename
+ self.filename_label = Tkinter.Label(self.root, text=u"Suggested
filename")
+ self.filename_field = Tkinter.Entry(self.root, width=100)
+ self.filename_field.insert(Tkinter.END, filename)
+
+ # The description
+ self.description_label = Tkinter.Label(self.root,
+ text=u"Suggested description")
+ self.description_scrollbar = Tkinter.Scrollbar(self.root,
+ orient=Tkinter.VERTICAL)
+ self.description_field = Tkinter.Text(self.root)
+ self.description_field.insert(Tkinter.END, photo_description)
+ self.description_field.config(state=Tkinter.NORMAL, height=12,
width=100,
+ padx=0, pady=0, wrap=Tkinter.WORD,
+
yscrollcommand=self.description_scrollbar.set)
+ self.description_scrollbar.config(command=self.description_field.yview)
+
+ # The buttons
+ self.ok_button = Tkinter.Button(self.root, text="OK",
+ command=self.ok_file)
+ self.skip_button = Tkinter.Button(self.root, text="Skip",
+ command=self.skip_file)
+
+ # --Start grid
+
+ # The image
+ self.image_panel.grid(row=0, column=0, rowspan=11, columnspan=4)
+
+ # The buttons
+ self.ok_button.grid(row=11, column=1, rowspan=2)
+ self.skip_button.grid(row=11, column=2, rowspan=2)
+
+ # The filename
+ self.filename_label.grid(row=13, column=0)
+ self.filename_field.grid(row=13, column=1, columnspan=3)
+
+ # The description
+ self.description_label.grid(row=14, column=0)
+ self.description_field.grid(row=14, column=1, columnspan=3)
+ self.description_scrollbar.grid(row=14, column=5)
+
+ def get_image(self, photo, width, height):
+ """Take the BytesIO object and build an imageTK thumbnail."""
+ try:
+ from PIL import Image, ImageTk
+ except ImportError:
+ pywikibot.warning('This script requires ImageTk from the'
+ 'Python Imaging Library (PIL).\n'
+ 'See: https://www.mediawiki.org/wiki/'
+ 'Manual:Pywikibot/flickrripper.py')
+ raise
+
+ image = Image.open(photo)
+ image.thumbnail((width, height))
+ imageTk = ImageTk.PhotoImage(image)
+ return imageTk
+
+ def ok_file(self):
+ """ The user pressed the OK button. """
+ self.filename = self.filename_field.get()
+ self.photo_description = self.description_field.get(0.0, Tkinter.END)
+ self.root.destroy()
+
+ def skip_file(self):
+ """ The user pressed the Skip button. """
+ self.skip = True
+ self.root.destroy()
+
+ def show_dialog(self):
+ """ Activate the dialog.
+
+ @return: new description, name, and if the image is skipped
+ @rtype: tuple of (unicode, unicode, bool)
+ """
+ self.root.mainloop()
+ return self.photo_description, self.filename, self.skip
diff --git a/scripts/flickrripper.py b/scripts/flickrripper.py
index cad7b1d..fa9d9f0 100644
--- a/scripts/flickrripper.py
+++ b/scripts/flickrripper.py
@@ -46,35 +46,7 @@
from urllib import urlencode, urlopen
try:
- if sys.version_info[0] > 2:
- from tkinter import (
- Tk, Label, Entry, Scrollbar, Text, Button,
- END, VERTICAL, NORMAL, WORD
- )
- else:
- from Tkinter import (
- Tk, Label, Entry, Scrollbar, Text, Button,
- END, VERTICAL, NORMAL, WORD
- )
-except ImportError as e:
- print(
- 'This script requires Tkinter, which is typically part of Python,\n'
- 'but may be packaged separately on your platform.\n'
- 'See: https://www.mediawiki.org/wiki/Manual:Pywikibot/flickrripper.py')
- print(e)
- sys.exit()
-
-try:
- from PIL import Image, ImageTk
-except ImportError as e:
- print(
- 'This script requires ImageTk from the Python Imaging Library (PIL).\n'
- 'See: https://www.mediawiki.org/wiki/Manual:Pywikibot/flickrripper.py')
- print(e)
- sys.exit(1)
-
-try:
- import flickrapi # see:
http://stuvel.eu/projects/flickrapi
+ import flickrapi # see: http://stuvel.eu/projects/flickrapi
except ImportError as e:
print('This script requires the python flickrapi module. \n'
'See: http://stuvel.eu/projects/flickrapi')
@@ -85,6 +57,9 @@
from pywikibot import config, textlib
from scripts import upload
+
+from pywikibot.userinterfaces.gui import Tkdialog
+
flickr_allowed_license = {
0: False, # All Rights Reserved
@@ -317,9 +292,14 @@
removeCategories)
# pywikibot.output(photoDescription)
if not autonomous:
- (newPhotoDescription, newFilename, skip) = Tkdialog(
+ try:
+ (newPhotoDescription, newFilename, skip) = Tkdialog(
photoDescription, photo, filename).run()
- else:
+ except ImportError as e:
+ pywikibot.warning(e)
+ pywikibot.warning('Switching to autonomous mode.')
+ autonomous = True
+ if autonomous:
newPhotoDescription = photoDescription
newFilename = filename
skip = False
@@ -342,93 +322,6 @@
else:
pywikibot.output(u'Invalid license')
return 0
-
-
-class Tkdialog:
-
- """ The user dialog. """
-
- def __init__(self, photoDescription, photo, filename):
- """Constructor."""
- self.root = Tk()
- # "%dx%d%+d%+d" % (width, height, xoffset, yoffset)
- self.root.geometry("%ix%i+10-10" % (config.tkhorsize,
config.tkvertsize))
-
- self.root.title(filename)
- self.photoDescription = photoDescription
- self.filename = filename
- self.photo = photo
- self.skip = False
- self.exit = False
-
- # --Init of the widgets
- # The image
- self.image = self.getImage(self.photo, 800, 600)
- self.imagePanel = Label(self.root, image=self.image)
-
- self.imagePanel.image = self.image
-
- # The filename
- self.filenameLabel = Label(self.root, text=u"Suggested filename")
- self.filenameField = Entry(self.root, width=100)
- self.filenameField.insert(END, filename)
-
- # The description
- self.descriptionLabel = Label(self.root, text=u"Suggested description")
- self.descriptionScrollbar = Scrollbar(self.root, orient=VERTICAL)
- self.descriptionField = Text(self.root)
- self.descriptionField.insert(END, photoDescription)
- self.descriptionField.config(state=NORMAL, height=12, width=100,
padx=0, pady=0, wrap=WORD, yscrollcommand=self.descriptionScrollbar.set)
- self.descriptionScrollbar.config(command=self.descriptionField.yview)
-
- # The buttons
- self.okButton = Button(self.root, text="OK", command=self.okFile)
- self.skipButton = Button(self.root, text="Skip", command=self.skipFile)
-
- # --Start grid
-
- # The image
- self.imagePanel.grid(row=0, column=0, rowspan=11, columnspan=4)
-
- # The buttons
- self.okButton.grid(row=11, column=1, rowspan=2)
- self.skipButton.grid(row=11, column=2, rowspan=2)
-
- # The filename
- self.filenameLabel.grid(row=13, column=0)
- self.filenameField.grid(row=13, column=1, columnspan=3)
-
- # The description
- self.descriptionLabel.grid(row=14, column=0)
- self.descriptionField.grid(row=14, column=1, columnspan=3)
- self.descriptionScrollbar.grid(row=14, column=5)
-
- def getImage(self, photo, width, height):
- """Take the BytesIO object and build an imageTK thumbnail."""
- image = Image.open(photo)
- image.thumbnail((width, height))
- imageTk = ImageTk.PhotoImage(image)
- return imageTk
-
- def okFile(self):
- """ The user pressed the OK button. """
- self.filename = self.filenameField.get()
- self.photoDescription = self.descriptionField.get(0.0, END)
- self.root.destroy()
-
- def skipFile(self):
- """ The user pressed the Skip button. """
- self.skip = True
- self.root.destroy()
-
- def run(self):
- """ Activate the dialog.
-
- @return: new description, name, and if the image is skipped
- @rtype: tuple of (unicode, unicode, bool)
- """
- self.root.mainloop()
- return self.photoDescription, self.filename, self.skip
def getPhotos(flickr=None, user_id=u'', group_id=u'', photoset_id=u'',
diff --git a/setup.py b/setup.py
index a0be084..48ec6c5 100644
--- a/setup.py
+++ b/setup.py
@@ -24,7 +24,8 @@
'Yahoo': ['pYsearch'],
'Google': ['google'],
'IRC': ['irc'],
- 'mwparserfromhell': ['mwparserfromhell>=0.3.3']
+ 'mwparserfromhell': ['mwparserfromhell>=0.3.3'],
+ 'Tkinter': ['Pillow']
}
if sys.version_info[0] == 2:
diff --git a/tests/script_tests.py b/tests/script_tests.py
index 8ee4be5..bdb5a9d 100644
--- a/tests/script_tests.py
+++ b/tests/script_tests.py
@@ -23,9 +23,7 @@
'script_wui': ['crontab', 'lua'],
# Note: package 'lunatic-python' provides module 'lua'
- 'flickrripper': ['PIL.ImageTk', 'flickrapi'],
- # Note: 'PIL' is not available via pip2.7 on MS Windows,
- # however it is available with setuptools.
+ 'flickrripper': ['flickrapi'],
'states_redirect': ['pycountry'],
}
diff --git a/tests/tk_tests.py b/tests/tk_tests.py
index 44ec660..efa21a9 100644
--- a/tests/tk_tests.py
+++ b/tests/tk_tests.py
@@ -7,6 +7,7 @@
#
__version__ = '$Id$'
+
import os
import sys
@@ -15,15 +16,14 @@
import tkinter as Tkinter
else:
import Tkinter
- from scripts import flickrripper
- from pywikibot.userinterfaces.gui import EditBoxWindow
+ from pywikibot.userinterfaces.gui import EditBoxWindow, Tkdialog
import pywikibot
from tests.aspects import unittest, TestCase, DefaultSiteTestCase
-class TestFlickrRipper(TestCase):
+class TestTkdialog(TestCase):
"""Test Tkdialog."""
@@ -32,12 +32,15 @@
@classmethod
def setUpClass(cls):
if os.environ.get('PYWIKIBOT2_TEST_GUI', '0') != '1':
- raise unittest.SkipTest('FlickrRipper tests are disabled on
Travis-CI')
- super(TestFlickrRipper, cls).setUpClass()
+ raise unittest.SkipTest('Tkdialog tests are disabled on Travis-CI')
+ super(TestTkdialog, cls).setUpClass()
def testTkdialog(self):
- box = flickrripper.Tkdialog('foo', 'tests/data/MP_sounds.png',
'MP_sounds.png')
- box.run()
+ try:
+ box = Tkdialog('foo', 'tests/data/MP_sounds.png', 'MP_sounds.png')
+ box.show_dialog()
+ except ImportError as e:
+ pywikibot.warning(e)
class TestTkinter(DefaultSiteTestCase):
--
To view, visit https://gerrit.wikimedia.org/r/180537
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0001ec541f2b6679354314b92331f0cfcd381383
Gerrit-PatchSet: 6
Gerrit-Project: pywikibot/core
Gerrit-Branch: master
Gerrit-Owner: Slepice1 <[email protected]>
Gerrit-Reviewer: John Vandenberg <[email protected]>
Gerrit-Reviewer: Ladsgroup <[email protected]>
Gerrit-Reviewer: Merlijn van Deen <[email protected]>
Gerrit-Reviewer: Slepice1 <[email protected]>
Gerrit-Reviewer: XZise <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits