Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def connect(self):
"""
Connect a PyDMChannel to the proper PyDMPlugin
"""
if not self.address:
return
if is_qt_designer() and not config.DESIGNER_ONLINE:
return
logger.debug("Connecting %r", self.address)
# Connect to proper PyDMPlugin
try:
pydm.data_plugins.establish_connection(self)
except Exception:
logger.exception("Unable to make proper connection "
"for %r", self)
"""
The precision to be used when formatting the output of the PV.
This has no effect when ```precisionFromPV``` is True.
Parameters
----------
new_prec : int
The new precision value to use
"""
# Only allow one to change the property if not getting the precision
# from the PV
if self.precisionFromPV:
return
if new_prec and self._prec != int(new_prec) and new_prec >= 0:
self._user_prec = int(new_prec)
if not is_qt_designer() or config.DESIGNER_ONLINE:
self.value_changed(self.value)
def load_if_needed(self):
if self._needs_load and (
not self._only_load_when_shown or self.isVisible() or is_qt_designer()):
self.embedded_widget = self.open_file()
if (not self.templateFilename) or (not self.data):
return
self.setUpdatesEnabled(False)
layout_class = layout_class_for_type[self.layoutType]
if type(self.layout()) != layout_class:
if self.layout() is not None:
# Trick to remove the existing layout by re-parenting it in an empty widget.
QWidget().setLayout(self.layout())
l = layout_class(self)
self.setLayout(l)
self.layout().setSpacing(self._temp_layout_spacing)
try:
with pydm.data_plugins.connection_queue(defer_connections=True):
for i, variables in enumerate(self.data):
if is_qt_designer() and i > self.countShownInDesigner - 1:
break
w = self.open_template_file(variables)
if w is None:
w = QLabel()
w.setText("No Template Loaded. Data: {}".format(variables))
w.setParent(self)
self.layout().addWidget(w)
except:
logger.exception('Template repeater failed to rebuild.')
finally:
# If issues happen during the rebuild we should still enable
# updates and establish connection for the widgets added.
# Moreover, if we dont call establish_queued_connections
# the queue will never be emptied and new connections will be
# staled.
self.setUpdatesEnabled(True)
def countShownInDesigner(self, new_count):
"""
The number of instances to show in Qt Designer. This property has no
effect outside of Designer.
Parameters
----------
new_count : int
"""
if not is_qt_designer():
return
try:
new_count = int(new_count)
except ValueError:
logger.exception("Couldn't convert {} to integer.".format(new_count))
return
new_count = max(new_count, 0)
if new_count != self._count_shown_in_designer:
self._count_shown_in_designer = new_count
self.rebuild()
self._movie = None
if not abs_path.endswith(".gif"):
pixmap = QPixmap(abs_path)
else:
self._movie = QMovie(abs_path, parent=self)
self._movie.setCacheMode(QMovie.CacheAll)
self._movie.frameChanged.connect(self.movie_frame_changed)
if self._movie.frameCount() > 1:
self._movie.finished.connect(self.movie_finished)
self._movie.start()
# Return a blank image if we don't have a valid path
else:
# Warn the user loudly if their file does not exist, but avoid
# doing this in Designer as this spams the user as they are typing
if not is_qt_designer(): # pragma: no cover
logger.error("Image file %r does not exist", abs_path)
pixmap = QPixmap(self.sizeHint())
pixmap.fill(self.null_color)
# Update the display
if pixmap is not None:
self._pixmap = pixmap
self.update()
self._upper_ctrl_limit = None
self._lower_ctrl_limit = None
self.enum_strings = None
self.value = None
self.channeltype = None
self.subtype = None
# If this label is inside a PyDMApplication (not Designer) start it in
# the disconnected state.
self.setContextMenuPolicy(Qt.DefaultContextMenu)
self.contextMenuEvent = self.open_context_menu
self.channel = init_channel
if not is_qt_designer():
# We should install the Event Filter only if we are running
# and not at the Designer
self.installEventFilter(self)
self._connected = False
self.alarmSeverityChanged(self.ALARM_DISCONNECTED)
self.check_enable_state()
self.destroyed.connect(
functools.partial(widget_destroyed, self.channels, weakref.ref(self))
)
self._redraw_rate = 30 # Redraw at 30 Hz by default.
self.maxRedrawRate = self._redraw_rate
self._curves = []
self._x_labels = []
self._y_labels = []
self._title = None
self._show_legend = False
self._legend = self.addLegend()
self._legend.hide()
# Drawing crosshair on the ViewBox
self.vertical_crosshair_line = None
self.horizontal_crosshair_line = None
self.crosshair_movement_proxy = None
if utilities.is_qt_designer():
self.installEventFilter(self)