mysqlengine 0.1.11.6__cp311-cp311-macosx_10_9_universal2.whl → 0.1.11.7__cp311-cp311-macosx_10_9_universal2.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of mysqlengine might be problematic. Click here for more details.

mysqlengine/engine.c CHANGED
@@ -1769,7 +1769,7 @@ struct __pyx_obj_11mysqlengine_10connection_Server {
1769
1769
  };
1770
1770
 
1771
1771
 
1772
- /* "mysqlengine/engine.py":26
1772
+ /* "mysqlengine/engine.py":27
1773
1773
  * # Engine ========================================================================================
1774
1774
  * @cython.cclass
1775
1775
  * class Engine: # <<<<<<<<<<<<<<
@@ -1786,7 +1786,7 @@ struct __pyx_obj_11mysqlengine_6engine_Engine {
1786
1786
  };
1787
1787
 
1788
1788
 
1789
- /* "mysqlengine/engine.py":115
1789
+ /* "mysqlengine/engine.py":116
1790
1790
  *
1791
1791
  * # Access -------------------------------------------------------------------------------------
1792
1792
  * async def access(self, db: str, **init_args: Any) -> Database: # <<<<<<<<<<<<<<
@@ -1805,7 +1805,7 @@ struct __pyx_obj_11mysqlengine_6engine___pyx_scope_struct__access {
1805
1805
  };
1806
1806
 
1807
1807
 
1808
- /* "mysqlengine/engine.py":207
1808
+ /* "mysqlengine/engine.py":208
1809
1809
  *
1810
1810
  * # Disconnect ---------------------------------------------------------------------------------
1811
1811
  * async def disconnect(self, countdown: Union[int, None] = None) -> None: # <<<<<<<<<<<<<<
@@ -1987,7 +1987,7 @@ struct __pyx_vtabstruct_11mysqlengine_10connection_Server {
1987
1987
  static struct __pyx_vtabstruct_11mysqlengine_10connection_Server *__pyx_vtabptr_11mysqlengine_10connection_Server;
1988
1988
 
1989
1989
 
1990
- /* "mysqlengine/engine.py":26
1990
+ /* "mysqlengine/engine.py":27
1991
1991
  * # Engine ========================================================================================
1992
1992
  * @cython.cclass
1993
1993
  * class Engine: # <<<<<<<<<<<<<<
@@ -2541,6 +2541,11 @@ static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject
2541
2541
  /* pep479.proto */
2542
2542
  static void __Pyx_Generator_Replace_StopIteration(int in_async_gen);
2543
2543
 
2544
+ /* WriteUnraisableException.proto */
2545
+ static void __Pyx_WriteUnraisable(const char *name, int clineno,
2546
+ int lineno, const char *filename,
2547
+ int full_traceback, int nogil);
2548
+
2544
2549
  /* KeywordStringCheck.proto */
2545
2550
  static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed);
2546
2551
 
@@ -2927,6 +2932,7 @@ static const char __pyx_k_test[] = "__test__";
2927
2932
  static const char __pyx_k_Union[] = "Union";
2928
2933
  static const char __pyx_k_await[] = "__await__";
2929
2934
  static const char __pyx_k_close[] = "close";
2935
+ static const char __pyx_k_error[] = "error";
2930
2936
  static const char __pyx_k_state[] = "state";
2931
2937
  static const char __pyx_k_throw[] = "throw";
2932
2938
  static const char __pyx_k_utils[] = "utils";
@@ -2940,6 +2946,7 @@ static const char __pyx_k_enable[] = "enable";
2940
2946
  static const char __pyx_k_errors[] = "errors";
2941
2947
  static const char __pyx_k_format[] = "format";
2942
2948
  static const char __pyx_k_import[] = "__import__";
2949
+ static const char __pyx_k_logger[] = "logger";
2943
2950
  static const char __pyx_k_pickle[] = "pickle";
2944
2951
  static const char __pyx_k_reduce[] = "__reduce__";
2945
2952
  static const char __pyx_k_return[] = "return";
@@ -2969,11 +2976,13 @@ static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
2969
2976
  static const char __pyx_k_stringsource[] = "<stringsource>";
2970
2977
  static const char __pyx_k_use_setstate[] = "use_setstate";
2971
2978
  static const char __pyx_k_Engine_access[] = "Engine.access";
2979
+ static const char __pyx_k_encure_closed[] = "_encure_closed";
2972
2980
  static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
2973
2981
  static const char __pyx_k_Union_int_None[] = "Union[int, None]";
2974
2982
  static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
2975
2983
  static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
2976
2984
  static const char __pyx_k_MysqlEngineError[] = "MysqlEngineError";
2985
+ static const char __pyx_k_mysqlengine_logs[] = "mysqlengine.logs";
2977
2986
  static const char __pyx_k_Engine_disconnect[] = "Engine.disconnect";
2978
2987
  static const char __pyx_k_Engine_databases_s[] = "<Engine (databases=%s)>";
2979
2988
  static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
@@ -2983,9 +2992,9 @@ static const char __pyx_k_EngineDatabaseError[] = "EngineDatabaseError";
2983
2992
  static const char __pyx_k_pyx_unpickle_Engine[] = "__pyx_unpickle_Engine";
2984
2993
  static const char __pyx_k_mysqlengine_database[] = "mysqlengine.database";
2985
2994
  static const char __pyx_k_Engine___reduce_cython[] = "Engine.__reduce_cython__";
2986
- static const char __pyx_k_Engine_access_line_115[] = "Engine.access (line 115)";
2995
+ static const char __pyx_k_Engine_access_line_116[] = "Engine.access (line 116)";
2987
2996
  static const char __pyx_k_mysqlengine_connection[] = "mysqlengine.connection";
2988
- static const char __pyx_k_Engine___init___line_36[] = "Engine.__init__ (line 36)";
2997
+ static const char __pyx_k_Engine___init___line_37[] = "Engine.__init__ (line 37)";
2989
2998
  static const char __pyx_k_Engine___setstate_cython[] = "Engine.__setstate_cython__";
2990
2999
  static const char __pyx_k_src_mysqlengine_engine_py[] = "src/mysqlengine/engine.py";
2991
3000
  static const char __pyx_k_EngineDatabaseAccessKeyError[] = "EngineDatabaseAccessKeyError";
@@ -2995,6 +3004,7 @@ static const char __pyx_k_Engine_Failed_to_instantiate_da[] = "-> <Engine> Faile
2995
3004
  static const char __pyx_k_Engine_The_database_access_name[] = "<Engine> The database access name '{}' does not belong to this Engine.\nAvailable access names: {}.";
2996
3005
  static const char __pyx_k_Engine_The_databases_argument_c[] = "<Engine> The 'databases' argument cannot be empty.";
2997
3006
  static const char __pyx_k_Engine_The_value_of_the_databas[] = "<Engine> The value of the 'databases' dictionary must be a subclass of `<Database>`, instead of: {} {}.";
3007
+ static const char __pyx_k_s_is_not_closed_properly_Please[] = "%s is not closed properly. Please call `disconnect()` to gracefully shutdown the Engine.";
2998
3008
  static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0x55f7bbc, 0x206eea4, 0x0a13b33) = (_databases, _databases_cls, _length, _server))";
2999
3009
  static const char __pyx_k_The_proxy_for_accessing_Database[] = "The proxy for accessing Databases hosted on a Server.\n\n :param server: `<Server>` The server that hosts the databases.\n :param databases [keyword arguments]: `<type[Database]>` The the databases of the server.\n * Key: `<str>` Access name of the Database, used in the `access()`\n method to access & instantiate the Database.\n * Value: Subclass of `<Database>` Represents a specific database\n on the Server (NOT an instance). `<Database>` subclass' `__init__`\n method must accept 'server' as an argument.\n\n For more information about accessing & instantiating databases,\n please refer to the Example section below.\n\n ### Example\n >>> from mysqlengine import Server, Engine, Database\n\n >>> # Server\n server = Server(host=\"localhost\", user=\"root\", password=\"password\")\n\n >>> # MyDatabase1 (only takes 'server' as an argument)\n class MyDatabase1(Database):\n def __init__(self, server: Server):\n super().__init__(server, name=\"mydb1\")\n ...\n\n >>> # MyDatabase2 (takes 'server' and 'country' as arguments)\n class MyDatabase2(Database):\n def __init__(server: Server, country: str):\n name = \"mydb2_\" + country\n super().__init__(server, name=name)\n\n >>> # Engine\n engine = Engine(server, mydb1=MyDatabase1, mydb2=MyDatabase2)\n\n >>> # Access MyDatabase1\n db1 = await engine.access(\"mydb1\")\n\n >>> # Access MyDatabase2\n db2_us = await engine.access(\"mydb2\", country=\"us\")\n db2_ca = await engine.access(\"mydb2\", country=\"ca\")\n ";
3000
3010
  static const char __pyx_k_Engine_Failed_to_instantiate_da_2[] = "<Engine> Failed to instantiate database {}.\nInitiate arguments: {}.\nError: {}";
@@ -3101,11 +3111,11 @@ typedef struct {
3101
3111
  PyObject *__pyx_kp_u_Engine_The_database_access_name;
3102
3112
  PyObject *__pyx_kp_u_Engine_The_databases_argument_c;
3103
3113
  PyObject *__pyx_kp_u_Engine_The_value_of_the_databas;
3104
- PyObject *__pyx_kp_u_Engine___init___line_36;
3114
+ PyObject *__pyx_kp_u_Engine___init___line_37;
3105
3115
  PyObject *__pyx_n_s_Engine___reduce_cython;
3106
3116
  PyObject *__pyx_n_s_Engine___setstate_cython;
3107
3117
  PyObject *__pyx_n_s_Engine_access;
3108
- PyObject *__pyx_kp_u_Engine_access_line_115;
3118
+ PyObject *__pyx_kp_u_Engine_access_line_116;
3109
3119
  PyObject *__pyx_kp_u_Engine_databases_s;
3110
3120
  PyObject *__pyx_n_s_Engine_disconnect;
3111
3121
  PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
@@ -3137,7 +3147,9 @@ typedef struct {
3137
3147
  PyObject *__pyx_kp_u_disable;
3138
3148
  PyObject *__pyx_n_s_disconnect;
3139
3149
  PyObject *__pyx_kp_u_enable;
3150
+ PyObject *__pyx_n_s_encure_closed;
3140
3151
  PyObject *__pyx_n_s_err;
3152
+ PyObject *__pyx_n_s_error;
3141
3153
  PyObject *__pyx_n_s_errors;
3142
3154
  PyObject *__pyx_n_s_format;
3143
3155
  PyObject *__pyx_kp_u_gc;
@@ -3147,11 +3159,13 @@ typedef struct {
3147
3159
  PyObject *__pyx_n_s_initiate;
3148
3160
  PyObject *__pyx_n_s_is_coroutine;
3149
3161
  PyObject *__pyx_kp_u_isenabled;
3162
+ PyObject *__pyx_n_s_logger;
3150
3163
  PyObject *__pyx_n_s_main;
3151
3164
  PyObject *__pyx_n_s_mysqlengine;
3152
3165
  PyObject *__pyx_n_s_mysqlengine_connection;
3153
3166
  PyObject *__pyx_n_s_mysqlengine_database;
3154
3167
  PyObject *__pyx_n_s_mysqlengine_engine;
3168
+ PyObject *__pyx_n_s_mysqlengine_logs;
3155
3169
  PyObject *__pyx_n_s_name;
3156
3170
  PyObject *__pyx_n_s_new;
3157
3171
  PyObject *__pyx_n_s_pickle;
@@ -3166,6 +3180,7 @@ typedef struct {
3166
3180
  PyObject *__pyx_n_s_reduce_cython;
3167
3181
  PyObject *__pyx_n_s_reduce_ex;
3168
3182
  PyObject *__pyx_n_s_return;
3183
+ PyObject *__pyx_kp_u_s_is_not_closed_properly_Please;
3169
3184
  PyObject *__pyx_n_s_self;
3170
3185
  PyObject *__pyx_n_s_send;
3171
3186
  PyObject *__pyx_n_s_server;
@@ -3269,11 +3284,11 @@ static int __pyx_m_clear(PyObject *m) {
3269
3284
  Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_The_database_access_name);
3270
3285
  Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_The_databases_argument_c);
3271
3286
  Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_The_value_of_the_databas);
3272
- Py_CLEAR(clear_module_state->__pyx_kp_u_Engine___init___line_36);
3287
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Engine___init___line_37);
3273
3288
  Py_CLEAR(clear_module_state->__pyx_n_s_Engine___reduce_cython);
3274
3289
  Py_CLEAR(clear_module_state->__pyx_n_s_Engine___setstate_cython);
3275
3290
  Py_CLEAR(clear_module_state->__pyx_n_s_Engine_access);
3276
- Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_access_line_115);
3291
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_access_line_116);
3277
3292
  Py_CLEAR(clear_module_state->__pyx_kp_u_Engine_databases_s);
3278
3293
  Py_CLEAR(clear_module_state->__pyx_n_s_Engine_disconnect);
3279
3294
  Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
@@ -3305,7 +3320,9 @@ static int __pyx_m_clear(PyObject *m) {
3305
3320
  Py_CLEAR(clear_module_state->__pyx_kp_u_disable);
3306
3321
  Py_CLEAR(clear_module_state->__pyx_n_s_disconnect);
3307
3322
  Py_CLEAR(clear_module_state->__pyx_kp_u_enable);
3323
+ Py_CLEAR(clear_module_state->__pyx_n_s_encure_closed);
3308
3324
  Py_CLEAR(clear_module_state->__pyx_n_s_err);
3325
+ Py_CLEAR(clear_module_state->__pyx_n_s_error);
3309
3326
  Py_CLEAR(clear_module_state->__pyx_n_s_errors);
3310
3327
  Py_CLEAR(clear_module_state->__pyx_n_s_format);
3311
3328
  Py_CLEAR(clear_module_state->__pyx_kp_u_gc);
@@ -3315,11 +3332,13 @@ static int __pyx_m_clear(PyObject *m) {
3315
3332
  Py_CLEAR(clear_module_state->__pyx_n_s_initiate);
3316
3333
  Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine);
3317
3334
  Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled);
3335
+ Py_CLEAR(clear_module_state->__pyx_n_s_logger);
3318
3336
  Py_CLEAR(clear_module_state->__pyx_n_s_main);
3319
3337
  Py_CLEAR(clear_module_state->__pyx_n_s_mysqlengine);
3320
3338
  Py_CLEAR(clear_module_state->__pyx_n_s_mysqlengine_connection);
3321
3339
  Py_CLEAR(clear_module_state->__pyx_n_s_mysqlengine_database);
3322
3340
  Py_CLEAR(clear_module_state->__pyx_n_s_mysqlengine_engine);
3341
+ Py_CLEAR(clear_module_state->__pyx_n_s_mysqlengine_logs);
3323
3342
  Py_CLEAR(clear_module_state->__pyx_n_s_name);
3324
3343
  Py_CLEAR(clear_module_state->__pyx_n_s_new);
3325
3344
  Py_CLEAR(clear_module_state->__pyx_n_s_pickle);
@@ -3334,6 +3353,7 @@ static int __pyx_m_clear(PyObject *m) {
3334
3353
  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython);
3335
3354
  Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex);
3336
3355
  Py_CLEAR(clear_module_state->__pyx_n_s_return);
3356
+ Py_CLEAR(clear_module_state->__pyx_kp_u_s_is_not_closed_properly_Please);
3337
3357
  Py_CLEAR(clear_module_state->__pyx_n_s_self);
3338
3358
  Py_CLEAR(clear_module_state->__pyx_n_s_send);
3339
3359
  Py_CLEAR(clear_module_state->__pyx_n_s_server);
@@ -3415,11 +3435,11 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3415
3435
  Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_The_database_access_name);
3416
3436
  Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_The_databases_argument_c);
3417
3437
  Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_The_value_of_the_databas);
3418
- Py_VISIT(traverse_module_state->__pyx_kp_u_Engine___init___line_36);
3438
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Engine___init___line_37);
3419
3439
  Py_VISIT(traverse_module_state->__pyx_n_s_Engine___reduce_cython);
3420
3440
  Py_VISIT(traverse_module_state->__pyx_n_s_Engine___setstate_cython);
3421
3441
  Py_VISIT(traverse_module_state->__pyx_n_s_Engine_access);
3422
- Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_access_line_115);
3442
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_access_line_116);
3423
3443
  Py_VISIT(traverse_module_state->__pyx_kp_u_Engine_databases_s);
3424
3444
  Py_VISIT(traverse_module_state->__pyx_n_s_Engine_disconnect);
3425
3445
  Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
@@ -3451,7 +3471,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3451
3471
  Py_VISIT(traverse_module_state->__pyx_kp_u_disable);
3452
3472
  Py_VISIT(traverse_module_state->__pyx_n_s_disconnect);
3453
3473
  Py_VISIT(traverse_module_state->__pyx_kp_u_enable);
