Exemple #1
0
 def Convert(order_class):
     ''' Convert an OrderClass to an OrderDef. Raise an exception on error. '''
     if isinstance(order_class, OrderClass) is False:
         raise TypeError("Error: Instance of OrderClass is required.")
     order_def = OrderDef()
     data = order_class.__dict__()
     for key in data:
         order_def._zdict[key] = data[key]
     order_def.fixup()
     return order_def
Exemple #2
0
 def LoadFile(fq_file):
     ''' Will always return an Instance, else False
     '''
     if not os.path.exists(fq_file):
         return False
     try:
         with open(fq_file, 'r') as fh:
             data = fh.readline()
             data = data.strip()
             zdict = eval(data)
             order_def = OrderDef()
             for key in zdict:
                 if key == OrderDef.IOKEY:
                     pw_def = TableDef(name=OrderDef.NONAME)
                     zrows = eval(zdict[key])
                     for row in zrows:
                         if pw_def.get_table_name() != row[0]:
                             if pw_def.get_table_name() != OrderDef.NONAME:
                                 order_def.add_table(pw_def)
                             pw_def = TableDef(name=row[0])
                         pw_def.add_field(row[1], row[2])
                     order_def.add_table(pw_def)
                 else:
                     order_def._zdict[key] = zdict[key]
             order_def.fixup()
             return order_def
     except Exception as ex:
         print(ex.__traceback__)
         return False
Exemple #3
0
 def _on_new(self):
     self.title(self.ztitle)
     self.order_def = OrderDef()
     self.table_frame.empty()
     self.table_frame.got_results()
     self.table_frame.table_name.set(TableDef1.DEFAULT_NAME)
     self._show_order()
Exemple #4
0
 def __init__(self, *args, **kwargs):
     from SqltDAO.CodeGen01.Meta import Meta
     super().__init__(*args, **kwargs)
     self.ztitle = Meta.Title()
     self.d2c = None
     self.project = None
     self.zoptions = (
         (
             "Projects",
             [("Open Project...", self._on_open),
              ("Save Project...", self._on_save),
              ("Create Code", self._on_code_create)],
         ),
         ("Tools", [("Data2Code...", self._on_d2c),
                    ("Data2Project...", self._on_d2p),
                    ("Preferences...", self._on_d2pref)]),
         ("About", [("About PyDao...", self._on_about),
                    ("Quit", self.destroy)]),
     )
     self.table_frame = None
     self.home = "."
     self.order_def = OrderDef()
     '''
     activeBackground, foreground, selectColor,
     activeForeground, highlightBackground, selectBackground,
     background, highlightColor, selectForeground,
     disabledForeground, insertBackground, troughColor.
     '''
     self.tk_setPalette(
         background="Light Green",  # e.g. Global
         foreground="dark blue",  # e.g. Font color
         insertBackground="blue",  # e.g. Entry cursor
         selectBackground="gold",  # e.g. Editbox selections
         activeBackground="gold",  # e.g. Menu selections
     )
Exemple #5
0
 def write_code(self, pref, order_class, text_data_file):
     ''' Write CODE from an OrderClass using data from a given text_data_file.
     True or Exception returned.
     '''
     source = self.gen_code(order_class, text_data_file)
     file_name = pref['Code Folder'] + os.path.sep + OrderDef.BaseName(
         order_class.file_name)
     with open(file_name, "w") as fh:
         fh.write(source)
         return True
     return False
Exemple #6
0
 def do_save(self):
     ''' Project file must be created for both saving same, as well as for creating code. '''
     ztbl = self.table_frame.pull_results()
     zdict = ztbl.__dict__()
     if not zdict:
         messagebox.showerror("No Data", "Schema Definition Required.")
         return False
     self.order_def = OrderDef(name=ztbl.get_table_name())
     if not self.order_def.add_table(ztbl):
         messagebox.showerror("Invalid Table",
                              "Please verify SQL Table Definition.")
         return False
     if Factory1.SaveFile(DataPreferences.Load(self.home),
                          self.order_def,
                          overwrite=True) is False:
         messagebox.showerror("Exportation Error",
                              "Please verify user locations.")
         return False
     self.table_frame.got_results()
     return True
Exemple #7
0
        ##                        newline += col + '\t'
        ##                    print(newline.strip(), file=fh2)
        files = (
            ("../DaoTest01/Income.csv", "COMMA"),
            ("../DaoTest01/nasdaqlisted.txt", "PIPE"),
            ("../DaoTest01/tc001_data.txt", "CSV"),
            ("../DaoTest01/tc002_data.txt", "TAB"),
        )
        for file, result in files:
            print(file, result)
            detect = Factory1.Detect(file)
            print(detect.__dict__)
    else:
        from SqltDAO.Gui.DataPreferences import Dp1 as DataPreferences
        pref = DataPreferences.Load('.')
        zorder = OrderDef(name=OrderDef.DEFAULT_SCHEMA)
        zname = zorder.project_name
        print("zname", zname)
        if os.path.exists(zname):
            print("unlinking", zname)
            os.unlink(zname)
        for ss in range(4):
            table = "zTable " + str(ss)
            ztable = TableDef(name=table)
            for ztype in TableDef.SupportedTypes:
                ztable.add_field(table + ' ' + ztype, ztype)
            zorder.add_table(ztable)

        print("zorder:\n", zorder, '\n')
        zname = zorder.project_name
        # print("zname", zname)
