Exemplo n.º 1
0
    def _trigger_on_user_modified(self, user):
        if isinstance(user, basestring):
            # user id
            users = []
            try:
                session_ids = self._sessionids_by_userid[user]
                for session_id in session_ids:
                    try:
                        users.append(
                            self._session_users_by_session[session_id])
                    except KeyError:
                        # unknown session id
                        continue
            except KeyError:
                # no session for user
                return
        elif isinstance(user, User) and not isinstance(user, SessionUser):
            users = self.find_sessions_for(
                lambda u: u.get_id() == user.get_id())
        elif isinstance(user, User):
            users = [user]
        else:
            return

        for listener in self._login_status_listeners:
            try:
                for user in users:
                    listener.on_user_modified(user)
            except Exception:
                self._logger.exception(
                    "Error in on_user_modified on {!r}".format(listener),
                    extra=dict(callback=fqcn(listener)))
Exemplo n.º 2
0
    def login_user(self, user):
        self._cleanup_sessions()

        if user is None or user.is_anonymous:
            return

        if isinstance(user, LocalProxy):
            # noinspection PyProtectedMember
            user = user._get_current_object()

        if not isinstance(user, User):
            return None

        if not isinstance(user, SessionUser):
            user = SessionUser(user)

        self._session_users_by_session[user.session] = user

        userid = user.get_id()
        if not userid in self._sessionids_by_userid:
            self._sessionids_by_userid[userid] = set()

        self._sessionids_by_userid[userid].add(user.session)

        for listener in self._login_status_listeners:
            try:
                listener.on_user_logged_in(user)
            except Exception:
                self._logger.exception(
                    "Error in on_user_logged_in on {!r}".format(listener),
                    extra=dict(callback=fqcn(listener)))

        self._logger.info("Logged in user: {}".format(user.get_id()))

        return user
Exemplo n.º 3
0
	def _trigger_on_user_removed(self, username):
		for listener in self._login_status_listeners:
			try:
				listener.on_user_removed(username)
			except Exception:
				self._logger.exception("Error in on_user_removed on {!r}".format(listener),
				                       extra=dict(callback=fqcn(listener)))
Exemplo n.º 4
0
    def logout_user(self, user, stale=False):
        if user is None or user.is_anonymous or isinstance(user, AdminUser):
            return

        if isinstance(user, LocalProxy):
            user = user._get_current_object()

        if not isinstance(user, SessionUser):
            return

        userid = user.get_id()
        sessionid = user.session

        if userid in self._sessionids_by_userid:
            try:
                self._sessionids_by_userid[userid].remove(sessionid)
            except KeyError:
                pass

        if sessionid in self._session_users_by_session:
            try:
                del self._session_users_by_session[sessionid]
            except KeyError:
                pass

        for listener in self._login_status_listeners:
            try:
                listener.on_user_logged_out(user, stale=stale)
            except Exception:
                self._logger.exception(
                    "Error in on_user_logged_out on {!r}".format(listener),
                    extra=dict(callback=fqcn(listener)))

        self._logger.info("Logged out user: {}".format(user.get_id()))
Exemplo n.º 5
0
	def on_slicing_progress(self, slicer, source_location, source_path, dest_location, dest_path, _progress=None):
		if not _progress:
			return

		progress_int = int(_progress * 100)
		if self._last_slicing_progress != progress_int:
			self._last_slicing_progress = progress_int
			for callback in self._slicing_progress_callbacks:
				try:
					callback.sendSlicingProgress(slicer, source_location, source_path, dest_location, dest_path, progress_int)
				except Exception:
					self._logger.exception("Exception while pushing slicing progress",
				                           extra=dict(callback=fqcn(callback)))

			if progress_int:
				def call_plugins(slicer, source_location, source_path, dest_location, dest_path, progress):
					for plugin in self._progress_plugins:
						try:
							plugin.on_slicing_progress(slicer, source_location, source_path, dest_location, dest_path, progress)
						except Exception:
							self._logger.exception("Exception while sending slicing progress to plugin %s" % plugin._identifier,
							                       extra=dict(plugin=plugin._identifier))

				import threading
				thread = threading.Thread(target=call_plugins, args=(slicer, source_location, source_path, dest_location, dest_path, progress_int))
				thread.daemon = False
				thread.start()
Exemplo n.º 6
0
    def login_user(self, user):
        self._cleanup_sessions()

        if user is None:
            return

        if isinstance(user, LocalProxy):
            user = user._get_current_object()

        if not isinstance(user, User):
            return None

        if not isinstance(user, SessionUser):
            user = SessionUser(user)

        self._session_users_by_session[user.session] = user

        userid = user.get_id()
        if not userid in self._sessionids_by_userid:
            self._sessionids_by_userid[userid] = set()

        self._sessionids_by_userid[userid].add(user.session)

        self._logger.debug("Logged in user: %r" % user)

        for callback in self._callbacks:
            try:
                callback("login", user)
            except:
                self._logger.exception(
                    "Error while calling login callback {!r}".format(callback),
                    extra=dict(callback=fqcn(callback)))

        return user
