Esempio n. 1
0
    def write_actions(self, model_name, icon_name, item_actions):
        viewer_file = join(
            dirname(self.full_modulepath), 'views_%s.py' % model_name.lower())
        is_new = not isfile(viewer_file)
        with open(viewer_file, 'ab') as self.viewfile:
            self._write_header(model_name, item_actions, is_new)
            class_inst = getattr(self.module_obj, model_name)
            verbose_name = six.text_type(class_inst._meta.verbose_name)
            verbose_name_plural = six.text_type(
                class_inst._meta.verbose_name_plural)
            for item_name in sorted(list(item_actions.keys())):
                acts = item_actions[item_name]
                actions, caption, right, menuext = self._define_params(model_name, item_name, acts, verbose_name, verbose_name_plural)
                if item_name == '3Transition':
                    loop = []
                    for field in class_inst._meta.get_fields():
                        if isinstance(field, FSMFieldMixin):
                            loop.append({'statname': field.name})
                    six.print_(loop)
                else:
                    loop = [{'statname': ''}]
                for item in loop:
                    actions = actions % item
                    self.writedata("""
%(actions)s
@MenuManage.describ('%(right)s'%(menuext)s)
class %(modelname)s%(itemname)s(%(classname)s):
    icon = "%(iconname)s"
    model = %(modelname)s
    field_id = '%(fieldidname)s'
    %(caption)s
""" % {'modelname': model_name, 'iconname': icon_name, 'fieldidname': model_name.lower(), 'itemname': item_name[1:],
                        'classname': LIST_VIEWER[item_name][0], 'actions': actions, 'caption': caption, 'right': right, 'menuext': menuext})
        showinfo("View generator", "Views generated in %s" % os.path.relpath(viewer_file, self.project_path))
Esempio n. 2
0
 def upgrade(self):
     self.btnupgrade.config(state=DISABLED)
     self.instance_list.config(state=DISABLED)
     try:
         from logging import getLogger
         admin_path = import_module(
             "lucterios.install.lucterios_admin").__file__
         proc = Popen(
             [sys.executable, admin_path, "update"], stderr=STDOUT, stdout=PIPE)
         value = proc.communicate()[0]
         try:
             value = value.decode('ascii')
         except:
             pass
         six.print_(value)
         if proc.returncode != 0:
             getLogger("lucterios.admin").error(value)
         else:
             getLogger("lucterios.admin").info(value)
         showinfo(ugettext("Lucterios installer"), ugettext(
             "The application must restart"))
         python = sys.executable
         os.execl(python, python, *sys.argv)
     finally:
         self._refresh_modules()
         self.btnupgrade.config(state=NORMAL)
         self.instance_list.config(state=NORMAL)
Esempio n. 3
0
    def _destroy_test_db(self, test_database_name, verbosity=1):
        """
        Drop the test databases using a connection to database 'master'.
        """
        if not self._test_database_create(settings):
            if verbosity >= 1:
                six.print_("Skipping Test DB destruction")
            return

        for alias in connections:
            connections[alias].close()
        try:
            with self._nodb_connection.cursor() as cursor:
                qn_db_name = self.connection.ops.quote_name(test_database_name)
                # boot all other connections to the database, leaving only this
                # connection
                cursor.execute(
                    "ALTER DATABASE %s SET SINGLE_USER WITH ROLLBACK IMMEDIATE" % qn_db_name)
                time.sleep(1)
                # database is now clear to drop
                cursor.execute("DROP DATABASE %s" % qn_db_name)
        except Exception:
            # if 'it is currently in use' in str(e):
            #     six.print_('Cannot drop database %s because it is in use' % test_database_name)
            # else:
            six.reraise(*sys.exc_info())
Esempio n. 4
0
 def get_actions(cls, ident, xfer, model_name=None, key=None, **args):
     cls._actlock.acquire()
     try:
         acts = []
         if model_name is None:
             model_name = xfer.model.get_long_name()
         if model_name in cls._ACTION_LIST.keys():
             for act_ident, act_xclass, act_title, act_icon, act_condition, act_options in cls._ACTION_LIST[
                     model_name]:
                 try:
                     if (act_ident
                             == ident) and ((act_condition is None)
                                            or act_condition(xfer, **args)):
                         acts.append(
                             (act_xclass.get_action(act_title, act_icon),
                              dict(act_options)))
                 except Exception:
                     six.print_(
                         'error for [%s,%s,%s,%s]' %
                         (act_ident, act_xclass, act_title, act_icon))
                     raise
         if key is not None:
             acts.sort(key=key)
         for act in acts:
             for remove_opt in ['intop', 'model_name']:
                 if remove_opt in act[1]:
                     del act[1][remove_opt]
         return acts
     finally:
         cls._actlock.release()
Esempio n. 5
0
 def upgrade(self):
     self.btnupgrade.config(state=DISABLED)
     self.instance_list.config(state=DISABLED)
     try:
         from logging import getLogger
         admin_path = import_module(
             "lucterios.install.lucterios_admin").__file__
         proc = Popen([sys.executable, admin_path, "update"],
                      stderr=STDOUT,
                      stdout=PIPE)
         value = proc.communicate()[0]
         try:
             value = value.decode('ascii')
         except Exception:
             pass
         six.print_(value)
         if proc.returncode != 0:
             getLogger("lucterios.admin").error(value)
         else:
             getLogger("lucterios.admin").info(value)
         showinfo(ugettext_lazy("Lucterios launcher"),
                  ugettext_lazy("The application must restart"))
         python = sys.executable
         os.execl(python, python, *sys.argv)
     finally:
         self._refresh_modules()
         self.btnupgrade.config(state=NORMAL)
         self.instance_list.config(state=NORMAL)