3474
+ Py_VISIT(traverse_module_state->__pyx_n_s_encure_closed);
3454
3475
  Py_VISIT(traverse_module_state->__pyx_n_s_err);
3476
+ Py_VISIT(traverse_module_state->__pyx_n_s_error);
3455
3477
  Py_VISIT(traverse_module_state->__pyx_n_s_errors);
3456
3478
  Py_VISIT(traverse_module_state->__pyx_n_s_format);
3457
3479
  Py_VISIT(traverse_module_state->__pyx_kp_u_gc);
@@ -3461,11 +3483,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3461
3483
  Py_VISIT(traverse_module_state->__pyx_n_s_initiate);
3462
3484
  Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine);
3463
3485
  Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled);
3486
+ Py_VISIT(traverse_module_state->__pyx_n_s_logger);
3464
3487
  Py_VISIT(traverse_module_state->__pyx_n_s_main);
3465
3488
  Py_VISIT(traverse_module_state->__pyx_n_s_mysqlengine);
3466
3489
  Py_VISIT(traverse_module_state->__pyx_n_s_mysqlengine_connection);
3467
3490
  Py_VISIT(traverse_module_state->__pyx_n_s_mysqlengine_database);
3468
3491
  Py_VISIT(traverse_module_state->__pyx_n_s_mysqlengine_engine);
3492
+ Py_VISIT(traverse_module_state->__pyx_n_s_mysqlengine_logs);
3469
3493
  Py_VISIT(traverse_module_state->__pyx_n_s_name);
3470
3494
  Py_VISIT(traverse_module_state->__pyx_n_s_new);
3471
3495
  Py_VISIT(traverse_module_state->__pyx_n_s_pickle);
@@ -3480,6 +3504,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3480
3504
  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython);
3481
3505
  Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex);
3482
3506
  Py_VISIT(traverse_module_state->__pyx_n_s_return);
3507
+ Py_VISIT(traverse_module_state->__pyx_kp_u_s_is_not_closed_properly_Please);
3483
3508
  Py_VISIT(traverse_module_state->__pyx_n_s_self);
3484
3509
  Py_VISIT(traverse_module_state->__pyx_n_s_send);
3485
3510
  Py_VISIT(traverse_module_state->__pyx_n_s_server);
@@ -3599,11 +3624,11 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3599
3624
  #define __pyx_kp_u_Engine_The_database_access_name __pyx_mstate_global->__pyx_kp_u_Engine_The_database_access_name
3600
3625
  #define __pyx_kp_u_Engine_The_databases_argument_c __pyx_mstate_global->__pyx_kp_u_Engine_The_databases_argument_c
3601
3626
  #define __pyx_kp_u_Engine_The_value_of_the_databas __pyx_mstate_global->__pyx_kp_u_Engine_The_value_of_the_databas
3602
- #define __pyx_kp_u_Engine___init___line_36 __pyx_mstate_global->__pyx_kp_u_Engine___init___line_36
3627
+ #define __pyx_kp_u_Engine___init___line_37 __pyx_mstate_global->__pyx_kp_u_Engine___init___line_37
3603
3628
  #define __pyx_n_s_Engine___reduce_cython __pyx_mstate_global->__pyx_n_s_Engine___reduce_cython
3604
3629
  #define __pyx_n_s_Engine___setstate_cython __pyx_mstate_global->__pyx_n_s_Engine___setstate_cython
3605
3630
  #define __pyx_n_s_Engine_access __pyx_mstate_global->__pyx_n_s_Engine_access
3606
- #define __pyx_kp_u_Engine_access_line_115 __pyx_mstate_global->__pyx_kp_u_Engine_access_line_115
3631
+ #define __pyx_kp_u_Engine_access_line_116 __pyx_mstate_global->__pyx_kp_u_Engine_access_line_116
3607
3632
  #define __pyx_kp_u_Engine_databases_s __pyx_mstate_global->__pyx_kp_u_Engine_databases_s
3608
3633
  #define __pyx_n_s_Engine_disconnect __pyx_mstate_global->__pyx_n_s_Engine_disconnect
3609
3634
  #define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0
@@ -3635,7 +3660,9 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3635
3660
  #define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable
3636
3661
  #define __pyx_n_s_disconnect __pyx_mstate_global->__pyx_n_s_disconnect
3637
3662
  #define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable
3663
+ #define __pyx_n_s_encure_closed __pyx_mstate_global->__pyx_n_s_encure_closed
3638
3664
  #define __pyx_n_s_err __pyx_mstate_global->__pyx_n_s_err
3665
+ #define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error
3639
3666
  #define __pyx_n_s_errors __pyx_mstate_global->__pyx_n_s_errors
3640
3667
  #define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format
3641
3668
  #define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc
@@ -3645,11 +3672,13 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3645
3672
  #define __pyx_n_s_initiate __pyx_mstate_global->__pyx_n_s_initiate
3646
3673
  #define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine
3647
3674
  #define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled
3675
+ #define __pyx_n_s_logger __pyx_mstate_global->__pyx_n_s_logger
3648
3676
  #define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main
3649
3677
  #define __pyx_n_s_mysqlengine __pyx_mstate_global->__pyx_n_s_mysqlengine
3650
3678
  #define __pyx_n_s_mysqlengine_connection __pyx_mstate_global->__pyx_n_s_mysqlengine_connection
3651
3679
  #define __pyx_n_s_mysqlengine_database __pyx_mstate_global->__pyx_n_s_mysqlengine_database
3652
3680
  #define __pyx_n_s_mysqlengine_engine __pyx_mstate_global->__pyx_n_s_mysqlengine_engine
3681
+ #define __pyx_n_s_mysqlengine_logs __pyx_mstate_global->__pyx_n_s_mysqlengine_logs
3653
3682
  #define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name
3654
3683
  #define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new
3655
3684
  #define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle
@@ -3664,6 +3693,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3664
3693
  #define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython
3665
3694
  #define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex
3666
3695
  #define __pyx_n_s_return __pyx_mstate_global->__pyx_n_s_return
3696
+ #define __pyx_kp_u_s_is_not_closed_properly_Please __pyx_mstate_global->__pyx_kp_u_s_is_not_closed_properly_Please
3667
3697
  #define __pyx_n_s_self __pyx_mstate_global->__pyx_n_s_self
3668
3698
  #define __pyx_n_s_send __pyx_mstate_global->__pyx_n_s_send
3669
3699
  #define __pyx_n_s_server __pyx_mstate_global->__pyx_n_s_server
@@ -3697,7 +3727,7 @@ static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
3697
3727
  #define __pyx_codeobj__14 __pyx_mstate_global->__pyx_codeobj__14
3698
3728
  /* #### Code section: module_code ### */
3699
3729
 
3700
- /* "mysqlengine/engine.py":36
3730
+ /* "mysqlengine/engine.py":37
3701
3731
  * _length: cython.int
3702
3732
  *
3703
3733
  * def __init__( # <<<<<<<<<<<<<<
@@ -3748,12 +3778,12 @@ static int __pyx_pw_11mysqlengine_6engine_6Engine_1__init__(PyObject *__pyx_v_se
3748
3778
  (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
3749
3779
  kw_args--;
3750
3780
  }
3751
- else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 36, __pyx_L3_error)
3781
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 37, __pyx_L3_error)
3752
3782
  else goto __pyx_L5_argtuple_error;
3753
3783
  }
3754
3784
  if (unlikely(kw_args > 0)) {
3755
3785
  const Py_ssize_t kwd_pos_args = __pyx_nargs;
3756
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_databases, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 36, __pyx_L3_error)
3786
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_databases, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(0, 37, __pyx_L3_error)
3757
3787
  }
3758
3788
  } else if (unlikely(__pyx_nargs != 1)) {
3759
3789
  goto __pyx_L5_argtuple_error;
@@ -3764,7 +3794,7 @@ static int __pyx_pw_11mysqlengine_6engine_6Engine_1__init__(PyObject *__pyx_v_se
3764
3794
  }
3765
3795
  goto __pyx_L6_skip;
3766
3796
  __pyx_L5_argtuple_error:;
3767
- __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 36, __pyx_L3_error)
3797
+ __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 37, __pyx_L3_error)
3768
3798
  __pyx_L6_skip:;
3769
3799
  goto __pyx_L4_argument_unpacking_done;
3770
3800
  __pyx_L3_error:;
@@ -3779,7 +3809,7 @@ static int __pyx_pw_11mysqlengine_6engine_6Engine_1__init__(PyObject *__pyx_v_se
3779
3809
  __Pyx_RefNannyFinishContext();
3780
3810
  return -1;
3781
3811
  __pyx_L4_argument_unpacking_done:;
3782
- if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_server), __pyx_ptype_11mysqlengine_10connection_Server, 0, "server", 0))) __PYX_ERR(0, 38, __pyx_L1_error)
3812
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_server), __pyx_ptype_11mysqlengine_10connection_Server, 0, "server", 0))) __PYX_ERR(0, 39, __pyx_L1_error)
3783
3813
  __pyx_r = __pyx_pf_11mysqlengine_6engine_6Engine___init__(((struct __pyx_obj_11mysqlengine_6engine_Engine *)__pyx_v_self), __pyx_v_server, __pyx_v_databases);
3784
3814
 
3785
3815
  /* function exit code */
@@ -3807,7 +3837,7 @@ static int __pyx_pf_11mysqlengine_6engine_6Engine___init__(struct __pyx_obj_11my
3807
3837
  int __pyx_clineno = 0;
3808
3838
  __Pyx_RefNannySetupContext("__init__", 1);
3809
3839
 
3810
- /* "mysqlengine/engine.py":83
3840
+ /* "mysqlengine/engine.py":84
3811
3841
  * """
3812
3842
  * # Server
3813
3843
  * self._server = server # <<<<<<<<<<<<<<
@@ -3820,14 +3850,14 @@ static int __pyx_pf_11mysqlengine_6engine_6Engine___init__(struct __pyx_obj_11my
3820
3850
  __Pyx_DECREF((PyObject *)__pyx_v_self->_server);
3821
3851
  __pyx_v_self->_server = __pyx_v_server;
3822
3852
 
3823
- /* "mysqlengine/engine.py":84
3853
+ /* "mysqlengine/engine.py":85
3824
3854
  * # Server
3825
3855
  * self._server = server
3826
3856
  * self._databases = {} # <<<<<<<<<<<<<<
3827
3857
  * self._validate_databases(databases)
3828
3858
  *
3829
3859
  */
3830
- __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 84, __pyx_L1_error)
3860
+ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
3831
3861
  __Pyx_GOTREF(__pyx_t_1);
3832
3862
  __Pyx_GIVEREF(__pyx_t_1);
3833
3863
  __Pyx_GOTREF(__pyx_v_self->_databases);
@@ -3835,18 +3865,18 @@ static int __pyx_pf_11mysqlengine_6engine_6Engine___init__(struct __pyx_obj_11my
3835
3865
  __pyx_v_self->_databases = ((PyObject*)__pyx_t_1);
3836
3866
  __pyx_t_1 = 0;
3837
3867
 
3838
- /* "mysqlengine/engine.py":85
3868
+ /* "mysqlengine/engine.py":86
3839
3869
  * self._server = server
3840
3870
  * self._databases = {}
3841
3871
  * self._validate_databases(databases) # <<<<<<<<<<<<<<
3842
3872
  *
3843
3873
  * # Properties ---------------------------------------------------------------------------------
3844
3874
  */
3845
- __pyx_t_1 = ((struct __pyx_vtabstruct_11mysqlengine_6engine_Engine *)__pyx_v_self->__pyx_vtab)->_validate_databases(__pyx_v_self, __pyx_v_databases); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
3875
+ __pyx_t_1 = ((struct __pyx_vtabstruct_11mysqlengine_6engine_Engine *)__pyx_v_self->__pyx_vtab)->_validate_databases(__pyx_v_self, __pyx_v_databases); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 86, __pyx_L1_error)
3846
3876
  __Pyx_GOTREF(__pyx_t_1);
3847
3877
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
3848
3878
 
3849
- /* "mysqlengine/engine.py":36
3879
+ /* "mysqlengine/engine.py":37
3850
3880
  * _length: cython.int
3851
3881
  *
3852
3882
  * def __init__( # <<<<<<<<<<<<<<
@@ -3866,7 +3896,7 @@ static int __pyx_pf_11mysqlengine_6engine_6Engine___init__(struct __pyx_obj_11my
3866
3896
  return __pyx_r;
3867
3897
  }
3868
3898
 
3869
- /* "mysqlengine/engine.py":88
3899
+ /* "mysqlengine/engine.py":89
3870
3900
  *
3871
3901
  * # Properties ---------------------------------------------------------------------------------
3872
3902
  * @property # <<<<<<<<<<<<<<
@@ -3894,7 +3924,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_6server___get__(struct _
3894
3924
  __Pyx_RefNannyDeclarations
3895
3925
  __Pyx_RefNannySetupContext("__get__", 1);
3896
3926
 
3897
- /* "mysqlengine/engine.py":91
3927
+ /* "mysqlengine/engine.py":92
3898
3928
  * def server(self) -> Server:
3899
3929
  * "The underlying server of the engine `<Server>`"
3900
3930
  * return self._server # <<<<<<<<<<<<<<
@@ -3906,7 +3936,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_6server___get__(struct _
3906
3936
  __pyx_r = ((PyObject *)__pyx_v_self->_server);
3907
3937
  goto __pyx_L0;
3908
3938
 
3909
- /* "mysqlengine/engine.py":88
3939
+ /* "mysqlengine/engine.py":89
3910
3940
  *
3911
3941
  * # Properties ---------------------------------------------------------------------------------
3912
3942
  * @property # <<<<<<<<<<<<<<
@@ -3921,7 +3951,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_6server___get__(struct _
3921
3951
  return __pyx_r;
3922
3952
  }
3923
3953
 
3924
- /* "mysqlengine/engine.py":94
3954
+ /* "mysqlengine/engine.py":95
3925
3955
  *
3926
3956
  * # Validation ---------------------------------------------------------------------------------
3927
3957
  * @cython.cfunc # <<<<<<<<<<<<<<
@@ -3950,27 +3980,27 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
3950
3980
  int __pyx_clineno = 0;
3951
3981
  __Pyx_RefNannySetupContext("_validate_databases", 1);
3952
3982
 
3953
- /* "mysqlengine/engine.py":98
3983
+ /* "mysqlengine/engine.py":99
3954
3984
  * def _validate_databases(self, databases: dict):
3955
3985
  * "(cfunc) Validate the 'databases' argument."
3956
3986
  * if not databases: # <<<<<<<<<<<<<<
3957
3987
  * raise errors.EngineDatabaseError(
3958
3988
  * "<Engine> The 'databases' argument cannot be empty."
3959
3989
  */
3960
- __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_databases); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 98, __pyx_L1_error)
3990
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_databases); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 99, __pyx_L1_error)
3961
3991
  __pyx_t_2 = (!__pyx_t_1);
3962
3992
  if (unlikely(__pyx_t_2)) {
3963
3993
 
3964
- /* "mysqlengine/engine.py":99
3994
+ /* "mysqlengine/engine.py":100
3965
3995
  * "(cfunc) Validate the 'databases' argument."
3966
3996
  * if not databases:
3967
3997
  * raise errors.EngineDatabaseError( # <<<<<<<<<<<<<<
3968
3998
  * "<Engine> The 'databases' argument cannot be empty."
3969
3999
  * )
3970
4000
  */
3971
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 99, __pyx_L1_error)
4001
+ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 100, __pyx_L1_error)
3972
4002
  __Pyx_GOTREF(__pyx_t_4);
3973
- __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_EngineDatabaseError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 99, __pyx_L1_error)
4003
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_EngineDatabaseError); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 100, __pyx_L1_error)
3974
4004
  __Pyx_GOTREF(__pyx_t_5);
3975
4005
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
3976
4006
  __pyx_t_4 = NULL;
@@ -3991,15 +4021,15 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
3991
4021
  PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_kp_u_Engine_The_databases_argument_c};
3992
4022
  __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
3993
4023
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
3994
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 99, __pyx_L1_error)
4024
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 100, __pyx_L1_error)
3995
4025
  __Pyx_GOTREF(__pyx_t_3);
3996
4026
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
3997
4027
  }
3998
4028
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
3999
4029
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
4000
- __PYX_ERR(0, 99, __pyx_L1_error)
4030
+ __PYX_ERR(0, 100, __pyx_L1_error)
4001
4031
 
4002
- /* "mysqlengine/engine.py":98
4032
+ /* "mysqlengine/engine.py":99
4003
4033
  * def _validate_databases(self, databases: dict):
4004
4034
  * "(cfunc) Validate the 'databases' argument."
4005
4035
  * if not databases: # <<<<<<<<<<<<<<
@@ -4008,18 +4038,18 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4008
4038
  */
4009
4039
  }
4010
4040
 
