diff --git a/CHANGELOG b/CHANGELOG index c0d6bd8..62f240d 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,7 @@ +v 0.16.0 [-jun-2021] + - Add connection for postgres and mariadb + + v 0.15.0 [05-jun-2021] - Add autostyle for Writer tables diff --git a/VERSION b/VERSION index a551051..04a373e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.15.0 +0.16.0 diff --git a/doc/source/main/base.rst b/doc/source/main/base.rst new file mode 100644 index 0000000..1ac826a --- /dev/null +++ b/doc/source/main/base.rst @@ -0,0 +1,20 @@ + +Base +---- + +Remember, always import library. + +.. code-block:: python + + import easymacro as app + + +New database +^^^^^^^^^^^^ + +.. code-block:: python + + path = '/home/mau/db.odb' + db = app.doc.connect(path) + app.msgbox(db.type) + diff --git a/doc/source/main/easymacro.rst b/doc/source/main/easymacro.rst index e597ef1..58727fb 100644 --- a/doc/source/main/easymacro.rst +++ b/doc/source/main/easymacro.rst @@ -17,3 +17,4 @@ You can used **easymacro.py** with any extension or directly in your macros. application.rst calc.rst writer.rst + base.rst diff --git a/source/easymacro.py b/source/easymacro.py index 3a8193c..ba144c5 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -4003,7 +4003,8 @@ class LODocs(object): return _get_class_doc(doc) def connect(self, path): - return LOBase(None, {'path': path}) + db = LOBase(None, {'path': path}) + return db def _add_listeners(events, control, name=''): @@ -4731,6 +4732,13 @@ class UnoText(UnoBaseObject): def value(self, value): self.model.Text = value + @property + def echochar(self): + return chr(self.model.EchoChar) + @echochar.setter + def echochar(self, value): + self.model.EchoChar = ord(value[0]) + def validate(self): return @@ -5571,6 +5579,11 @@ class LODialog(object): self.obj.dispose() return value + def set_values(self, data): + for k, v in data.items(): + self._controls[k].value = v + return + class LOSheets(object): @@ -6057,6 +6070,70 @@ class LOWindow(object): return +class LODBServer(object): + DRIVERS = { + 'mysql': 'mysqlc', + 'mariadb': 'mysqlc', + 'postgres': 'postgresql:postgresql', + } + PORTS = { + 'mysql': 3306, + 'mariadb': 3306, + 'postgres': 5432, + } + + def __init__(self): + self._conn = None + self._error = '' + self._type = '' + + def __str__(self): + return f'DB type {self._type}' + + def __enter__(self): + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.disconnet() + + @property + def is_connected(self): + return not bool(self._error) + + @property + def error(self): + return self._error + + def disconnet(self): + if not self._conn is None: + if not self._conn.isClosed(): + self._conn.close() + self._conn.dispose() + + def connect(self, args): + self._error = '' + self._type = args.get('type', 'postgres') + driver = self.DRIVERS[self._type] + server = args.get('server', 'localhost') + port = args.get('port', self.PORTS[self._type]) + dbname = args.get('dbname', '') + user = args['user'] + password = args['password'] + + data = {'user': user, 'password': password} + url = f'sdbc:{driver}://{server}:{port}/{dbname}' + args = dict_to_property(data) + manager = create_instance('com.sun.star.sdbc.DriverManager') + + try: + self._conn = manager.getConnectionWithInfo(url, args) + except Exception as e: + error(e) + self._error = str(e) + + return self + + def create_window(args): return LOWindow(args) @@ -6565,6 +6642,8 @@ def __getattr__(name): return Paths if name == 'docs': return LODocs() + if name == 'db': + return LODBServer() if name == 'sheets': return LOSheets() if name == 'cells':