Esempio n. 6
0
    def write_actions(self, model_name, icon_name, item_actions):
        viewer_file = join(
            dirname(self.full_modulepath), 'views_%s.py' % model_name.lower())
        is_new = not isfile(viewer_file)
        with open(viewer_file, 'ab') as self.viewfile:
            self._write_header(model_name, item_actions, is_new)
            class_inst = getattr(self.module_obj, model_name)
            verbose_name = six.text_type(class_inst._meta.verbose_name)
            verbose_name_plural = six.text_type(
                class_inst._meta.verbose_name_plural)
            for item_name in sorted(list(item_actions.keys())):
                acts = item_actions[item_name]
                actions, caption, right, menuext = self._define_params(model_name, item_name, acts, verbose_name, verbose_name_plural)
                if item_name == '3Transition':
                    loop = []
                    for field in class_inst._meta.get_fields():
                        if isinstance(field, FSMFieldMixin):
                            loop.append({'statname': field.name})
                    six.print_(loop)
                else:
                    loop = [{'statname': ''}]
                for item in loop:
                    actions = actions % item
                    self.writedata("""
%(actions)s
@MenuManage.describ('%(right)s'%(menuext)s)
class %(modelname)s%(itemname)s(%(classname)s):
    icon = "%(iconname)s"
    model = %(modelname)s
    field_id = '%(fieldidname)s'
    %(caption)s
""" % {'modelname': model_name, 'iconname': icon_name, 'fieldidname': model_name.lower(), 'itemname': item_name[1:],
                        'classname': LIST_VIEWER[item_name][0], 'actions': actions, 'caption': caption, 'right': right, 'menuext': menuext})
        showinfo("View generator", "Views generated in %s" % os.path.relpath(viewer_file, self.project_path))
Esempio n. 7
0
 def fillresponse(self):
     if "SAVE" in self.params.keys():
         del self.params["SAVE"]
     if self.has_changed:
         self.item.editor.before_save(self)
         try:
             self.item.save()
             self.has_changed = False
             if self.fill_manytomany_fields():
                 self.item.save()
         except IntegrityError as err:
             getLogger("lucterios.core.container").info("%s", err)
             six.print_(err)
             self.raise_except(_("This record exists yet!"),
                               self.raise_except_class)
     if self.except_msg == '':
         self.item.editor.saving(self)
     if self.getparam('URL_TO_REDIRECT') is not None:
         url_text = self.getparam('URL_TO_REDIRECT')
         self.redirect_action(WrapAction('', '', url_text=url_text),
                              params={self.field_id: self.item.id})
     elif isinstance(self.redirect_to_show, six.text_type):
         self.redirect_action(ActionsManage.get_action_url(
             self.model.get_long_name(), self.redirect_to_show, self),
                              params={self.field_id: self.item.id})
Esempio n. 8
0
def migrate_containers(old_parent, new_parent):
    nb_folder = 0
    nb_doc = 0
    for old_document in Document.objects.filter(folder=old_parent):
        new_doc = DocumentContainer(parent=new_parent, name=old_document.name, description=old_document.description)
        new_doc.modifier = old_document.modifier
        new_doc.date_modification = old_document.date_modification
        new_doc.creator = old_document.creator
        new_doc.date_creation = old_document.date_creation
        new_doc.save()
        new_doc.content = old_document.content
        nb_doc += 1

    for old_folder in Folder.objects.filter(parent=old_parent):
        new_folder = FolderContainer.objects.create(parent=new_parent, name=old_folder.name, description=old_folder.description)
        new_folder.viewer.set(old_folder.viewer.all())
        new_folder.modifier.set(old_folder.modifier.all())
        sub_nb_folder, sub_nb_doc = migrate_containers(old_folder, new_folder)
        old_folder.delete()
        nb_folder += sub_nb_folder
        nb_doc += sub_nb_doc
        nb_folder += 1
    if (old_parent is None) and (nb_folder > 0):
        six.print_('Convert containers: folder=%d - documents=%d' % (nb_folder, nb_doc))
    return nb_folder, nb_doc
    def _destroy_test_db(self, test_database_name, verbosity=1):
        """
        Drop the test databases using a connection to database 'master'.
        """
        if not self._test_database_create(settings):
            if verbosity >= 1:
                six.print_("Skipping Test DB destruction")
            return

        for alias in connections:
            connections[alias].close()
        try:
            with self._nodb_connection.cursor() as cursor:
                qn_db_name = self.connection.ops.quote_name(test_database_name)
                # boot all other connections to the database, leaving only this connection
                cursor.execute(
                    "ALTER DATABASE %s SET SINGLE_USER WITH ROLLBACK IMMEDIATE"
                    % qn_db_name)
                time.sleep(1)
                # database is now clear to drop
                cursor.execute("DROP DATABASE %s" % qn_db_name)
        except Exception:
            # if 'it is currently in use' in str(e):
            #     six.print_('Cannot drop database %s because it is in use' % test_database_name)
            # else:
            six.reraise(*sys.exc_info())
Esempio n. 10
0
File: test.py Progetto: mayjo79/core
 def assert_action_equal(self, path, act_desc):
     self.assertTrue(self.response_json is not None)
     act = path
     if isinstance(path, six.text_type):
         act = self.get_json_path(path)
     self.assertEqual(act['text'], act_desc[0])
     if act_desc[1] is None:
         self.assertTrue('icon' not in act.keys())
     elif act_desc[1].startswith('images/'):
         self.assertEqual(act['icon'],
                          '/static/lucterios.CORE/' + act_desc[1])
     else:
         self.assertEqual(act['icon'], '/static/' + act_desc[1])
     if len(act_desc) > 2:
         self.assertEqual(act['extension'], act_desc[2])
         self.assertEqual(act['action'], act_desc[3])
         self.assertEqual(act['close'], six.text_type(act_desc[4]))
         self.assertEqual(act['modal'], six.text_type(act_desc[5]))
         self.assertEqual(act['unique'], six.text_type(act_desc[6]))
         if len(act_desc) > 7:
             try:
                 for key, value in act_desc[7].items():
                     self.assertEqual(six.text_type(act['params'][key]),
                                      six.text_type(value))
             except Exception:
                 six.print_(six.text_type(act['params']))
                 raise
     else:
         self.assertTrue('extension' not in act.keys())
         self.assertTrue('action' not in act.keys())
         self.assertEqual(path['close'], six.text_type(1))
         self.assertEqual(path['modal'], six.text_type(1))
         self.assertEqual(path['unique'], six.text_type(1))