4011
- /* "mysqlengine/engine.py":102
4041
+ /* "mysqlengine/engine.py":103
4012
4042
  * "<Engine> The 'databases' argument cannot be empty."
4013
4043
  * )
4014
4044
  * for db_cls in dict_values(databases): # <<<<<<<<<<<<<<
4015
4045
  * # . validate database class
4016
4046
  * if type(db_cls) is not type or not issubclass(db_cls, Database):
4017
4047
  */
4018
- __pyx_t_3 = PyDict_Values(__pyx_v_databases); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
4048
+ __pyx_t_3 = PyDict_Values(__pyx_v_databases); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
4019
4049
  __Pyx_GOTREF(__pyx_t_3);
4020
4050
  if (unlikely(__pyx_t_3 == Py_None)) {
4021
4051
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
4022
- __PYX_ERR(0, 102, __pyx_L1_error)
4052
+ __PYX_ERR(0, 103, __pyx_L1_error)
4023
4053
  }
4024
4054
  __pyx_t_5 = __pyx_t_3; __Pyx_INCREF(__pyx_t_5);
4025
4055
  __pyx_t_7 = 0;
@@ -4028,20 +4058,20 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4028
4058
  {
4029
4059
  Py_ssize_t __pyx_temp = __Pyx_PyList_GET_SIZE(__pyx_t_5);
4030
4060
  #if !CYTHON_ASSUME_SAFE_MACROS
4031
- if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 102, __pyx_L1_error)
4061
+ if (unlikely((__pyx_temp < 0))) __PYX_ERR(0, 103, __pyx_L1_error)
4032
4062
  #endif
4033
4063
  if (__pyx_t_7 >= __pyx_temp) break;
4034
4064
  }
4035
4065
  #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
4036
- __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 102, __pyx_L1_error)
4066
+ __pyx_t_3 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_3); __pyx_t_7++; if (unlikely((0 < 0))) __PYX_ERR(0, 103, __pyx_L1_error)
4037
4067
  #else
4038
- __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 102, __pyx_L1_error)
4068
+ __pyx_t_3 = __Pyx_PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 103, __pyx_L1_error)
4039
4069
  __Pyx_GOTREF(__pyx_t_3);
4040
4070
  #endif
4041
4071
  __Pyx_XDECREF_SET(__pyx_v_db_cls, __pyx_t_3);
4042
4072
  __pyx_t_3 = 0;
4043
4073
 
4044
- /* "mysqlengine/engine.py":104
4074
+ /* "mysqlengine/engine.py":105
4045
4075
  * for db_cls in dict_values(databases):
4046
4076
  * # . validate database class
4047
4077
  * if type(db_cls) is not type or not issubclass(db_cls, Database): # <<<<<<<<<<<<<<
@@ -4054,46 +4084,46 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4054
4084
  __pyx_t_2 = __pyx_t_1;
4055
4085
  goto __pyx_L7_bool_binop_done;
4056
4086
  }
4057
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Database); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 104, __pyx_L1_error)
4087
+ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Database); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error)
4058
4088
  __Pyx_GOTREF(__pyx_t_3);
4059
- __pyx_t_1 = PyObject_IsSubclass(__pyx_v_db_cls, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 104, __pyx_L1_error)
4089
+ __pyx_t_1 = PyObject_IsSubclass(__pyx_v_db_cls, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 105, __pyx_L1_error)
4060
4090
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
4061
4091
  __pyx_t_8 = (!__pyx_t_1);
4062
4092
  __pyx_t_2 = __pyx_t_8;
4063
4093
  __pyx_L7_bool_binop_done:;
4064
4094
  if (unlikely(__pyx_t_2)) {
4065
4095
 
4066
- /* "mysqlengine/engine.py":105
4096
+ /* "mysqlengine/engine.py":106
4067
4097
  * # . validate database class
4068
4098
  * if type(db_cls) is not type or not issubclass(db_cls, Database):
4069
4099
  * raise errors.EngineDatabaseError( # <<<<<<<<<<<<<<
4070
4100
  * "<Engine> The value of the 'databases' dictionary "
4071
4101
  * "must be a subclass of `<Database>`, instead of: {} {}.".format(
4072
4102
  */
4073
- __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 105, __pyx_L1_error)
4103
+ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_errors); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 106, __pyx_L1_error)
4074
4104
  __Pyx_GOTREF(__pyx_t_4);
4075
- __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_EngineDatabaseError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 105, __pyx_L1_error)
4105
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_EngineDatabaseError); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 106, __pyx_L1_error)
4076
4106
  __Pyx_GOTREF(__pyx_t_9);
4077
4107
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4078
4108
 
4079
- /* "mysqlengine/engine.py":107
4109
+ /* "mysqlengine/engine.py":108
4080
4110
  * raise errors.EngineDatabaseError(
4081
4111
  * "<Engine> The value of the 'databases' dictionary "
4082
4112
  * "must be a subclass of `<Database>`, instead of: {} {}.".format( # <<<<<<<<<<<<<<
4083
4113
  * type(db_cls), repr(db_cls)
4084
4114
  * )
4085
4115
  */
4086
- __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_The_value_of_the_databas, __pyx_n_s_format); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 107, __pyx_L1_error)
4116
+ __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_The_value_of_the_databas, __pyx_n_s_format); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 108, __pyx_L1_error)
4087
4117
  __Pyx_GOTREF(__pyx_t_10);
4088
4118
 
4089
- /* "mysqlengine/engine.py":108
4119
+ /* "mysqlengine/engine.py":109
4090
4120
  * "<Engine> The value of the 'databases' dictionary "
4091
4121
  * "must be a subclass of `<Database>`, instead of: {} {}.".format(
4092
4122
  * type(db_cls), repr(db_cls) # <<<<<<<<<<<<<<
4093
4123
  * )
4094
4124
  * )
4095
4125
  */
4096
- __pyx_t_11 = PyObject_Repr(__pyx_v_db_cls); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 108, __pyx_L1_error)
4126
+ __pyx_t_11 = PyObject_Repr(__pyx_v_db_cls); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 109, __pyx_L1_error)
4097
4127
  __Pyx_GOTREF(__pyx_t_11);
4098
4128
  __pyx_t_12 = NULL;
4099
4129
  __pyx_t_6 = 0;
@@ -4114,7 +4144,7 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4114
4144
  __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_10, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
4115
4145
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
4116
4146
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
4117
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 107, __pyx_L1_error)
4147
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 108, __pyx_L1_error)
4118
4148
  __Pyx_GOTREF(__pyx_t_4);
4119
4149
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
4120
4150
  }
@@ -4137,15 +4167,15 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4137
4167
  __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_9, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
4138
4168
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
4139
4169
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4140
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error)
4170
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 106, __pyx_L1_error)
4141
4171
  __Pyx_GOTREF(__pyx_t_3);
4142
4172
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
4143
4173
  }
4144
4174
  __Pyx_Raise(__pyx_t_3, 0, 0, 0);
4145
4175
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
4146
- __PYX_ERR(0, 105, __pyx_L1_error)
4176
+ __PYX_ERR(0, 106, __pyx_L1_error)
4147
4177
 
4148
- /* "mysqlengine/engine.py":104
4178
+ /* "mysqlengine/engine.py":105
4149
4179
  * for db_cls in dict_values(databases):
4150
4180
  * # . validate database class
4151
4181
  * if type(db_cls) is not type or not issubclass(db_cls, Database): # <<<<<<<<<<<<<<
@@ -4154,7 +4184,7 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4154
4184
  */
4155
4185
  }
4156
4186
 
4157
- /* "mysqlengine/engine.py":102
4187
+ /* "mysqlengine/engine.py":103
4158
4188
  * "<Engine> The 'databases' argument cannot be empty."
4159
4189
  * )
4160
4190
  * for db_cls in dict_values(databases): # <<<<<<<<<<<<<<
@@ -4164,7 +4194,7 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4164
4194
  }
4165
4195
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
4166
4196
 
4167
- /* "mysqlengine/engine.py":111
4197
+ /* "mysqlengine/engine.py":112
4168
4198
  * )
4169
4199
  * )
4170
4200
  * self._databases_cls = databases # <<<<<<<<<<<<<<
@@ -4177,17 +4207,17 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4177
4207
  __Pyx_DECREF(__pyx_v_self->_databases_cls);
4178
4208
  __pyx_v_self->_databases_cls = __pyx_v_databases;
4179
4209
 
4180
- /* "mysqlengine/engine.py":112
4210
+ /* "mysqlengine/engine.py":113
4181
4211
  * )
4182
4212
  * self._databases_cls = databases
4183
4213
  * self._length = dict_len(databases) # <<<<<<<<<<<<<<
4184
4214
  *
4185
4215
  * # Access -------------------------------------------------------------------------------------
4186
4216
  */
4187
- __pyx_t_7 = PyDict_Size(__pyx_v_databases); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 112, __pyx_L1_error)
4217
+ __pyx_t_7 = PyDict_Size(__pyx_v_databases); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1L))) __PYX_ERR(0, 113, __pyx_L1_error)
4188
4218
  __pyx_v_self->_length = __pyx_t_7;
4189
4219
 
4190
- /* "mysqlengine/engine.py":94
4220
+ /* "mysqlengine/engine.py":95
4191
4221
  *
4192
4222
  * # Validation ---------------------------------------------------------------------------------
4193
4223
  * @cython.cfunc # <<<<<<<<<<<<<<
@@ -4216,7 +4246,7 @@ static PyObject *__pyx_f_11mysqlengine_6engine_6Engine__validate_databases(struc
4216
4246
  }
4217
4247
  static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
4218
4248
 
4219
- /* "mysqlengine/engine.py":115
4249
+ /* "mysqlengine/engine.py":116
4220
4250
  *
4221
4251
  * # Access -------------------------------------------------------------------------------------
4222
4252
  * async def access(self, db: str, **init_args: Any) -> Database: # <<<<<<<<<<<<<<
@@ -4281,12 +4311,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
4281
4311
  (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
4282
4312
  kw_args--;
4283
4313
  }
4284
- else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L3_error)
4314
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 116, __pyx_L3_error)
4285
4315
  else goto __pyx_L5_argtuple_error;
4286
4316
  }
4287
4317
  if (unlikely(kw_args > 0)) {
4288
4318
  const Py_ssize_t kwd_pos_args = __pyx_nargs;
4289
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_init_args, values + 0, kwd_pos_args, "access") < 0)) __PYX_ERR(0, 115, __pyx_L3_error)
4319
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, __pyx_v_init_args, values + 0, kwd_pos_args, "access") < 0)) __PYX_ERR(0, 116, __pyx_L3_error)
4290
4320
  }
4291
4321
  } else if (unlikely(__pyx_nargs != 1)) {
4292
4322
  goto __pyx_L5_argtuple_error;
@@ -4297,7 +4327,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
4297
4327
  }
4298
4328
  goto __pyx_L6_skip;
4299
4329
  __pyx_L5_argtuple_error:;
4300
- __Pyx_RaiseArgtupleInvalid("access", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 115, __pyx_L3_error)
4330
+ __Pyx_RaiseArgtupleInvalid("access", 1, 1, 1, __pyx_nargs); __PYX_ERR(0, 116, __pyx_L3_error)
4301
4331
  __pyx_L6_skip:;
4302
4332
  goto __pyx_L4_argument_unpacking_done;
4303
4333
  __pyx_L3_error:;
@@ -4312,7 +4342,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
4312
4342
  __Pyx_RefNannyFinishContext();
4313
4343
  return NULL;
4314
4344
  __pyx_L4_argument_unpacking_done:;
4315
- if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_db), (&PyUnicode_Type), 0, "db", 1))) __PYX_ERR(0, 115, __pyx_L1_error)
4345
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_db), (&PyUnicode_Type), 0, "db", 1))) __PYX_ERR(0, 116, __pyx_L1_error)
4316
4346
  __pyx_r = __pyx_pf_11mysqlengine_6engine_6Engine_2access(((struct __pyx_obj_11mysqlengine_6engine_Engine *)__pyx_v_self), __pyx_v_db, __pyx_v_init_args);
4317
4347
 
4318
4348
  /* function exit code */
@@ -4343,7 +4373,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_2access(struct __pyx_obj
4343
4373
  if (unlikely(!__pyx_cur_scope)) {
4344
4374
  __pyx_cur_scope = ((struct __pyx_obj_11mysqlengine_6engine___pyx_scope_struct__access *)Py_None);
4345
4375
  __Pyx_INCREF(Py_None);
4346
- __PYX_ERR(0, 115, __pyx_L1_error)
4376
+ __PYX_ERR(0, 116, __pyx_L1_error)
4347
4377
  } else {
4348
4378
  __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
4349
4379
  }
@@ -4357,7 +4387,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_2access(struct __pyx_obj
4357
4387
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_init_args);
4358
4388
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_init_args);
4359
4389
  {
4360
- __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11mysqlengine_6engine_6Engine_4generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_access, __pyx_n_s_Engine_access, __pyx_n_s_mysqlengine_engine); if (unlikely(!gen)) __PYX_ERR(0, 115, __pyx_L1_error)
4390
+ __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11mysqlengine_6engine_6Engine_4generator, __pyx_codeobj_, (PyObject *) __pyx_cur_scope, __pyx_n_s_access, __pyx_n_s_Engine_access, __pyx_n_s_mysqlengine_engine); if (unlikely(!gen)) __PYX_ERR(0, 116, __pyx_L1_error)
4361
4391
  __Pyx_DECREF(__pyx_cur_scope);
4362
4392
  __Pyx_RefNannyFinishContext();
4363
4393
  return (PyObject *) gen;
@@ -4412,30 +4442,30 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4412
4442
  return NULL;
4413
4443
  }
4414
4444
  __pyx_L3_first_run:;
4415
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 115, __pyx_L1_error)
4445
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 116, __pyx_L1_error)
4416
4446
 
4417
- /* "mysqlengine/engine.py":166
4447
+ /* "mysqlengine/engine.py":167
4418
4448
  * """
4419
4449
  * # Generate cache key
4420
4450
  * if init_args: # <<<<<<<<<<<<<<
4421
4451
  * cache_key = db + ":" + utils._hash_sha256(init_args)
4422
4452
  * else:
4423
4453
  */
4424
- __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_init_args); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 166, __pyx_L1_error)
4454
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_init_args); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(0, 167, __pyx_L1_error)
4425
4455
  if (__pyx_t_1) {
4426
4456
 
4427
- /* "mysqlengine/engine.py":167
4457
+ /* "mysqlengine/engine.py":168
4428
4458
  * # Generate cache key
4429
4459
  * if init_args:
4430
4460
  * cache_key = db + ":" + utils._hash_sha256(init_args) # <<<<<<<<<<<<<<
4431
4461
  * else:
4432
4462
  * cache_key = db
4433
4463
  */
4434
- __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_cur_scope->__pyx_v_db, __pyx_kp_u__2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 167, __pyx_L1_error)
4464
+ __pyx_t_2 = __Pyx_PyUnicode_Concat(__pyx_cur_scope->__pyx_v_db, __pyx_kp_u__2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
4435
4465
  __Pyx_GOTREF(__pyx_t_2);
4436
- __pyx_t_3 = __pyx_f_11mysqlengine_5utils__hash_sha256(__pyx_cur_scope->__pyx_v_init_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 167, __pyx_L1_error)
4466
+ __pyx_t_3 = __pyx_f_11mysqlengine_5utils__hash_sha256(__pyx_cur_scope->__pyx_v_init_args); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 168, __pyx_L1_error)
4437
4467
  __Pyx_GOTREF(__pyx_t_3);
4438
- __pyx_t_4 = __Pyx_PyUnicode_ConcatInPlaceSafe(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error)
4468
+ __pyx_t_4 = __Pyx_PyUnicode_ConcatInPlaceSafe(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error)
4439
4469
  __Pyx_GOTREF(__pyx_t_4);
4440
4470
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
4441
4471
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -4443,7 +4473,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4443
4473
  __pyx_cur_scope->__pyx_v_cache_key = ((PyObject*)__pyx_t_4);
4444
4474
  __pyx_t_4 = 0;
4445
4475
 
4446
- /* "mysqlengine/engine.py":166
4476
+ /* "mysqlengine/engine.py":167
4447
4477
  * """
4448
4478
  * # Generate cache key
4449
4479
  * if init_args: # <<<<<<<<<<<<<<
@@ -4453,7 +4483,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4453
4483
  goto __pyx_L4;
4454
4484
  }
4455
4485
 
4456
- /* "mysqlengine/engine.py":169
4486
+ /* "mysqlengine/engine.py":170
4457
4487
  * cache_key = db + ":" + utils._hash_sha256(init_args)
4458
4488
  * else:
4459
4489
  * cache_key = db # <<<<<<<<<<<<<<
@@ -4467,7 +4497,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4467
4497
  }
4468
4498
  __pyx_L4:;
4469
4499
 
4470
- /* "mysqlengine/engine.py":172
4500
+ /* "mysqlengine/engine.py":173
4471
4501
  *
4472
4502
  * # Access database from cache
4473
4503
  * if dict_contains(self._databases, cache_key): # <<<<<<<<<<<<<<
@@ -4476,12 +4506,12 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4476
4506
  */