Exemplo n.º 7
0
    def logout_user(self, user):
        if user is None:
            return

        if isinstance(user, LocalProxy):
            user = user._get_current_object()

        if not isinstance(user, SessionUser):
            return

        userid = user.get_id()
        sessionid = user.session

        if userid in self._sessionids_by_userid:
            try:
                self._sessionids_by_userid[userid].remove(sessionid)
            except KeyError:
                pass

        if sessionid in self._session_users_by_session:
            del self._session_users_by_session[sessionid]

        self._logger.debug("Logged out user: %r" % user)

        for callback in self._callbacks:
            try:
                callback("logout", user)
            except:
                self._logger.exception(
                    "Error while calling logout callback {!r}".format(
                        callback),
                    extra=dict(callback=fqcn(callback)))
Exemplo n.º 8
0
	def on_group_permissions_changed(self, group, added=None, removed=None):
		users = self.find_sessions_for(lambda u: group in u.groups)
		for listener in self._login_status_listeners:
			try:
				for user in users:
					listener.on_user_modified(user)
			except Exception:
				self._logger.exception("Error in on_user_modified on {!r}".format(listener),
				                       extra=dict(callback=fqcn(listener)))
Exemplo n.º 9
0
 def _trigger_on_user_removed(self, username):
     for listener in self._login_status_listeners:
         try:
             listener.on_user_removed(username)
         except Exception:
             self._logger.exception(
                 f"Error in on_user_removed on {listener!r}",
                 extra={"callback": fqcn(listener)},
             )
Exemplo n.º 10
0
def notify_callback(callback, config=None, timelapse=None):
    if config is None and timelapse is not None:
        config = timelapse.config_data()

    try:
        callback.sendTimelapseConfig(config)
    except Exception:
        logging.getLogger(__name__).exception(
            "Exception while pushing timelapse configuration",
            extra=dict(callback=fqcn(callback)))
Exemplo n.º 11
0
 def on_group_subgroups_changed(self, group, added=None, removed=None):
     users = self.find_sessions_for(lambda u: group in u.groups)
     for listener in self._login_status_listeners:
         # noinspection PyBroadException
         try:
             for user in users:
                 listener.on_user_modified(user)
         except Exception:
             self._logger.exception(
                 "Error in on_user_modified on {!r}".format(listener),
                 extra={"callback": fqcn(listener)},
             )
Exemplo n.º 12
0
def notify_callbacks(timelapse):
    if timelapse is None:
        config = None
    else:
        config = timelapse.config_data()
    for callback in _update_callbacks:
        try:
            callback.sendTimelapseConfig(config)
        except:
            logging.getLogger(__name__).exception(
                "Exception while pushing timelapse configuration",
                extra=dict(callback=fqcn(callback)))
Exemplo n.º 13
0
	def _analysis_finished(self, entry, result):
		for callback in self._callbacks:
			try:
				callback(entry, result)
			except:
				self._logger.exception(u"Error while pushing analysis data to callback {}".format(callback),
				                       extra=dict(callback=fqcn(callback)))
		eventManager().fire(Events.METADATA_ANALYSIS_FINISHED, {"name": entry.name,
		                                                        "path": entry.path,
		                                                        "origin": entry.location,
		                                                        "result": result,

		                                                        # TODO: deprecated, remove in a future release
		                                                        "file": entry.path})
Exemplo n.º 14
0
    def login_user(self, user):
        """
        This method logs in the user into OctoPrint using authorization OAuth2.
        After that, user is added into users.yaml config file.
        """
        self._cleanup_sessions()

        if user is None or user.is_anonymous:
            return

        if isinstance(user, LocalProxy):
            user = user._get_current_object()
            return user

        if not isinstance(user, User):
            return None

        # -- Overridden parts -----------------------------------------------
        if isinstance(user, OAuth2PGCUser):
            username = user.get_id()
            user = FilebasedUserManager.find_user(self, username)
            if user is None:
                FilebasedUserManager.add_user(self, username, '', active=True)
                user = FilebasedUserManager.find_user(self, username)
        # -- Overridden parts -----------------------------------------------

        if not isinstance(user, SessionUser):
            user = SessionUser(user)

        self._session_users_by_session[user.session] = user

        user_id = user.get_id()
        if user_id not in self._sessionids_by_userid:
            self._sessionids_by_userid[user_id] = set()

        self._sessionids_by_userid[user_id].add(user.session)

        for listener in self._login_status_listeners:
            try:
                listener.on_user_logged_in(user)
            except Exception:
                self._logger.exception(
                    "Error in on_user_logged_in on {!r}".format(listener),
                    extra=dict(callback=fqcn(listener)))

        self._logger.info("Logged in user: {}".format(user.get_id()))

        return user
Exemplo n.º 15
0
 def _analysis_finished(self, entry, result):
     for callback in self._callbacks:
         try:
             callback(entry, result)
         except Exception:
             self._logger.exception(
                 "Error while pushing analysis data to callback {}".format(callback),
                 extra={"callback": fqcn(callback)},
             )
     eventManager().fire(
         Events.METADATA_ANALYSIS_FINISHED,
         {
             "name": entry.name,
             "path": entry.path,
             "origin": entry.location,
             "result": result,
         },
     )