From 6c8275a7ffcd9d9a7e9c4daac155a45a418ced0a Mon Sep 17 00:00:00 2001 From: fell Date: Sun, 10 Sep 2017 21:49:26 +0200 Subject: [PATCH 1/5] Review of PR #183 4612 translated messages, 25 fuzzy translations, 48 untranslated messages. --- po/de.po | 81 +++++++++++++++++++++++++++++++------------------------- 1 file changed, 45 insertions(+), 36 deletions(-) diff --git a/po/de.po b/po/de.po index e8a618be73..85cf949947 100644 --- a/po/de.po +++ b/po/de.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: GnuCash 2.6.15\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-04 00:02+0200\n" +"POT-Creation-Date: 2017-09-10 20:53+0200\n" "PO-Revision-Date: 2017-09-09 21:33+0200\n" "Last-Translator: Mechtilde \n" "Language-Team: GnuCash-de \n" @@ -7145,7 +7145,7 @@ msgid "" "manual page of strftime by \"man 3 strftime\"." msgstr "" "Wenn das Datumsformat auf Benutzerdefiniert gesetzt ist, kann in dieser " -"Ausdruckals Argument an das strftime-Format übergegeben werden. Es kann eine " +"Ausdruck als Argument an das strftime-Format übergegeben werden. Es kann eine " "beliebige gültige strftime Zeichenkette sein. Für mehr Informationen lesen " "Sie die Ausgabe von »man 3 strftime«." @@ -8322,7 +8322,8 @@ msgid "" msgstr "" "Auf hochauflösenden Bildschirmen können Berichte schwer zu lesen sein.\n" "Diese Option erlaubt das Skalieren der Berichte um den gewählten Faktor.\n" -"Z.B. wird ein Wert von 2 die Berichte mit dem Doppelten ihrer ursprünglichen Größe darstellen." +"Z.B. wird ein Wert von 2 die Berichte mit dem Doppelten ihrer ursprünglichen " +"Größe darstellen." #: ../src/gnome/gschemas/org.gnucash.gschema.xml.in.in.h:113 msgid "PDF export file name format" @@ -13417,7 +13418,7 @@ msgstr "Be_merkung:" msgid "Ta_x related" msgstr "Steuer_relevant" -#. Translators: use the same words here as in +#. Translators: use the same words here as in 'Ta_x Report Options'. #: ../src/gnome-utils/gtkbuilder/dialog-account.glade.h:21 msgid "" "Use Edit->Tax Report Options to set the tax-related flag and assign a tax " @@ -14809,6 +14810,26 @@ msgstr "Nicht vorgemerkt" msgid "Select occurrence date above." msgstr "Wählen Sie oben ein Datum des Auftretens." +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:7 +msgctxt "Daily" +msgid "Every" +msgstr "Alle" + +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:8 +msgctxt "Daily" +msgid "days." +msgstr "Tage." + +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:10 +msgctxt "Weekly" +msgid "Every" +msgstr "Alle" + +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:11 +msgctxt "Weekly" +msgid "weeks." +msgstr "Wochen." + #: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:12 #: ../src/report/standard-reports/daily-reports.scm:355 msgid "Saturday" @@ -14850,6 +14871,16 @@ msgstr "Montag" msgid "Tuesday" msgstr "Dienstag" +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:21 +msgctxt "Semimonthly" +msgid "Every" +msgstr "Alle" + +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:22 +msgctxt "Semimonthly" +msgid "months." +msgstr "Monate." + #: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:23 msgid "First on the:" msgstr "Zuerst am:" @@ -14866,6 +14897,16 @@ msgstr "dann am:" msgid "Semi-Monthly" msgstr "Halbmonatlich" +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:27 +msgctxt "Monthly" +msgid "Every" +msgstr "Alle" + +#: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:28 +msgctxt "Monthly" +msgid "months." +msgstr "Monate." + #: ../src/gnome-utils/gtkbuilder/gnc-frequency.glade.h:29 msgid "On the" msgstr "Am" @@ -26180,38 +26221,6 @@ msgstr "" #~ "Sie müssen eine Devise/Wertpapier auswählen. Wenn Sie eine neue anlegen " #~ "möchten, klicken Sie auf »Neu«." -#~ msgctxt "Daily" -#~ msgid "Every" -#~ msgstr "Alle" - -#~ msgctxt "Daily" -#~ msgid "days." -#~ msgstr "Tage." - -#~ msgctxt "Weekly" -#~ msgid "Every" -#~ msgstr "Alle" - -#~ msgctxt "Weekly" -#~ msgid "weeks." -#~ msgstr "Wochen." - -#~ msgctxt "Semimonthly" -#~ msgid "Every" -#~ msgstr "Alle" - -#~ msgctxt "Semimonthly" -#~ msgid "months." -#~ msgstr "Monate." - -#~ msgctxt "Monthly" -#~ msgid "Every" -#~ msgstr "Alle" - -#~ msgctxt "Monthly" -#~ msgid "months." -#~ msgstr "Monate." - #~ msgid "set true" #~ msgstr "auf wahr setzen" From 240bc32e57098344a979791b38c4517e337a0fb0 Mon Sep 17 00:00:00 2001 From: fell Date: Mon, 11 Sep 2017 02:40:03 +0200 Subject: [PATCH 2/5] Remove build_year from translatable copyright string --- src/core-utils/CMakeLists.txt | 2 ++ src/core-utils/Makefile.am | 1 + src/gnome-utils/gnc-main-window.c | 4 +++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core-utils/CMakeLists.txt b/src/core-utils/CMakeLists.txt index c48f7ee686..b379fe3374 100644 --- a/src/core-utils/CMakeLists.txt +++ b/src/core-utils/CMakeLists.txt @@ -61,11 +61,13 @@ SET (GNC_VERSION_H_IN #define GNUCASH_SCM \"git\" #define GNUCASH_BUILD_DATE \"@GNUCASH_BUILD_DATE@\" +#define GNUCASH_BUILD_YEAR \"@GNUCASH_BUILD_YEAR@\" #include \"gnc-vcs-info.h\" #endif ") STRING(TIMESTAMP GNUCASH_BUILD_DATE "%Y-%m-%d") +STRING(TIMESTAMP GNUCASH_BUILD_DATE "%Y") STRING(CONFIGURE ${GNC_VERSION_H_IN} GNC_VERSION_H_CONTENT) diff --git a/src/core-utils/Makefile.am b/src/core-utils/Makefile.am index 514eb9d6c6..8f2f70bccf 100644 --- a/src/core-utils/Makefile.am +++ b/src/core-utils/Makefile.am @@ -176,6 +176,7 @@ _gnc-version.h: gnc-vcs-info.h Makefile echo "#define GNUCASH_SCM \"$$scm_info\"" >> _gnc-version.h ; \ fi @echo "#define GNUCASH_BUILD_DATE \"`date +%Y-%m-%d`\"" >> _gnc-version.h + @echo "#define GNUCASH_BUILD_YEAR \"`date +%Y`\"" >> _gnc-version.h @echo "#include \"gnc-vcs-info.h\"" >> _gnc-version.h @echo "#endif" >> _gnc-version.h diff --git a/src/gnome-utils/gnc-main-window.c b/src/gnome-utils/gnc-main-window.c index ee37483178..347805a9ff 100644 --- a/src/gnome-utils/gnc-main-window.c +++ b/src/gnome-utils/gnc-main-window.c @@ -4369,7 +4369,8 @@ gnc_main_window_cmd_help_about (GtkAction *action, GncMainWindow *window) { const gchar *fixed_message = _("The GnuCash personal finance manager. " "The GNU way to manage your money!"); - const gchar *copyright = _("© 1997-2017 Contributors"); + gchar *copyright = g_strdup_printf(_("© 1997-%s Contributors"), + GNUCASH_BUILD_YEAR); gchar **authors = get_file_strsplit("AUTHORS"); gchar **documenters = get_file_strsplit("DOCUMENTERS"); gchar *license = get_file("LICENSE"); @@ -4412,6 +4413,7 @@ gnc_main_window_cmd_help_about (GtkAction *action, GncMainWindow *window) NULL); g_free(message); + g_free(copyright); if (license) g_free(license); if (documenters) g_strfreev(documenters); if (authors) g_strfreev(authors); From 2275603eb4cb3725cac79e2955a9c68b0617f318 Mon Sep 17 00:00:00 2001 From: fell Date: Mon, 11 Sep 2017 04:34:02 +0200 Subject: [PATCH 3/5] Fix error in recent commit --- src/core-utils/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core-utils/CMakeLists.txt b/src/core-utils/CMakeLists.txt index b379fe3374..26089f0f41 100644 --- a/src/core-utils/CMakeLists.txt +++ b/src/core-utils/CMakeLists.txt @@ -67,7 +67,7 @@ SET (GNC_VERSION_H_IN ") STRING(TIMESTAMP GNUCASH_BUILD_DATE "%Y-%m-%d") -STRING(TIMESTAMP GNUCASH_BUILD_DATE "%Y") +STRING(TIMESTAMP GNUCASH_BUILD_YEAR "%Y") STRING(CONFIGURE ${GNC_VERSION_H_IN} GNC_VERSION_H_CONTENT) From 65f18589da0f9be5749469ab73895fdf6917e7be Mon Sep 17 00:00:00 2001 From: fell Date: Mon, 11 Sep 2017 04:40:22 +0200 Subject: [PATCH 4/5] Update changed string in de.po --- po/de.po | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/po/de.po b/po/de.po index 85cf949947..a5d6b6fe10 100644 --- a/po/de.po +++ b/po/de.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: GnuCash 2.6.15\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-10 20:53+0200\n" -"PO-Revision-Date: 2017-09-09 21:33+0200\n" +"POT-Creation-Date: 2017-09-11 02:57+0200\n" +"PO-Revision-Date: 2017-09-11 04:33+0200\n" "Last-Translator: Mechtilde \n" "Language-Team: GnuCash-de \n" "Language: de\n" @@ -1205,7 +1205,7 @@ msgstr "GnuCash Entwicklungsversion %s" #. 2nd %s is the scm type (svn/svk/git/bzr); #. 3rd %s is the scm revision number; #. 4th %s is the build date -#: ../src/bin/gnucash-bin.c:452 ../src/gnome-utils/gnc-main-window.c:4385 +#: ../src/bin/gnucash-bin.c:452 ../src/gnome-utils/gnc-main-window.c:4386 #, c-format msgid "" "%s\n" @@ -1222,7 +1222,7 @@ msgstr "GnuCash %s" #. Translators: 1st %s is a fixed message, which is translated independently; #. 2nd %s is the scm (svn/svk/git/bzr) revision number; #. 3rd %s is the build date -#: ../src/bin/gnucash-bin.c:463 ../src/gnome-utils/gnc-main-window.c:4392 +#: ../src/bin/gnucash-bin.c:463 ../src/gnome-utils/gnc-main-window.c:4393 #, c-format msgid "" "%s\n" @@ -7145,9 +7145,9 @@ msgid "" "manual page of strftime by \"man 3 strftime\"." msgstr "" "Wenn das Datumsformat auf Benutzerdefiniert gesetzt ist, kann in dieser " -"Ausdruck als Argument an das strftime-Format übergegeben werden. Es kann eine " -"beliebige gültige strftime Zeichenkette sein. Für mehr Informationen lesen " -"Sie die Ausgabe von »man 3 strftime«." +"Ausdruck als Argument an das strftime-Format übergegeben werden. Es kann " +"eine beliebige gültige strftime Zeichenkette sein. Für mehr Informationen " +"lesen Sie die Ausgabe von »man 3 strftime«." #: ../src/gnome/gschemas/org.gnucash.dialogs.checkprinting.gschema.xml.in.in.h:10 msgid "Units in which the custom coordinates are expressed" @@ -12133,14 +12133,15 @@ msgstr "" "GnuCash: Ihr privater Finanzmanager. Die freie Lösung zur Finanzverwaltung." #: ../src/gnome-utils/gnc-main-window.c:4372 -msgid "© 1997-2017 Contributors" -msgstr "© 1997-2017 Mitwirkende" +#, c-format +msgid "© 1997-%s Contributors" +msgstr "© 1997-%s Mitwirkende" #. Translators: the following string will be shown in Help->About->Credits #. * Enter your name or that of your team and an email contact for feedback. #. * The string can have multiple rows, so you can also add a list of #. * contributors. -#: ../src/gnome-utils/gnc-main-window.c:4409 +#: ../src/gnome-utils/gnc-main-window.c:4410 msgid "translator_credits" msgstr "Christian Stimming et. al." From 6ec9aa362b647f6d24fd3836e3fee7117f6613e7 Mon Sep 17 00:00:00 2001 From: Rob Gowin Date: Mon, 11 Sep 2017 15:44:41 -0500 Subject: [PATCH 5/5] Fix issues with loading and running init.py --- CMakeLists.txt | 14 ++++++++++ src/bin/CMakeLists.txt | 15 ++++++++++- src/optional/python-bindings/CMakeLists.txt | 27 ++++++------------- .../python-bindings/tests/CMakeLists.txt | 4 +-- src/python/CMakeLists.txt | 6 ++++- 5 files changed, 43 insertions(+), 23 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 70d3380a62..94f74c1dd2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -383,6 +383,20 @@ IF (WITH_PYTHON) IF (NOT PYTHONLIBS_FOUND) MESSAGE(SEND_ERROR "Python support enabled, but Python libraries not found.") ENDIF() + + # Determine where to install the python libraries. + EXECUTE_PROCESS( + COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print sysconfig.get_path('platlib', vars = { 'platbase' : '${CMAKE_INSTALL_PREFIX}' } )" + RESULT_VARIABLE PYTHON_SYSCONFIG_RESULT + OUTPUT_VARIABLE PYTHON_SYSCONFIG_OUTPUT + ERROR_VARIABLE PYTHON_SYSCONFIG_ERROR + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + IF (PYTHON_SYSCONFIG_RESULT) + MESSAGE(SEND_ERROR "Could not determine Python site-package directory:\n${PYTHON_SYSCONFIG_ERROR}") + ENDIF() + STRING(REPLACE ${CMAKE_INSTALL_PREFIX} ${CMAKE_BINARY_DIR} PYTHON_SYSCONFIG_BUILD ${PYTHON_SYSCONFIG_OUTPUT}) ENDIF() diff --git a/src/bin/CMakeLists.txt b/src/bin/CMakeLists.txt index 9599994f34..c552e9630a 100644 --- a/src/bin/CMakeLists.txt +++ b/src/bin/CMakeLists.txt @@ -105,7 +105,7 @@ ENDIF() IF (NOT(${DATADIR} STREQUAL "/usr/share") AND NOT(${DATADIR} STREQUAL "/usr/local/share")) FILE(APPEND ${ENV_FILE_OUT} ${XDG_TEXT}) - FILE(APPEND ${ENV_FILE_OUT} "XDG_DATA_DIRS=${DATADIR};{XDG_DATA_DIRS}" "${GNC_SYSTEM_XDG_DATA_DIRS}\n") + FILE(APPEND ${ENV_FILE_OUT} "XDG_DATA_DIRS=${DATADIR};{XDG_DATA_DIRS};" "${GNC_SYSTEM_XDG_DATA_DIRS}\n") ENDIF() FILE(APPEND ${BUILD_ENV_FILE_OUT} "GNC_DBD_DIR=${LIBDBI_DRIVERS_DIR}/dbd") @@ -113,6 +113,19 @@ FILE(APPEND ${BUILD_ENV_FILE_OUT} "GNC_DBD_DIR=${LIBDBI_DRIVERS_DIR}/dbd") FILE(APPEND ${BUILD_ENV_FILE_OUT} ${XDG_TEXT}) FILE(APPEND ${BUILD_ENV_FILE_OUT} "XDG_DATA_DIRS=${DATADIR_BUILD};{XDG_DATA_DIRS};" "${GNC_SYSTEM_XDG_DATA_DIRS}\n") +SET(PYTHON_TEXT " +# Define PYTHONPATH for non default installation path.\n" + ) +IF (NOT(${CMAKE_INSTALL_PREFIX} STREQUAL "/usr") AND NOT(${CMAKE_INSTALL_PREFIX} STREQUAL "/usr/local")) + + FILE(APPEND ${ENV_FILE_OUT} ${PYTHON_TEXT}) + FILE(APPEND ${ENV_FILE_OUT} "PYTHONPATH=${PYTHON_SYSCONFIG_OUTPUT};{PYTHONPATH}") +ENDIF() + +FILE(APPEND ${BUILD_ENV_FILE_OUT} ${PYTHON_TEXT}) +FILE(APPEND ${BUILD_ENV_FILE_OUT} "PYTHONPATH=${PYTHON_SYSCONFIG_BUILD};{PYTHONPATH}") + + FILE(COPY ${BUILD_ENV_FILE_OUT} DESTINATION ${SYSCONFDIR_BUILD}/gnucash FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE diff --git a/src/optional/python-bindings/CMakeLists.txt b/src/optional/python-bindings/CMakeLists.txt index eb1e6e9503..92ea1d8198 100644 --- a/src/optional/python-bindings/CMakeLists.txt +++ b/src/optional/python-bindings/CMakeLists.txt @@ -80,35 +80,24 @@ IF(WITH_PYTHON) ADD_TEST(NAME sqlite3test COMMAND sqlite3test) ADD_DEPENDENCIES(check sqlite3test) - - # Determine where to install the python libraries. - EXECUTE_PROCESS( - COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print sysconfig.get_path('platlib', vars = { 'platbase' : '${CMAKE_INSTALL_PREFIX}' } )" - RESULT_VARIABLE PYTHON_SYSCONFIG_RESULT - OUTPUT_VARIABLE PYTHON_SYSCONFIG_OUTPUT - ERROR_VARIABLE PYTHON_SYSCONFIG_ERROR - OUTPUT_STRIP_TRAILING_WHITESPACE - ERROR_STRIP_TRAILING_WHITESPACE - ) - IF (PYTHON_SYSCONFIG_RESULT) - MESSAGE(SEND_ERROR "Could not determine Python site-package directory:\n${PYTHON_SYSCONFIG_ERROR}") - ENDIF() - INSTALL(TARGETS gnucash_core_c LIBRARY DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash ARCHIVE DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash ) - INSTALL(FILES __init__.py function_class.py gnucash_business.py gnucash_core.py - ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py + INSTALL(FILES ${PYEXEC_FILES} ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py DESTINATION ${PYTHON_SYSCONFIG_OUTPUT}/gnucash ) - FILE(COPY ${PYEXEC_FILES} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/gnucash) + FILE(COPY ${PYEXEC_FILES} DESTINATION ${PYTHON_SYSCONFIG_BUILD}/gnucash) ADD_CUSTOM_TARGET(gnucash-core-c-py ALL - COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py ${CMAKE_CURRENT_BINARY_DIR}/gnucash + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/gnucash_core_c.py ${PYTHON_SYSCONFIG_BUILD}/gnucash DEPENDS ${SWIG_GNUCASH_CORE_C}) + ADD_CUSTOM_TARGET(gnucash-core-c-build ALL + COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/lib/gnucash/_gnucash_core_c${CMAKE_SHARED_LIBRARY_SUFFIX} ${PYTHON_SYSCONFIG_BUILD}/gnucash + DEPENDS gnucash_core_c) + ENDIF() SET(python_bindings_DATA ${PYEXEC_FILES} @@ -118,4 +107,4 @@ SET(python_bindings_DATA ${PYEXEC_FILES} SET_LOCAL_DIST(python_bindings_DIST_local CMakeLists.txt Makefile.am ${python_bindings_DATA}) -SET(python_bindings_DIST ${python_bindings_DIST_local} ${test_python_bindings_DIST} ${example_scripts_DIST} PARENT_SCOPE) \ No newline at end of file +SET(python_bindings_DIST ${python_bindings_DIST_local} ${test_python_bindings_DIST} ${example_scripts_DIST} PARENT_SCOPE) diff --git a/src/optional/python-bindings/tests/CMakeLists.txt b/src/optional/python-bindings/tests/CMakeLists.txt index f900fa169a..78b244dc3c 100644 --- a/src/optional/python-bindings/tests/CMakeLists.txt +++ b/src/optional/python-bindings/tests/CMakeLists.txt @@ -3,7 +3,7 @@ IF (WITH_PYTHON) ADD_TEST(python-bindings ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/runTests.py.in) SET_PROPERTY(TEST python-bindings PROPERTY ENVIRONMENT GNC_BUILDDIR=${CMAKE_BINARY_DIR} - PYTHONPATH=${CMAKE_BINARY_DIR}/src/optional/python-bindings:${CMAKE_BINARY_DIR}/lib/gnucash:${CMAKE_BINARY_DIR}/src/test-core + PYTHONPATH=${PYTHON_SYSCONFIG_BUILD}:${CMAKE_BINARY_DIR}/lib/gnucash:${CMAKE_BINARY_DIR}/src/test-core ) ENDIF() @@ -15,4 +15,4 @@ SET(test_python_bindings_DATA test_split.py test_transaction.py) -SET_DIST_LIST(test_python_bindings_DIST CMakeLists.txt Makefile.am ${test_python_bindings_DATA}) \ No newline at end of file +SET_DIST_LIST(test_python_bindings_DIST CMakeLists.txt Makefile.am ${test_python_bindings_DATA}) diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 6698f3ff37..79d27ba226 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -16,7 +16,11 @@ IF (WITH_PYTHON) RUNTIME DESTINATION bin ) - INSTALL(FILES init.py DESTINATION share/python) + INSTALL(DIRECTORY pycons DESTINATION share/gnucash/python) + INSTALL(FILES init.py DESTINATION share/gnucash/python) + + FILE(COPY init.py DESTINATION ${CMAKE_BINARY_DIR}/share/gnucash/python) + FILE(COPY pycons DESTINATION ${CMAKE_BINARY_DIR}/share/gnucash/python) ENDIF(WITH_PYTHON) SET_LOCAL_DIST(python_DIST_local CMakeLists.txt Makefile.am gncmod-python.c init.py)