4477
4507
  __pyx_t_4 = __pyx_cur_scope->__pyx_v_self->_databases;
4478
4508
  __Pyx_INCREF(__pyx_t_4);
4479
- __pyx_t_5 = PyDict_Contains(__pyx_t_4, __pyx_cur_scope->__pyx_v_cache_key); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 172, __pyx_L1_error)
4509
+ __pyx_t_5 = PyDict_Contains(__pyx_t_4, __pyx_cur_scope->__pyx_v_cache_key); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 173, __pyx_L1_error)
4480
4510
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4481
4511
  __pyx_t_1 = (__pyx_t_5 != 0);
4482
4512
  if (__pyx_t_1) {
4483
4513
 
4484
- /* "mysqlengine/engine.py":173
4514
+ /* "mysqlengine/engine.py":174
4485
4515
  * # Access database from cache
4486
4516
  * if dict_contains(self._databases, cache_key):
4487
4517
  * return self._databases[cache_key] # <<<<<<<<<<<<<<
@@ -4491,15 +4521,15 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4491
4521
  __Pyx_XDECREF(__pyx_r);
4492
4522
  if (unlikely(__pyx_cur_scope->__pyx_v_self->_databases == Py_None)) {
4493
4523
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
4494
- __PYX_ERR(0, 173, __pyx_L1_error)
4524
+ __PYX_ERR(0, 174, __pyx_L1_error)
4495
4525
  }
4496
- __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->_databases, __pyx_cur_scope->__pyx_v_cache_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 173, __pyx_L1_error)
4526
+ __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->_databases, __pyx_cur_scope->__pyx_v_cache_key); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error)
4497
4527
  __Pyx_GOTREF(__pyx_t_4);
4498
4528
  __pyx_r = NULL; __Pyx_ReturnWithStopIteration(__pyx_t_4);
4499
4529
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4500
4530
  goto __pyx_L0;
4501
4531
 
4502
- /* "mysqlengine/engine.py":172
4532
+ /* "mysqlengine/engine.py":173
4503
4533
  *
4504
4534
  * # Access database from cache
4505
4535
  * if dict_contains(self._databases, cache_key): # <<<<<<<<<<<<<<
@@ -4508,7 +4538,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4508
4538
  */
4509
4539
  }
4510
4540
 
4511
- /* "mysqlengine/engine.py":176
4541
+ /* "mysqlengine/engine.py":177
4512
4542
  *
4513
4543
  * # Get database class
4514
4544
  * if not dict_contains(self._databases_cls, db): # <<<<<<<<<<<<<<
@@ -4517,36 +4547,36 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4517
4547
  */
4518
4548
  __pyx_t_4 = __pyx_cur_scope->__pyx_v_self->_databases_cls;
4519
4549
  __Pyx_INCREF(__pyx_t_4);
4520
- __pyx_t_5 = PyDict_Contains(__pyx_t_4, __pyx_cur_scope->__pyx_v_db); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 176, __pyx_L1_error)
4550
+ __pyx_t_5 = PyDict_Contains(__pyx_t_4, __pyx_cur_scope->__pyx_v_db); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 177, __pyx_L1_error)
4521
4551
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4522
4552
  __pyx_t_1 = (!(__pyx_t_5 != 0));
4523
4553
  if (unlikely(__pyx_t_1)) {
4524
4554
 
4525
- /* "mysqlengine/engine.py":177
4555
+ /* "mysqlengine/engine.py":178
4526
4556
  * # Get database class
4527
4557
  * if not dict_contains(self._databases_cls, db):
4528
4558
  * raise errors.EngineDatabaseAccessKeyError( # <<<<<<<<<<<<<<
4529
4559
  * "<Engine> The database access name '{}' does not belong to this Engine.\n"
4530
4560
  * "Available access names: {}.".format(db, dict_keys(self._databases_cls))
4531
4561
  */
4532
- __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_errors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
4562
+ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_errors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 178, __pyx_L1_error)
4533
4563
  __Pyx_GOTREF(__pyx_t_3);
4534
- __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_EngineDatabaseAccessKeyError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error)
4564
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_EngineDatabaseAccessKeyError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 178, __pyx_L1_error)
4535
4565
  __Pyx_GOTREF(__pyx_t_2);
4536
4566
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
4537
4567
 
4538
- /* "mysqlengine/engine.py":179
4568
+ /* "mysqlengine/engine.py":180
4539
4569
  * raise errors.EngineDatabaseAccessKeyError(
4540
4570
  * "<Engine> The database access name '{}' does not belong to this Engine.\n"
4541
4571
  * "Available access names: {}.".format(db, dict_keys(self._databases_cls)) # <<<<<<<<<<<<<<
4542
4572
  * )
4543
4573
  * db_cls = self._databases_cls[db]
4544
4574
  */
4545
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_The_database_access_name, __pyx_n_s_format); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 179, __pyx_L1_error)
4575
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_The_database_access_name, __pyx_n_s_format); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 180, __pyx_L1_error)
4546
4576
  __Pyx_GOTREF(__pyx_t_6);
4547
4577
  __pyx_t_7 = __pyx_cur_scope->__pyx_v_self->_databases_cls;
4548
4578
  __Pyx_INCREF(__pyx_t_7);
4549
- __pyx_t_8 = PyDict_Keys(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 179, __pyx_L1_error)
4579
+ __pyx_t_8 = PyDict_Keys(__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 180, __pyx_L1_error)
4550
4580
  __Pyx_GOTREF(__pyx_t_8);
4551
4581
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
4552
4582
  __pyx_t_7 = NULL;
@@ -4568,7 +4598,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4568
4598
  __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
4569
4599
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
4570
4600
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
4571
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 179, __pyx_L1_error)
4601
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 180, __pyx_L1_error)
4572
4602
  __Pyx_GOTREF(__pyx_t_3);
4573
4603
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
4574
4604
  }
@@ -4591,15 +4621,15 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4591
4621
  __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
4592
4622
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
4593
4623
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
4594
- if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error)
4624
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 178, __pyx_L1_error)
4595
4625
  __Pyx_GOTREF(__pyx_t_4);
4596
4626
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
4597
4627
  }
4598
4628
  __Pyx_Raise(__pyx_t_4, 0, 0, 0);
4599
4629
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4600
- __PYX_ERR(0, 177, __pyx_L1_error)
4630
+ __PYX_ERR(0, 178, __pyx_L1_error)
4601
4631
 
4602
- /* "mysqlengine/engine.py":176
4632
+ /* "mysqlengine/engine.py":177
4603
4633
  *
4604
4634
  * # Get database class
4605
4635
  * if not dict_contains(self._databases_cls, db): # <<<<<<<<<<<<<<
@@ -4608,7 +4638,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4608
4638
  */
4609
4639
  }
4610
4640
 
4611
- /* "mysqlengine/engine.py":181
4641
+ /* "mysqlengine/engine.py":182
4612
4642
  * "Available access names: {}.".format(db, dict_keys(self._databases_cls))
4613
4643
  * )
4614
4644
  * db_cls = self._databases_cls[db] # <<<<<<<<<<<<<<
@@ -4617,15 +4647,15 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4617
4647
  */
4618
4648
  if (unlikely(__pyx_cur_scope->__pyx_v_self->_databases_cls == Py_None)) {
4619
4649
  PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
4620
- __PYX_ERR(0, 181, __pyx_L1_error)
4650
+ __PYX_ERR(0, 182, __pyx_L1_error)
4621
4651
  }
4622
- __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->_databases_cls, __pyx_cur_scope->__pyx_v_db); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 181, __pyx_L1_error)
4652
+ __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_cur_scope->__pyx_v_self->_databases_cls, __pyx_cur_scope->__pyx_v_db); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 182, __pyx_L1_error)
4623
4653
  __Pyx_GOTREF(__pyx_t_4);
4624
4654
  __Pyx_GIVEREF(__pyx_t_4);
4625
4655
  __pyx_cur_scope->__pyx_v_db_cls = __pyx_t_4;
4626
4656
  __pyx_t_4 = 0;
4627
4657
 
4628
- /* "mysqlengine/engine.py":184
4658
+ /* "mysqlengine/engine.py":185
4629
4659
  *
4630
4660
  * # Instantiate database
4631
4661
  * dict_setitem(init_args, "server", self._server) # <<<<<<<<<<<<<<
@@ -4634,10 +4664,10 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4634
4664
  */
4635
4665
  __pyx_t_4 = ((PyObject *)__pyx_cur_scope->__pyx_v_self->_server);
4636
4666
  __Pyx_INCREF(__pyx_t_4);
4637
- __pyx_t_5 = PyDict_SetItem(__pyx_cur_scope->__pyx_v_init_args, __pyx_n_u_server, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 184, __pyx_L1_error)
4667
+ __pyx_t_5 = PyDict_SetItem(__pyx_cur_scope->__pyx_v_init_args, __pyx_n_u_server, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 185, __pyx_L1_error)
4638
4668
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4639
4669
 
4640
- /* "mysqlengine/engine.py":185
4670
+ /* "mysqlengine/engine.py":186
4641
4671
  * # Instantiate database
4642
4672
  * dict_setitem(init_args, "server", self._server)
4643
4673
  * try: # <<<<<<<<<<<<<<
@@ -4651,23 +4681,23 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4651
4681
  __Pyx_XGOTREF(__pyx_t_11);
4652
4682
  /*try:*/ {
4653
4683
 
4654
- /* "mysqlengine/engine.py":186
4684
+ /* "mysqlengine/engine.py":187
4655
4685
  * dict_setitem(init_args, "server", self._server)
4656
4686
  * try:
4657
4687
  * db_ins = db_cls(**init_args) # <<<<<<<<<<<<<<
4658
4688
  * except errors.MysqlEngineError as err:
4659
4689
  * err.add_note(
4660
4690
  */
4661
- __pyx_t_4 = PyDict_Copy(__pyx_cur_scope->__pyx_v_init_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L7_error)
4691
+ __pyx_t_4 = PyDict_Copy(__pyx_cur_scope->__pyx_v_init_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L7_error)
4662
4692
  __Pyx_GOTREF(__pyx_t_4);
4663
- __pyx_t_2 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_db_cls, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L7_error)
4693
+ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_cur_scope->__pyx_v_db_cls, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L7_error)
4664
4694
  __Pyx_GOTREF(__pyx_t_2);
4665
4695
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
4666
4696
  __Pyx_GIVEREF(__pyx_t_2);
4667
4697
  __pyx_cur_scope->__pyx_v_db_ins = __pyx_t_2;
4668
4698
  __pyx_t_2 = 0;
4669
4699
 
4670
- /* "mysqlengine/engine.py":185
4700
+ /* "mysqlengine/engine.py":186
4671
4701
  * # Instantiate database
4672
4702
  * dict_setitem(init_args, "server", self._server)
4673
4703
  * try: # <<<<<<<<<<<<<<
@@ -4687,7 +4717,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4687
4717
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
4688
4718
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
4689
4719
 
4690
- /* "mysqlengine/engine.py":187
4720
+ /* "mysqlengine/engine.py":188
4691
4721
  * try:
4692
4722
  * db_ins = db_cls(**init_args)
4693
4723
  * except errors.MysqlEngineError as err: # <<<<<<<<<<<<<<
@@ -4695,9 +4725,9 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4695
4725
  * "-> <Engine> Failed to instantiate database {}.\n"
4696
4726
  */
4697
4727
  __Pyx_ErrFetch(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3);
4698
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 187, __pyx_L9_except_error)
4728
+ __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L9_except_error)
4699
4729
  __Pyx_GOTREF(__pyx_t_6);
4700
- __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_MysqlEngineError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L9_except_error)
4730
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_MysqlEngineError); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 188, __pyx_L9_except_error)
4701
4731
  __Pyx_GOTREF(__pyx_t_8);
4702
4732
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
4703
4733
  __pyx_t_5 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_2, __pyx_t_8);
@@ -4706,7 +4736,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4706
4736
  __pyx_t_2 = 0; __pyx_t_4 = 0; __pyx_t_3 = 0;
4707
4737
  if (__pyx_t_5) {
4708
4738
  __Pyx_AddTraceback("mysqlengine.engine.Engine.access", __pyx_clineno, __pyx_lineno, __pyx_filename);
4709
- if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 187, __pyx_L9_except_error)
4739
+ if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_2) < 0) __PYX_ERR(0, 188, __pyx_L9_except_error)
4710
4740
  __Pyx_XGOTREF(__pyx_t_3);
4711
4741
  __Pyx_XGOTREF(__pyx_t_4);
4712
4742
  __Pyx_XGOTREF(__pyx_t_2);
@@ -4715,24 +4745,24 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4715
4745
  __pyx_cur_scope->__pyx_v_err = __pyx_t_4;
4716
4746
  /*try:*/ {
4717
4747
 
4718
- /* "mysqlengine/engine.py":188
4748
+ /* "mysqlengine/engine.py":189
4719
4749
  * db_ins = db_cls(**init_args)
4720
4750
  * except errors.MysqlEngineError as err:
4721
4751
  * err.add_note( # <<<<<<<<<<<<<<
4722
4752
  * "-> <Engine> Failed to instantiate database {}.\n"
4723
4753
  * "Initiate arguments: {}".format(db_cls, init_args)
4724
4754
  */
4725
- __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_err, __pyx_n_s_add_note); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 188, __pyx_L18_error)
4755
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_err, __pyx_n_s_add_note); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 189, __pyx_L18_error)
4726
4756
  __Pyx_GOTREF(__pyx_t_6);
4727
4757
 
4728
- /* "mysqlengine/engine.py":190
4758
+ /* "mysqlengine/engine.py":191
4729
4759
  * err.add_note(
4730
4760
  * "-> <Engine> Failed to instantiate database {}.\n"
4731
4761
  * "Initiate arguments: {}".format(db_cls, init_args) # <<<<<<<<<<<<<<
4732
4762
  * )
4733
4763
  * raise err
4734
4764
  */
4735
- __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_Failed_to_instantiate_da, __pyx_n_s_format); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 190, __pyx_L18_error)
4765
+ __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_Failed_to_instantiate_da, __pyx_n_s_format); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 191, __pyx_L18_error)
4736
4766
  __Pyx_GOTREF(__pyx_t_12);
4737
4767
  __pyx_t_13 = NULL;
4738
4768
  __pyx_t_5 = 0;
@@ -4752,7 +4782,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4752
4782
  PyObject *__pyx_callargs[3] = {__pyx_t_13, __pyx_cur_scope->__pyx_v_db_cls, __pyx_cur_scope->__pyx_v_init_args};
4753
4783
  __pyx_t_7 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_5, 2+__pyx_t_5);
4754
4784
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
4755
- if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 190, __pyx_L18_error)
4785
+ if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 191, __pyx_L18_error)
4756
4786
  __Pyx_GOTREF(__pyx_t_7);
4757
4787
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
4758
4788
  }
@@ -4775,13 +4805,13 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4775
4805
  __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
4776
4806
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
4777
4807
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
4778
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 188, __pyx_L18_error)
4808
+ if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 189, __pyx_L18_error)
4779
4809
  __Pyx_GOTREF(__pyx_t_8);
4780
4810
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
4781
4811
  }
4782
4812
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
4783
4813
 
4784
- /* "mysqlengine/engine.py":192
4814
+ /* "mysqlengine/engine.py":193
4785
4815
  * "Initiate arguments: {}".format(db_cls, init_args)
4786
4816
  * )
4787
4817
  * raise err # <<<<<<<<<<<<<<
@@ -4789,10 +4819,10 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4789
4819
  * raise errors.EngineDatabaseInstanciateError(
4790
4820
  */
4791
4821
  __Pyx_Raise(__pyx_cur_scope->__pyx_v_err, 0, 0, 0);
4792
- __PYX_ERR(0, 192, __pyx_L18_error)
4822
+ __PYX_ERR(0, 193, __pyx_L18_error)
4793
4823
  }
4794
4824
 