Exemple #8
0
class Main(Tk):
    def __init__(self, *args, **kwargs):
        from SqltDAO.CodeGen01.Meta import Meta
        super().__init__(*args, **kwargs)
        self.ztitle = Meta.Title()
        self.d2c = None
        self.project = None
        self.zoptions = (
            (
                "Projects",
                [("New Project...", self._on_new),
                 ("Open Project...", self._on_open),
                 ("Save Project...", self._on_save),
                 ("Create Code", self._on_code_create)],
            ),
            ("Tools", [("Data2Code...", self._on_d2c),
                       ("Data2Project...", self._on_d2p),
                       ("Preferences...", self._on_d2pref)]),
            ("About", [("About PyDao...", self._on_about),
                       ("Quit", self.destroy)]),
        )
        self.table_frame = None
        self.home = "."
        self.order_def = OrderDef()
        '''
        activeBackground, foreground, selectColor,
        activeForeground, highlightBackground, selectBackground,
        background, highlightColor, selectForeground,
        disabledForeground, insertBackground, troughColor.
        '''
        self.tk_setPalette(
            background="Light Green",  # e.g. Global
            foreground="dark blue",  # e.g. Font color
            insertBackground="blue",  # e.g. Entry cursor
            selectBackground="gold",  # e.g. Editbox selections
            activeBackground="gold",  # e.g. Menu selections
        )

    def _on_new(self):
        self.title(self.ztitle)
        self.order_def = OrderDef()
        self.table_frame.empty()
        self.table_frame.got_results()
        self.table_frame.table_name.set(TableDef1.DEFAULT_NAME)
        self._show_order()

    def _on_open(self):
        pref = DataPreferences.Load(self.home)
        self.project = askopenfilename(title="Open Project File",
                                       initialdir=pref['Projects'],
                                       filetypes=[("PyDAO Project",
                                                   OrderDef.ProjType)])
        if not self.project:
            return
        zdef = Factory1.LoadFile(self.project)
        if not zdef:
            messagebox.showerror("Schema File / Format Error",
                                 "Unable to import " + self.project)
        else:
            self.table_frame.got_results()
            self.title(self.project)
            self.order_def = zdef
            self._show_order()

    def do_save(self):
        ''' Project file must be created for both saving same, as well as for creating code. '''
        ztbl = self.table_frame.pull_results()
        zdict = ztbl.__dict__()
        if not zdict:
            messagebox.showerror("No Data", "Schema Definition Required.")
            return False
        self.order_def = OrderDef(name=ztbl.get_table_name())
        if not self.order_def.add_table(ztbl):
            messagebox.showerror("Invalid Table",
                                 "Please verify SQL Table Definition.")
            return False
        if Factory1.SaveFile(DataPreferences.Load(self.home),
                             self.order_def,
                             overwrite=True) is False:
            messagebox.showerror("Exportation Error",
                                 "Please verify user locations.")
            return False
        self.table_frame.got_results()
        return True

    def _on_save(self):
        if self.do_save() is True:
            val = os.path.split(self.order_def.project_name)
            messagebox.showinfo(
                "Project Saved", "Project file saved as " + val[-1] +
                " in preference location.")

    def _on_code_create(self):
        ''' Generate Python code '''
        if self.do_save() is True:
            pref = DataPreferences.Load(self.home)
            order_class = Factory1.Extract(self.order_def, pref)
            zfields = OrderedDict()
            ztables = self.order_def.table_names()
            table_def = self.order_def.find_table(
                ztables[0])  # TODO: Highlander hack.
            for row in table_def:
                zfields[row[1]] = row[2]
            sql = SqliteCrud(order_class, zfields)
            zcode = sql.code_class_template(self.order_def.database_name +
                                            OrderDef.TEXT_DATA_TYPE)
            with open(self.order_def.code_name, 'w') as fh:
                print(zcode, file=fh)
            val = os.path.split(self.order_def.code_name)
            messagebox.showinfo(
                "Source Code Success",
                "Class created as " + val[-1] + " in preference location.")

    def _on_d2c(self):
        Data2Code(self, pref=DataPreferences.Load(self.home), verbose=True)

    def _on_d2p(self):
        Data2Code(self,
                  pref=DataPreferences.Load(self.home),
                  gendef=True,
                  verbose=True)

    def _on_d2pref(self):
        zpref = DataPreferences(self, self.home)
        if zpref.has_changed():
            pass

    def _on_about(self):
        messagebox.showinfo(self.ztitle, "Mode: Cross-platform Testing")

    def _show_order(self):
        if not self.order_def:
            return False
        self.table_frame.empty()
        for key in self.order_def._zdict_tables:
            td1 = self.order_def._zdict_tables[key]
            if self.table_frame.put_results(td1) is False:
                messagebox.showerror("Display Error",
                                     "Critical: _show_order regression.")
                return False

    def _set_frame(self):
        zframe = Frame(self)
        self.table_frame = TableDef2(zframe)
        zframe.pack(fill=BOTH)

    def begin(self):
        self.title(self.ztitle)
        try:
            image = PhotoImage(file="zicon.png")
            self.wm_iconphoto(self, image)
        except:
            pass
        zmain = Menu(self)
        for zsub in self.zoptions:
            zdrop = Menu(zmain, tearoff=False)
            zmain.add_cascade(label=zsub[0], menu=zdrop)
            for zz in zsub[1]:
                zdrop.add_command(label=zz[0], command=zz[1])
        self.config(menu=zmain)
        self._set_frame()
        return True

    def run(self):
        self.mainloop()
        return True

    def end(self):
        return True