Add support for connections for postgres and mariadb

This commit is contained in:
Mauricio Baeza 2021-06-15 21:57:29 -05:00
parent 0c4cce2533
commit 69e2ce2b53
5 changed files with 106 additions and 2 deletions

View File

@ -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

View File

@ -1 +1 @@
0.15.0
0.16.0

20
doc/source/main/base.rst Normal file
View File

@ -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)

View File

@ -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

View File

@ -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':