4795
- /* "mysqlengine/engine.py":187
4825
+ /* "mysqlengine/engine.py":188
4796
4826
  * try:
4797
4827
  * db_ins = db_cls(**init_args)
4798
4828
  * except errors.MysqlEngineError as err: # <<<<<<<<<<<<<<
@@ -4839,7 +4869,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4839
4869
  }
4840
4870
  }
4841
4871
 
4842
- /* "mysqlengine/engine.py":193
4872
+ /* "mysqlengine/engine.py":194
4843
4873
  * )
4844
4874
  * raise err
4845
4875
  * except Exception as err: # <<<<<<<<<<<<<<
@@ -4849,7 +4879,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4849
4879
  __pyx_t_14 = __Pyx_PyErr_ExceptionMatches(((PyObject *)(&((PyTypeObject*)PyExc_Exception)[0])));
4850
4880
  if (__pyx_t_14) {
4851
4881
  __Pyx_AddTraceback("mysqlengine.engine.Engine.access", __pyx_clineno, __pyx_lineno, __pyx_filename);
4852
- if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 193, __pyx_L9_except_error)
4882
+ if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_4, &__pyx_t_3) < 0) __PYX_ERR(0, 194, __pyx_L9_except_error)
4853
4883
  __Pyx_XGOTREF(__pyx_t_2);
4854
4884
  __Pyx_XGOTREF(__pyx_t_4);
4855
4885
  __Pyx_XGOTREF(__pyx_t_3);
@@ -4858,27 +4888,27 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4858
4888
  __pyx_cur_scope->__pyx_v_err = __pyx_t_4;
4859
4889
  /*try:*/ {
4860
4890
 
4861
- /* "mysqlengine/engine.py":194
4891
+ /* "mysqlengine/engine.py":195
4862
4892
  * raise err
4863
4893
  * except Exception as err:
4864
4894
  * raise errors.EngineDatabaseInstanciateError( # <<<<<<<<<<<<<<
4865
4895
  * "<Engine> Failed to instantiate database {}.\n"
4866
4896
  * "Initiate arguments: {}.\nError: {}".format(db_cls, init_args, err)
4867
4897
  */
4868
- __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 194, __pyx_L29_error)
4898
+ __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_errors); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 195, __pyx_L29_error)
4869
4899
  __Pyx_GOTREF(__pyx_t_6);
4870
- __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_EngineDatabaseInstanciateError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 194, __pyx_L29_error)
4900
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_EngineDatabaseInstanciateError); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 195, __pyx_L29_error)
4871
4901
  __Pyx_GOTREF(__pyx_t_7);
4872
4902
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
4873
4903
 
4874
- /* "mysqlengine/engine.py":196
4904
+ /* "mysqlengine/engine.py":197
4875
4905
  * raise errors.EngineDatabaseInstanciateError(
4876
4906
  * "<Engine> Failed to instantiate database {}.\n"
4877
4907
  * "Initiate arguments: {}.\nError: {}".format(db_cls, init_args, err) # <<<<<<<<<<<<<<
4878
4908
  * ) from err
4879
4909
  *
4880
4910
  */
4881
- __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_Failed_to_instantiate_da_2, __pyx_n_s_format); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 196, __pyx_L29_error)
4911
+ __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Engine_Failed_to_instantiate_da_2, __pyx_n_s_format); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 197, __pyx_L29_error)
4882
4912
  __Pyx_GOTREF(__pyx_t_12);
4883
4913
  __pyx_t_13 = NULL;
4884
4914
  __pyx_t_14 = 0;
@@ -4898,7 +4928,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4898
4928
  PyObject *__pyx_callargs[4] = {__pyx_t_13, __pyx_cur_scope->__pyx_v_db_cls, __pyx_cur_scope->__pyx_v_init_args, __pyx_cur_scope->__pyx_v_err};
4899
4929
  __pyx_t_6 = __Pyx_PyObject_FastCall(__pyx_t_12, __pyx_callargs+1-__pyx_t_14, 3+__pyx_t_14);
4900
4930
  __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
4901
- if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 196, __pyx_L29_error)
4931
+ if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 197, __pyx_L29_error)
4902
4932
  __Pyx_GOTREF(__pyx_t_6);
4903
4933
  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
4904
4934
  }
@@ -4921,12 +4951,12 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4921
4951
  __pyx_t_8 = __Pyx_PyObject_FastCall(__pyx_t_7, __pyx_callargs+1-__pyx_t_14, 1+__pyx_t_14);
4922
4952
  __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
4923
4953
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
4924
- if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 194, __pyx_L29_error)
4954
+ if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 195, __pyx_L29_error)
4925
4955
  __Pyx_GOTREF(__pyx_t_8);
4926
4956
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
4927
4957
  }
4928
4958
 
4929
- /* "mysqlengine/engine.py":197
4959
+ /* "mysqlengine/engine.py":198
4930
4960
  * "<Engine> Failed to instantiate database {}.\n"
4931
4961
  * "Initiate arguments: {}.\nError: {}".format(db_cls, init_args, err)
4932
4962
  * ) from err # <<<<<<<<<<<<<<
@@ -4935,10 +4965,10 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4935
4965
  */
4936
4966
  __Pyx_Raise(__pyx_t_8, 0, 0, __pyx_cur_scope->__pyx_v_err);
4937
4967
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
4938
- __PYX_ERR(0, 194, __pyx_L29_error)
4968
+ __PYX_ERR(0, 195, __pyx_L29_error)
4939
4969
  }
4940
4970
 
4941
- /* "mysqlengine/engine.py":193
4971
+ /* "mysqlengine/engine.py":194
4942
4972
  * )
4943
4973
  * raise err
4944
4974
  * except Exception as err: # <<<<<<<<<<<<<<
@@ -4986,7 +5016,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
4986
5016
  }
4987
5017
  goto __pyx_L9_except_error;
4988
5018
 
4989
- /* "mysqlengine/engine.py":185
5019
+ /* "mysqlengine/engine.py":186
4990
5020
  * # Instantiate database
4991
5021
  * dict_setitem(init_args, "server", self._server)
4992
5022
  * try: # <<<<<<<<<<<<<<
@@ -5002,14 +5032,14 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5002
5032
  __pyx_L12_try_end:;
5003
5033
  }
5004
5034
 
5005
- /* "mysqlengine/engine.py":200
5035
+ /* "mysqlengine/engine.py":201
5006
5036
  *
5007
5037
  * # Initiate & cache database
5008
5038
  * await db_ins.initiate() # <<<<<<<<<<<<<<
5009
5039
  * dict_setitem(self._databases, cache_key, db_ins)
5010
5040
  *
5011
5041
  */
5012
- __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_db_ins, __pyx_n_s_initiate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 200, __pyx_L1_error)
5042
+ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_db_ins, __pyx_n_s_initiate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 201, __pyx_L1_error)
5013
5043
  __Pyx_GOTREF(__pyx_t_4);
5014
5044
  __pyx_t_2 = NULL;
5015
5045
  __pyx_t_5 = 0;
@@ -5029,7 +5059,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5029
5059
  PyObject *__pyx_callargs[2] = {__pyx_t_2, NULL};
5030
5060
  __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_5, 0+__pyx_t_5);
5031
5061
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
5032
- if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 200, __pyx_L1_error)
5062
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 201, __pyx_L1_error)
5033
5063
  __Pyx_GOTREF(__pyx_t_3);
5034
5064
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
5035
5065
  }
@@ -5044,16 +5074,16 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5044
5074
  __pyx_generator->resume_label = 1;
5045
5075
  return __pyx_r;
5046
5076
  __pyx_L35_resume_from_await:;
5047
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 200, __pyx_L1_error)
5077
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 201, __pyx_L1_error)
5048
5078
  } else {
5049
5079
  PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType();
5050
5080
  if (exc_type) {
5051
5081
  if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
5052
- else __PYX_ERR(0, 200, __pyx_L1_error)
5082
+ else __PYX_ERR(0, 201, __pyx_L1_error)
5053
5083
  }
5054
5084
  }
5055
5085
 
5056
- /* "mysqlengine/engine.py":201
5086
+ /* "mysqlengine/engine.py":202
5057
5087
  * # Initiate & cache database
5058
5088
  * await db_ins.initiate()
5059
5089
  * dict_setitem(self._databases, cache_key, db_ins) # <<<<<<<<<<<<<<
@@ -5062,10 +5092,10 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5062
5092
  */
5063
5093
  __pyx_t_3 = __pyx_cur_scope->__pyx_v_self->_databases;
5064
5094
  __Pyx_INCREF(__pyx_t_3);
5065
- __pyx_t_5 = PyDict_SetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_cache_key, __pyx_cur_scope->__pyx_v_db_ins); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 201, __pyx_L1_error)
5095
+ __pyx_t_5 = PyDict_SetItem(__pyx_t_3, __pyx_cur_scope->__pyx_v_cache_key, __pyx_cur_scope->__pyx_v_db_ins); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 202, __pyx_L1_error)
5066
5096
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
5067
5097
 
5068
- /* "mysqlengine/engine.py":204
5098
+ /* "mysqlengine/engine.py":205
5069
5099
  *
5070
5100
  * # Return database
5071
5101
  * return db_ins # <<<<<<<<<<<<<<
@@ -5077,7 +5107,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5077
5107
  goto __pyx_L0;
5078
5108
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
5079
5109
 
5080
- /* "mysqlengine/engine.py":115
5110
+ /* "mysqlengine/engine.py":116
5081
5111
  *
5082
5112
  * # Access -------------------------------------------------------------------------------------
5083
5113
  * async def access(self, db: str, **init_args: Any) -> Database: # <<<<<<<<<<<<<<
@@ -5109,7 +5139,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_4generator(__pyx_Corouti
5109
5139
  }
5110
5140
  static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
5111
5141
 
5112
- /* "mysqlengine/engine.py":207
5142
+ /* "mysqlengine/engine.py":208
5113
5143
  *
5114
5144
  * # Disconnect ---------------------------------------------------------------------------------
5115
5145
  * async def disconnect(self, countdown: Union[int, None] = None) -> None: # <<<<<<<<<<<<<<
@@ -5171,12 +5201,12 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
5171
5201
  if (kw_args > 0) {
5172
5202
  PyObject* value = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_countdown);
5173
5203
  if (value) { values[0] = __Pyx_Arg_NewRef_FASTCALL(value); kw_args--; }
5174
- else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 207, __pyx_L3_error)
5204
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 208, __pyx_L3_error)
5175
5205
  }
5176
5206
  }
5177
5207
  if (unlikely(kw_args > 0)) {
5178
5208
  const Py_ssize_t kwd_pos_args = __pyx_nargs;
5179
- if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "disconnect") < 0)) __PYX_ERR(0, 207, __pyx_L3_error)
5209
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "disconnect") < 0)) __PYX_ERR(0, 208, __pyx_L3_error)
5180
5210
  }
5181
5211
  } else {
5182
5212
  switch (__pyx_nargs) {
@@ -5190,7 +5220,7 @@ PyObject *__pyx_args, PyObject *__pyx_kwds
5190
5220
  }
5191
5221
  goto __pyx_L6_skip;
5192
5222
  __pyx_L5_argtuple_error:;
5193
- __Pyx_RaiseArgtupleInvalid("disconnect", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 207, __pyx_L3_error)
5223
+ __Pyx_RaiseArgtupleInvalid("disconnect", 0, 0, 1, __pyx_nargs); __PYX_ERR(0, 208, __pyx_L3_error)
5194
5224
  __pyx_L6_skip:;
5195
5225
  goto __pyx_L4_argument_unpacking_done;
5196
5226
  __pyx_L3_error:;
@@ -5229,7 +5259,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_5disconnect(struct __pyx
5229
5259
  if (unlikely(!__pyx_cur_scope)) {
5230
5260
  __pyx_cur_scope = ((struct __pyx_obj_11mysqlengine_6engine___pyx_scope_struct_1_disconnect *)Py_None);
5231
5261
  __Pyx_INCREF(Py_None);
5232
- __PYX_ERR(0, 207, __pyx_L1_error)
5262
+ __PYX_ERR(0, 208, __pyx_L1_error)
5233
5263
  } else {
5234
5264
  __Pyx_GOTREF((PyObject *)__pyx_cur_scope);
5235
5265
  }
@@ -5240,7 +5270,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_5disconnect(struct __pyx
5240
5270
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_countdown);
5241
5271
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_countdown);
5242
5272
  {
5243
- __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11mysqlengine_6engine_6Engine_7generator1, __pyx_codeobj__3, (PyObject *) __pyx_cur_scope, __pyx_n_s_disconnect, __pyx_n_s_Engine_disconnect, __pyx_n_s_mysqlengine_engine); if (unlikely(!gen)) __PYX_ERR(0, 207, __pyx_L1_error)
5273
+ __pyx_CoroutineObject *gen = __Pyx_Coroutine_New((__pyx_coroutine_body_t) __pyx_gb_11mysqlengine_6engine_6Engine_7generator1, __pyx_codeobj__3, (PyObject *) __pyx_cur_scope, __pyx_n_s_disconnect, __pyx_n_s_Engine_disconnect, __pyx_n_s_mysqlengine_engine); if (unlikely(!gen)) __PYX_ERR(0, 208, __pyx_L1_error)
5244
5274
  __Pyx_DECREF(__pyx_cur_scope);
5245
5275
  __Pyx_RefNannyFinishContext();
5246
5276
  return (PyObject *) gen;
@@ -5277,16 +5307,16 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_Corout
5277
5307
  return NULL;
5278
5308
  }
5279
5309
  __pyx_L3_first_run:;
5280
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 207, __pyx_L1_error)
5310
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 208, __pyx_L1_error)
5281
5311
 
5282
- /* "mysqlengine/engine.py":225
5312
+ /* "mysqlengine/engine.py":226
5283
5313
  * connections (regardless state) after the countdown.
5284
5314
  * """
5285
5315
  * await self._server.close(countdown) # <<<<<<<<<<<<<<
5286
5316
  * self._databases = {}
5287
5317
  *
5288
5318
  */
5289
- __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_server), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 225, __pyx_L1_error)
5319
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->_server), __pyx_n_s_close); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error)
5290
5320
  __Pyx_GOTREF(__pyx_t_2);
5291
5321
  __pyx_t_3 = NULL;
5292
5322
  __pyx_t_4 = 0;
@@ -5306,7 +5336,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_Corout
5306
5336
  PyObject *__pyx_callargs[2] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_countdown};
5307
5337
  __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_2, __pyx_callargs+1-__pyx_t_4, 1+__pyx_t_4);
5308
5338
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
5309
- if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 225, __pyx_L1_error)
5339
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
5310
5340
  __Pyx_GOTREF(__pyx_t_1);
5311
5341
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
5312
5342
  }
@@ -5321,23 +5351,23 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_Corout
5321
5351
  __pyx_generator->resume_label = 1;
5322
5352
  return __pyx_r;
5323
5353
  __pyx_L4_resume_from_await:;
5324
- if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 225, __pyx_L1_error)
5354
+ if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 226, __pyx_L1_error)
5325
5355
  } else {
5326
5356
  PyObject* exc_type = __Pyx_PyErr_CurrentExceptionType();
5327
5357
  if (exc_type) {
5328
5358
  if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
5329
- else __PYX_ERR(0, 225, __pyx_L1_error)
5359
+ else __PYX_ERR(0, 226, __pyx_L1_error)
5330
5360
  }
5331
5361
  }
5332
5362
 
5333
- /* "mysqlengine/engine.py":226
5363
+ /* "mysqlengine/engine.py":227
5334
5364
  * """
5335
5365
  * await self._server.close(countdown)
5336
5366
  * self._databases = {} # <<<<<<<<<<<<<<
5337
5367
  *
5338
5368
  * # Speical Methods -----------------------------------------------------
5339
5369
  */
5340
- __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 226, __pyx_L1_error)
5370
+ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 227, __pyx_L1_error)
5341
5371
  __Pyx_GOTREF(__pyx_t_1);
5342
5372
  __Pyx_GIVEREF(__pyx_t_1);
5343
5373
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->_databases);
@@ -5346,7 +5376,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_Corout
5346
5376
  __pyx_t_1 = 0;
5347
5377
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
5348
5378
 
5349
- /* "mysqlengine/engine.py":207
5379
+ /* "mysqlengine/engine.py":208
5350
5380
  *
5351
5381
  * # Disconnect ---------------------------------------------------------------------------------
5352
5382
  * async def disconnect(self, countdown: Union[int, None] = None) -> None: # <<<<<<<<<<<<<<
@@ -5374,7 +5404,7 @@ static PyObject *__pyx_gb_11mysqlengine_6engine_6Engine_7generator1(__pyx_Corout
5374
5404
  return __pyx_r;
5375
5405
  }
5376
5406
 
5377
- /* "mysqlengine/engine.py":229
5407
+ /* "mysqlengine/engine.py":230
5378
5408
  *
5379
5409
  * # Speical Methods -----------------------------------------------------
5380
5410
  * def __repr__(self) -> str: # <<<<<<<<<<<<<<
@@ -5406,7 +5436,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_8__repr__(struct __pyx_o
5406
5436
  int __pyx_clineno = 0;
5407
5437
  __Pyx_RefNannySetupContext("__repr__", 1);
5408
5438
 
5409
- /* "mysqlengine/engine.py":230
5439
+ /* "mysqlengine/engine.py":231
5410
5440
  * # Speical Methods -----------------------------------------------------
5411
5441
  * def __repr__(self) -> str:
5412
5442
  * return "<Engine (databases=%s)>" % self._databases_cls # <<<<<<<<<<<<<<
@@ -5414,13 +5444,13 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_8__repr__(struct __pyx_o
5414
5444
  * def __hash__(self) -> int:
5415
5445
  */