Esempio n. 11
0
 def assert_action_equal(self, path, act_desc):
     self.assertTrue(self.response_json is not None)
     act = path
     if isinstance(path, six.text_type):
         act = self.get_json_path(path)
     self.assertEqual(act['text'], act_desc[0])
     if act_desc[1] is None:
         self.assertTrue('icon' not in act.keys())
     elif act_desc[1].startswith('images/'):
         self.assertEqual(act['icon'], '/static/lucterios.CORE/' + act_desc[1])
     else:
         self.assertEqual(act['icon'], '/static/' + act_desc[1])
     if len(act_desc) > 2:
         self.assertEqual(act['extension'], act_desc[2])
         self.assertEqual(act['action'], act_desc[3])
         self.assertEqual(act['close'], six.text_type(act_desc[4]))
         self.assertEqual(act['modal'], six.text_type(act_desc[5]))
         self.assertEqual(act['unique'], six.text_type(act_desc[6]))
         if len(act_desc) > 7:
             try:
                 for key, value in act_desc[7].items():
                     self.assertEqual(six.text_type(act['params'][key]), six.text_type(value))
             except Exception:
                 six.print_(six.text_type(act['params']))
                 raise
     else:
         self.assertTrue('extension' not in act.keys())
         self.assertTrue('action' not in act.keys())
         self.assertEqual(path['close'], six.text_type(1))
         self.assertEqual(path['modal'], six.text_type(1))
         self.assertEqual(path['unique'], six.text_type(1))
Esempio n. 12
0
 def run(self):
     try:
         self._params()
         self._thirds()
         self._years()
         self._costaccounting()
         self._chartsaccount()
         self._entryaccount()
         self._model()
     except:
         import traceback
         traceback.print_exc()
         six.print_("*** Unexpected error: %s ****" % sys.exc_info()[0])
     self.print_info("Nb thirds:%d", len(self.third_list))
     self.print_info("Nb fiscal years:%d", len(self.year_list))
     self.print_info(
         "Nb chart of accounts:%d", len(self.chartsaccount_list))
     self.print_info(
         "Nb entries of account:%d", len(self.entryaccount_list))
     self.print_info(
         "Nb cost accountings:%d", len(self.costaccounting_list))
     self.old_db.objectlinks['third'] = self.third_list
     self.old_db.objectlinks['year'] = self.year_list
     self.old_db.objectlinks['costaccounting'] = self.costaccounting_list
     self.old_db.objectlinks['chartsaccount'] = self.chartsaccount_list
     self.old_db.objectlinks['journal'] = self.journal_list
     self.old_db.objectlinks['entryaccount'] = self.entryaccount_list
Esempio n. 13
0
File: test.py Progetto: mayjo79/core
 def print_xml(self, xpath):
     self.assertTrue(self.response_xml is not None)
     xml_value = self.get_first_xpath(xpath)
     six.print_(
         etree.tostring(xml_value,
                        xml_declaration=True,
                        pretty_print=True,
                        encoding='utf-8').decode("utf-8"))
Esempio n. 14
0
File: test.py Progetto: mayjo79/core
 def print_json(self, path=None):
     from django.core.serializers.json import DjangoJSONEncoder
     import json
     if path is None:
         path = self.response_json
     elif isinstance(path, six.text_type):
         path = self.get_json_path(path)
     six.print_(json.dumps(path, cls=DjangoJSONEncoder, indent=3))
Esempio n. 15
0
 def print_json(self, path=None):
     from django.core.serializers.json import DjangoJSONEncoder
     import json
     if path is None:
         path = self.response_json
     elif isinstance(path, six.text_type):
         path = self.get_json_path(path)
     six.print_(json.dumps(path, cls=DjangoJSONEncoder, indent=3))
Esempio n. 16
0
def post_after_migrate(sender, **kwargs):
    if ('exception' not in kwargs) and ('app_config' in kwargs) and (
            kwargs['app_config'].name == 'lucterios.CORE'):
        from django.conf import settings
        set_locale_lang(settings.LANGUAGE_CODE)
        six.print_('check parameters')
        Signal.call_signal("checkparam")
        six.print_('convert data')
        Signal.call_signal("convertdata")
Esempio n. 17
0
    def _rewrite_file(self, filename):
        change_count = 0

        with fileinput.FileInput(filename, inplace=True) as f:
            for original_line in f:
                line = self._rewrite_line(original_line)
                print_(line, end='')  # NOQA
                if line != original_line:
                    change_count += 1

        return change_count
Esempio n. 18
0
    def test_scheduler(self):
        six.print_('-- Begin test_scheduler --')
        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_grid_equal('tasks', {
            "name": "nom",
            "trigger": "déclencheur",
            "nextdate": "date suivante"
        }, 0)

        self.calljson('/lucterios.dummy/addSchedulerTask', {})
        self.assert_observer('core.acknowledge', 'lucterios.dummy',
                             'addSchedulerTask')

        value = Params.getvalue('dummy-value')
        self.assertEqual(value, "")

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 1)
        self.assert_json_equal('', 'tasks/@0/name', 'Run simple action')
        self.assert_json_equal('', 'tasks/@0/trigger', 'interval[0:00:10]')
        self.assert_json_equal('', 'tasks/@0/nextdate',
                               datetime.now().strftime('%Y-%m-%dT%H:'), True)

        sleep(6 * 10 + .2)
        value = Params.getvalue('dummy-value')
        self.assertEqual(len(value.split('{[br/]}')), 5)

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 1)
        self.assert_json_equal('', 'tasks/@0/name', 'Run simple action')
        self.assert_json_equal(
            '', 'tasks/@0/trigger',
            'date[' + datetime.now().strftime('%Y-%m-%d %H:'), True)
        self.assert_json_equal('', 'tasks/@0/nextdate',
                               datetime.now().strftime('%Y-%m-%dT%H:'), True)

        sleep(10 + .2)
        value = Params.getvalue('dummy-value')
        self.assertEqual(value, "")

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 0)

        six.print_('-- End test_scheduler --')
