From 850d44a105d54aba22620d76e33a5bd6652c2860 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 17 May 2021 18:07:08 +0200 Subject: [PATCH] Added docs to cpl.utils --- docs/build/doctrees/cpl.utils.doctree | Bin 47210 -> 71356 bytes docs/build/doctrees/environment.pickle | Bin 126993 -> 126954 bytes docs/build/html/cpl.utils.html | 166 ++++++++++++++++++------- docs/build/html/searchindex.js | 2 +- src/cpl/utils/credential_manager.py | 49 +++++--- src/cpl/utils/pip.py | 95 +++++++------- src/cpl/utils/string.py | 67 ++++++---- 7 files changed, 250 insertions(+), 129 deletions(-) diff --git a/docs/build/doctrees/cpl.utils.doctree b/docs/build/doctrees/cpl.utils.doctree index 61b891e328a6ac3c2612fafc8ad796651cdcce95..b1298186b84c5f748c9c0d263c2fa5be576c0612 100644 GIT binary patch literal 71356 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 M(b4Q*cXs;!1C=a6^Z)<= literal 47210 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 Dx%_^F diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index 4ad70fc3b756c07c263b1409e28505e81e137bbd..fbb9b765a44f2cd077f7d4a9b2edf12e4b501e13 100644 GIT binary patch literal 126954 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�nF4wEBWvU%b&8q~01X|LY4|p_ ze&vA9Fj8A(h~_TD#Urs5>=_FU%S9HxJA(_GJKc0r{xGsg56)>`mXUV1-pK|=81*4v z9HEBnc5$I?Mdi4_nL=z;fml2~Wfp_5k2?c-R`~%Ji<>a;$f;WT33p}aFZA(%w&pWX zPn!mP-C|dudnv=7?u)7F9%RWa;667yT^kfVH&n2R#y+HBjL*jt;otlak%J|Oi2LJ3 zYDYv4TSRCanJ0{jymXFHIciZMZ_TAbx4ttPCoCG{WdajGH8s;m%{gTe84rXmYiB@S zwrJ2c;#6bIF*z}R4JvA*qVEaZm85A%L#DcKAX9Etv`H|xIv$-2BS=o=J1pofZA$18 zg>9Wd87h`}*2_?_>~q1QQa~`afi^8NF5^lGCT*dM7LfwdwM?{YQ7Hf=ZKHjQ2<@ik z_5zVoTx!evMY6REP+8mQY&v|I70F8A(NXNI*mN~fT0$7yYH5E?HVTVaW&eTaUp~Z5 z_&bqgy7%)Yd*IZm6Q?-YPfUgE!M$hp9_3`e%SD!UIQt0U@bQBuIMwfUQQhsSr^<qAVs6!cPb#0q`LZ<)BItJCVk_Pw!dteJvg7Y9wl2& zsp)^+B1$Ku6ecRJXJ-oiF^gb{>(&{)zhTj{qA12O)oPuIbJ6`I5Ycu*)8APw)CAIc zPK^>se18kkam%5p;_|eWEy>%H$a!Q9wnw^_~8@qX&vHCd|E1H;|kQJMGBI*5I z7bDs+HvuEM`J1)o@41-J`TfT2W71skuJGpHhbr1!=v;H-U2#DhukjC%3AY3K=-g3> zwtE<93vv7%d6+!rQivs02E(*5ve$%R)$zD|Er%Vz1uUHglsOVzvlKnrks?%sBuet@{ zpIbEOd|DR`bq_Vuz`wL=XNrIp)8%d4jKaURDA@L+?kv=UY?9vZK~?Q9G`DWRX4UxJ zhI+hBRQ@jnzI_={vxgLsV+&A6XPBvnUJ_x`5=vOCtDRErOK) z6ej4@=buc^9uT4MOzEpm~?fuX)~i-ELWfk~Dr-ii#<2`#11(_osm zpgWe8TiUGN1$swyeZ&jw=(ylD;LF7%0th%=v z;=pEB)J27iXUnQb6D=lB>kdLjpkonm2nJW-LtCSZsXQh2r|Y)tL9c+Q(Py< z8C`Im|RHAoAVfr?@QAdHvbYl!u#od7=AYYDwc16`v``u@PNE$ zZil{Tu5qYw=<)zAnQMLy-~KB%uUH{V@%l4e`o&Z!Ugf1rznm(?+o*Ku@9I*z-~=yT z(xvOJPxvM`w&>FLr%Lg923`7GsuZs((50`WO7YluT{_gIblw)8%&kj*ELDmp{_4_| zHzb&;E}pTdOSh*=@w`D@`b?@64=~fECv_C)4wQaoErmtIJf;;}=z^apim za;%Cj{cNff59rXP|En&gkK*xQ2VMHrR4IPzuS@@(E~U?;@XKypy7tCIl2nRcwCd9P zQ>FNEo-TbVRf=DC>C$7VQv4uDm!3_P;#VxX^t>*m-B9?gg)aS(R4MKt)}>!bmEuk| zUHWfzDXo{_W+q*_;ig0yREoP&bm^n1QrrumOJ7cv;zFt}?WRg``AnC-txIX<09Q+N z>E~0WI5(_IzmzJ)`A}W@d#O^KT+^k0k}AbH5nZ|+f{~0!$$(au?n;&7P(+vR*QH73 zs7qf>m12IQOFxn-#hx!I6&HZUE8*f-b_c1rnRI1;P{)Vy2H3Z^ATCnC`$*MQrmI`Q zT-c%;O5?R~K6?a*B3v3Z{}lK&4#k_~C84bj9N`+mh1AtE5cT^l`gj7qkh+9dgzjkm z8N3~DskVZTELCaVA6^LY^3d;w3^`r{WW!$28pW#)6LpI1*W3b<#Pa5~_}fbO=k3ua zM{{qF;TvEF_!qYwbaD}VX8g|;Fc_Fmsjv9~anamjD0& literal 126993 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 class cpl.utils.credential_manager.CredentialManager

Bases: object

-

Handles credentials

+

Handles credential encryption and decryption

static build_string(string: str, credentials: str)
-

Builds string with credentials in it -:param string: -:param credentials: -:return:

+

Builds string with credentials in it

+
+
+
string: str

String in which the variable is replaced by credentials

+
+
credentials: str

String to encode

+
+
+
+
+

Decoded string

+
static decrypt(string: str)str
-

Decode with base64 -:param string: -:return:

+

Decode with base64

+
+
+
string: str

String to decode

+
+
+
+
+

Decoded string

+
static encrypt(string: str)str
-

Encode with base64 -:param string: -:return:

+

Encode with base64

+
+
+
string: str

String to encode

+
+
+
+
+

Encoded string

+
@@ -223,53 +245,76 @@
classmethod get_outdated()bytes
-

Gets table of outdated packages -:return:

+

Gets table of outdated packages

+
+

Bytes string of the command result

+
classmethod get_package(package: str)Optional[str]
-

Gets given package py local pip list -:param package: -:return:

+

Gets given package py local pip list

+
+

package: str

+
+
+

The package name as string

+
classmethod install(package: str, *args, source: Optional[str] = None, stdout=None, stderr=None)
-

Installs given package -:param package: -:param args: -:param source: -:param stdout: -:param stderr: -:return:

+

Installs given package

+
+
+
package: str

The name of the package

+
+
args: list

Arguments for the command

+
+
source: str

Extra index URL

+
+
stdout: str

Stdout of subprocess.run

+
+
stderr: str

Stderr of subprocess.run

+
+
+
classmethod reset_executable()
-

Resets the executable to system standard -:return:

+

Resets the executable to system standard

classmethod set_executable(executable: str)
-

Sets the executable -:param executable: -:return:

+

Sets the executable

+
+
+
executable: str

The python command

+
+
+
classmethod uninstall(package: str, stdout=None, stderr=None)
-

Uninstalls given package -:param package: -:param stdout: -:param stderr: -:return:

+

Uninstalls given package

+
+
+
package: str

The name of the package

+
+
stdout: str

Stdout of subprocess.run

+
+
stderr: str

Stderr of subprocess.run

+
+
+
@@ -285,39 +330,70 @@
static convert_to_camel_case(chars: str)str
-

Converts string to camel case -:param chars: -:return:

+

Converts string to camel case

+
+
+
chars: str

String to convert

+
+
+
+
+

String converted to CamelCase

+
static convert_to_snake_case(chars: str)str
-

Converts string to snake case -:param chars: -:return:

+

Converts string to snake case

+
+
+
chars: str

String to convert

+
+
+
+
+

String converted to snake_case

+
static first_to_lower(chars: str)str
-

Converts first char to lower -:param chars: -:return:

+

Converts first char to lower

+
+
+
chars: str

String to convert

+
+
+
+
+

String with first char as lower

+
static first_to_upper(chars: str)str
-

Converts first char to upper -:param chars: -:return:

+

Converts first char to upper

+
+
+
chars: str

String to convert

+
+
+
+
+

String with first char as upper

+
static random_string(chars: str, length: int)str

Creates random string by given chars and length

+
+

String of random chars

+
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index c8dadfa5..89da9fe3 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["cpl","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cpl.rst","cpl.application.rst","cpl.configuration.rst","cpl.console.rst","cpl.database.rst","cpl.database.connection.rst","cpl.database.context.rst","cpl.dependency_injection.rst","cpl.environment.rst","cpl.logging.rst","cpl.mailing.rst","cpl.time.rst","cpl.utils.rst","index.rst","modules.rst"],objects:{"cpl.application":{application_abc:[1,0,0,"-"],application_builder:[1,0,0,"-"],application_builder_abc:[1,0,0,"-"],startup_abc:[1,0,0,"-"]},"cpl.application.application_abc":{ApplicationABC:[1,1,1,""]},"cpl.application.application_abc.ApplicationABC":{configure:[1,2,1,""],main:[1,2,1,""],run:[1,2,1,""]},"cpl.application.application_builder":{ApplicationBuilder:[1,1,1,""]},"cpl.application.application_builder.ApplicationBuilder":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.application_builder_abc":{ApplicationBuilderABC:[1,1,1,""]},"cpl.application.application_builder_abc.ApplicationBuilderABC":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.startup_abc":{StartupABC:[1,1,1,""]},"cpl.application.startup_abc.StartupABC":{configure_configuration:[1,2,1,""],configure_services:[1,2,1,""]},"cpl.configuration":{configuration:[2,0,0,"-"],configuration_abc:[2,0,0,"-"],configuration_model_abc:[2,0,0,"-"],configuration_variable_name_enum:[2,0,0,"-"],console_argument:[2,0,0,"-"]},"cpl.configuration.configuration":{Configuration:[2,1,1,""]},"cpl.configuration.configuration.Configuration":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_abc":{ConfigurationABC:[2,1,1,""]},"cpl.configuration.configuration_abc.ConfigurationABC":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_model_abc":{ConfigurationModelABC:[2,1,1,""]},"cpl.configuration.configuration_model_abc.ConfigurationModelABC":{from_dict:[2,2,1,""]},"cpl.configuration.configuration_variable_name_enum":{ConfigurationVariableNameEnum:[2,1,1,""]},"cpl.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum":{customer:[2,3,1,""],environment:[2,3,1,""],name:[2,3,1,""],to_list:[2,2,1,""]},"cpl.configuration.console_argument":{ConsoleArgument:[2,1,1,""]},"cpl.configuration.console_argument.ConsoleArgument":{aliases:[2,2,1,""],console_arguments:[2,2,1,""],is_value_token_optional:[2,2,1,""],name:[2,2,1,""],token:[2,2,1,""],value_token:[2,2,1,""]},"cpl.console":{background_color_enum:[3,0,0,"-"],console:[3,0,0,"-"],console_call:[3,0,0,"-"],foreground_color_enum:[3,0,0,"-"],spinner_thread:[3,0,0,"-"]},"cpl.console.background_color_enum":{BackgroundColorEnum:[3,1,1,""]},"cpl.console.background_color_enum.BackgroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.console":{Console:[3,1,1,""]},"cpl.console.console.Console":{background_color:[3,3,1,""],banner:[3,2,1,""],clear:[3,2,1,""],close:[3,2,1,""],color_reset:[3,2,1,""],disable:[3,2,1,""],enable:[3,2,1,""],error:[3,2,1,""],foreground_color:[3,3,1,""],read:[3,2,1,""],read_line:[3,2,1,""],reset_cursor_position:[3,2,1,""],select:[3,2,1,""],set_background_color:[3,2,1,""],set_cursor_position:[3,2,1,""],set_foreground_color:[3,2,1,""],set_hold_back:[3,2,1,""],spinner:[3,2,1,""],table:[3,2,1,""],write:[3,2,1,""],write_at:[3,2,1,""],write_line:[3,2,1,""],write_line_at:[3,2,1,""]},"cpl.console.console_call":{ConsoleCall:[3,1,1,""]},"cpl.console.console_call.ConsoleCall":{"function":[3,2,1,""],args:[3,2,1,""]},"cpl.console.foreground_color_enum":{ForegroundColorEnum:[3,1,1,""]},"cpl.console.foreground_color_enum.ForegroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.spinner_thread":{SpinnerThread:[3,1,1,""]},"cpl.console.spinner_thread.SpinnerThread":{exit:[3,2,1,""],run:[3,2,1,""],stop_spinning:[3,2,1,""]},"cpl.database":{database_model:[4,0,0,"-"],database_settings:[4,0,0,"-"],database_settings_name_enum:[4,0,0,"-"]},"cpl.database.connection":{database_connection:[5,0,0,"-"],database_connection_abc:[5,0,0,"-"]},"cpl.database.connection.database_connection":{DatabaseConnection:[5,1,1,""]},"cpl.database.connection.database_connection.DatabaseConnection":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.connection.database_connection_abc":{DatabaseConnectionABC:[5,1,1,""]},"cpl.database.connection.database_connection_abc.DatabaseConnectionABC":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.context":{database_context:[6,0,0,"-"],database_context_abc:[6,0,0,"-"]},"cpl.database.context.database_context":{DatabaseContext:[6,1,1,""]},"cpl.database.context.database_context.DatabaseContext":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.context.database_context_abc":{DatabaseContextABC:[6,1,1,""]},"cpl.database.context.database_context_abc.DatabaseContextABC":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.database_settings":{DatabaseSettings:[4,1,1,""]},"cpl.database.database_settings.DatabaseSettings":{auth_plugin:[4,2,1,""],case_sensitive:[4,2,1,""],connection_string:[4,2,1,""],credentials:[4,2,1,""],echo:[4,2,1,""],encoding:[4,2,1,""],from_dict:[4,2,1,""]},"cpl.database.database_settings_name_enum":{DatabaseSettingsNameEnum:[4,1,1,""]},"cpl.database.database_settings_name_enum.DatabaseSettingsNameEnum":{auth_plugin:[4,3,1,""],case_sensitive:[4,3,1,""],connection_string:[4,3,1,""],credentials:[4,3,1,""],echo:[4,3,1,""],encoding:[4,3,1,""]},"cpl.dependency_injection":{service_collection:[7,0,0,"-"],service_collection_abc:[7,0,0,"-"],service_descriptor:[7,0,0,"-"],service_lifetime_enum:[7,0,0,"-"],service_provider:[7,0,0,"-"],service_provider_abc:[7,0,0,"-"]},"cpl.dependency_injection.service_collection":{ServiceCollection:[7,1,1,""]},"cpl.dependency_injection.service_collection.ServiceCollection":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_collection_abc":{ServiceCollectionABC:[7,1,1,""]},"cpl.dependency_injection.service_collection_abc.ServiceCollectionABC":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_descriptor":{ServiceDescriptor:[7,1,1,""]},"cpl.dependency_injection.service_descriptor.ServiceDescriptor":{implementation:[7,2,1,""],lifetime:[7,2,1,""],service_type:[7,2,1,""]},"cpl.dependency_injection.service_lifetime_enum":{ServiceLifetimeEnum:[7,1,1,""]},"cpl.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum":{"transient":[7,3,1,""],scoped:[7,3,1,""],singleton:[7,3,1,""]},"cpl.dependency_injection.service_provider":{ServiceProvider:[7,1,1,""]},"cpl.dependency_injection.service_provider.ServiceProvider":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.dependency_injection.service_provider_abc":{ServiceProviderABC:[7,1,1,""]},"cpl.dependency_injection.service_provider_abc.ServiceProviderABC":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.environment":{application_environment:[8,0,0,"-"],application_environment_abc:[8,0,0,"-"],environment_name_enum:[8,0,0,"-"]},"cpl.environment.application_environment":{ApplicationEnvironment:[8,1,1,""]},"cpl.environment.application_environment.ApplicationEnvironment":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.application_environment_abc":{ApplicationEnvironmentABC:[8,1,1,""]},"cpl.environment.application_environment_abc.ApplicationEnvironmentABC":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.environment_name_enum":{EnvironmentNameEnum:[8,1,1,""]},"cpl.environment.environment_name_enum.EnvironmentNameEnum":{development:[8,3,1,""],production:[8,3,1,""],staging:[8,3,1,""],testing:[8,3,1,""]},"cpl.logging":{logger_abc:[9,0,0,"-"],logger_service:[9,0,0,"-"],logging_level_enum:[9,0,0,"-"],logging_settings:[9,0,0,"-"],logging_settings_name_enum:[9,0,0,"-"]},"cpl.logging.logger_abc":{LoggerABC:[9,1,1,""]},"cpl.logging.logger_abc.LoggerABC":{debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logger_service":{Logger:[9,1,1,""]},"cpl.logging.logger_service.Logger":{create:[9,2,1,""],debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logging_level_enum":{LoggingLevelEnum:[9,1,1,""]},"cpl.logging.logging_level_enum.LoggingLevelEnum":{DEBUG:[9,3,1,""],ERROR:[9,3,1,""],FATAL:[9,3,1,""],INFO:[9,3,1,""],OFF:[9,3,1,""],TRACE:[9,3,1,""],WARN:[9,3,1,""]},"cpl.logging.logging_settings":{LoggingSettings:[9,1,1,""]},"cpl.logging.logging_settings.LoggingSettings":{console:[9,2,1,""],filename:[9,2,1,""],from_dict:[9,2,1,""],level:[9,2,1,""],path:[9,2,1,""]},"cpl.logging.logging_settings_name_enum":{LoggingSettingsNameEnum:[9,1,1,""]},"cpl.logging.logging_settings_name_enum.LoggingSettingsNameEnum":{console_level:[9,3,1,""],file_level:[9,3,1,""],filename:[9,3,1,""],path:[9,3,1,""]},"cpl.mailing":{email:[10,0,0,"-"],email_client_abc:[10,0,0,"-"],email_client_service:[10,0,0,"-"],email_client_settings:[10,0,0,"-"],email_client_settings_name_enum:[10,0,0,"-"]},"cpl.mailing.email":{EMail:[10,1,1,""]},"cpl.mailing.email.EMail":{add_header:[10,2,1,""],add_receiver:[10,2,1,""],body:[10,2,1,""],check_mail:[10,2,1,""],get_content:[10,2,1,""],header:[10,2,1,""],header_list:[10,2,1,""],receiver:[10,2,1,""],receiver_list:[10,2,1,""],subject:[10,2,1,""],transceiver:[10,2,1,""]},"cpl.mailing.email_client_abc":{EMailClientABC:[10,1,1,""]},"cpl.mailing.email_client_abc.EMailClientABC":{connect:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_service":{EMailClient:[10,1,1,""]},"cpl.mailing.email_client_service.EMailClient":{connect:[10,2,1,""],create:[10,2,1,""],login:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_settings":{EMailClientSettings:[10,1,1,""]},"cpl.mailing.email_client_settings.EMailClientSettings":{credentials:[10,2,1,""],from_dict:[10,2,1,""],host:[10,2,1,""],port:[10,2,1,""],user_name:[10,2,1,""]},"cpl.mailing.email_client_settings_name_enum":{EMailClientSettingsNameEnum:[10,1,1,""]},"cpl.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum":{credentials:[10,3,1,""],host:[10,3,1,""],port:[10,3,1,""],user_name:[10,3,1,""]},"cpl.time":{time_format_settings:[11,0,0,"-"],time_format_settings_names_enum:[11,0,0,"-"]},"cpl.time.time_format_settings":{TimeFormatSettings:[11,1,1,""]},"cpl.time.time_format_settings.TimeFormatSettings":{date_format:[11,2,1,""],date_time_format:[11,2,1,""],date_time_log_format:[11,2,1,""],from_dict:[11,2,1,""],time_format:[11,2,1,""]},"cpl.time.time_format_settings_names_enum":{TimeFormatSettingsNamesEnum:[11,1,1,""]},"cpl.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum":{date_format:[11,3,1,""],date_time_format:[11,3,1,""],date_time_log_format:[11,3,1,""],time_format:[11,3,1,""]},"cpl.utils":{credential_manager:[12,0,0,"-"],pip:[12,0,0,"-"],string:[12,0,0,"-"]},"cpl.utils.credential_manager":{CredentialManager:[12,1,1,""]},"cpl.utils.credential_manager.CredentialManager":{build_string:[12,2,1,""],decrypt:[12,2,1,""],encrypt:[12,2,1,""]},"cpl.utils.pip":{Pip:[12,1,1,""]},"cpl.utils.pip.Pip":{get_executable:[12,2,1,""],get_outdated:[12,2,1,""],get_package:[12,2,1,""],install:[12,2,1,""],reset_executable:[12,2,1,""],set_executable:[12,2,1,""],uninstall:[12,2,1,""]},"cpl.utils.string":{String:[12,1,1,""]},"cpl.utils.string.String":{convert_to_camel_case:[12,2,1,""],convert_to_snake_case:[12,2,1,""],first_to_lower:[12,2,1,""],first_to_upper:[12,2,1,""],random_string:[12,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute"},terms:{"abstract":[1,2,5,6,7,8,9,10],"byte":12,"case":12,"char":[3,12],"class":[1,2,3,4,5,6,7,8,9,10,11,12],"default":3,"enum":[2,3,4,7,8,9,10,11],"function":[3,12],"int":[3,12],"new":3,"return":[2,3,7,10,12],"static":[2,10,12],"transient":7,"true":2,The:[7,10,13],These:13,Useful:[3,12],abc:[1,2,3,5,6,7,8,9,10],about:13,activ:3,add:[2,7,10],add_configur:2,add_console_argu:2,add_db_context:7,add_environment_vari:2,add_head:10,add_json_fil:2,add_log:7,add_receiv:10,add_scop:7,add_singleton:7,add_transi:7,additional_argu:2,address:10,alias:2,ani:3,app:[1,13],applic:[0,3,8,9,10,13,14],application_abc:[0,14],application_build:[0,14],application_builder_abc:[0,14],application_environ:[0,14],application_environment_abc:[0,9,10,14],application_nam:8,applicationabc:1,applicationbuild:1,applicationbuilderabc:1,applicationenviron:8,applicationenvironmentabc:[8,9,10],appset:1,arg:[1,3,6,12],argument:[2,3],argument_error_funct:2,attribut:[2,4,9,10,11],auth_plugin:4,authplugin:4,back:3,background:3,background_color:3,background_color_enum:[0,14],backgroundcolorenum:3,banner:3,base64:12,base:[1,2,3,4,5,6,7,8,9,10,11,12],befor:3,blue:3,bodi:10,bool:[2,3,10],build:[1,12],build_servic:7,build_service_provid:7,build_str:12,call:[1,3],callabl:[2,3,7],camel:12,can:13,case_sensit:4,casesensit:4,chang:6,charact:3,check:10,check_mail:10,classmethod:[3,12],clear:3,close:3,collect:[2,3,7],color:3,color_reset:3,command:12,common:13,complex:13,config:[1,7],configur:[0,1,4,7,9,10,11,14],configuration_abc:[0,1,7,14],configuration_model_abc:[0,4,9,10,11,14],configuration_variable_name_enum:[0,14],configurationabc:[1,2,7],configurationmodelabc:[2,4,9,10,11],configurationvariablenameenum:2,configure_configur:1,configure_servic:1,connect:[0,4,6,10,14],connection_str:[4,5,6],connectionstr:4,consol:[0,2,9,14],console_argu:[0,14],console_cal:[0,14],console_level:9,consoleargu:2,consolecal:3,consoleloglevel:9,contain:1,context:[0,4,7,14],convert:[2,9,10,11,12],convert_to_camel_cas:12,convert_to_snake_cas:12,coordin:3,core:[5,6],creat:[1,7,9,10,12,13],credenti:[4,10,12],credential_manag:[0,14],credentialmanag:12,current:8,cursor:3,cursor_background_color:3,cursor_foreground_color:3,custom:[1,2,8],cyan:3,databas:[0,7,14],database_connect:[0,4,14],database_connection_abc:[0,4,14],database_context:[0,4,14],database_context_abc:[0,4,7,14],database_model:[0,14],database_set:[0,5,6,7,14],database_settings_name_enum:[0,14],databaseconnect:5,databaseconnectionabc:5,databasecontext:6,databasecontextabc:[6,7],databaseset:[4,5,6,7],databasesettingsnameenum:4,date_format:11,date_time_format:11,date_time_log_format:11,date_time_now:8,dateformat:11,datetimeformat:11,datetimelogformat:11,db_context:7,db_context_typ:7,db_set:7,debug:9,decod:12,decrypt:12,defin:2,dependency_inject:[0,1,14],descriptor:7,desktop:13,detail:13,develop:[8,13],dict:[2,3,4,9,10,11],directori:8,disabl:3,doc:[5,6],echo:4,effici:13,element:3,email:[0,14],email_client_abc:[0,14],email_client_servic:[0,14],email_client_set:[0,14],email_client_settings_name_enum:[0,14],emailcli:10,emailclientabc:10,emailclientset:10,emailclientsettingsnameenum:10,enabl:3,encod:[4,12],encrypt:12,end:[3,9],end_tim:8,engin:[5,6],enterpris:13,entri:[1,3],enumer:[2,3,4,7,8,9,10,11],env:9,environ:[0,2,9,10,14],environment_nam:8,environment_name_enum:[0,14],environmentnameenum:8,error:[2,3,9],everyth:13,except:9,execut:12,exit:3,fatal:9,file:2,file_level:9,fileloglevel:9,filenam:9,first:[12,13],first_to_low:12,first_to_upp:12,foreground:3,foreground_color:3,foreground_color_enum:[0,14],foregroundcolorenum:3,format:[9,11],found:2,from:[1,2,4,13],from_dict:[2,4,9,10,11],get:12,get_configur:2,get_cont:10,get_execut:12,get_outd:12,get_packag:12,get_servic:7,given:[2,3,4,7,12],great:13,green:3,grei:3,handl:[3,12],has:3,header:[3,9,10],header_background_color:3,header_foreground_color:3,header_list:10,help:13,hold:3,host:10,host_nam:8,html:[5,6],http:[5,6],implement:7,info:9,inform:9,input:3,instal:12,instanc:[1,7],instance_typ:7,interact:3,intern:7,invalid:2,is_value_token_opt:2,json:2,key_typ:2,keyword:3,known:2,kwarg:3,last:3,learn:13,length:[3,12],level:9,librari:13,lifetim:7,line:3,list:[2,3,7,10,12],load:1,local:12,log:[0,10,14],logfil:9,logger:[7,9,10],logger_abc:[0,10,14],logger_servic:[0,14],loggerabc:[9,10],logging_level_enum:[0,14],logging_set:[0,14],logging_settings_name_enum:[0,14],logginglevelenum:9,loggingset:9,loggingsettingsnameenum:9,login:10,lower:12,magenta:3,mail:[0,14],mail_set:10,main:1,meant:13,menu:3,messag:[3,9],msg_len:3,name:[2,8,9],next:3,none:[2,3,7,9,10,12],object:[1,2,3,7,10,12],occur:2,off:9,on_blu:3,on_cyan:3,on_default:3,on_green:3,on_grei:3,on_magenta:3,on_r:3,on_whit:3,on_yellow:3,option:[2,3,7,9,10,12],option_background_color:3,option_foreground_color:3,org:[5,6],outdat:12,output:[2,3],packag:[12,13],page:13,param:12,path:[2,8,9],pip:[0,14],place:2,platform:13,point:[1,3],port:10,posit:3,prefix:2,prepar:1,print:3,product:8,program:9,properti:[2,3,4,5,6,7,8,9,10,11],provid:[1,7],python:13,random:12,random_str:12,read:[2,3],read_lin:3,receiv:10,receiver_list:10,red:3,repres:[3,4,8,10],represent:[5,6,7,9,10,11],reset:[3,12],reset_cursor_posit:3,reset_execut:12,result:10,run:[1,3],runtim:8,runtime_directori:8,save:[2,6],save_chang:6,scope:7,search:[2,7],search_typ:2,see:[5,6],select:3,send:10,send_mail:10,server:[10,13],servic:[1,7,9,10],service_collect:[0,14],service_collection_abc:[0,14],service_descriptor:[0,14],service_lifetime_enum:[0,14],service_provid:[0,14],service_provider_abc:[0,1,14],service_typ:7,servicecollect:7,servicecollectionabc:7,servicedescriptor:7,servicelifetimeenum:7,serviceprovid:7,serviceproviderabc:[1,7],session:[5,6],set:[1,2,3,4,7,8,9,10,11,12],set_background_color:3,set_cursor_posit:3,set_execut:12,set_foreground_color:3,set_hold_back:3,set_runtime_directori:8,set_working_directori:8,should:2,show:3,shown:2,simpl:13,singleton:7,snake:12,sourc:12,specifi:2,spinner:3,spinner_background_color:3,spinner_foreground_color:3,spinner_thread:[0,14],spinnerthread:3,sqlalchemi:[5,6],stage:8,standard:12,start_tim:8,startup:1,startup_abc:[0,14],startupabc:1,stderr:12,stdout:12,stop:3,stop_spin:3,store:2,str:[2,3,5,6,8,9,10,12],string:[0,3,5,6,9,10,14],subject:10,submodul:[0,14],system:12,tabl:[3,12],take:2,termin:3,test:8,text:3,text_background_color:3,text_foreground_color:3,thi:[1,13],thread:3,thrown:9,time:[0,9,14],time_format:[9,11],time_format_set:[0,9,14],time_format_settings_names_enum:[0,14],timeformat:11,timeformatset:[9,11],timeformatsettingsnamesenum:11,to_list:2,token:2,trace:9,traceback:3,transceiv:10,tree:9,type:[1,2,7],understand:13,uninstal:12,union:[2,3,7],upper:12,use:[1,10,13],use_startup:1,used:1,user_nam:10,usernam:10,util:[0,14],valid:10,valu:[2,3,4,7,8,9,10,11],value_token:2,variabl:2,warn:9,when:3,whether:2,which:[2,3],white:3,work:8,working_directori:8,write:[3,9],write_at:3,write_lin:3,write_line_at:3,yellow:3,you:13,your:13},titles:["CPL","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","Introduction to the CPL Docs","cpl"],titleterms:{applic:1,application_abc:1,application_build:1,application_builder_abc:1,application_environ:8,application_environment_abc:8,background_color_enum:3,configur:2,configuration_abc:2,configuration_model_abc:2,configuration_variable_name_enum:2,connect:5,consol:3,console_argu:2,console_cal:3,context:6,cpl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],credential_manag:12,databas:[4,5,6],database_connect:5,database_connection_abc:5,database_context:6,database_context_abc:6,database_model:4,database_set:4,database_settings_name_enum:4,dependency_inject:7,doc:13,email:10,email_client_abc:10,email_client_servic:10,email_client_set:10,email_client_settings_name_enum:10,environ:8,environment_name_enum:8,foreground_color_enum:3,introduct:13,log:9,logger_abc:9,logger_servic:9,logging_level_enum:9,logging_set:9,logging_settings_name_enum:9,mail:10,manual:13,pip:12,service_collect:7,service_collection_abc:7,service_descriptor:7,service_lifetime_enum:7,service_provid:7,service_provider_abc:7,spinner_thread:3,startup_abc:1,string:12,submodul:4,time:11,time_format_set:11,time_format_settings_names_enum:11,util:12}}) \ No newline at end of file +Search.setIndex({docnames:["cpl","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","index","modules"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":2,sphinx:56},filenames:["cpl.rst","cpl.application.rst","cpl.configuration.rst","cpl.console.rst","cpl.database.rst","cpl.database.connection.rst","cpl.database.context.rst","cpl.dependency_injection.rst","cpl.environment.rst","cpl.logging.rst","cpl.mailing.rst","cpl.time.rst","cpl.utils.rst","index.rst","modules.rst"],objects:{"cpl.application":{application_abc:[1,0,0,"-"],application_builder:[1,0,0,"-"],application_builder_abc:[1,0,0,"-"],startup_abc:[1,0,0,"-"]},"cpl.application.application_abc":{ApplicationABC:[1,1,1,""]},"cpl.application.application_abc.ApplicationABC":{configure:[1,2,1,""],main:[1,2,1,""],run:[1,2,1,""]},"cpl.application.application_builder":{ApplicationBuilder:[1,1,1,""]},"cpl.application.application_builder.ApplicationBuilder":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.application_builder_abc":{ApplicationBuilderABC:[1,1,1,""]},"cpl.application.application_builder_abc.ApplicationBuilderABC":{build:[1,2,1,""],use_startup:[1,2,1,""]},"cpl.application.startup_abc":{StartupABC:[1,1,1,""]},"cpl.application.startup_abc.StartupABC":{configure_configuration:[1,2,1,""],configure_services:[1,2,1,""]},"cpl.configuration":{configuration:[2,0,0,"-"],configuration_abc:[2,0,0,"-"],configuration_model_abc:[2,0,0,"-"],configuration_variable_name_enum:[2,0,0,"-"],console_argument:[2,0,0,"-"]},"cpl.configuration.configuration":{Configuration:[2,1,1,""]},"cpl.configuration.configuration.Configuration":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_abc":{ConfigurationABC:[2,1,1,""]},"cpl.configuration.configuration_abc.ConfigurationABC":{add_configuration:[2,2,1,""],add_console_argument:[2,2,1,""],add_console_arguments:[2,2,1,""],add_environment_variables:[2,2,1,""],add_json_file:[2,2,1,""],additional_arguments:[2,2,1,""],argument_error_function:[2,2,1,""],environment:[2,2,1,""],get_configuration:[2,2,1,""]},"cpl.configuration.configuration_model_abc":{ConfigurationModelABC:[2,1,1,""]},"cpl.configuration.configuration_model_abc.ConfigurationModelABC":{from_dict:[2,2,1,""]},"cpl.configuration.configuration_variable_name_enum":{ConfigurationVariableNameEnum:[2,1,1,""]},"cpl.configuration.configuration_variable_name_enum.ConfigurationVariableNameEnum":{customer:[2,3,1,""],environment:[2,3,1,""],name:[2,3,1,""],to_list:[2,2,1,""]},"cpl.configuration.console_argument":{ConsoleArgument:[2,1,1,""]},"cpl.configuration.console_argument.ConsoleArgument":{aliases:[2,2,1,""],console_arguments:[2,2,1,""],is_value_token_optional:[2,2,1,""],name:[2,2,1,""],token:[2,2,1,""],value_token:[2,2,1,""]},"cpl.console":{background_color_enum:[3,0,0,"-"],console:[3,0,0,"-"],console_call:[3,0,0,"-"],foreground_color_enum:[3,0,0,"-"],spinner_thread:[3,0,0,"-"]},"cpl.console.background_color_enum":{BackgroundColorEnum:[3,1,1,""]},"cpl.console.background_color_enum.BackgroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.console":{Console:[3,1,1,""]},"cpl.console.console.Console":{background_color:[3,3,1,""],banner:[3,2,1,""],clear:[3,2,1,""],close:[3,2,1,""],color_reset:[3,2,1,""],disable:[3,2,1,""],enable:[3,2,1,""],error:[3,2,1,""],foreground_color:[3,3,1,""],read:[3,2,1,""],read_line:[3,2,1,""],reset_cursor_position:[3,2,1,""],select:[3,2,1,""],set_background_color:[3,2,1,""],set_cursor_position:[3,2,1,""],set_foreground_color:[3,2,1,""],set_hold_back:[3,2,1,""],spinner:[3,2,1,""],table:[3,2,1,""],write:[3,2,1,""],write_at:[3,2,1,""],write_line:[3,2,1,""],write_line_at:[3,2,1,""]},"cpl.console.console_call":{ConsoleCall:[3,1,1,""]},"cpl.console.console_call.ConsoleCall":{"function":[3,2,1,""],args:[3,2,1,""]},"cpl.console.foreground_color_enum":{ForegroundColorEnum:[3,1,1,""]},"cpl.console.foreground_color_enum.ForegroundColorEnum":{"default":[3,3,1,""],blue:[3,3,1,""],cyan:[3,3,1,""],green:[3,3,1,""],grey:[3,3,1,""],magenta:[3,3,1,""],red:[3,3,1,""],white:[3,3,1,""],yellow:[3,3,1,""]},"cpl.console.spinner_thread":{SpinnerThread:[3,1,1,""]},"cpl.console.spinner_thread.SpinnerThread":{exit:[3,2,1,""],run:[3,2,1,""],stop_spinning:[3,2,1,""]},"cpl.database":{database_model:[4,0,0,"-"],database_settings:[4,0,0,"-"],database_settings_name_enum:[4,0,0,"-"]},"cpl.database.connection":{database_connection:[5,0,0,"-"],database_connection_abc:[5,0,0,"-"]},"cpl.database.connection.database_connection":{DatabaseConnection:[5,1,1,""]},"cpl.database.connection.database_connection.DatabaseConnection":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.connection.database_connection_abc":{DatabaseConnectionABC:[5,1,1,""]},"cpl.database.connection.database_connection_abc.DatabaseConnectionABC":{connect:[5,2,1,""],engine:[5,2,1,""],session:[5,2,1,""]},"cpl.database.context":{database_context:[6,0,0,"-"],database_context_abc:[6,0,0,"-"]},"cpl.database.context.database_context":{DatabaseContext:[6,1,1,""]},"cpl.database.context.database_context.DatabaseContext":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.context.database_context_abc":{DatabaseContextABC:[6,1,1,""]},"cpl.database.context.database_context_abc.DatabaseContextABC":{connect:[6,2,1,""],engine:[6,2,1,""],save_changes:[6,2,1,""],session:[6,2,1,""]},"cpl.database.database_settings":{DatabaseSettings:[4,1,1,""]},"cpl.database.database_settings.DatabaseSettings":{auth_plugin:[4,2,1,""],case_sensitive:[4,2,1,""],connection_string:[4,2,1,""],credentials:[4,2,1,""],echo:[4,2,1,""],encoding:[4,2,1,""],from_dict:[4,2,1,""]},"cpl.database.database_settings_name_enum":{DatabaseSettingsNameEnum:[4,1,1,""]},"cpl.database.database_settings_name_enum.DatabaseSettingsNameEnum":{auth_plugin:[4,3,1,""],case_sensitive:[4,3,1,""],connection_string:[4,3,1,""],credentials:[4,3,1,""],echo:[4,3,1,""],encoding:[4,3,1,""]},"cpl.dependency_injection":{service_collection:[7,0,0,"-"],service_collection_abc:[7,0,0,"-"],service_descriptor:[7,0,0,"-"],service_lifetime_enum:[7,0,0,"-"],service_provider:[7,0,0,"-"],service_provider_abc:[7,0,0,"-"]},"cpl.dependency_injection.service_collection":{ServiceCollection:[7,1,1,""]},"cpl.dependency_injection.service_collection.ServiceCollection":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_collection_abc":{ServiceCollectionABC:[7,1,1,""]},"cpl.dependency_injection.service_collection_abc.ServiceCollectionABC":{add_db_context:[7,2,1,""],add_logging:[7,2,1,""],add_scoped:[7,2,1,""],add_singleton:[7,2,1,""],add_transient:[7,2,1,""],build_service_provider:[7,2,1,""]},"cpl.dependency_injection.service_descriptor":{ServiceDescriptor:[7,1,1,""]},"cpl.dependency_injection.service_descriptor.ServiceDescriptor":{implementation:[7,2,1,""],lifetime:[7,2,1,""],service_type:[7,2,1,""]},"cpl.dependency_injection.service_lifetime_enum":{ServiceLifetimeEnum:[7,1,1,""]},"cpl.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum":{"transient":[7,3,1,""],scoped:[7,3,1,""],singleton:[7,3,1,""]},"cpl.dependency_injection.service_provider":{ServiceProvider:[7,1,1,""]},"cpl.dependency_injection.service_provider.ServiceProvider":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.dependency_injection.service_provider_abc":{ServiceProviderABC:[7,1,1,""]},"cpl.dependency_injection.service_provider_abc.ServiceProviderABC":{build_service:[7,2,1,""],get_service:[7,2,1,""]},"cpl.environment":{application_environment:[8,0,0,"-"],application_environment_abc:[8,0,0,"-"],environment_name_enum:[8,0,0,"-"]},"cpl.environment.application_environment":{ApplicationEnvironment:[8,1,1,""]},"cpl.environment.application_environment.ApplicationEnvironment":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.application_environment_abc":{ApplicationEnvironmentABC:[8,1,1,""]},"cpl.environment.application_environment_abc.ApplicationEnvironmentABC":{application_name:[8,2,1,""],customer:[8,2,1,""],date_time_now:[8,2,1,""],end_time:[8,2,1,""],environment_name:[8,2,1,""],host_name:[8,2,1,""],runtime_directory:[8,2,1,""],set_runtime_directory:[8,2,1,""],set_working_directory:[8,2,1,""],start_time:[8,2,1,""],working_directory:[8,2,1,""]},"cpl.environment.environment_name_enum":{EnvironmentNameEnum:[8,1,1,""]},"cpl.environment.environment_name_enum.EnvironmentNameEnum":{development:[8,3,1,""],production:[8,3,1,""],staging:[8,3,1,""],testing:[8,3,1,""]},"cpl.logging":{logger_abc:[9,0,0,"-"],logger_service:[9,0,0,"-"],logging_level_enum:[9,0,0,"-"],logging_settings:[9,0,0,"-"],logging_settings_name_enum:[9,0,0,"-"]},"cpl.logging.logger_abc":{LoggerABC:[9,1,1,""]},"cpl.logging.logger_abc.LoggerABC":{debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logger_service":{Logger:[9,1,1,""]},"cpl.logging.logger_service.Logger":{create:[9,2,1,""],debug:[9,2,1,""],error:[9,2,1,""],fatal:[9,2,1,""],header:[9,2,1,""],info:[9,2,1,""],trace:[9,2,1,""],warn:[9,2,1,""]},"cpl.logging.logging_level_enum":{LoggingLevelEnum:[9,1,1,""]},"cpl.logging.logging_level_enum.LoggingLevelEnum":{DEBUG:[9,3,1,""],ERROR:[9,3,1,""],FATAL:[9,3,1,""],INFO:[9,3,1,""],OFF:[9,3,1,""],TRACE:[9,3,1,""],WARN:[9,3,1,""]},"cpl.logging.logging_settings":{LoggingSettings:[9,1,1,""]},"cpl.logging.logging_settings.LoggingSettings":{console:[9,2,1,""],filename:[9,2,1,""],from_dict:[9,2,1,""],level:[9,2,1,""],path:[9,2,1,""]},"cpl.logging.logging_settings_name_enum":{LoggingSettingsNameEnum:[9,1,1,""]},"cpl.logging.logging_settings_name_enum.LoggingSettingsNameEnum":{console_level:[9,3,1,""],file_level:[9,3,1,""],filename:[9,3,1,""],path:[9,3,1,""]},"cpl.mailing":{email:[10,0,0,"-"],email_client_abc:[10,0,0,"-"],email_client_service:[10,0,0,"-"],email_client_settings:[10,0,0,"-"],email_client_settings_name_enum:[10,0,0,"-"]},"cpl.mailing.email":{EMail:[10,1,1,""]},"cpl.mailing.email.EMail":{add_header:[10,2,1,""],add_receiver:[10,2,1,""],body:[10,2,1,""],check_mail:[10,2,1,""],get_content:[10,2,1,""],header:[10,2,1,""],header_list:[10,2,1,""],receiver:[10,2,1,""],receiver_list:[10,2,1,""],subject:[10,2,1,""],transceiver:[10,2,1,""]},"cpl.mailing.email_client_abc":{EMailClientABC:[10,1,1,""]},"cpl.mailing.email_client_abc.EMailClientABC":{connect:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_service":{EMailClient:[10,1,1,""]},"cpl.mailing.email_client_service.EMailClient":{connect:[10,2,1,""],create:[10,2,1,""],login:[10,2,1,""],send_mail:[10,2,1,""]},"cpl.mailing.email_client_settings":{EMailClientSettings:[10,1,1,""]},"cpl.mailing.email_client_settings.EMailClientSettings":{credentials:[10,2,1,""],from_dict:[10,2,1,""],host:[10,2,1,""],port:[10,2,1,""],user_name:[10,2,1,""]},"cpl.mailing.email_client_settings_name_enum":{EMailClientSettingsNameEnum:[10,1,1,""]},"cpl.mailing.email_client_settings_name_enum.EMailClientSettingsNameEnum":{credentials:[10,3,1,""],host:[10,3,1,""],port:[10,3,1,""],user_name:[10,3,1,""]},"cpl.time":{time_format_settings:[11,0,0,"-"],time_format_settings_names_enum:[11,0,0,"-"]},"cpl.time.time_format_settings":{TimeFormatSettings:[11,1,1,""]},"cpl.time.time_format_settings.TimeFormatSettings":{date_format:[11,2,1,""],date_time_format:[11,2,1,""],date_time_log_format:[11,2,1,""],from_dict:[11,2,1,""],time_format:[11,2,1,""]},"cpl.time.time_format_settings_names_enum":{TimeFormatSettingsNamesEnum:[11,1,1,""]},"cpl.time.time_format_settings_names_enum.TimeFormatSettingsNamesEnum":{date_format:[11,3,1,""],date_time_format:[11,3,1,""],date_time_log_format:[11,3,1,""],time_format:[11,3,1,""]},"cpl.utils":{credential_manager:[12,0,0,"-"],pip:[12,0,0,"-"],string:[12,0,0,"-"]},"cpl.utils.credential_manager":{CredentialManager:[12,1,1,""]},"cpl.utils.credential_manager.CredentialManager":{build_string:[12,2,1,""],decrypt:[12,2,1,""],encrypt:[12,2,1,""]},"cpl.utils.pip":{Pip:[12,1,1,""]},"cpl.utils.pip.Pip":{get_executable:[12,2,1,""],get_outdated:[12,2,1,""],get_package:[12,2,1,""],install:[12,2,1,""],reset_executable:[12,2,1,""],set_executable:[12,2,1,""],uninstall:[12,2,1,""]},"cpl.utils.string":{String:[12,1,1,""]},"cpl.utils.string.String":{convert_to_camel_case:[12,2,1,""],convert_to_snake_case:[12,2,1,""],first_to_lower:[12,2,1,""],first_to_upper:[12,2,1,""],random_string:[12,2,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:attribute"},terms:{"abstract":[1,2,5,6,7,8,9,10],"byte":12,"case":12,"char":[3,12],"class":[1,2,3,4,5,6,7,8,9,10,11,12],"default":3,"enum":[2,3,4,7,8,9,10,11],"function":[3,12],"int":[3,12],"new":3,"return":[2,3,7,10],"static":[2,10,12],"transient":7,"true":2,The:[7,10,12,13],These:13,Useful:[3,12],abc:[1,2,3,5,6,7,8,9,10],about:13,activ:3,add:[2,7,10],add_configur:2,add_console_argu:2,add_db_context:7,add_environment_vari:2,add_head:10,add_json_fil:2,add_log:7,add_receiv:10,add_scop:7,add_singleton:7,add_transi:7,additional_argu:2,address:10,alias:2,ani:3,app:[1,13],applic:[0,3,8,9,10,13,14],application_abc:[0,14],application_build:[0,14],application_builder_abc:[0,14],application_environ:[0,14],application_environment_abc:[0,9,10,14],application_nam:8,applicationabc:1,applicationbuild:1,applicationbuilderabc:1,applicationenviron:8,applicationenvironmentabc:[8,9,10],appset:1,arg:[1,3,6,12],argument:[2,3,12],argument_error_funct:2,attribut:[2,4,9,10,11],auth_plugin:4,authplugin:4,back:3,background:3,background_color:3,background_color_enum:[0,14],backgroundcolorenum:3,banner:3,base64:12,base:[1,2,3,4,5,6,7,8,9,10,11,12],befor:3,blue:3,bodi:10,bool:[2,3,10],build:[1,12],build_servic:7,build_service_provid:7,build_str:12,call:[1,3],callabl:[2,3,7],camel:12,camelcas:12,can:13,case_sensit:4,casesensit:4,chang:6,charact:3,check:10,check_mail:10,classmethod:[3,12],clear:3,close:3,collect:[2,3,7],color:3,color_reset:3,command:12,common:13,complex:13,config:[1,7],configur:[0,1,4,7,9,10,11,14],configuration_abc:[0,1,7,14],configuration_model_abc:[0,4,9,10,11,14],configuration_variable_name_enum:[0,14],configurationabc:[1,2,7],configurationmodelabc:[2,4,9,10,11],configurationvariablenameenum:2,configure_configur:1,configure_servic:1,connect:[0,4,6,10,14],connection_str:[4,5,6],connectionstr:4,consol:[0,2,9,14],console_argu:[0,14],console_cal:[0,14],console_level:9,consoleargu:2,consolecal:3,consoleloglevel:9,contain:1,context:[0,4,7,14],convert:[2,9,10,11,12],convert_to_camel_cas:12,convert_to_snake_cas:12,coordin:3,core:[5,6],creat:[1,7,9,10,12,13],credenti:[4,10,12],credential_manag:[0,14],credentialmanag:12,current:8,cursor:3,cursor_background_color:3,cursor_foreground_color:3,custom:[1,2,8],cyan:3,databas:[0,7,14],database_connect:[0,4,14],database_connection_abc:[0,4,14],database_context:[0,4,14],database_context_abc:[0,4,7,14],database_model:[0,14],database_set:[0,5,6,7,14],database_settings_name_enum:[0,14],databaseconnect:5,databaseconnectionabc:5,databasecontext:6,databasecontextabc:[6,7],databaseset:[4,5,6,7],databasesettingsnameenum:4,date_format:11,date_time_format:11,date_time_log_format:11,date_time_now:8,dateformat:11,datetimeformat:11,datetimelogformat:11,db_context:7,db_context_typ:7,db_set:7,debug:9,decod:12,decrypt:12,defin:2,dependency_inject:[0,1,14],descriptor:7,desktop:13,detail:13,develop:[8,13],dict:[2,3,4,9,10,11],directori:8,disabl:3,doc:[5,6],echo:4,effici:13,element:3,email:[0,14],email_client_abc:[0,14],email_client_servic:[0,14],email_client_set:[0,14],email_client_settings_name_enum:[0,14],emailcli:10,emailclientabc:10,emailclientset:10,emailclientsettingsnameenum:10,enabl:3,encod:[4,12],encrypt:12,end:[3,9],end_tim:8,engin:[5,6],enterpris:13,entri:[1,3],enumer:[2,3,4,7,8,9,10,11],env:9,environ:[0,2,9,10,14],environment_nam:8,environment_name_enum:[0,14],environmentnameenum:8,error:[2,3,9],everyth:13,except:9,execut:12,exit:3,extra:12,fatal:9,file:2,file_level:9,fileloglevel:9,filenam:9,first:[12,13],first_to_low:12,first_to_upp:12,foreground:3,foreground_color:3,foreground_color_enum:[0,14],foregroundcolorenum:3,format:[9,11],found:2,from:[1,2,4,13],from_dict:[2,4,9,10,11],get:12,get_configur:2,get_cont:10,get_execut:12,get_outd:12,get_packag:12,get_servic:7,given:[2,3,4,7,12],great:13,green:3,grei:3,handl:[3,12],has:3,header:[3,9,10],header_background_color:3,header_foreground_color:3,header_list:10,help:13,hold:3,host:10,host_nam:8,html:[5,6],http:[5,6],implement:7,index:12,info:9,inform:9,input:3,instal:12,instanc:[1,7],instance_typ:7,interact:3,intern:7,invalid:2,is_value_token_opt:2,json:2,key_typ:2,keyword:3,known:2,kwarg:3,last:3,learn:13,length:[3,12],level:9,librari:13,lifetim:7,line:3,list:[2,3,7,10,12],load:1,local:12,log:[0,10,14],logfil:9,logger:[7,9,10],logger_abc:[0,10,14],logger_servic:[0,14],loggerabc:[9,10],logging_level_enum:[0,14],logging_set:[0,14],logging_settings_name_enum:[0,14],logginglevelenum:9,loggingset:9,loggingsettingsnameenum:9,login:10,lower:12,magenta:3,mail:[0,14],mail_set:10,main:1,meant:13,menu:3,messag:[3,9],msg_len:3,name:[2,8,9,12],next:3,none:[2,3,7,9,10,12],object:[1,2,3,7,10,12],occur:2,off:9,on_blu:3,on_cyan:3,on_default:3,on_green:3,on_grei:3,on_magenta:3,on_r:3,on_whit:3,on_yellow:3,option:[2,3,7,9,10,12],option_background_color:3,option_foreground_color:3,org:[5,6],outdat:12,output:[2,3],packag:[12,13],page:13,path:[2,8,9],pip:[0,14],place:2,platform:13,point:[1,3],port:10,posit:3,prefix:2,prepar:1,print:3,product:8,program:9,properti:[2,3,4,5,6,7,8,9,10,11],provid:[1,7],python:[12,13],random:12,random_str:12,read:[2,3],read_lin:3,receiv:10,receiver_list:10,red:3,replac:12,repres:[3,4,8,10],represent:[5,6,7,9,10,11],reset:[3,12],reset_cursor_posit:3,reset_execut:12,result:[10,12],run:[1,3,12],runtim:8,runtime_directori:8,save:[2,6],save_chang:6,scope:7,search:[2,7],search_typ:2,see:[5,6],select:3,send:10,send_mail:10,server:[10,13],servic:[1,7,9,10],service_collect:[0,14],service_collection_abc:[0,14],service_descriptor:[0,14],service_lifetime_enum:[0,14],service_provid:[0,14],service_provider_abc:[0,1,14],service_typ:7,servicecollect:7,servicecollectionabc:7,servicedescriptor:7,servicelifetimeenum:7,serviceprovid:7,serviceproviderabc:[1,7],session:[5,6],set:[1,2,3,4,7,8,9,10,11,12],set_background_color:3,set_cursor_posit:3,set_execut:12,set_foreground_color:3,set_hold_back:3,set_runtime_directori:8,set_working_directori:8,should:2,show:3,shown:2,simpl:13,singleton:7,snake:12,snake_cas:12,sourc:12,specifi:2,spinner:3,spinner_background_color:3,spinner_foreground_color:3,spinner_thread:[0,14],spinnerthread:3,sqlalchemi:[5,6],stage:8,standard:12,start_tim:8,startup:1,startup_abc:[0,14],startupabc:1,stderr:12,stdout:12,stop:3,stop_spin:3,store:2,str:[2,3,5,6,8,9,10,12],string:[0,3,5,6,9,10,14],subject:10,submodul:[0,14],subprocess:12,system:12,tabl:[3,12],take:2,termin:3,test:8,text:3,text_background_color:3,text_foreground_color:3,thi:[1,13],thread:3,thrown:9,time:[0,9,14],time_format:[9,11],time_format_set:[0,9,14],time_format_settings_names_enum:[0,14],timeformat:11,timeformatset:[9,11],timeformatsettingsnamesenum:11,to_list:2,token:2,trace:9,traceback:3,transceiv:10,tree:9,type:[1,2,7],understand:13,uninstal:12,union:[2,3,7],upper:12,url:12,use:[1,10,13],use_startup:1,used:1,user_nam:10,usernam:10,util:[0,14],valid:10,valu:[2,3,4,7,8,9,10,11],value_token:2,variabl:[2,12],warn:9,when:3,whether:2,which:[2,3,12],white:3,work:8,working_directori:8,write:[3,9],write_at:3,write_lin:3,write_line_at:3,yellow:3,you:13,your:13},titles:["CPL","cpl.application","cpl.configuration","cpl.console","cpl.database","cpl.database.connection","cpl.database.context","cpl.dependency_injection","cpl.environment","cpl.logging","cpl.mailing","cpl.time","cpl.utils","Introduction to the CPL Docs","cpl"],titleterms:{applic:1,application_abc:1,application_build:1,application_builder_abc:1,application_environ:8,application_environment_abc:8,background_color_enum:3,configur:2,configuration_abc:2,configuration_model_abc:2,configuration_variable_name_enum:2,connect:5,consol:3,console_argu:2,console_cal:3,context:6,cpl:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],credential_manag:12,databas:[4,5,6],database_connect:5,database_connection_abc:5,database_context:6,database_context_abc:6,database_model:4,database_set:4,database_settings_name_enum:4,dependency_inject:7,doc:13,email:10,email_client_abc:10,email_client_servic:10,email_client_set:10,email_client_settings_name_enum:10,environ:8,environment_name_enum:8,foreground_color_enum:3,introduct:13,log:9,logger_abc:9,logger_servic:9,logging_level_enum:9,logging_set:9,logging_settings_name_enum:9,mail:10,manual:13,pip:12,service_collect:7,service_collection_abc:7,service_descriptor:7,service_lifetime_enum:7,service_provid:7,service_provider_abc:7,spinner_thread:3,startup_abc:1,string:12,submodul:4,time:11,time_format_set:11,time_format_settings_names_enum:11,util:12}}) \ No newline at end of file diff --git a/src/cpl/utils/credential_manager.py b/src/cpl/utils/credential_manager.py index 8a40e8dc..f5265403 100644 --- a/src/cpl/utils/credential_manager.py +++ b/src/cpl/utils/credential_manager.py @@ -2,35 +2,52 @@ import base64 class CredentialManager: - """ - Handles credentials - """ + r"""Handles credential encryption and decryption""" @staticmethod def encrypt(string: str) -> str: - """ - Encode with base64 - :param string: - :return: + r"""Encode with base64 + + Parameter + --------- + string: :class:`str` + String to encode + + Returns + ------- + Encoded string """ return base64.b64encode(string.encode('utf-8')).decode('utf-8') @staticmethod def decrypt(string: str) -> str: - """ - Decode with base64 - :param string: - :return: + r"""Decode with base64 + + Parameter + --------- + string: :class:`str` + String to decode + + Returns + ------- + Decoded string """ return base64.b64decode(string).decode('utf-8') @staticmethod def build_string(string: str, credentials: str): - """ - Builds string with credentials in it - :param string: - :param credentials: - :return: + r"""Builds string with credentials in it + + Parameter + --------- + string: :class:`str` + String in which the variable is replaced by credentials + credentials: :class:`str` + String to encode + + Returns + ------- + Decoded string """ return string.replace('$credentials', CredentialManager.decrypt(credentials)) diff --git a/src/cpl/utils/pip.py b/src/cpl/utils/pip.py index 5ed0f617..bea3da12 100644 --- a/src/cpl/utils/pip.py +++ b/src/cpl/utils/pip.py @@ -1,38 +1,30 @@ import os import subprocess import sys -import shlex from contextlib import suppress -from textwrap import dedent from typing import Optional class Pip: - """ - Executes pip commands - """ + r"""Executes pip commands""" _executable = sys.executable _env = os.environ _is_venv = False - """ - Getter - """ - + """Getter""" @classmethod def get_executable(cls) -> str: return cls._executable - """ - Setter - """ - + """Setter""" @classmethod def set_executable(cls, executable: str): - """ - Sets the executable - :param executable: - :return: + r"""Sets the executable + + Parameter + --------- + executable: :class:`str` + The python command """ if executable is not None and executable != sys.executable: cls._executable = executable @@ -48,23 +40,22 @@ class Pip: @classmethod def reset_executable(cls): - """ - Resets the executable to system standard - :return: - """ + r"""Resets the executable to system standard""" cls._executable = sys.executable cls._is_venv = False - """ - Public utils functions - """ - + """Public utils functions""" @classmethod def get_package(cls, package: str) -> Optional[str]: - """ - Gets given package py local pip list - :param package: - :return: + r"""Gets given package py local pip list + + Parameter + --------- + package: :class:`str` + + Returns + ------- + The package name as string """ result = None with suppress(Exception): @@ -94,9 +85,11 @@ class Pip: @classmethod def get_outdated(cls) -> bytes: - """ - Gets table of outdated packages - :return: + r"""Gets table of outdated packages + + Returns + ------- + Bytes string of the command result """ args = [cls._executable, "-m", "pip", "list", "--outdated"] if cls._is_venv: @@ -106,14 +99,20 @@ class Pip: @classmethod def install(cls, package: str, *args, source: str = None, stdout=None, stderr=None): - """ - Installs given package - :param package: - :param args: - :param source: - :param stdout: - :param stderr: - :return: + r"""Installs given package + + Parameter + --------- + package: :class:`str` + The name of the package + args: :class:`list` + Arguments for the command + source: :class:`str` + Extra index URL + stdout: :class:`str` + Stdout of subprocess.run + stderr: :class:`str` + Stderr of subprocess.run """ pip_args = [cls._executable, "-m", "pip", "install"] if cls._is_venv: @@ -131,12 +130,16 @@ class Pip: @classmethod def uninstall(cls, package: str, stdout=None, stderr=None): - """ - Uninstalls given package - :param package: - :param stdout: - :param stderr: - :return: + r"""Uninstalls given package + + Parameter + --------- + package: :class:`str` + The name of the package + stdout: :class:`str` + Stdout of subprocess.run + stderr: :class:`str` + Stderr of subprocess.run """ args = [cls._executable, "-m", "pip", "uninstall", "--yes", package] if cls._is_venv: diff --git a/src/cpl/utils/string.py b/src/cpl/utils/string.py index ebca8382..5866c8b6 100644 --- a/src/cpl/utils/string.py +++ b/src/cpl/utils/string.py @@ -4,16 +4,20 @@ import random class String: - """ - Useful functions for strings - """ + r"""Useful functions for strings""" @staticmethod def convert_to_camel_case(chars: str) -> str: - """ - Converts string to camel case - :param chars: - :return: + r"""Converts string to camel case + + Parameter + --------- + chars: :class:`str` + String to convert + + Returns + ------- + String converted to CamelCase """ converted_name = chars char_set = string.punctuation + ' ' @@ -25,10 +29,16 @@ class String: @staticmethod def convert_to_snake_case(chars: str) -> str: - """ - Converts string to snake case - :param chars: - :return: + r"""Converts string to snake case + + Parameter + --------- + chars: :class:`str` + String to convert + + Returns + ------- + String converted to snake_case """ # convert to train-case to CamelCase if '-' in chars: @@ -41,26 +51,41 @@ class String: @staticmethod def first_to_upper(chars: str) -> str: - """ - Converts first char to upper - :param chars: - :return: + r"""Converts first char to upper + + Parameter + --------- + chars: :class:`str` + String to convert + + Returns + ------- + String with first char as upper """ return f'{chars[0].upper()}{chars[1:]}' @staticmethod def first_to_lower(chars: str) -> str: - """ - Converts first char to lower - :param chars: - :return: + r"""Converts first char to lower + + Parameter + --------- + chars: :class:`str` + String to convert + + Returns + ------- + String with first char as lower """ return f'{chars[0].lower()}{chars[1:]}' @staticmethod def random_string(chars: str, length: int) -> str: - """ - Creates random string by given chars and length + r"""Creates random string by given chars and length + + Returns + ------- + String of random chars """ return ''.join(random.choice(chars) for _ in range(length))