5416
5446
  __Pyx_XDECREF(__pyx_r);
5417
- __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Engine_databases_s, __pyx_v_self->_databases_cls); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
5447
+ __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_Engine_databases_s, __pyx_v_self->_databases_cls); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
5418
5448
  __Pyx_GOTREF(__pyx_t_1);
5419
5449
  __pyx_r = __pyx_t_1;
5420
5450
  __pyx_t_1 = 0;
5421
5451
  goto __pyx_L0;
5422
5452
 
5423
- /* "mysqlengine/engine.py":229
5453
+ /* "mysqlengine/engine.py":230
5424
5454
  *
5425
5455
  * # Speical Methods -----------------------------------------------------
5426
5456
  * def __repr__(self) -> str: # <<<<<<<<<<<<<<
@@ -5439,7 +5469,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_8__repr__(struct __pyx_o
5439
5469
  return __pyx_r;
5440
5470
  }
5441
5471
 
5442
- /* "mysqlengine/engine.py":232
5472
+ /* "mysqlengine/engine.py":233
5443
5473
  * return "<Engine (databases=%s)>" % self._databases_cls
5444
5474
  *
5445
5475
  * def __hash__(self) -> int: # <<<<<<<<<<<<<<
@@ -5472,27 +5502,27 @@ static Py_hash_t __pyx_pf_11mysqlengine_6engine_6Engine_10__hash__(struct __pyx_
5472
5502
  int __pyx_clineno = 0;
5473
5503
  __Pyx_RefNannySetupContext("__hash__", 1);
5474
5504
 
5475
- /* "mysqlengine/engine.py":233
5505
+ /* "mysqlengine/engine.py":234
5476
5506
  *
5477
5507
  * def __hash__(self) -> int:
5478
5508
  * return hash((self._server, self._databases_cls)) # <<<<<<<<<<<<<<
5479
5509
  *
5480
5510
  * def __eq__(self, __o: object) -> bool:
5481
5511
  */
5482
- __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __pyx_L1_error)
5512
+ __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
5483
5513
  __Pyx_GOTREF(__pyx_t_1);
5484
5514
  __Pyx_INCREF((PyObject *)__pyx_v_self->_server);
5485
5515
  __Pyx_GIVEREF((PyObject *)__pyx_v_self->_server);
5486
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->_server))) __PYX_ERR(0, 233, __pyx_L1_error);
5516
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->_server))) __PYX_ERR(0, 234, __pyx_L1_error);
5487
5517
  __Pyx_INCREF(__pyx_v_self->_databases_cls);
5488
5518
  __Pyx_GIVEREF(__pyx_v_self->_databases_cls);
5489
- if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->_databases_cls)) __PYX_ERR(0, 233, __pyx_L1_error);
5490
- __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 233, __pyx_L1_error)
5519
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->_databases_cls)) __PYX_ERR(0, 234, __pyx_L1_error);
5520
+ __pyx_t_2 = PyObject_Hash(__pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_hash_t)-1))) __PYX_ERR(0, 234, __pyx_L1_error)
5491
5521
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
5492
5522
  __pyx_r = __pyx_t_2;
5493
5523
  goto __pyx_L0;
5494
5524
 
5495
- /* "mysqlengine/engine.py":232
5525
+ /* "mysqlengine/engine.py":233
5496
5526
  * return "<Engine (databases=%s)>" % self._databases_cls
5497
5527
  *
5498
5528
  * def __hash__(self) -> int: # <<<<<<<<<<<<<<
@@ -5511,7 +5541,7 @@ static Py_hash_t __pyx_pf_11mysqlengine_6engine_6Engine_10__hash__(struct __pyx_
5511
5541
  return __pyx_r;
5512
5542
  }
5513
5543
 
5514
- /* "mysqlengine/engine.py":235
5544
+ /* "mysqlengine/engine.py":236
5515
5545
  * return hash((self._server, self._databases_cls))
5516
5546
  *
5517
5547
  * def __eq__(self, __o: object) -> bool: # <<<<<<<<<<<<<<
@@ -5547,7 +5577,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_12__eq__(struct __pyx_ob
5547
5577
  int __pyx_clineno = 0;
5548
5578
  __Pyx_RefNannySetupContext("__eq__", 1);
5549
5579
 
5550
- /* "mysqlengine/engine.py":236
5580
+ /* "mysqlengine/engine.py":237
5551
5581
  *
5552
5582
  * def __eq__(self, __o: object) -> bool:
5553
5583
  * return hash(self) == hash(__o) if isinstance(__o, type(self)) else False # <<<<<<<<<<<<<<
@@ -5555,11 +5585,11 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_12__eq__(struct __pyx_ob
5555
5585
  * def __len__(self) -> int:
5556
5586
  */
5557
5587
  __Pyx_XDECREF(__pyx_r);
5558
- __pyx_t_2 = PyObject_IsInstance(__pyx_v__Engine__o, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 236, __pyx_L1_error)
5588
+ __pyx_t_2 = PyObject_IsInstance(__pyx_v__Engine__o, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self)))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 237, __pyx_L1_error)
5559
5589
  if (__pyx_t_2) {
5560
- __pyx_t_3 = PyObject_Hash(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_3 == ((Py_hash_t)-1))) __PYX_ERR(0, 236, __pyx_L1_error)
5561
- __pyx_t_4 = PyObject_Hash(__pyx_v__Engine__o); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(0, 236, __pyx_L1_error)
5562
- __pyx_t_5 = __Pyx_PyBool_FromLong((__pyx_t_3 == __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 236, __pyx_L1_error)
5590
+ __pyx_t_3 = PyObject_Hash(((PyObject *)__pyx_v_self)); if (unlikely(__pyx_t_3 == ((Py_hash_t)-1))) __PYX_ERR(0, 237, __pyx_L1_error)
5591
+ __pyx_t_4 = PyObject_Hash(__pyx_v__Engine__o); if (unlikely(__pyx_t_4 == ((Py_hash_t)-1))) __PYX_ERR(0, 237, __pyx_L1_error)
5592
+ __pyx_t_5 = __Pyx_PyBool_FromLong((__pyx_t_3 == __pyx_t_4)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 237, __pyx_L1_error)
5563
5593
  __Pyx_GOTREF(__pyx_t_5);
5564
5594
  __pyx_t_1 = __pyx_t_5;
5565
5595
  __pyx_t_5 = 0;
@@ -5571,7 +5601,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_12__eq__(struct __pyx_ob
5571
5601
  __pyx_t_1 = 0;
5572
5602
  goto __pyx_L0;
5573
5603
 
5574
- /* "mysqlengine/engine.py":235
5604
+ /* "mysqlengine/engine.py":236
5575
5605
  * return hash((self._server, self._databases_cls))
5576
5606
  *
5577
5607
  * def __eq__(self, __o: object) -> bool: # <<<<<<<<<<<<<<
@@ -5591,7 +5621,7 @@ static PyObject *__pyx_pf_11mysqlengine_6engine_6Engine_12__eq__(struct __pyx_ob
5591
5621
  return __pyx_r;
5592
5622
  }
5593
5623
 
5594
- /* "mysqlengine/engine.py":238
5624
+ /* "mysqlengine/engine.py":239
5595
5625
  * return hash(self) == hash(__o) if isinstance(__o, type(self)) else False
5596
5626
  *
5597
5627
  * def __len__(self) -> int: # <<<<<<<<<<<<<<
@@ -5617,7 +5647,7 @@ static Py_ssize_t __pyx_pw_11mysqlengine_6engine_6Engine_15__len__(PyObject *__p
5617
5647
  static Py_ssize_t __pyx_pf_11mysqlengine_6engine_6Engine_14__len__(struct __pyx_obj_11mysqlengine_6engine_Engine *__pyx_v_self) {
5618
5648
  Py_ssize_t __pyx_r;
5619
5649
 
5620
- /* "mysqlengine/engine.py":239
5650
+ /* "mysqlengine/engine.py":240
5621
5651
  *
5622
5652
  * def __len__(self) -> int:
5623
5653
  * return self._length # <<<<<<<<<<<<<<
@@ -5627,7 +5657,7 @@ static Py_ssize_t __pyx_pf_11mysqlengine_6engine_6Engine_14__len__(struct __pyx_
5627
5657
  __pyx_r = __pyx_v_self->_length;
5628
5658
  goto __pyx_L0;
5629
5659
 
5630
- /* "mysqlengine/engine.py":238
5660
+ /* "mysqlengine/engine.py":239
5631
5661
  * return hash(self) == hash(__o) if isinstance(__o, type(self)) else False
5632
5662
  *
5633
5663
  * def __len__(self) -> int: # <<<<<<<<<<<<<<
@@ -5640,12 +5670,12 @@ static Py_ssize_t __pyx_pf_11mysqlengine_6engine_6Engine_14__len__(struct __pyx_
5640
5670
  return __pyx_r;
5641
5671
  }
5642
5672
 
5643
- /* "mysqlengine/engine.py":241
5673
+ /* "mysqlengine/engine.py":242
5644
5674
  * return self._length
5645
5675
  *
5646
5676
  * def __del__(self): # <<<<<<<<<<<<<<
5647
- * self._server = None
5648
- * self._databases_cls = None
5677
+ * if not self._server._closed:
5678
+ * logger.error(
5649
5679
  */
5650
5680
 
5651
5681
  /* Python wrapper */
@@ -5663,11 +5693,119 @@ static void __pyx_pw_11mysqlengine_6engine_6Engine_17__del__(PyObject *__pyx_v_s
5663
5693
 
5664
5694
  static void __pyx_pf_11mysqlengine_6engine_6Engine_16__del__(struct __pyx_obj_11mysqlengine_6engine_Engine *__pyx_v_self) {
5665
5695
  __Pyx_RefNannyDeclarations
5696
+ int __pyx_t_1;
5697
+ PyObject *__pyx_t_2 = NULL;
5698
+ PyObject *__pyx_t_3 = NULL;
5699
+ PyObject *__pyx_t_4 = NULL;
5700
+ PyObject *__pyx_t_5 = NULL;
5701
+ int __pyx_t_6;
5702
+ int __pyx_lineno = 0;
5703
+ const char *__pyx_filename = NULL;
5704
+ int __pyx_clineno = 0;
5666
5705
  __Pyx_RefNannySetupContext("__del__", 1);
5667
5706
 
5668
- /* "mysqlengine/engine.py":242
5707
+ /* "mysqlengine/engine.py":243
5669
5708
  *
5670
5709
  * def __del__(self):
5710
+ * if not self._server._closed: # <<<<<<<<<<<<<<
5711
+ * logger.error(
5712
+ * "%s is not closed properly. Please call `disconnect()` "
5713
+ */
5714
+ __pyx_t_1 = (!__pyx_v_self->_server->__pyx_base._closed);
5715
+ if (__pyx_t_1) {
5716
+
5717
+ /* "mysqlengine/engine.py":244
5718
+ * def __del__(self):
5719
+ * if not self._server._closed:
5720
+ * logger.error( # <<<<<<<<<<<<<<
5721
+ * "%s is not closed properly. Please call `disconnect()` "
5722
+ * "to gracefully shutdown the Engine." % self
5723
+ */
5724
+ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 244, __pyx_L1_error)
5725
+ __Pyx_GOTREF(__pyx_t_3);
5726
+ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 244, __pyx_L1_error)
5727
+ __Pyx_GOTREF(__pyx_t_4);
5728
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
5729
+
5730
+ /* "mysqlengine/engine.py":246
5731
+ * logger.error(
5732
+ * "%s is not closed properly. Please call `disconnect()` "
5733
+ * "to gracefully shutdown the Engine." % self # <<<<<<<<<<<<<<
5734
+ * )
5735
+ * self._server._encure_closed()
5736
+ */
5737
+ __pyx_t_3 = PyUnicode_Format(__pyx_kp_u_s_is_not_closed_properly_Please, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 246, __pyx_L1_error)
5738
+ __Pyx_GOTREF(__pyx_t_3);
5739
+ __pyx_t_5 = NULL;
5740
+ __pyx_t_6 = 0;
5741
+ #if CYTHON_UNPACK_METHODS
5742
+ if (unlikely(PyMethod_Check(__pyx_t_4))) {
5743
+ __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
5744
+ if (likely(__pyx_t_5)) {
5745
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
5746
+ __Pyx_INCREF(__pyx_t_5);
5747
+ __Pyx_INCREF(function);
5748
+ __Pyx_DECREF_SET(__pyx_t_4, function);
5749
+ __pyx_t_6 = 1;
5750
+ }
5751
+ }
5752
+ #endif
5753
+ {
5754
+ PyObject *__pyx_callargs[2] = {__pyx_t_5, __pyx_t_3};
5755
+ __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 1+__pyx_t_6);
5756
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
5757
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
5758
+ if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 244, __pyx_L1_error)
5759
+ __Pyx_GOTREF(__pyx_t_2);
5760
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
5761
+ }
5762
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
5763
+
5764
+ /* "mysqlengine/engine.py":248
5765
+ * "to gracefully shutdown the Engine." % self
5766
+ * )
5767
+ * self._server._encure_closed() # <<<<<<<<<<<<<<
5768
+ * self._server = None
5769
+ * self._databases_cls = None
5770
+ */
5771
+ __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_server), __pyx_n_s_encure_closed); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 248, __pyx_L1_error)
5772
+ __Pyx_GOTREF(__pyx_t_4);
5773
+ __pyx_t_3 = NULL;
5774
+ __pyx_t_6 = 0;
5775
+ #if CYTHON_UNPACK_METHODS
5776
+ if (likely(PyMethod_Check(__pyx_t_4))) {
5777
+ __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
5778
+ if (likely(__pyx_t_3)) {
5779
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
5780
+ __Pyx_INCREF(__pyx_t_3);
5781
+ __Pyx_INCREF(function);
5782
+ __Pyx_DECREF_SET(__pyx_t_4, function);
5783
+ __pyx_t_6 = 1;
5784
+ }
5785
+ }
5786
+ #endif
5787
+ {
5788
+ PyObject *__pyx_callargs[2] = {__pyx_t_3, NULL};
5789
+ __pyx_t_2 = __Pyx_PyObject_FastCall(__pyx_t_4, __pyx_callargs+1-__pyx_t_6, 0+__pyx_t_6);
5790
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
5791
+ if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 248, __pyx_L1_error)
5792
+ __Pyx_GOTREF(__pyx_t_2);
5793
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
5794
+ }
5795
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
5796
+
5797
+ /* "mysqlengine/engine.py":243
5798
+ *
5799
+ * def __del__(self):
5800
+ * if not self._server._closed: # <<<<<<<<<<<<<<
5801
+ * logger.error(
5802
+ * "%s is not closed properly. Please call `disconnect()` "
5803
+ */
5804
+ }
5805
+
5806
+ /* "mysqlengine/engine.py":249
5807
+ * )
5808
+ * self._server._encure_closed()
5671
5809
  * self._server = None # <<<<<<<<<<<<<<
5672
5810
  * self._databases_cls = None
5673
5811
  * self._databases = None
@@ -5678,8 +5816,8 @@ static void __pyx_pf_11mysqlengine_6engine_6Engine_16__del__(struct __pyx_obj_11
5678
5816
  __Pyx_DECREF((PyObject *)__pyx_v_self->_server);
5679
5817
  __pyx_v_self->_server = ((struct __pyx_obj_11mysqlengine_10connection_Server *)Py_None);
5680
5818
 
5681
- /* "mysqlengine/engine.py":243
5682
- * def __del__(self):
5819
+ /* "mysqlengine/engine.py":250
5820
+ * self._server._encure_closed()
5683
5821
  * self._server = None
5684
5822
  * self._databases_cls = None # <<<<<<<<<<<<<<
5685
5823
  * self._databases = None
@@ -5690,7 +5828,7 @@ static void __pyx_pf_11mysqlengine_6engine_6Engine_16__del__(struct __pyx_obj_11
5690
5828
  __Pyx_DECREF(__pyx_v_self->_databases_cls);
5691
5829
  __pyx_v_self->_databases_cls = ((PyObject*)Py_None);
5692
5830
 
5693
- /* "mysqlengine/engine.py":244
5831
+ /* "mysqlengine/engine.py":251
5694
5832
  * self._server = None
5695
5833
  * self._databases_cls = None
5696
5834
  * self._databases = None # <<<<<<<<<<<<<<
@@ -5701,15 +5839,23 @@ static void __pyx_pf_11mysqlengine_6engine_6Engine_16__del__(struct __pyx_obj_11
5701
5839
  __Pyx_DECREF(__pyx_v_self->_databases);
5702
5840
  __pyx_v_self->_databases = ((PyObject*)Py_None);
5703
5841
 
5704
- /* "mysqlengine/engine.py":241
5842
+ /* "mysqlengine/engine.py":242
5705
5843
  * return self._length
5706
5844
  *
5707
5845
  * def __del__(self): # <<<<<<<<<<<<<<
5708
- * self._server = None
5709
- * self._databases_cls = None
5846
+ * if not self._server._closed:
5847
+ * logger.error(
5710
5848
  */