Esempio n. 19
0
 def run(self):
     try:
         self._params()
         self._config()
         self._event()
         self._degree()
     except:
         import traceback
         traceback.print_exc()
         six.print_("*** Unexpected error: %s ****" % sys.exc_info()[0])
     self.print_info("Nb degree types:%d", len(self.degreetype_list))
     self.print_info("Nb sub degree types:%d", len(self.subdegreetype_list))
     self.print_info("Nb degrees:%d", len(self.degree_list))
Esempio n. 20
0
 def print_info(self, msg, arg):
     if self.old_db.log_file is None:
         stdout = sys.stdout
     else:
         stdout = io.open(self.old_db.log_file, mode="a", encoding='utf-8')
     try:
         text = msg % arg
         six.print_(text, file=stdout)
     except UnicodeEncodeError:
         pass
     finally:
         if self.old_db.log_file is not None:
             stdout.close()
Esempio n. 21
0
 def run(self):
     try:
         self._params()
         self._setowner()
         self._callfunds()
         self._expense()
         self._payoff()
     except:
         import traceback
         traceback.print_exc()
         six.print_("*** Unexpected error: %s ****" % sys.exc_info()[0])
     self.print_info("Nb owners:%d", len(self.owner_list))
     self.print_info("Nb sets:%d", len(self.set_list))
     self.print_info("Nb calls of funds:%d", len(self.callfunds_list))
     self.print_info("Nb expenses:%d", len(self.expense_list))
Esempio n. 22
0
 def run(self):
     try:
         self._params()
         self._season()
         self._subscription()
         self._categories()
         self._adherents()
     except:
         import traceback
         traceback.print_exc()
         six.print_("*** Unexpected error: %s ****" % sys.exc_info()[0])
     self.print_info("Nb seasons:%d", len(self.season_list))
     self.print_info("Nb adherents:%d", len(self.adherent_list))
     self.print_info("Nb subscriptions:%d", len(self.subscription_list))
     self.old_db.objectlinks['activity'] = self.activity_list
     self.old_db.objectlinks['adherent'] = self.adherent_list
Esempio n. 23
0
 def run(self):
     try:
         self._params()
         self._vat()
         self._article()
         self._bill()
         self._payoff()
         self._deposit()
     except:
         import traceback
         traceback.print_exc()
         six.print_("*** Unexpected error: %s ****" % sys.exc_info()[0])
     self.print_info("Nb articles:%d", len(self.article_list))
     self.print_info("Nb bills:%d", len(self.bill_list))
     self.old_db.objectlinks['article'] = self.article_list
     self.old_db.objectlinks['bill'] = self.bill_list
Esempio n. 24
0
    def runshell_db(cls, conn_params):
        args = [cls.executable_name]

        host = conn_params.get('host', '')
        port = conn_params.get('port', '')
        dbname = conn_params.get('database', '')
        user = conn_params.get('user', '')
        passwd = conn_params.get('password', '')

        if user:
            args += ['-U', user]
        if host:
            args += ['-h', host]
        if port:
            args += ['-p', str(port)]
        args += [dbname]

        temp_pgpass = None
        try:
            if passwd:
                # Create temporary .pgpass file.
                temp_pgpass = NamedTemporaryFile(mode='w+')
                try:
                    print_(
                        _escape_pgpass(host) or '*',
                        str(port) or '*',
                        _escape_pgpass(dbname) or '*',
                        _escape_pgpass(user) or '*',
                        _escape_pgpass(passwd),
                        file=temp_pgpass,
                        sep=':',
                        flush=True,
                    )
                    os.environ['PGPASSFILE'] = temp_pgpass.name
                except UnicodeEncodeError:
                    # If the current locale can't encode the data, we let
                    # the user input the password manually.
                    pass
            subprocess.check_call(args)
        finally:
            if temp_pgpass:
                temp_pgpass.close()
                if 'PGPASSFILE' in os.environ:  # unit tests need cleanup
                    del os.environ['PGPASSFILE']
Esempio n. 25
0
    def runshell_db(cls, settings_dict):
        args = [cls.executable_name]

        host = settings_dict.get('HOST', '')
        port = settings_dict.get('PORT', '')
        name = settings_dict.get('NAME', '')
        user = settings_dict.get('USER', '')
        passwd = settings_dict.get('PASSWORD', '')

        if user:
            args += ['-U', user]
        if host:
            args += ['-h', host]
        if port:
            args += ['-p', str(port)]
        args += [name]

        temp_pgpass = None
        try:
            if passwd:
                # Create temporary .pgpass file.
                temp_pgpass = NamedTemporaryFile(mode='w+')
                try:
                    print_(
                        _escape_pgpass(host) or '*',
                        str(port) or '*',
                        _escape_pgpass(name) or '*',
                        _escape_pgpass(user) or '*',
                        _escape_pgpass(passwd),
                        file=temp_pgpass,
                        sep=':',
                        flush=True,
                    )
                    os.environ['PGPASSFILE'] = temp_pgpass.name
                except UnicodeEncodeError:
                    # If the current locale can't encode the data, we let
                    # the user input the password manually.
                    pass
            subprocess.call(args)
        finally:
            if temp_pgpass:
                temp_pgpass.close()
                if 'PGPASSFILE' in os.environ:  # unit tests need cleanup
                    del os.environ['PGPASSFILE']
