[Libreoffice-commits] core.git: wizards/source
Jean-Pierre Ledure (via logerrit)
logerrit at kemper.freedesktop.org
Mon May 3 13:46:30 UTC 2021
wizards/source/scriptforge/SF_Array.xba | 4 ++++
wizards/source/scriptforge/SF_Exception.xba | 6 ++++++
wizards/source/scriptforge/SF_PythonHelper.xba | 6 +++---
wizards/source/scriptforge/SF_Root.xba | 6 ++++++
wizards/source/scriptforge/po/ScriptForge.pot | 9 ++++++++-
wizards/source/scriptforge/po/en.po | 9 ++++++++-
wizards/source/scriptforge/python/scriptforge.py | 22 +++++++++++++++-------
7 files changed, 50 insertions(+), 12 deletions(-)
New commits:
commit cec00cd70aa3899244106fcb3958b19c88e6db98
Author: Jean-Pierre Ledure <jp at ledure.be>
AuthorDate: Mon May 3 12:25:38 2021 +0200
Commit: Jean-Pierre Ledure <jp at ledure.be>
CommitDate: Mon May 3 15:45:51 2021 +0200
ScriptForge - (scriptforge.py) Fix dates transfer Basic <-> Python
Strings in CSV file recognized as dates are passed via
their ISO format, not in the default com.sun.star.util.DateTime
format. This required a fix in Basic ImportFromCSVFile().
Errors in user scripts can be announced to users from Python
with the same interface as from Basic: SF_Exception.RaiseFatal().
Error messages become translatable.
Used by SF_Exception.PythonShell(), display of APSO console,
when the APSO extension is not present.
Addition of the PYTHONSHELL error message in the po files.
Review of typos.
Change-Id: I52a19faa3773904bd37505fee780d517436485f2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115032
Tested-by: Jean-Pierre Ledure <jp at ledure.be>
Tested-by: Jenkins
Reviewed-by: Jean-Pierre Ledure <jp at ledure.be>
diff --git a/wizards/source/scriptforge/SF_Array.xba b/wizards/source/scriptforge/SF_Array.xba
index b51bba63adbe..ea1500bdd057 100644
--- a/wizards/source/scriptforge/SF_Array.xba
+++ b/wizards/source/scriptforge/SF_Array.xba
@@ -846,6 +846,7 @@ REM ----------------------------------------------------------------------------
Public Function ImportFromCSVFile(Optional ByRef FileName As Variant _
, Optional ByVal Delimiter As Variant _
, Optional ByVal DateFormat As Variant _
+ , Optional ByVal _IsoDate As Variant _
) As Variant
''' Import the data contained in a comma-separated values (CSV) file
''' The comma may be replaced by any character
@@ -862,6 +863,7 @@ Public Function ImportFromCSVFile(Optional ByRef FileName As Variant _
''' The dash (-) may be replaced by a dot (.), a slash (/) or a space
''' Other date formats will be ignored
''' If "" (default), dates will be considered as strings
+''' _IsoDate: when True, the execution is initiated from Python, do not convert dates to Date variables. Internal use only
''' Returns:
''' A 2D-array with each row corresponding with a single record read in the file
''' and each column corresponding with a field of the record
@@ -898,6 +900,7 @@ Const cstSubArgs = "FileName, [Delimiter="",""], [DateF
Check:
If IsMissing(Delimiter) Or IsEmpty(Delimiter) Then Delimiter = ","
If IsMissing(DateFormat) Or IsEmpty(DateFormat) Then DateFormat = ""
+ If IsMissing(_IsoDate) Or IsEmpty(_IsoDate) Then _IsoDate = False
If SF_Utils._EnterFunction(cstThisSub, cstSubArgs) Then
If Not SF_Utils._ValidateFile(FileName, "FileName") Then GoTo Finally
If Not SF_Utils._Validate(Delimiter, "Delimiter", V_STRING) Then GoTo Finally
@@ -941,6 +944,7 @@ Try:
iPosition = InStr(DateFormat, "MM") : iMonth = CInt(Mid(sItem, iPosition, 2))
iPosition = InStr(DateFormat, "DD") : iDay = CInt(Mid(sItem, iPosition, 2))
vItem = DateSerial(iYear, iMonth, iDay)
+ If _IsoDate Then vItem = SF_Utils._CDateToIso(vItem) ' Called from Python
Else
vItem = sItem
End If
diff --git a/wizards/source/scriptforge/SF_Exception.xba b/wizards/source/scriptforge/SF_Exception.xba
index aae74fe98d42..ddfe56a069c8 100644
--- a/wizards/source/scriptforge/SF_Exception.xba
+++ b/wizards/source/scriptforge/SF_Exception.xba
@@ -122,6 +122,9 @@ Const TEXTFIELDERROR = "TEXTFIELDERROR"
Const DBREADONLYERROR = "DBREADONLYERROR"
Const SQLSYNTAXERROR = "SQLSYNTAXERROR"
+' Python
+Const PYTHONSHELLERROR = "PYTHONSHELLERROR"
+
REM ============================================================= PRIVATE MEMBERS
' User defined errors
@@ -916,6 +919,9 @@ Try:
Case SQLSYNTAXERROR ' SF_Database._ExecuteSql(SQL)
sMessage = sLocation _
& "\n" & "\n" & .GetText("SQLSYNTAX", pvArgs(0))
+ Case PYTHONSHELLERROR ' SF_Exception.PythonShell (Python only)
+ sMessage = sLocation _
+ & "\n" & "\n" & .GetText("PYTHONSHELL")
Case Else
End Select
End With
diff --git a/wizards/source/scriptforge/SF_PythonHelper.xba b/wizards/source/scriptforge/SF_PythonHelper.xba
index b7d8141325b2..52ccc1827e52 100644
--- a/wizards/source/scriptforge/SF_PythonHelper.xba
+++ b/wizards/source/scriptforge/SF_PythonHelper.xba
@@ -693,7 +693,7 @@ Try:
((CallType And vbMethod) + (CallType And cstRetArray)) = vbMethod + cstRetArray) Then
Select Case sServiceName
Case "ScriptForge.Array"
- If Script = "ImportFromCSVFile" Then vReturn = SF_Array.ImportFromCSVFile(vArgs(0), vArgs(1), vArgs(2))
+ If Script = "ImportFromCSVFile" Then vReturn = SF_Array.ImportFromCSVFile(vArgs(0), vArgs(1), vArgs(2), True)
End Select
' Methods in usual modules are called by ExecuteBasicScript() except if they use a ParamArray
@@ -788,12 +788,12 @@ Try:
' Replace dates by ISO notation
If iDims = 1 Then
For i = LBound(vReturn) To UBound(vReturn)
- If VarType(vReturn(i)) = V_DATE Then vReturn(i) = SF_Utils._CDateToIso(vReturn(i))
+ If VarType(vReturn(i)) = V_DATE Then vReturn(i) = CDateToUnoDateTime(vReturn(i))
Next i
ElseIf iDims = 2 Then
For i = LBound(vReturn, 1) To UBound(vReturn, 1)
For j = LBound(vReturn, 2) To UBound(vReturn, 2)
- If VarType(vReturn(i, j)) = V_DATE Then vReturn(i, j) = SF_Utils._CDateToIso(vReturn(i, j))
+ If VarType(vReturn(i, j)) = V_DATE Then vReturn(i, j) = CDateToUnoDateTime(vReturn(i, j))
Next j
Next i
End If
diff --git a/wizards/source/scriptforge/SF_Root.xba b/wizards/source/scriptforge/SF_Root.xba
index 7f07109dc055..39cf315bd3d2 100644
--- a/wizards/source/scriptforge/SF_Root.xba
+++ b/wizards/source/scriptforge/SF_Root.xba
@@ -923,6 +923,12 @@ Try:
, Comment := "SF_Database can't interpret SQL statement\n" _
& "%1: The statement" _
)
+ ' SF_Exception.PythonShell (Python only)
+ .AddText( Context := "PYTHONSHELL" _
+ , MsgId := "The APSO extension could not be located in your LibreOffice installation." _
+ , Comment := "SF_Exception.PythonShell error message" _
+ & "APSO: to leave unchanged" _
+ )
End With
End If
diff --git a/wizards/source/scriptforge/po/ScriptForge.pot b/wizards/source/scriptforge/po/ScriptForge.pot
index 06f0c77c6e1a..012eebf29466 100644
--- a/wizards/source/scriptforge/po/ScriptForge.pot
+++ b/wizards/source/scriptforge/po/ScriptForge.pot
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://bugs.libreoffice.org/enter_bug.cgi?product=LibreOffice&bug_status=UNCONFIRMED&component=UI\n"
-"POT-Creation-Date: 2021-03-04 16:31:25\n"
+"POT-Creation-Date: 2021-05-02 17:38:42\n"
"PO-Revision-Date: YYYY-MM-DD HH:MM:SS\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <EMAIL at ADDRESS>\n"
@@ -880,4 +880,11 @@ msgid ""
"Check its syntax, table and/or field names, ...\n"
"\n"
"SQL Statement : « %1 »"
+msgstr ""
+
+#. SF_Exception.PythonShell error messageAPSO: to leave unchanged
+msgctxt "PYTHONSHELL"
+msgid ""
+"The APSO extension could not be located in your LibreOffice "
+"installation."
msgstr ""
\ No newline at end of file
diff --git a/wizards/source/scriptforge/po/en.po b/wizards/source/scriptforge/po/en.po
index 06f0c77c6e1a..012eebf29466 100644
--- a/wizards/source/scriptforge/po/en.po
+++ b/wizards/source/scriptforge/po/en.po
@@ -14,7 +14,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: https://bugs.libreoffice.org/enter_bug.cgi?product=LibreOffice&bug_status=UNCONFIRMED&component=UI\n"
-"POT-Creation-Date: 2021-03-04 16:31:25\n"
+"POT-Creation-Date: 2021-05-02 17:38:42\n"
"PO-Revision-Date: YYYY-MM-DD HH:MM:SS\n"
"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
"Language-Team: LANGUAGE <EMAIL at ADDRESS>\n"
@@ -880,4 +880,11 @@ msgid ""
"Check its syntax, table and/or field names, ...\n"
"\n"
"SQL Statement : « %1 »"
+msgstr ""
+
+#. SF_Exception.PythonShell error messageAPSO: to leave unchanged
+msgctxt "PYTHONSHELL"
+msgid ""
+"The APSO extension could not be located in your LibreOffice "
+"installation."
msgstr ""
\ No newline at end of file
diff --git a/wizards/source/scriptforge/python/scriptforge.py b/wizards/source/scriptforge/python/scriptforge.py
index 6c65f73d00ca..767cb9ae60ae 100644
--- a/wizards/source/scriptforge/python/scriptforge.py
+++ b/wizards/source/scriptforge/python/scriptforge.py
@@ -851,7 +851,7 @@ class SFScriptForge:
def ImportFromPropertyValues(self, propertyvalues, overwrite = False):
"""
- nserts the contents of an array of PropertyValue objects into the current dictionary.
+ Inserts the contents of an array of PropertyValue objects into the current dictionary.
PropertyValue Names are used as keys in the dictionary, whereas Values contain the corresponding values.
Date-type values are converted to datetime.datetime instances.
:param propertyvalues: a list.tuple containing com.sun.star.beans.PropertyValue objects
@@ -914,14 +914,18 @@ class SFScriptForge:
def DebugPrint(self, *args):
# Arguments are concatenated in a single string similar to what the Python print() function would produce
- param = '\t'.join(list(map(repr, args))).expandtabs(tabsize = 4)
+ # Avoid using repr() on strings to not have backslashes * 4
+ param = '\t'.join(list(map(lambda a: a.strip("'") if isinstance(a, str) else repr(a),
+ args))).expandtabs(tabsize = 4)
return self.ExecMethod(self.vbMethod, 'DebugPrint', param)
@classmethod
def PythonShell(cls, variables = None):
"""
- Open an APSO python shell window - Thanks to its author Hanya
- :param variables: Use PythonShell.(loc = globals()) to push the global dictionary to the shell window
+ Open an APSO python shell window - Thanks to its authors Hanya/Tsutomu Uchino/Hubert Lambert
+ :param variables: Typical use
+ PythonShell.({**globals(), **locals()})
+ to push the global and local dictionaries to the shell window
"""
if variables is None:
variables = locals()
@@ -939,7 +943,8 @@ class SFScriptForge:
kwargs['loc'].setdefault('XSCRIPTCONTEXT', uno)
console(**kwargs)
else:
- raise RuntimeError('The APSO extension could not be located in your LibreOffice installation')
+ # The APSO extension could not be located in your LibreOffice installation
+ cls._RaiseFatal('SF_Exception.PythonShell', 'variables=None', 'PYTHONSHELLERROR')
@classmethod
def RaiseFatal(cls, errorcode, *args):
@@ -949,7 +954,9 @@ class SFScriptForge:
For INTERNAL USE only
"""
# Direct call because RaiseFatal forces an execution stop in Basic
- return cls.SIMPLEEXEC('SF_Exception.RaiseFatal', errorcode, *args)
+ if len(args) == 0:
+ args = (None,)
+ return cls.SIMPLEEXEC('@SF_Exception.RaiseFatal', (errorcode, *args)) # With ParamArray
@classmethod
def _RaiseFatal(cls, sub, subargs, errorcode, *args):
@@ -1397,6 +1404,7 @@ class SFScriptForge:
@property
def ActiveWindow(self):
return self.ExecMethod(self.vbMethod, 'ActiveWindow')
+ activeWindow, activewindow = ActiveWindow, ActiveWindow
def Activate(self, windowname = ''):
return self.ExecMethod(self.vbMethod, 'Activate', windowname)
@@ -1452,7 +1460,7 @@ class SFDatabases:
pass
# #########################################################################
- # SF_Document CLASS
+ # SF_Database CLASS
# #########################################################################
class SF_Database(SFServices):
"""
More information about the Libreoffice-commits
mailing list