Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def __init__(self, image_list, *arg, **kw):
super(TabWidget, self).__init__(*arg, **kw)
self.config_store = QtWidgets.QApplication.instance().config_store
self.image_list = image_list
self.form = QtWidgets.QFormLayout()
self.setLayout(self.form)
# construct widgets
self.widgets = {}
# title
self.widgets['title'] = SingleLineEdit(spell_check=True)
self.widgets['title'].editingFinished.connect(self.new_title)
self.form.addRow(translate(
'DescriptiveTab', 'Title / Object Name'), self.widgets['title'])
# description
self.widgets['description'] = MultiLineEdit(spell_check=True)
self.widgets['description'].editingFinished.connect(self.new_description)
self.form.addRow(translate(
'DescriptiveTab', 'Description / Caption'), self.widgets['description'])
# keywords
try:
error = session.do_upload(
self.fileobj, imghdr.what(path), image, params)
except UploadAborted:
break
except Exception as ex:
error = str(ex)
self.fileobj = None
if convert:
os.unlink(path)
if error:
self.retry = None
self.upload_error.emit(name, error)
# wait for response from user dialog
while self.retry is None:
QtWidgets.QApplication.processEvents()
if not self.retry:
break
else:
upload_count += 1
self.upload_progress.emit(0.0, '%p%')
session.disconnect()
self.finished.emit()
def __init__(self, parent=None):
super(ImageList, self).__init__(parent)
self.app = QtWidgets.QApplication.instance()
self.drag_icon = None
self.images = []
self.last_selected = None
self.selection_anchor = None
self.thumb_size = int(
self.app.config_store.get('controls', 'thumb_size', '80'))
layout = QtWidgets.QGridLayout()
layout.setSpacing(0)
layout.setRowStretch(0, 1)
layout.setColumnStretch(3, 1)
self.setLayout(layout)
layout.setContentsMargins(0, 0, 0, 0)
# thumbnail display
self.scroll_area = ScrollArea()
self.scroll_area.dropped_images.connect(self.open_file_list)
layout.addWidget(self.scroll_area, 0, 0, 1, 6)
pixmap.loadFromData(pkg_resources.resource_string(
'photini', 'data/icons/48/photini.png'))
icon = QtGui.QIcon(pixmap)
self.setWindowIcon(icon)
self.selection = list()
# logger window
self.loggerwindow = LoggerWindow(options.verbose)
self.loggerwindow.setWindowIcon(icon)
# set network proxy
proxies = getproxies()
if 'http' in proxies:
parsed = urlparse(proxies['http'])
QNetworkProxy.setApplicationProxy(QNetworkProxy(
QNetworkProxy.HttpProxy, parsed.hostname, parsed.port))
# create shared global objects
self.app = QtWidgets.QApplication.instance()
self.app.config_store = ConfigStore('editor', parent=self)
self.app.spell_check = SpellCheck(parent=self)
self.app.open_cage = OpenCage(parent=self)
self.app.test_mode = options.test
# restore size
size = self.width(), self.height()
self.resize(*eval(
self.app.config_store.get('main_window', 'size', str(size))))
# image selector
self.image_list = ImageList()
self.image_list.selection_changed.connect(self.new_selection)
self.image_list.new_metadata.connect(self.new_metadata)
# update config file
if self.app.config_store.config.has_section('tabs'):
conv = {
'descriptive_metadata': 'photini.descriptive',
version += '\n PyQt {}, Qt {}, using {}'.format(
QtCore.PYQT_VERSION_STR, QtCore.QT_VERSION_STR,
('QtWebKit', 'QtWebEngine')[using_qtwebengine])
if spelling_version:
version += '\n ' + spelling_version
if ffmpeg_version:
version += '\n ' + ffmpeg_version
try:
from photini.flickr import flickr_version
version += '\n ' + flickr_version
except ImportError:
pass
version += '\n available styles: {}'.format(
', '.join(QtWidgets.QStyleFactory.keys()))
version += '\n using style: {}'.format(
QtWidgets.QApplication.style().objectName())
parser = OptionParser(
usage=six.text_type(translate(
'CLIHelp', 'Usage: %prog [options] [file_name, ...]')),
version=version,
description=six.text_type(translate(
'CLIHelp', 'Photini photo metadata editor')))
parser.add_option(
'-t', '--test', action='store_true',
help=six.text_type(translate(
'CLIHelp', 'test new features or API versions')))
parser.add_option(
'-v', '--verbose', action='count', default=0,
help=six.text_type(translate(
'CLIHelp', 'increase number of logging messages')))
options, args = parser.parse_args()
# ensure warnings are visible in test mode
def __init__(self):
self.config_store = QtWidgets.QApplication.instance().config_store
self.lenses = eval(self.config_store.get('technical', 'lenses', '[]'))
# update config
for section in self.config_store.config.sections():
if section.startswith('lens '):
lens_id = section[5:]
if lens_id not in self.lenses:
self.lenses.append(lens_id)
for old_id in list(self.lenses):
section = 'lens ' + old_id
values = {}
for key in ('lens_model', 'lens_make', 'lens_serial', 'lens_spec'):
values[key] = self.config_store.get(section, key) or None
if not values['lens_model']:
values['lens_model'] = old_id
new_id = self.get_id(values['lens_model'], values['lens_make'],
values['lens_serial'])
def __init__(self, image_list, parent=None):
super(TabWidget, self).__init__(parent)
self.app = QtWidgets.QApplication.instance()
self.geocoder = self.app.open_cage
self.image_list = image_list
self.setLayout(QtWidgets.QHBoxLayout())
## left side
left_side = QtWidgets.QGridLayout()
# latitude & longitude
self.coords = LatLongDisplay(self.image_list)
left_side.addWidget(self.coords.label, 0, 0)
self.coords.changed.connect(self.new_coords)
left_side.addWidget(self.coords, 0, 1)
# convert lat/lng to location info
self.auto_location = QtWidgets.QPushButton(
translate('AddressTab', 'Get address from lat, long'))
self.auto_location.setEnabled(False)
self.auto_location.clicked.connect(self.get_address)
left_side.addWidget(self.auto_location, 1, 0, 1, 2)
def mouseMoveEvent(self, event):
if not self.image_list.drag_icon:
return
if ((event.pos() - self.drag_start_pos).manhattanLength() <
QtWidgets.QApplication.startDragDistance()):
return
paths = []
for image in self.image_list.get_selected_images():
paths.append(image.path)
if not paths:
return
drag = QtGui.QDrag(self)
# construct icon
count = min(len(paths), 8)
src_icon = self.image_list.drag_icon
src_w = src_icon.width()
src_h = src_icon.height()
margin = (count - 1) * 4
if count == 1:
icon = src_icon
else:
def main(argv=None):
global app
if argv:
sys.argv = argv
# let PyQt handle its options (need at least one argument after options)
sys.argv.append('xxx')
app = QtWidgets.QApplication(sys.argv)
del sys.argv[-1]
# install translations
if qt_version_info < (5, 0):
QtCore.QTextCodec.setCodecForTr(QtCore.QTextCodec.codecForName('utf-8'))
# English translation as a fallback (to get correct plurals)
lang_dir = pkg_resources.resource_filename('photini', 'data/lang')
translator = QtCore.QTranslator(parent=app)
if translator.load('photini.en', lang_dir):
app.installTranslator(translator)
translator = QtCore.QTranslator(parent=app)
# localised translation, if it exists
locale = QtCore.QLocale.system()
if translator.load(locale, 'photini', '.', lang_dir):
app.installTranslator(translator)
translator = QtCore.QTranslator(parent=app)
# Qt's own translation, e.g. for 'apply' or 'cancel' buttons