Esempio n. 26
0
    def runshell_db(cls, conn_params):
        args = [cls.executable_name]

        host = conn_params.get("host", "")
        port = conn_params.get("port", "")
        dbname = conn_params.get("database", "")
        user = conn_params.get("user", "")
        passwd = conn_params.get("password", "")

        if user:
            args += ["-U", user]
        if host:
            args += ["-h", host]
        if port:
            args += ["-p", str(port)]
        args += [dbname]

        temp_pgpass = None
        try:
            if passwd:
                # Create temporary .pgpass file.
                temp_pgpass = NamedTemporaryFile(mode="w+")
                try:
                    print_(
                        _escape_pgpass(host) or "*",
                        str(port) or "*",
                        _escape_pgpass(dbname) or "*",
                        _escape_pgpass(user) or "*",
                        _escape_pgpass(passwd),
                        file=temp_pgpass,
                        sep=":",
                        flush=True,
                    )
                    os.environ["PGPASSFILE"] = temp_pgpass.name
                except UnicodeEncodeError:
                    # If the current locale can't encode the data, we let
                    # the user input the password manually.
                    pass
            subprocess.call(args)
        finally:
            if temp_pgpass:
                temp_pgpass.close()
                if "PGPASSFILE" in os.environ:  # unit tests need cleanup
                    del os.environ["PGPASSFILE"]
Esempio n. 27
0
    def runshell_db(cls, conn_params):
        args = [cls.executable_name]

        host = conn_params.get('host', '')
        port = conn_params.get('port', '')
        dbname = conn_params.get('database', '')
        user = conn_params.get('user', '')
        passwd = conn_params.get('password', '')

        if user:
            args += ['-U', user]
        if host:
            args += ['-h', host]
        if port:
            args += ['-p', str(port)]
        args += [dbname]

        temp_pgpass = None
        try:
            if passwd:
                # Create temporary .pgpass file.
                temp_pgpass = NamedTemporaryFile(mode='w+')
                try:
                    print_(
                        _escape_pgpass(host) or '*',
                        str(port) or '*',
                        _escape_pgpass(dbname) or '*',
                        _escape_pgpass(user) or '*',
                        _escape_pgpass(passwd),
                        file=temp_pgpass,
                        sep=':',
                        flush=True,
                    )
                    os.environ['PGPASSFILE'] = temp_pgpass.name
                except UnicodeEncodeError:
                    # If the current locale can't encode the data, we let
                    # the user input the password manually.
                    pass
            subprocess.check_call(args)
        finally:
            if temp_pgpass:
                temp_pgpass.close()
                if 'PGPASSFILE' in os.environ:  # unit tests need cleanup
                    del os.environ['PGPASSFILE']
Esempio n. 28
0
 def _parse_comp(self, comp, y_offset):
     last_y_offset = self.y_offset
     self.y_offset = y_offset
     self.position_y = y_offset
     for child in comp:
         if self.position_y > (self.height + self.bottom_h):
             self.add_page()
         current_x = self.l_margin + get_size(child, 'left')
         current_y = self.get_top_component(child)
         current_w = get_size(child, 'width')
         current_h = get_size(child, 'height')
         mtd = 'parse_' + child.tag.lower()
         if hasattr(self, mtd):
             fct = getattr(self, mtd)
             # six.print_("print: %s (x=%f,y=%f,w=%f,h=%f) " % (child.tag, current_x / mm, current_y / mm, current_w / mm, current_h / mm))
             fct(child, current_x, current_y, current_w, current_h)
         else:
             six.print_("Unsupported method: " + mtd)
     self.y_offset = last_y_offset
Esempio n. 29
0
    def test_scheduler(self):
        six.print_('-- Begin test_scheduler --')
        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_grid_equal('tasks', {"name": "nom", "trigger": "déclencheur", "nextdate": "date suivante"}, 0)

        self.calljson('/lucterios.dummy/addSchedulerTask', {})
        self.assert_observer('core.acknowledge', 'lucterios.dummy', 'addSchedulerTask')

        value = Params.getvalue('dummy-value')
        self.assertEqual(value, "")

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 1)
        self.assert_json_equal('', 'tasks/@0/name', 'Run simple action')
        self.assert_json_equal('', 'tasks/@0/trigger', 'interval[0:00:10]')
        self.assert_json_equal('', 'tasks/@0/nextdate', datetime.now().strftime('%Y-%m-%d %H:'), True)

        sleep(6 * 10 + .2)
        value = Params.getvalue('dummy-value')
        self.assertEqual(len(value.split('{[br/]}')), 5)

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 1)
        self.assert_json_equal('', 'tasks/@0/name', 'Run simple action')
        self.assert_json_equal('', 'tasks/@0/trigger', 'date[' + datetime.now().strftime('%Y-%m-%d %H:'), True)
        self.assert_json_equal('', 'tasks/@0/nextdate', datetime.now().strftime('%Y-%m-%d %H:'), True)

        sleep(10 + .2)
        value = Params.getvalue('dummy-value')
        self.assertEqual(value, "")

        self.factory.xfer = SessionList()
        self.calljson('/CORE/sessionList', {}, False)
        self.assert_observer('core.custom', 'CORE', 'sessionList')
        self.assert_count_equal('tasks', 0)

        six.print_('-- End test_scheduler --')
Esempio n. 30
0
 def _parse_comp(self, comp, y_offset):
     last_y_offset = self.y_offset
     self.y_offset = y_offset
     self.position_y = y_offset
     for child in comp:
         if self.position_y > (self.height + self.bottom_h):
             self.add_page()
         current_x = self.l_margin + get_size(child, 'left')
         current_y = self.get_top_component(child)
         current_w = get_size(child, 'width')
         current_h = get_size(child, 'height')
         mtd = 'parse_' + child.tag.lower()
         if hasattr(self, mtd):
             fct = getattr(self, mtd)
             # six.print_("print: %s (x=%f,y=%f,w=%f,h=%f) " % (child.tag, current_x / mm, current_y / mm, current_w / mm, current_h / mm))
             fct(child, current_x, current_y, current_w, current_h)
         else:
             six.print_("Unsupported method: " + mtd)
     self.y_offset = last_y_offset
