def _check_online_plugins(self): # For each online plugin, try to download and install it. # Otherwise warn him online_plugins = InstalledPlugin.get_pre_plugin_names(self.store) if not online_plugins: return successes = [] manager = get_plugin_manager() for plugin_name in online_plugins: success, msg = manager.download_plugin(plugin_name) successes.append(success) if success: manager.install_plugin(self.store, plugin_name) online_plugins.remove(plugin_name) if all(successes): return # Title title = _('You have pending plugins.') # Description url = 'https://stoq.link/?source=stoq-plugin-alert&hash={}'.format( api.sysparam.get_string('USER_HASH')) desc = _( 'The following plugins need to be enabled: <b>{}</b>.\n\n' 'You can do it by registering on <a href="{}">Stoq.link</a>.' ).format(', '.join(online_plugins), url) msg = '<b>%s</b>\n%s' % (title, desc) self.add_info_bar(gtk.MESSAGE_WARNING, msg)
def sentry_report(exctype, value, tb, **tags): tags.update({ 'version': stoqserver.version_str, 'stoq_version': stoq.version, 'architecture': platform.architecture(), 'distribution': platform.dist(), 'python_version': tuple(sys.version_info), 'system': platform.system(), 'uname': platform.uname(), }) # Those are inside a try/except because thy require database access. # If the database access is not working, we won't be able to get them try: default_store = api.get_default_store() tags['user_hash'] = api.sysparam.get_string('USER_HASH') tags['demo'] = api.sysparam.get_bool('DEMO_MODE') tags['postgresql_version'] = get_database_version(default_store) tags['plugins'] = InstalledPlugin.get_plugin_names(default_store) tags['cnpj'] = get_main_cnpj(default_store) except Exception: pass # Disable send sentry log if we are on developer mode. developer_mode = stoqserver.library.uninstalled if raven_client is not None and not developer_mode: if hasattr(raven_client, 'user_context'): raven_client.user_context({'id': tags.get('hash', None), 'username': tags.get('cnpj', None)}) raven_client.captureException((exctype, value, tb), tags=tags)
def sentry_report(exctype, value, tb, **tags): tags.update({ 'version': stoqserver.version_str, 'stoq_version': stoq.version, 'architecture': platform.architecture(), 'distribution': platform.dist(), 'python_version': tuple(sys.version_info), 'system': platform.system(), 'uname': platform.uname(), }) # Those are inside a try/except because thy require database access. # If the database access is not working, we won't be able to get them try: default_store = api.get_default_store() tags['user_hash'] = api.sysparam.get_string('USER_HASH') tags['demo'] = api.sysparam.get_bool('DEMO_MODE') tags['postgresql_version'] = get_database_version(default_store) tags['plugins'] = InstalledPlugin.get_plugin_names(default_store) tags['cnpj'] = get_main_cnpj(default_store) except Exception: pass # Disable send sentry log if we are on developer mode. developer_mode = stoqserver.library.uninstalled if raven_client is not None and not developer_mode: if hasattr(raven_client, 'user_context'): raven_client.user_context({ 'id': tags.get('hash', None), 'username': tags.get('cnpj', None) }) raven_client.captureException((exctype, value, tb), tags=tags)
def _check_online_plugins(self): # For each online plugin, try to download and install it. # Otherwise warn him online_plugins = InstalledPlugin.get_pre_plugin_names(self.store) if not online_plugins: return successes = [] manager = get_plugin_manager() for plugin_name in online_plugins: success, msg = manager.download_plugin(plugin_name) successes.append(success) if success: manager.install_plugin(self.store, plugin_name) online_plugins.remove(plugin_name) if all(successes): return # Title title = _('You have pending plugins.') # Description url = 'https://stoq.link/?source=stoq-plugin-alert&hash={}'.format( api.sysparam.get_string('USER_HASH')) desc = _('The following plugins need to be enabled: <b>{}</b>.\n\n' 'You can do it by registering on <a href="{}">Stoq.link</a>.' ).format(', '.join(online_plugins), url) msg = '<b>%s</b>\n%s' % (title, desc) self.add_info_bar(Gtk.MessageType.WARNING, msg)
def version(self, store, app_version): """Fetches the latest version :param store: a store :param app_version: application version :returns: a deferred with the version_string as a parameter """ try: bdist_type = library.bdist_type except Exception: bdist_type = None if os.path.exists(os.path.join('etc', 'init.d', 'stoq-bootstrap')): source = 'livecd' elif bdist_type in ['egg', 'wheel']: source = 'pypi' elif is_developer_mode(): source = 'devel' else: source = 'ppa' params = { 'hash': sysparam.get_string('USER_HASH'), 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': platform.dist(), 'cnpj': get_main_cnpj(store), 'plugins': InstalledPlugin.get_plugin_names(store), 'product_key': get_product_key(), 'time': datetime.datetime.today().isoformat(), 'uname': platform.uname(), 'version': app_version, 'source': source, } params.update(self._get_company_details(store)) params.update(self._get_usage_stats(store)) return self._do_request('GET', 'version.json', **params)
def version(self, store, app_version): """Fetches the latest version :param store: a store :param app_version: application version :returns: a deferred with the version_string as a parameter """ params = { 'demo': sysparam(store).DEMO_MODE, 'dist': platform.dist(), 'cnpj': self._get_cnpj(), 'plugins': InstalledPlugin.get_plugin_names(store), 'product_key': get_product_key(), 'time': datetime.datetime.today().isoformat(), 'uname': platform.uname(), 'version': app_version, } return self._do_request('GET', 'version.json', **params)
def feedback(self, screen, email, feedback): default_store = get_default_store() params = { 'hash': sysparam.get_string('USER_HASH'), 'cnpj': get_main_cnpj(default_store), 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': ' '.join(platform.dist()), 'email': email, 'feedback': feedback, 'plugins': ', '.join(InstalledPlugin.get_plugin_names(default_store)), 'product_key': get_product_key(), 'screen': screen, 'time': datetime.datetime.today().isoformat(), 'uname': ' '.join(platform.uname()), 'version': self._get_version(), } return self._do_request('GET', 'feedback.json', **params)
def version(self, store, app_version): """Fetches the latest version :param store: a store :param app_version: application version :returns: a deferred with the version_string as a parameter """ params = { "demo": sysparam(store).DEMO_MODE, "dist": platform.dist(), "cnpj": self._get_cnpj(), "plugins": InstalledPlugin.get_plugin_names(store), "product_key": get_product_key(), "time": datetime.datetime.today().isoformat(), "uname": platform.uname(), "version": app_version, } return self._do_request("GET", "version.json", **params)
def version(self, store, app_version): """Fetches the latest version :param store: a store :param app_version: application version :returns: a deferred with the version_string as a parameter """ params = { 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': platform.dist(), 'cnpj': get_main_cnpj(store), 'plugins': InstalledPlugin.get_plugin_names(store), 'product_key': get_product_key(), 'time': datetime.datetime.today().isoformat(), 'uname': platform.uname(), 'version': app_version, } return self._do_request('GET', 'version.json', **params)
def feedback(self, screen, email, feedback, **kwargs): default_store = get_default_store() params = { 'cnpj': get_main_cnpj(default_store), 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': ' '.join(platform.dist()), 'email': email, 'feedback': feedback, 'plugins': ', '.join(InstalledPlugin.get_plugin_names(default_store)), 'product_key': get_product_key(), 'screen': screen, 'time': datetime.datetime.today().isoformat(), 'uname': ' '.join(platform.uname()), 'version': self._get_version(), } endpoint = 'api/stoq/v1/feedback/%s' % (sysparam.get_string('USER_HASH'), ) return self._do_request('POST', endpoint, json=params, **kwargs)
def version(self, store, app_version, **kwargs): """Fetches the latest version :param store: a store :param app_version: application version """ import stoq try: bdist_type = library.bdist_type except Exception: bdist_type = None # We should use absolute paths when looking for /etc if os.path.exists( os.path.join(os.sep, 'etc', 'init.d', 'stoq-bootstrap')): source = 'livecd' elif stoq.trial_mode: source = 'trial' elif bdist_type in ['egg', 'wheel']: source = 'pypi' elif is_developer_mode(): source = 'devel' else: source = 'ppa' params = { 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': ' '.join(platform.dist()), 'cnpj': get_main_cnpj(store), 'plugins': ' '.join(InstalledPlugin.get_plugin_names(store)), 'product_key': get_product_key(), 'uname': ' '.join(platform.uname()), 'version': app_version, 'source': source, } params.update(self._get_company_details(store)) params.update(self._get_usage_stats(store)) endpoint = 'api/stoq/v1/version/%s' % ( sysparam.get_string('USER_HASH'), ) return self._do_request('POST', endpoint, json=params, **kwargs)
def feedback(self, screen, email, feedback): app_info = get_utility(IAppInfo, None) if app_info: app_version = app_info.get('version') else: app_version = 'Unknown' default_store = get_default_store() params = { 'cnpj': get_main_cnpj(default_store), 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': ' '.join(platform.dist()), 'email': email, 'feedback': feedback, 'plugins': ', '.join(InstalledPlugin.get_plugin_names(default_store)), 'product_key': get_product_key(), 'screen': screen, 'time': datetime.datetime.today().isoformat(), 'uname': ' '.join(platform.uname()), 'version': app_version, } return self._do_request('GET', 'feedback.json', **params)
def feedback(self, screen, email, feedback): app_info = get_utility(IAppInfo, None) if app_info: app_version = app_info.get("version") else: app_version = "Unknown" default_store = get_default_store() params = { "cnpj": self._get_cnpj(), "demo": sysparam(default_store).DEMO_MODE, "dist": " ".join(platform.dist()), "email": email, "feedback": feedback, "plugins": ", ".join(InstalledPlugin.get_plugin_names(default_store)), "product_key": get_product_key(), "screen": screen, "time": datetime.datetime.today().isoformat(), "uname": " ".join(platform.uname()), "version": app_version, } return self._do_request("GET", "feedback.json", **params)
def version(self, store, app_version, **kwargs): """Fetches the latest version :param store: a store :param app_version: application version """ import stoq try: bdist_type = library.bdist_type except Exception: bdist_type = None # We should use absolute paths when looking for /etc if os.path.exists(os.path.join(os.sep, 'etc', 'init.d', 'stoq-bootstrap')): source = 'livecd' elif stoq.trial_mode: source = 'trial' elif bdist_type in ['egg', 'wheel']: source = 'pypi' elif is_developer_mode(): source = 'devel' else: source = 'ppa' params = { 'demo': sysparam.get_bool('DEMO_MODE'), 'dist': ' '.join(platform.dist()), 'cnpj': get_main_cnpj(store), 'plugins': ' '.join(InstalledPlugin.get_plugin_names(store)), 'product_key': get_product_key(), 'uname': ' '.join(platform.uname()), 'version': app_version, 'source': source, } params.update(self._get_company_details(store)) params.update(self._get_usage_stats(store)) endpoint = 'api/stoq/v1/version/%s' % (sysparam.get_string('USER_HASH'), ) return self._do_request('POST', endpoint, json=params, **kwargs)
def feedback(self, screen, email, feedback): app_info = get_utility(IAppInfo, None) if app_info: app_version = app_info.get('version') else: app_version = 'Unknown' default_store = get_default_store() params = { 'cnpj': self._get_cnpj(), 'demo': sysparam(default_store).DEMO_MODE, 'dist': ' '.join(platform.dist()), 'email': email, 'feedback': feedback, 'plugins': ', '.join(InstalledPlugin.get_plugin_names(default_store)), 'product_key': get_product_key(), 'screen': screen, 'time': datetime.datetime.today().isoformat(), 'uname': ' '.join(platform.uname()), 'version': app_version, } return self._do_request('GET', 'feedback.json', **params)
def _excepthook(exctype, value, tb): tags = { 'version': stoqserver.version_str, 'stoq_version': stoq.version, 'architecture': platform.architecture(), 'distribution': platform.dist(), 'python_version': tuple(sys.version_info), 'system': platform.system(), 'uname': platform.uname(), } # Those are inside a try/except because thy require database access. # If the database access is not working, we won't be able to get them try: default_store = api.get_default_store() tags['user_hash'] = api.sysparam.get_string('USER_HASH') tags['demo'] = api.sysparam.get_bool('DEMO_MODE') tags['postgresql_version'] = get_database_version(default_store) tags['plugins'] = InstalledPlugin.get_plugin_names(default_store) tags['cnpj'] = get_main_cnpj(default_store) except Exception: pass _raven_client.captureException((exctype, value, tb), tags=tags) traceback.print_exception(exctype, value, tb)
def _excepthook(exctype, value, tb): tags = { 'version': ".".join(str(i) for i in stoqserver.__version__), 'stoq_version': stoq.version, 'architecture': platform.architecture(), 'distribution': platform.dist(), 'python_version': tuple(sys.version_info), 'system': platform.system(), 'uname': platform.uname(), } # Those are inside a try/except because thy require database access. # If the database access is not working, we won't be able to get them try: default_store = api.get_default_store() tags['user_hash'] = api.sysparam.get_string('USER_HASH') tags['demo'] = api.sysparam.get_bool('DEMO_MODE') tags['postgresql_version'] = get_database_version(default_store) tags['plugins'] = InstalledPlugin.get_plugin_names(default_store) tags['cnpj'] = get_main_cnpj(default_store) except Exception: pass _raven_client.captureException((exctype, value, tb), tags=tags) traceback.print_exception(exctype, value, tb)
def collect_report(): report_ = {} # Date and uptime report_["date"] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") report_["tz"] = time.tzname report_["uptime"] = get_uptime() report_["locale"] = get_system_locale() # Python and System import platform report_["architecture"] = " ".join(platform.architecture()) report_["distribution"] = " ".join(platform.dist()) report_["python_version"] = _fix_version(sys.version_info) report_["uname"] = " ".join(platform.uname()) report_["system"] = platform.system() # Stoq application info = get_utility(IAppInfo, None) if info and info.get("name"): report_["app_name"] = info.get("name") report_["app_version"] = _fix_version(info.get("ver")) # External dependencies import gtk report_["pygtk_version"] = _fix_version(gtk.pygtk_version) report_["gtk_version"] = _fix_version(gtk.gtk_version) import kiwi report_["kiwi_version"] = _fix_version(kiwi.__version__.version + (_get_revision(kiwi),)) import psycopg2 try: parts = psycopg2.__version__.split(" ") extra = " ".join(parts[1:]) report_["psycopg_version"] = _fix_version(map(int, parts[0].split(".")) + [extra]) except: report_["psycopg_version"] = _fix_version(psycopg2.__version__) import reportlab report_["reportlab_version"] = _fix_version(reportlab.Version) import stoqdrivers report_["stoqdrivers_version"] = _fix_version(stoqdrivers.__version__ + (_get_revision(stoqdrivers),)) report_["product_key"] = get_product_key() try: from stoqlib.lib.kiwilibrary import library report_["bdist_type"] = library.bdist_type except Exception: pass # PostgreSQL database server try: from stoqlib.database.settings import get_database_version default_store = get_default_store() report_["postgresql_version"] = _fix_version(get_database_version(default_store)) report_["demo"] = sysparam.get_bool("DEMO_MODE") report_["cnpj"] = get_main_cnpj(default_store) report_["plugins"] = ", ".join(InstalledPlugin.get_plugin_names(default_store)) except Exception: pass # Tracebacks report_["tracebacks"] = {} for i, trace in enumerate(_tracebacks): t = "".join(traceback.format_exception(*trace)) # Eliminate duplicates: md5sum = hashlib.md5(t).hexdigest() report_["tracebacks"][md5sum] = t if info and info.get("log"): report_["log"] = open(info.get("log")).read() report_["log_name"] = info.get("log") return report_
def collect_report(): report_ = {} # Date and uptime report_['date'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') report_['tz'] = time.tzname report_['uptime'] = get_uptime() report_['locale'] = get_system_locale() # Python and System import platform report_['architecture'] = ' '.join(platform.architecture()) report_['distribution'] = ' '.join(platform.dist()) report_['python_version'] = _fix_version(sys.version_info) report_['uname'] = ' '.join(platform.uname()) report_['system'] = platform.system() # Stoq application info = get_utility(IAppInfo, None) if info and info.get('name'): report_['app_name'] = info.get('name') report_['app_version'] = _fix_version(info.get('ver')) # External dependencies import gi report_['gtk_version'] = _fix_version(gi.version_info) import kiwi report_['kiwi_version'] = _fix_version( kiwi.__version__.version + (_get_revision(kiwi), )) import psycopg2 try: parts = psycopg2.__version__.split(' ') extra = ' '.join(parts[1:]) report_['psycopg_version'] = _fix_version( list(map(int, parts[0].split('.'))) + [extra]) except Exception: report_['psycopg_version'] = _fix_version(psycopg2.__version__) import reportlab report_['reportlab_version'] = _fix_version(reportlab.Version) import stoqdrivers report_['stoqdrivers_version'] = _fix_version( stoqdrivers.__version__ + (_get_revision(stoqdrivers), )) report_['product_key'] = get_product_key() try: from stoqlib.lib.kiwilibrary import library report_['bdist_type'] = library.bdist_type except Exception: pass # PostgreSQL database server try: from stoqlib.database.settings import get_database_version default_store = get_default_store() report_['postgresql_version'] = _fix_version( get_database_version(default_store)) report_['demo'] = sysparam.get_bool('DEMO_MODE') report_['hash'] = sysparam.get_string('USER_HASH') report_['cnpj'] = get_main_cnpj(default_store) report_['plugins'] = ', '.join( InstalledPlugin.get_plugin_names(default_store)) except Exception: pass # Tracebacks report_['tracebacks'] = {} for i, trace in enumerate(_tracebacks): t = ''.join(traceback.format_exception(*trace)) # Eliminate duplicates: md5sum = hashlib.md5(t).hexdigest() report_['tracebacks'][md5sum] = t if info and info.get('log'): report_['log'] = open(info.get('log')).read() report_['log_name'] = info.get('log') return report_
def collect_report(): report_ = {} # Date and uptime report_['date'] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') report_['tz'] = time.tzname report_['uptime'] = get_uptime() report_['locale'] = get_system_locale() # Python and System import platform report_['architecture'] = platform.architecture() report_['distribution'] = platform.dist() report_['python_version'] = tuple(sys.version_info) report_['system'] = platform.system() report_['uname'] = platform.uname() # Stoq application info = get_utility(IAppInfo, None) if info and info.get('name'): report_['app_name'] = info.get('name') report_['app_version'] = info.get('ver') # External dependencies import gtk report_['pygtk_version'] = gtk.pygtk_version report_['gtk_version'] = gtk.gtk_version import kiwi report_['kiwi_version'] = kiwi.__version__.version + (_get_revision(kiwi),) import psycopg2 try: parts = psycopg2.__version__.split(' ') extra = ' '.join(parts[1:]) report_['psycopg_version'] = tuple(map(int, parts[0].split('.'))) + (extra,) except: report_['psycopg_version'] = psycopg2.__version__ import reportlab report_['reportlab_version'] = reportlab.Version.split('.') import stoqdrivers report_['stoqdrivers_version'] = stoqdrivers.__version__ + ( _get_revision(stoqdrivers),) report_['product_key'] = get_product_key() try: from stoqlib.lib.kiwilibrary import library report_['bdist_type'] = library.bdist_type except Exception: pass # PostgreSQL database server try: from stoqlib.database.settings import get_database_version default_store = get_default_store() report_['postgresql_version'] = get_database_version(default_store) report_['plugins'] = InstalledPlugin.get_plugin_names(default_store) report_['demo'] = sysparam.get_bool('DEMO_MODE') report_['cnpj'] = get_main_cnpj(default_store) except Exception: pass # Tracebacks report_['tracebacks'] = {} for i, trace in enumerate(_tracebacks): t = ''.join(traceback.format_exception(*trace)) # Eliminate duplicates: md5sum = hashlib.md5(t).hexdigest() report_['tracebacks'][md5sum] = t if info and info.get('log'): report_['log'] = open(info.get('log')).read() report_['log_name'] = info.get('log') return report_