5711
5849
 
5712
5850
  /* function exit code */
5851
+ goto __pyx_L0;
5852
+ __pyx_L1_error:;
5853
+ __Pyx_XDECREF(__pyx_t_2);
5854
+ __Pyx_XDECREF(__pyx_t_3);
5855
+ __Pyx_XDECREF(__pyx_t_4);
5856
+ __Pyx_XDECREF(__pyx_t_5);
5857
+ __Pyx_WriteUnraisable("mysqlengine.engine.Engine.__del__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
5858
+ __pyx_L0:;
5713
5859
  __Pyx_RefNannyFinishContext();
5714
5860
  }
5715
5861
 
@@ -7237,11 +7383,11 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
7237
7383
  {&__pyx_kp_u_Engine_The_database_access_name, __pyx_k_Engine_The_database_access_name, sizeof(__pyx_k_Engine_The_database_access_name), 0, 1, 0, 0},
7238
7384
  {&__pyx_kp_u_Engine_The_databases_argument_c, __pyx_k_Engine_The_databases_argument_c, sizeof(__pyx_k_Engine_The_databases_argument_c), 0, 1, 0, 0},
7239
7385
  {&__pyx_kp_u_Engine_The_value_of_the_databas, __pyx_k_Engine_The_value_of_the_databas, sizeof(__pyx_k_Engine_The_value_of_the_databas), 0, 1, 0, 0},
7240
- {&__pyx_kp_u_Engine___init___line_36, __pyx_k_Engine___init___line_36, sizeof(__pyx_k_Engine___init___line_36), 0, 1, 0, 0},
7386
+ {&__pyx_kp_u_Engine___init___line_37, __pyx_k_Engine___init___line_37, sizeof(__pyx_k_Engine___init___line_37), 0, 1, 0, 0},
7241
7387
  {&__pyx_n_s_Engine___reduce_cython, __pyx_k_Engine___reduce_cython, sizeof(__pyx_k_Engine___reduce_cython), 0, 0, 1, 1},
7242
7388
  {&__pyx_n_s_Engine___setstate_cython, __pyx_k_Engine___setstate_cython, sizeof(__pyx_k_Engine___setstate_cython), 0, 0, 1, 1},
7243
7389
  {&__pyx_n_s_Engine_access, __pyx_k_Engine_access, sizeof(__pyx_k_Engine_access), 0, 0, 1, 1},
7244
- {&__pyx_kp_u_Engine_access_line_115, __pyx_k_Engine_access_line_115, sizeof(__pyx_k_Engine_access_line_115), 0, 1, 0, 0},
7390
+ {&__pyx_kp_u_Engine_access_line_116, __pyx_k_Engine_access_line_116, sizeof(__pyx_k_Engine_access_line_116), 0, 1, 0, 0},
7245
7391
  {&__pyx_kp_u_Engine_databases_s, __pyx_k_Engine_databases_s, sizeof(__pyx_k_Engine_databases_s), 0, 1, 0, 0},
7246
7392
  {&__pyx_n_s_Engine_disconnect, __pyx_k_Engine_disconnect, sizeof(__pyx_k_Engine_disconnect), 0, 0, 1, 1},
7247
7393
  {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0},
@@ -7273,7 +7419,9 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
7273
7419
  {&__pyx_kp_u_disable, __pyx_k_disable, sizeof(__pyx_k_disable), 0, 1, 0, 0},
7274
7420
  {&__pyx_n_s_disconnect, __pyx_k_disconnect, sizeof(__pyx_k_disconnect), 0, 0, 1, 1},
7275
7421
  {&__pyx_kp_u_enable, __pyx_k_enable, sizeof(__pyx_k_enable), 0, 1, 0, 0},
7422
+ {&__pyx_n_s_encure_closed, __pyx_k_encure_closed, sizeof(__pyx_k_encure_closed), 0, 0, 1, 1},
7276
7423
  {&__pyx_n_s_err, __pyx_k_err, sizeof(__pyx_k_err), 0, 0, 1, 1},
7424
+ {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
7277
7425
  {&__pyx_n_s_errors, __pyx_k_errors, sizeof(__pyx_k_errors), 0, 0, 1, 1},
7278
7426
  {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
7279
7427
  {&__pyx_kp_u_gc, __pyx_k_gc, sizeof(__pyx_k_gc), 0, 1, 0, 0},
@@ -7283,11 +7431,13 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
7283
7431
  {&__pyx_n_s_initiate, __pyx_k_initiate, sizeof(__pyx_k_initiate), 0, 0, 1, 1},
7284
7432
  {&__pyx_n_s_is_coroutine, __pyx_k_is_coroutine, sizeof(__pyx_k_is_coroutine), 0, 0, 1, 1},
7285
7433
  {&__pyx_kp_u_isenabled, __pyx_k_isenabled, sizeof(__pyx_k_isenabled), 0, 1, 0, 0},
7434
+ {&__pyx_n_s_logger, __pyx_k_logger, sizeof(__pyx_k_logger), 0, 0, 1, 1},
7286
7435
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
7287
7436
  {&__pyx_n_s_mysqlengine, __pyx_k_mysqlengine, sizeof(__pyx_k_mysqlengine), 0, 0, 1, 1},
7288
7437
  {&__pyx_n_s_mysqlengine_connection, __pyx_k_mysqlengine_connection, sizeof(__pyx_k_mysqlengine_connection), 0, 0, 1, 1},
7289
7438
  {&__pyx_n_s_mysqlengine_database, __pyx_k_mysqlengine_database, sizeof(__pyx_k_mysqlengine_database), 0, 0, 1, 1},
7290
7439
  {&__pyx_n_s_mysqlengine_engine, __pyx_k_mysqlengine_engine, sizeof(__pyx_k_mysqlengine_engine), 0, 0, 1, 1},
7440
+ {&__pyx_n_s_mysqlengine_logs, __pyx_k_mysqlengine_logs, sizeof(__pyx_k_mysqlengine_logs), 0, 0, 1, 1},
7291
7441
  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
7292
7442
  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
7293
7443
  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
@@ -7302,6 +7452,7 @@ static int __Pyx_CreateStringTabAndInitStrings(void) {
7302
7452
  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
7303
7453
  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
7304
7454
  {&__pyx_n_s_return, __pyx_k_return, sizeof(__pyx_k_return), 0, 0, 1, 1},
7455
+ {&__pyx_kp_u_s_is_not_closed_properly_Please, __pyx_k_s_is_not_closed_properly_Please, sizeof(__pyx_k_s_is_not_closed_properly_Please), 0, 1, 0, 0},
7305
7456
  {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
7306
7457
  {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
7307
7458
  {&__pyx_n_s_server, __pyx_k_server, sizeof(__pyx_k_server), 0, 0, 1, 1},
@@ -7343,30 +7494,30 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
7343
7494
  __Pyx_GOTREF(__pyx_tuple__4);
7344
7495
  __Pyx_GIVEREF(__pyx_tuple__4);
7345
7496
 
7346
- /* "mysqlengine/engine.py":115
7497
+ /* "mysqlengine/engine.py":116
7347
7498
  *
7348
7499
  * # Access -------------------------------------------------------------------------------------
7349
7500
  * async def access(self, db: str, **init_args: Any) -> Database: # <<<<<<<<<<<<<<
7350
7501
  * """Accesses a specific database on the Server.
7351
7502
  *
7352
7503
  */
7353
- __pyx_tuple__6 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_db, __pyx_n_s_init_args, __pyx_n_s_cache_key, __pyx_n_s_db_cls, __pyx_n_s_db_ins, __pyx_n_s_err); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 115, __pyx_L1_error)
7504
+ __pyx_tuple__6 = PyTuple_Pack(7, __pyx_n_s_self, __pyx_n_s_db, __pyx_n_s_init_args, __pyx_n_s_cache_key, __pyx_n_s_db_cls, __pyx_n_s_db_ins, __pyx_n_s_err); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 116, __pyx_L1_error)
7354
7505
  __Pyx_GOTREF(__pyx_tuple__6);
7355
7506
  __Pyx_GIVEREF(__pyx_tuple__6);
7356
- __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_mysqlengine_engine_py, __pyx_n_s_access, 115, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 115, __pyx_L1_error)
7507
+ __pyx_codeobj_ = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 7, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_VARKEYWORDS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__6, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_mysqlengine_engine_py, __pyx_n_s_access, 116, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj_)) __PYX_ERR(0, 116, __pyx_L1_error)
7357
7508
 
7358
- /* "mysqlengine/engine.py":207
7509
+ /* "mysqlengine/engine.py":208
7359
7510
  *
7360
7511
  * # Disconnect ---------------------------------------------------------------------------------
7361
7512
  * async def disconnect(self, countdown: Union[int, None] = None) -> None: # <<<<<<<<<<<<<<
7362
7513
  * """Disconnect from the Server.
7363
7514
  *
7364
7515
  */
7365
- __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_countdown); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 207, __pyx_L1_error)
7516
+ __pyx_tuple__7 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_countdown); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 208, __pyx_L1_error)
7366
7517
  __Pyx_GOTREF(__pyx_tuple__7);
7367
7518
  __Pyx_GIVEREF(__pyx_tuple__7);
7368
- __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_mysqlengine_engine_py, __pyx_n_s_disconnect, 207, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 207, __pyx_L1_error)
7369
- __pyx_tuple__8 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 207, __pyx_L1_error)
7519
+ __pyx_codeobj__3 = (PyObject*)__Pyx_PyCode_New(2, 0, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS|CO_COROUTINE, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__7, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_mysqlengine_engine_py, __pyx_n_s_disconnect, 208, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__3)) __PYX_ERR(0, 208, __pyx_L1_error)
7520
+ __pyx_tuple__8 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 208, __pyx_L1_error)
7370
7521
  __Pyx_GOTREF(__pyx_tuple__8);
7371
7522
  __Pyx_GIVEREF(__pyx_tuple__8);
7372
7523
 
@@ -7466,15 +7617,15 @@ static int __Pyx_modinit_type_init_code(void) {
7466
7617
  __pyx_vtabptr_11mysqlengine_6engine_Engine = &__pyx_vtable_11mysqlengine_6engine_Engine;
7467
7618
  __pyx_vtable_11mysqlengine_6engine_Engine._validate_databases = (PyObject *(*)(struct __pyx_obj_11mysqlengine_6engine_Engine *, PyObject *))__pyx_f_11mysqlengine_6engine_6Engine__validate_databases;
7468
7619
  #if CYTHON_USE_TYPE_SPECS
7469
- __pyx_ptype_11mysqlengine_6engine_Engine = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine_Engine_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine_Engine)) __PYX_ERR(0, 26, __pyx_L1_error)
7470
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine_Engine_spec, __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7620
+ __pyx_ptype_11mysqlengine_6engine_Engine = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine_Engine_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine_Engine)) __PYX_ERR(0, 27, __pyx_L1_error)
7621
+ if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine_Engine_spec, __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7471
7622
  #else
7472
7623
  __pyx_ptype_11mysqlengine_6engine_Engine = &__pyx_type_11mysqlengine_6engine_Engine;
7473
7624
  #endif
7474
7625
  #if !CYTHON_COMPILING_IN_LIMITED_API
7475
7626
  #endif
7476
7627
  #if !CYTHON_USE_TYPE_SPECS
7477
- if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7628
+ if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7478
7629
  #endif
7479
7630
  #if PY_MAJOR_VERSION < 3
7480
7631
  __pyx_ptype_11mysqlengine_6engine_Engine->tp_print = 0;
@@ -7486,7 +7637,7 @@ static int __Pyx_modinit_type_init_code(void) {
7486
7637
  #endif
7487
7638
  #if CYTHON_UPDATE_DESCRIPTOR_DOC
7488
7639
  {
7489
- PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 26, __pyx_L1_error)
7640
+ PyObject *wrapper = PyObject_GetAttrString((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, "__init__"); if (unlikely(!wrapper)) __PYX_ERR(0, 27, __pyx_L1_error)
7490
7641
  if (__Pyx_IS_TYPE(wrapper, &PyWrapperDescr_Type)) {
7491
7642
  __pyx_wrapperbase_11mysqlengine_6engine_6Engine___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
7492
7643
  __pyx_wrapperbase_11mysqlengine_6engine_6Engine___init__.doc = __pyx_doc_11mysqlengine_6engine_6Engine___init__;
@@ -7494,24 +7645,24 @@ static int __Pyx_modinit_type_init_code(void) {
7494
7645
  }
7495
7646
  }
7496
7647
  #endif
7497
- if (__Pyx_SetVtable(__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_vtabptr_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7648
+ if (__Pyx_SetVtable(__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_vtabptr_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7498
7649
  #if !CYTHON_COMPILING_IN_LIMITED_API
7499
- if (__Pyx_MergeVtables(__pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7650
+ if (__Pyx_MergeVtables(__pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7500
7651
  #endif
7501
- if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Engine, (PyObject *) __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7652
+ if (PyObject_SetAttr(__pyx_m, __pyx_n_s_Engine, (PyObject *) __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7502
7653
  #if !CYTHON_COMPILING_IN_LIMITED_API
7503
- if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
7654
+ if (__Pyx_setup_reduce((PyObject *) __pyx_ptype_11mysqlengine_6engine_Engine) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
7504
7655
  #endif
7505
7656
  #if CYTHON_USE_TYPE_SPECS
7506
- __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine___pyx_scope_struct__access_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access)) __PYX_ERR(0, 115, __pyx_L1_error)
7507
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine___pyx_scope_struct__access_spec, __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
7657
+ __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine___pyx_scope_struct__access_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access)) __PYX_ERR(0, 116, __pyx_L1_error)
7658
+ if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine___pyx_scope_struct__access_spec, __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
7508
7659
  #else
7509
7660
  __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access = &__pyx_type_11mysqlengine_6engine___pyx_scope_struct__access;
7510
7661
  #endif
7511
7662
  #if !CYTHON_COMPILING_IN_LIMITED_API
7512
7663
  #endif
7513
7664
  #if !CYTHON_USE_TYPE_SPECS
7514
- if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
7665
+ if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
7515
7666
  #endif
7516
7667
  #if PY_MAJOR_VERSION < 3
7517
7668
  __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct__access->tp_print = 0;
@@ -7522,15 +7673,15 @@ static int __Pyx_modinit_type_init_code(void) {
7522
7673
  }
7523
7674
  #endif
7524
7675
  #if CYTHON_USE_TYPE_SPECS
7525
- __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine___pyx_scope_struct_1_disconnect_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect)) __PYX_ERR(0, 207, __pyx_L1_error)
7526
- if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine___pyx_scope_struct_1_disconnect_spec, __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
7676
+ __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect = (PyTypeObject *) __Pyx_PyType_FromModuleAndSpec(__pyx_m, &__pyx_type_11mysqlengine_6engine___pyx_scope_struct_1_disconnect_spec, NULL); if (unlikely(!__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect)) __PYX_ERR(0, 208, __pyx_L1_error)
7677
+ if (__Pyx_fix_up_extension_type_from_spec(&__pyx_type_11mysqlengine_6engine___pyx_scope_struct_1_disconnect_spec, __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
7527
7678
  #else
7528
7679
  __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect = &__pyx_type_11mysqlengine_6engine___pyx_scope_struct_1_disconnect;
7529
7680
  #endif
7530
7681
  #if !CYTHON_COMPILING_IN_LIMITED_API
7531
7682
  #endif
7532
7683
  #if !CYTHON_USE_TYPE_SPECS
7533
- if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
7684
+ if (__Pyx_PyType_Ready(__pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
7534
7685
  #endif
7535
7686
  #if PY_MAJOR_VERSION < 3
7536
7687
  __pyx_ptype_11mysqlengine_6engine___pyx_scope_struct_1_disconnect->tp_print = 0;
@@ -7950,8 +8101,8 @@ if (!__Pyx_RefNanny) {
7950
8101
  *
7951
8102
  * # Python imports
7952
8103
  * from typing import Any, Union # <<<<<<<<<<<<<<
8104
+ * from mysqlengine.logs import logger
7953
8105
  * from mysqlengine import errors, utils
7954
- * from mysqlengine.connection import Server
7955
8106
  */
7956
8107
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error)
7957
8108
  __Pyx_GOTREF(__pyx_t_2);
@@ -7977,122 +8128,143 @@ if (!__Pyx_RefNanny) {
7977
8128
  /* "mysqlengine/engine.py":17
7978
8129
  * # Python imports
7979
8130
  * from typing import Any, Union
7980
- * from mysqlengine import errors, utils # <<<<<<<<<<<<<<
8131
+ * from mysqlengine.logs import logger # <<<<<<<<<<<<<<
8132
+ * from mysqlengine import errors, utils
7981
8133
  * from mysqlengine.connection import Server
7982
- * from mysqlengine.database import Database
7983
8134
  */
7984
- __pyx_t_3 = PyList_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
8135
+ __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
7985
8136
  __Pyx_GOTREF(__pyx_t_3);
7986
- __Pyx_INCREF(__pyx_n_s_errors);
7987
- __Pyx_GIVEREF(__pyx_n_s_errors);
7988
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_errors)) __PYX_ERR(0, 17, __pyx_L1_error);
7989
- __Pyx_INCREF(__pyx_n_s_utils);
7990
- __Pyx_GIVEREF(__pyx_n_s_utils);
7991
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_utils)) __PYX_ERR(0, 17, __pyx_L1_error);
7992
- __pyx_t_2 = __Pyx_Import(__pyx_n_s_mysqlengine, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error)
8137
+ __Pyx_INCREF(__pyx_n_s_logger);
8138
+ __Pyx_GIVEREF(__pyx_n_s_logger);
8139
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_logger)) __PYX_ERR(0, 17, __pyx_L1_error);
8140
+ __pyx_t_2 = __Pyx_Import(__pyx_n_s_mysqlengine_logs, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 17, __pyx_L1_error)
7993
8141
  __Pyx_GOTREF(__pyx_t_2);
7994
8142
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
7995
- __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_errors); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
8143
+ __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_logger); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
7996
8144
  __Pyx_GOTREF(__pyx_t_3);
7997
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_errors, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
7998
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
7999
- __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_utils); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 17, __pyx_L1_error)
8000
- __Pyx_GOTREF(__pyx_t_3);
8001
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_utils, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
8145
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_logger, __pyx_t_3) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
8002
8146
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8003
8147
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8004
8148
 
8005
8149
  /* "mysqlengine/engine.py":18
8006
8150
  * from typing import Any, Union
8151
+ * from mysqlengine.logs import logger
8152
+ * from mysqlengine import errors, utils # <<<<<<<<<<<<<<
8153
+ * from mysqlengine.connection import Server
8154
+ * from mysqlengine.database import Database
8155
+ */
8156
+ __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
8157
+ __Pyx_GOTREF(__pyx_t_2);
8158
+ __Pyx_INCREF(__pyx_n_s_errors);
8159
+ __Pyx_GIVEREF(__pyx_n_s_errors);
8160
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_errors)) __PYX_ERR(0, 18, __pyx_L1_error);
8161
+ __Pyx_INCREF(__pyx_n_s_utils);
8162
+ __Pyx_GIVEREF(__pyx_n_s_utils);
8163
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_utils)) __PYX_ERR(0, 18, __pyx_L1_error);
8164
+ __pyx_t_3 = __Pyx_Import(__pyx_n_s_mysqlengine, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error)
8165
+ __Pyx_GOTREF(__pyx_t_3);
8166
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8167
+ __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_errors); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
8168
+ __Pyx_GOTREF(__pyx_t_2);
8169
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_errors, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
8170
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8171
+ __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_utils); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
8172
+ __Pyx_GOTREF(__pyx_t_2);
8173
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_utils, __pyx_t_2) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
8174
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8175
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8176
+
8177
+ /* "mysqlengine/engine.py":19
8178
+ * from mysqlengine.logs import logger
8007
8179
  * from mysqlengine import errors, utils
8008
8180
  * from mysqlengine.connection import Server # <<<<<<<<<<<<<<
8009
8181
  * from mysqlengine.database import Database
8010
8182
  *
8011
8183
  */