Esempio n. 31
0
    def _create_test_db(self, verbosity=1, autoclobber=False, keepdb=False):
        """
        Create the test databases using a connection to database 'master'.
        """
        if self._test_database_create(settings):
            try:
                with use_master_connection(self):
                    test_database_name = super(DatabaseCreation, self)._create_test_db(verbosity, autoclobber)
            except Exception as e:
                if 'Choose a different database name.' in str(e):
                    six.print_('Database "%s" could not be created because it already exists.' % test_database_name)
                else:
                    six.reraise(*sys.exc_info())
            self.install_regex_clr(test_database_name)
            return test_database_name

        if verbosity >= 1:
            six.print_("Skipping Test DB creation")
        return self._get_test_db_name()
Esempio n. 32
0
 def assert_select_equal(self, path, selects, checked=None):
     if checked is None:
         tag = 'SELECT'
     else:
         tag = 'CHECKLIST'
     self.assertTrue(self.response_json is not None)
     self.assertTrue(self.response_xml is None)
     self.assertEqual(self.json_comp[path]['component'], tag)
     if isinstance(selects, dict):
         self.assertEqual(len(self.json_comp[path]['case']), len(selects))
         try:
             for case in self.json_comp[path]['case']:
                 vid = case[0]
                 self.assertEqual(selects[vid], case[1])
         except Exception:
             six.print_(self.json_comp[path]['case'])
             raise
     else:
         self.assertEqual(len(self.json_comp[path]['case']), selects)
Esempio n. 33
0
File: test.py Progetto: mayjo79/core
 def assert_select_equal(self, path, selects, checked=None):
     if checked is None:
         tag = 'SELECT'
     else:
         tag = 'CHECKLIST'
     self.assertTrue(self.response_json is not None)
     self.assertTrue(self.response_xml is None)
     self.assertEqual(self.json_comp[path]['component'], tag)
     if isinstance(selects, dict):
         self.assertEqual(len(self.json_comp[path]['case']), len(selects))
         try:
             for case in self.json_comp[path]['case']:
                 vid = case[0]
                 self.assertEqual(selects[vid], case[1])
         except Exception:
             six.print_(self.json_comp[path]['case'])
             raise
     else:
         self.assertEqual(len(self.json_comp[path]['case']), selects)
Esempio n. 34
0
 def fillresponse(self):
     if "SAVE" in self.params.keys():
         del self.params["SAVE"]
     if self.has_changed:
         self.item.editor.before_save(self)
         try:
             self.item.save()
             self.has_changed = False
             if self.fill_manytomany_fields():
                 self.item.save()
         except IntegrityError as err:
             getLogger("lucterios.core.container").info("%s", err)
             six.print_(err)
             self.raise_except(
                 _("This record exists yet!"), self.raise_except_class)
     if self.except_msg == '':
         self.item.editor.saving(self)
     if isinstance(self.redirect_to_show, six.text_type):
         self.redirect_action(ActionsManage.get_act_changed(
             self.model.__name__, self.redirect_to_show, '', ''), {'params': {self.field_id: self.item.id}})
Esempio n. 35
0
 def run_new_migration(self, tmp_path):
     from inspect import getmembers, isfunction
     from django.apps import apps
     from django.db import DEFAULT_DB_ALIAS, connections
     from django.db.migrations.executor import MigrationExecutor
     connection = connections[DEFAULT_DB_ALIAS]
     connection.prepare_database()
     executor = MigrationExecutor(connection)
     for target in self.get_other_targets(tmp_path, executor):
         try:
             target_conf = apps.get_app_config(target[0])
             migrat_mod = import_module(
                 "%s.migrations.%s" % (target_conf.module.__name__, target[1]))
             for migr_obj in getmembers(migrat_mod):
                 if isfunction(migr_obj[1]) and (migr_obj[0][0] != '_'):
                     six.print_("run %s.%s.%s" %
                                (target[0], target[1], migr_obj[0]))
                     migr_obj[1]()
         except Exception:
             pass
Esempio n. 36
0
def _time(val, default=None):
    if not val:
        val = ''
    
    # Handle the special case of '24:00'
    if val[:2] == '24':
        val = '23:59'

    ret = None
    try:
        ret = dateparse.parse_time(val)
    except ValueError as e:
        print_('Bad time string: {}'.format(val), file=sys.stderr)
        six.reraise(ValueError, e)

    if isinstance(ret, datetime.time):
        return ret
    if default is not None:
        return _time(default)
    return None
Esempio n. 37
0
 def run_new_migration(self, tmp_path):
     from inspect import getmembers, isfunction
     from django.apps import apps
     from django.db import DEFAULT_DB_ALIAS, connections
     from django.db.migrations.executor import MigrationExecutor
     connection = connections[DEFAULT_DB_ALIAS]
     connection.prepare_database()
     executor = MigrationExecutor(connection)
     for target in self.get_other_targets(tmp_path, executor):
         try:
             target_conf = apps.get_app_config(target[0])
             migrat_mod = import_module(
                 "%s.migrations.%s" %
                 (target_conf.module.__name__, target[1]))
             for migr_obj in getmembers(migrat_mod):
                 if isfunction(migr_obj[1]) and (migr_obj[0][0] != '_'):
                     six.print_("run %s.%s.%s" %
                                (target[0], target[1], migr_obj[0]))
                     migr_obj[1]()
         except Exception:
             pass
Esempio n. 38
0
 def assert_observer(self, obsname, extension, action):
     self.assertTrue(self.response_json is not None)
     self.assertTrue(self.response_xml is None)
     try:
         self.assertEquals(
             self.json_meta['observer'], obsname,
             self.response_json['exception']['message']
             if self.json_meta['observer'] == 'core.exception' else None)
         self.assertEquals(self.json_meta['extension'], extension)
         self.assertEquals(self.json_meta['action'], action)
         if self.json_meta['observer'] == 'core.custom':
             comp_coord = {}
             for comp_name, comp in self.json_comp.items():
                 ident = (comp['tab'], comp['x'], comp['y'])
                 comp_coord.setdefault(ident, []).append(comp_name)
             self.assertListEqual(
                 [(names, ident)
                  for ident, names in comp_coord.items() if len(names) > 1],
                 [], 'components have same coordonates')
     except AssertionError:
         if self.json_meta['observer'] == 'core.exception':
             six.print_("Error:" +
                        self.response_json['exception']['message'])
             six.print_("Call-stack:" + self.response_json['exception']
                        ['debug'].replace("{[br/]}", "\n"))
         if self.json_meta['observer'] == 'core.dialogbox':
             six.print_("Message:" + self.json_data['text'])
         raise
Esempio n. 39
0
    def _destroy_test_db(self, test_database_name, verbosity=1):
        """
        Drop the test databases using a connection to database 'master'.
        """
        if not self._test_database_create(settings):
            if verbosity >= 1:
                six.print_("Skipping Test DB destruction")
            return

        for alias in connections:
            connections[alias].close()
        try:
            with self.connection.cursor() as cursor:
                qn_db_name = self.connection.ops.quote_name(test_database_name)
                # boot all other connections to the database, leaving only this connection
                cursor.execute("ALTER DATABASE %s SET SINGLE_USER WITH ROLLBACK IMMEDIATE" % qn_db_name)
                time.sleep(1)
                # after we switch to master, database is clear to drop
                cursor.execute("USE [master]")
                cursor.execute("DROP DATABASE %s" % qn_db_name)
        except Exception:
            six.reraise(*sys.exc_info())
    def _create_test_db(self, verbosity=1, autoclobber=False, keepdb=False):
        """
        Create the test databases using a connection to database 'master'.
        """
        if self._test_database_create(settings):
            try:
                test_database_name = super(DatabaseCreation,
                                           self)._create_test_db(
                                               verbosity, autoclobber)
            except Exception as e:
                if 'Choose a different database name.' in str(e):
                    six.print_(
                        'Database "%s" could not be created because it already exists.'
                        % test_database_name)
                else:
                    six.reraise(*sys.exc_info())
            self.install_regex_clr(test_database_name)
            return test_database_name

        if verbosity >= 1:
            six.print_("Skipping Test DB creation")
        return self._get_test_db_name()
Esempio n. 41
0
 def get_actions(cls, ident, xfer, model_name=None, key=None, **args):
     cls._actlock.acquire()
     try:
         acts = []
         if model_name is None:
             model_name = xfer.model.get_long_name()
         if model_name in cls._ACTION_LIST.keys():
             for act_ident, act_xclass, act_title, act_icon, act_condition, act_options in cls._ACTION_LIST[model_name]:
                 try:
                     if (act_ident == ident) and ((act_condition is None) or act_condition(xfer, **args)):
                         acts.append((act_xclass.get_action(act_title, act_icon), dict(act_options)))
                 except Exception:
                     six.print_('error for [%s,%s,%s,%s]' % (act_ident, act_xclass, act_title, act_icon))
                     raise
         if key is not None:
             acts.sort(key=key)
         for act in acts:
             for remove_opt in ['intop', 'model_name']:
                 if remove_opt in act[1]:
                     del act[1][remove_opt]
         return acts
     finally:
         cls._actlock.release()
Esempio n. 42
0
 def fillresponse(self):
     if "SAVE" in self.params.keys():
         del self.params["SAVE"]
     if self.has_changed:
         self.item.editor.before_save(self)
         try:
             self.item.save()
             self.has_changed = False
             if self.fill_manytomany_fields():
                 self.item.save()
         except IntegrityError as err:
             getLogger("lucterios.core.container").info("%s", err)
             six.print_(err)
             self.raise_except(
                 _("This record exists yet!"), self.raise_except_class)
     if self.except_msg == '':
         self.item.editor.saving(self)
     if self.getparam('URL_TO_REDIRECT') is not None:
         url_text = self.getparam('URL_TO_REDIRECT')
         self.redirect_action(WrapAction('', '', url_text=url_text), params={self.field_id: self.item.id})
     elif isinstance(self.redirect_to_show, six.text_type):
         self.redirect_action(ActionsManage.get_action_url(self.model.get_long_name(), self.redirect_to_show, self),
                              params={self.field_id: self.item.id})
Esempio n. 43
0
def correct_db_field(fields):
    def check_ret(val):
        if isinstance(val, int):
            return val
        elif hasattr(val, "rowcount"):
            return val.rowcount
        return 0

    from django.db import connection
    if connection.vendor == 'sqlite':
        query = "UPDATE %s SET %s=0 WHERE typeof(%s)='text'"
    else:
        query = "UPDATE %s SET %s=0 WHERE %s='NaN'"
    ret = 0
    try:
        with connection.cursor() as cursor:
            for tablename, fieldname in fields.items():
                ret += check_ret(
                    cursor.execute(query % (tablename, fieldname, fieldname)))
    except Exception:
        logging.getLogger('lucterios.framwork').exception("correct_db_field")
    if ret > 0:
        six.print_("%s DB corrections" % ret)
Esempio n. 44
0
 def importsql(self, sql_file_path):
     create_script, insert_script = self.read_sqlfile(sql_file_path)
     cur = self.open()
     try:
         for item_script in create_script:
             try:
                 cur.execute(item_script)
             except (sqlite3.IntegrityError, sqlite3.OperationalError):
                 six.print_('error: %s', item_script)
                 raise
         last_begin = ""
         for item_script in insert_script:
             try:
                 if last_begin != item_script[:70]:
                     self.con.commit()
                     last_begin = item_script[:70]
                 cur.execute(item_script)
             except (sqlite3.IntegrityError, sqlite3.OperationalError):
                 six.print_('error: %s', item_script)
                 raise
     finally:
         self.con.commit()
         self.close()