8012
- __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __pyx_L1_error)
8013
- __Pyx_GOTREF(__pyx_t_2);
8184
+ __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
8185
+ __Pyx_GOTREF(__pyx_t_3);
8014
8186
  __Pyx_INCREF(__pyx_n_s_Server);
8015
8187
  __Pyx_GIVEREF(__pyx_n_s_Server);
8016
- if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Server)) __PYX_ERR(0, 18, __pyx_L1_error);
8017
- __pyx_t_3 = __Pyx_Import(__pyx_n_s_mysqlengine_connection, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 18, __pyx_L1_error)
8018
- __Pyx_GOTREF(__pyx_t_3);
8019
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8188
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Server)) __PYX_ERR(0, 19, __pyx_L1_error);
8189
+ __pyx_t_2 = __Pyx_Import(__pyx_n_s_mysqlengine_connection, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
8190
+ __Pyx_GOTREF(__pyx_t_2);
8020
8191
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8192
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8021
8193
 
8022
- /* "mysqlengine/engine.py":19
8194
+ /* "mysqlengine/engine.py":20
8023
8195
  * from mysqlengine import errors, utils
8024
8196
  * from mysqlengine.connection import Server
8025
8197
  * from mysqlengine.database import Database # <<<<<<<<<<<<<<
8026
8198
  *
8027
8199
  * __all__ = ["Engine"]
8028
8200
  */
8029
- __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
8030
- __Pyx_GOTREF(__pyx_t_3);
8201
+ __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
8202
+ __Pyx_GOTREF(__pyx_t_2);
8031
8203
  __Pyx_INCREF(__pyx_n_s_Database);
8032
8204
  __Pyx_GIVEREF(__pyx_n_s_Database);
8033
- if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s_Database)) __PYX_ERR(0, 19, __pyx_L1_error);
8034
- __pyx_t_2 = __Pyx_Import(__pyx_n_s_mysqlengine_database, __pyx_t_3, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error)
8035
- __Pyx_GOTREF(__pyx_t_2);
8036
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8037
- __pyx_t_3 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Database); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 19, __pyx_L1_error)
8205
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Database)) __PYX_ERR(0, 20, __pyx_L1_error);
8206
+ __pyx_t_3 = __Pyx_Import(__pyx_n_s_mysqlengine_database, __pyx_t_2, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 20, __pyx_L1_error)
8038
8207
  __Pyx_GOTREF(__pyx_t_3);
8039
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_Database, __pyx_t_3) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
8040
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8041
8208
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8209
+ __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Database); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __pyx_L1_error)
8210
+ __Pyx_GOTREF(__pyx_t_2);
8211
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_Database, __pyx_t_2) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
8212
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8213
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8042
8214
 
8043
- /* "mysqlengine/engine.py":21
8215
+ /* "mysqlengine/engine.py":22
8044
8216
  * from mysqlengine.database import Database
8045
8217
  *
8046
8218
  * __all__ = ["Engine"] # <<<<<<<<<<<<<<
8047
8219
  *
8048
8220
  *
8049
8221
  */
8050
- __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error)
8051
- __Pyx_GOTREF(__pyx_t_2);
8222
+ __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 22, __pyx_L1_error)
8223
+ __Pyx_GOTREF(__pyx_t_3);
8052
8224
  __Pyx_INCREF(__pyx_n_u_Engine);
8053
8225
  __Pyx_GIVEREF(__pyx_n_u_Engine);
8054
- if (__Pyx_PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_u_Engine)) __PYX_ERR(0, 21, __pyx_L1_error);
8055
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
8056
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8226
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_u_Engine)) __PYX_ERR(0, 22, __pyx_L1_error);
8227
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_all, __pyx_t_3) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
8228
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8057
8229
 
8058
- /* "mysqlengine/engine.py":115
8230
+ /* "mysqlengine/engine.py":116
8059
8231
  *
8060
8232
  * # Access -------------------------------------------------------------------------------------
8061
8233
  * async def access(self, db: str, **init_args: Any) -> Database: # <<<<<<<<<<<<<<
8062
8234
  * """Accesses a specific database on the Server.
8063
8235
  *
8064
8236
  */
8065
- __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 115, __pyx_L1_error)
8066
- __Pyx_GOTREF(__pyx_t_2);
8067
- if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_db, __pyx_n_s_str) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
8068
- if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_init_args, __pyx_n_s_Any) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
8069
- if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_Database) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
8070
- __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_3access, __Pyx_CYFUNCTION_CCLASS | __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_Engine_access, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
8237
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 116, __pyx_L1_error)
8071
8238
  __Pyx_GOTREF(__pyx_t_3);
8072
- __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
8073
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8074
- if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_access, __pyx_t_3) < 0) __PYX_ERR(0, 115, __pyx_L1_error)
8239
+ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_db, __pyx_n_s_str) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
8240
+ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_init_args, __pyx_n_s_Any) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
8241
+ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_Database) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
8242
+ __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_3access, __Pyx_CYFUNCTION_CCLASS | __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_Engine_access, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 116, __pyx_L1_error)
8243
+ __Pyx_GOTREF(__pyx_t_2);
8244
+ __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
8075
8245
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8246
+ if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_access, __pyx_t_2) < 0) __PYX_ERR(0, 116, __pyx_L1_error)
8247
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8076
8248
  PyType_Modified(__pyx_ptype_11mysqlengine_6engine_Engine);
8077
8249
 
8078
- /* "mysqlengine/engine.py":207
8250
+ /* "mysqlengine/engine.py":208
8079
8251
  *
8080
8252
  * # Disconnect ---------------------------------------------------------------------------------
8081
8253
  * async def disconnect(self, countdown: Union[int, None] = None) -> None: # <<<<<<<<<<<<<<
8082
8254
  * """Disconnect from the Server.
8083
8255
  *
8084
8256
  */
8085
- __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 207, __pyx_L1_error)
8086
- __Pyx_GOTREF(__pyx_t_3);
8087
- if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_countdown, __pyx_kp_s_Union_int_None) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
8088
- if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_s_None) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
8089
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_6disconnect, __Pyx_CYFUNCTION_CCLASS | __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_Engine_disconnect, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 207, __pyx_L1_error)
8257
+ __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 208, __pyx_L1_error)
8090
8258
  __Pyx_GOTREF(__pyx_t_2);
8091
- __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_2, __pyx_tuple__8);
8092
- __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_3);
8093
- __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8094
- if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_disconnect, __pyx_t_2) < 0) __PYX_ERR(0, 207, __pyx_L1_error)
8259
+ if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_countdown, __pyx_kp_s_Union_int_None) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
8260
+ if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_s_None) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
8261
+ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_6disconnect, __Pyx_CYFUNCTION_CCLASS | __Pyx_CYFUNCTION_COROUTINE, __pyx_n_s_Engine_disconnect, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__3)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 208, __pyx_L1_error)
8262
+ __Pyx_GOTREF(__pyx_t_3);
8263
+ __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__8);
8264
+ __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_2);
8095
8265
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8266
+ if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_disconnect, __pyx_t_3) < 0) __PYX_ERR(0, 208, __pyx_L1_error)
8267
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8096
8268
  PyType_Modified(__pyx_ptype_11mysqlengine_6engine_Engine);
8097
8269
 
8098
8270
  /* "(tree fragment)":1
@@ -8100,10 +8272,10 @@ if (!__Pyx_RefNanny) {
8100
8272
  * cdef tuple state
8101
8273
  * cdef object _dict
8102
8274
  */
8103
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_19__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Engine___reduce_cython, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error)
8104
- __Pyx_GOTREF(__pyx_t_2);
8105
- if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_reduce_cython, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
8106
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8275
+ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_19__reduce_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Engine___reduce_cython, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__10)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error)
8276
+ __Pyx_GOTREF(__pyx_t_3);
8277
+ if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_reduce_cython, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
8278
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8107
8279
  PyType_Modified(__pyx_ptype_11mysqlengine_6engine_Engine);
8108
8280
 
8109
8281
  /* "(tree fragment)":16
@@ -8112,10 +8284,10 @@ if (!__Pyx_RefNanny) {
8112
8284
  * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
8113
8285
  * __pyx_unpickle_Engine__set_state(self, __pyx_state)
8114
8286
  */
8115
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_21__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Engine___setstate_cython, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 16, __pyx_L1_error)
8116
- __Pyx_GOTREF(__pyx_t_2);
8117
- if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_setstate_cython, __pyx_t_2) < 0) __PYX_ERR(1, 16, __pyx_L1_error)
8118
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8287
+ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_6Engine_21__setstate_cython__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Engine___setstate_cython, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 16, __pyx_L1_error)
8288
+ __Pyx_GOTREF(__pyx_t_3);
8289
+ if (__Pyx_SetItemOnTypeDict((PyObject *)__pyx_ptype_11mysqlengine_6engine_Engine, __pyx_n_s_setstate_cython, __pyx_t_3) < 0) __PYX_ERR(1, 16, __pyx_L1_error)
8290
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8119
8291
  PyType_Modified(__pyx_ptype_11mysqlengine_6engine_Engine);
8120
8292
 
8121
8293
  /* "(tree fragment)":1
@@ -8123,22 +8295,22 @@ if (!__Pyx_RefNanny) {
8123
8295
  * cdef object __pyx_PickleError
8124
8296
  * cdef object __pyx_result
8125
8297
  */
8126
- __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_1__pyx_unpickle_Engine, 0, __pyx_n_s_pyx_unpickle_Engine, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1, __pyx_L1_error)
8127
- __Pyx_GOTREF(__pyx_t_2);
8128
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Engine, __pyx_t_2) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
8129
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8298
+ __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11mysqlengine_6engine_1__pyx_unpickle_Engine, 0, __pyx_n_s_pyx_unpickle_Engine, NULL, __pyx_n_s_mysqlengine_engine, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1, __pyx_L1_error)
8299
+ __Pyx_GOTREF(__pyx_t_3);
8300
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Engine, __pyx_t_3) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
8301
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8130
8302
 
8131
8303
  /* "mysqlengine/engine.py":1
8132
8304
  * # cython: language_level=3 # <<<<<<<<<<<<<<
8133
8305
  * # cython: wraparound=False
8134
8306
  * # cython: boundscheck=False
8135
8307
  */
8136
- __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
8137
- __Pyx_GOTREF(__pyx_t_2);
8138
- if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_Engine___init___line_36, __pyx_kp_u_The_proxy_for_accessing_Database) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8139
- if (PyDict_SetItem(__pyx_t_2, __pyx_kp_u_Engine_access_line_115, __pyx_kp_u_Accesses_a_specific_database_on) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8140
- if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8141
- __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
8308
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1, __pyx_L1_error)
8309
+ __Pyx_GOTREF(__pyx_t_3);
8310
+ if (PyDict_SetItem(__pyx_t_3, __pyx_kp_u_Engine___init___line_37, __pyx_kp_u_The_proxy_for_accessing_Database) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8311
+ if (PyDict_SetItem(__pyx_t_3, __pyx_kp_u_Engine_access_line_116, __pyx_kp_u_Accesses_a_specific_database_on) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8312
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_3) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
8313
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
8142
8314
 
8143
8315
  /*--- Wrapped vars code ---*/
8144
8316
 
@@ -11557,6 +11729,50 @@ static CYTHON_INLINE PyObject* __Pyx_Coroutine_Yield_From(__pyx_CoroutineObject
11557
11729
  "generator raised StopIteration");
11558
11730
  }
11559
11731
 
11732
+ /* WriteUnraisableException */
11733
+ static void __Pyx_WriteUnraisable(const char *name, int clineno,
11734
+ int lineno, const char *filename,
11735
+ int full_traceback, int nogil) {
11736
+ PyObject *old_exc, *old_val, *old_tb;
11737
+ PyObject *ctx;
11738
+ __Pyx_PyThreadState_declare
11739
+ #ifdef WITH_THREAD
11740
+ PyGILState_STATE state;
11741
+ if (nogil)
11742
+ state = PyGILState_Ensure();
11743
+ else state = (PyGILState_STATE)0;
11744
+ #endif
11745
+ CYTHON_UNUSED_VAR(clineno);
11746
+ CYTHON_UNUSED_VAR(lineno);
11747
+ CYTHON_UNUSED_VAR(filename);
11748
+ CYTHON_MAYBE_UNUSED_VAR(nogil);
11749
+ __Pyx_PyThreadState_assign
11750
+ __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
11751
+ if (full_traceback) {
11752
+ Py_XINCREF(old_exc);
11753
+ Py_XINCREF(old_val);
11754
+ Py_XINCREF(old_tb);
11755
+ __Pyx_ErrRestore(old_exc, old_val, old_tb);
11756
+ PyErr_PrintEx(1);
11757
+ }
11758
+ #if PY_MAJOR_VERSION < 3
11759
+ ctx = PyString_FromString(name);
11760
+ #else
11761
+ ctx = PyUnicode_FromString(name);
11762
+ #endif
11763
+ __Pyx_ErrRestore(old_exc, old_val, old_tb);
11764
+ if (!ctx) {
11765
+ PyErr_WriteUnraisable(Py_None);
11766
+ } else {
11767
+ PyErr_WriteUnraisable(ctx);
11768
+ Py_DECREF(ctx);
11769
+ }
11770
+ #ifdef WITH_THREAD
11771
+ if (nogil)
11772
+ PyGILState_Release(state);
11773
+ #endif
11774
+ }
11775
+
11560
11776
  /* KeywordStringCheck */
11561
11777
  static int __Pyx_CheckKeywordStrings(
11562
11778
  PyObject *kw,