Esempio n. 45
0
 def assert_observer(self, obsname, extension, action):
     self.assertTrue(self.response_json is not None)
     self.assertTrue(self.response_xml is None)
     try:
         self.assertEquals(self.json_meta['observer'], obsname, self.response_json['exception']['message'] if self.json_meta['observer'] == 'core.exception' else None)
         self.assertEquals(self.json_meta['extension'], extension)
         self.assertEquals(self.json_meta['action'], action)
     except AssertionError:
         if self.json_meta['observer'] == 'core.exception':
             six.print_("Error:" + self.response_json['exception']['message'])
             six.print_("Call-stack:" + self.response_json['exception']['debug'].replace("{[br/]}", "\n"))
         if self.json_meta['observer'] == 'core.dialogbox':
             six.print_("Message:" + self.json_data['text'])
         raise
Esempio n. 46
0
File: test.py Progetto: povtux/core
 def assert_observer(self, obsname, extension, action):
     try:
         self.assert_attrib_equal('', 'observer', obsname)
         self.assert_attrib_equal('', 'source_extension', extension)
         self.assert_attrib_equal('', 'source_action', action)
     except AssertionError:
         if self.get_first_xpath('').get('observer') == 'core.exception':
             six.print_(
                 "Error:" + six.text_type(self.get_first_xpath('EXCEPTION/MESSAGE').text))
             six.print_("Call-stack:" + six.text_type(
                 self.get_first_xpath('EXCEPTION/DEBUG_INFO').text).replace("{[br/]}", "\n"))
         if self.get_first_xpath('').get('observer') == 'core.dialogbox':
             six.print_(
                 "Message:" + six.text_type(self.get_first_xpath('TEXT').text))
         raise
Esempio n. 47
0
File: test.py Progetto: mayjo79/core
 def assert_observer(self, obsname, extension, action):
     self.assertTrue(self.response_json is not None)
     self.assertTrue(self.response_xml is None)
     try:
         self.assertEquals(
             self.json_meta['observer'], obsname,
             self.response_json['exception']['message']
             if self.json_meta['observer'] == 'core.exception' else None)
         self.assertEquals(self.json_meta['extension'], extension)
         self.assertEquals(self.json_meta['action'], action)
     except AssertionError:
         if self.json_meta['observer'] == 'core.exception':
             six.print_("Error:" +
                        self.response_json['exception']['message'])
             six.print_("Call-stack:" + self.response_json['exception']
                        ['debug'].replace("{[br/]}", "\n"))
         if self.json_meta['observer'] == 'core.dialogbox':
             six.print_("Message:" + self.json_data['text'])
         raise
Esempio n. 48
0
 def show_info_(self):
     for msg_item in self.msg_list:
         six.print_(msg_item)
Esempio n. 49
0
File: test.py Progetto: povtux/core
 def print_xml(self, xpath):
     xml_value = self.get_first_xpath(xpath)
     six.print_(etree.tostring(
         xml_value, xml_declaration=True, pretty_print=True, encoding='utf-8').decode("utf-8"))
def main():
    six.print_(test_inbound_payload['html'])
Esempio n. 51
0
 def show_info_(self):
     for msg_item in self.msg_list:
         six.print_(msg_item)
Esempio n. 52
0
 def print_json(self, path=None):
     if path is None:
         path = self.response_json
     elif isinstance(path, six.text_type):
         path = self.get_json_path(path)
     six.print_(self._get_json_dump(path))
Esempio n. 53
0
def _log(s, verbosity, priority):
    if priority <= verbosity:
        print_(s)
Esempio n. 54
0
 def fill_content(self, request):
     ReportModelGenerator.fill_content(self, request)
     self.horizontal_marge = self.label_size['left_marge']
     self.vertical_marge = self.label_size['top_marge']
     self.page_width = self.label_size['page_width']
     self.page_height = self.label_size['page_height']
     label_values = []
     for _ in range(1, self.first_label):
         label_values.append("")
     for item in self.get_items_filtered():
         item.set_context(self.xfer)
         label_values.append(item.evaluate(self.label_text))
     index = 0
     for labelval in label_values:
         if index == (self.label_size['columns'] * self.label_size['rows']):
             index = 0
             self.add_page()
         col_num = index % self.label_size['columns']
         row_num = int(index / self.label_size['columns'])
         left = col_num * self.label_size['horizontal_space']
         top = row_num * self.label_size['vertical_space']
         if self.mode == 0:
             xml_text = convert_to_html('text', labelval, "sans-serif", 9,
                                        10, "center")
             xml_text.attrib[
                 'height'] = "%d.0" % self.label_size['cell_height']
             xml_text.attrib[
                 'width'] = "%d.0" % self.label_size['cell_width']
             xml_text.attrib['top'] = "%d.0" % top
             xml_text.attrib['left'] = "%d.0" % left
             xml_text.attrib['spacing'] = "0.0"
             self.body.append(xml_text)
         else:
             try:
                 docroot = etree.XML(labelval)
             except etree.XMLSyntaxError:
                 six.print_(labelval)
                 raise
             for xml_text in docroot.find('body').iter():
                 if xml_text.tag == 'body':
                     continue
                 if xml_text.tag == 'text':
                     new_xml_text = convert_text_xml(xml_text)
                 else:
                     new_xml_text = xml_text
                 if 'top' in xml_text.attrib:
                     top_offset = float(top) + float(xml_text.attrib['top'])
                 else:
                     top_offset = float(top)
                 if 'left' in xml_text.attrib:
                     left_offset = float(left) + float(
                         xml_text.attrib['left'])
                 else:
                     left_offset = float(left)
                 if 'width' in xml_text.attrib:
                     width = float(xml_text.attrib['width'])
                 else:
                     width = self.label_size['cell_width']
                 if 'height' in xml_text.attrib:
                     height = float(xml_text.attrib['height'])
                 else:
                     height = self.label_size['cell_height']
                 new_xml_text.attrib['top'] = "%.1f" % top_offset
                 new_xml_text.attrib['left'] = "%.1f" % left_offset
                 new_xml_text.attrib['width'] = "%.1f" % width
                 new_xml_text.attrib['height'] = "%.1f" % height
                 new_xml_text.attrib['spacing'] = "0.0"
                 self.body.append(new_xml_text)
         index += 1