diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000000000000000000000000000000000..565c3479979a778f5cce6026b527df159f3ed8ec --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,28 @@ +<component name="ProjectCodeStyleConfiguration"> + <code_scheme name="Project" version="173"> + <DBN-PSQL> + <case-options enabled="false"> + <option name="KEYWORD_CASE" value="lower" /> + <option name="FUNCTION_CASE" value="lower" /> + <option name="PARAMETER_CASE" value="lower" /> + <option name="DATATYPE_CASE" value="lower" /> + <option name="OBJECT_CASE" value="preserve" /> + </case-options> + <formatting-settings enabled="false" /> + </DBN-PSQL> + <DBN-SQL> + <case-options enabled="false"> + <option name="KEYWORD_CASE" value="lower" /> + <option name="FUNCTION_CASE" value="lower" /> + <option name="PARAMETER_CASE" value="lower" /> + <option name="DATATYPE_CASE" value="lower" /> + <option name="OBJECT_CASE" value="preserve" /> + </case-options> + <formatting-settings enabled="false"> + <option name="STATEMENT_SPACING" value="one_line" /> + <option name="CLAUSE_CHOP_DOWN" value="chop_down_if_statement_long" /> + <option name="ITERATION_ELEMENTS_WRAPPING" value="chop_down_if_not_single" /> + </formatting-settings> + </DBN-SQL> + </code_scheme> +</component> \ No newline at end of file diff --git a/.idea/dbnavigator.xml b/.idea/dbnavigator.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cd1174e7e4522ab50cd5298409a3dfa611f95ee --- /dev/null +++ b/.idea/dbnavigator.xml @@ -0,0 +1,449 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="DBNavigator.Project.DataEditorManager"> + <record-view-column-sorting-type value="BY_INDEX" /> + <value-preview-text-wrapping value="true" /> + <value-preview-pinned value="false" /> + </component> + <component name="DBNavigator.Project.DataExportManager"> + <export-instructions> + <create-header value="true" /> + <quote-values-containing-separator value="true" /> + <quote-all-values value="false" /> + <value-separator value="" /> + <file-name value="" /> + <file-location value="" /> + <scope value="GLOBAL" /> + <destination value="FILE" /> + <format value="EXCEL" /> + <charset value="UTF-8" /> + </export-instructions> + </component> + <component name="DBNavigator.Project.DatabaseBrowserManager"> + <autoscroll-to-editor value="false" /> + <autoscroll-from-editor value="true" /> + <show-object-properties value="true" /> + <loaded-nodes /> + </component> + <component name="DBNavigator.Project.EditorStateManager"> + <last-used-providers /> + </component> + <component name="DBNavigator.Project.MethodExecutionManager"> + <method-browser /> + <execution-history> + <group-entries value="true" /> + <execution-inputs /> + </execution-history> + <argument-values-cache /> + </component> + <component name="DBNavigator.Project.ObjectDependencyManager"> + <last-used-dependency-type value="INCOMING" /> + </component> + <component name="DBNavigator.Project.ObjectQuickFilterManager"> + <last-used-operator value="EQUAL" /> + <filters /> + </component> + <component name="DBNavigator.Project.ScriptExecutionManager" clear-outputs="true"> + <recently-used-interfaces /> + </component> + <component name="DBNavigator.Project.Settings"> + <connections /> + <browser-settings> + <general> + <display-mode value="TABBED" /> + <navigation-history-size value="100" /> + <show-object-details value="false" /> + </general> + <filters> + <object-type-filter> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="true" /> + <object-type name="ROLE" enabled="true" /> + <object-type name="PRIVILEGE" enabled="true" /> + <object-type name="CHARSET" enabled="true" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED_VIEW" enabled="true" /> + <object-type name="NESTED_TABLE" enabled="true" /> + <object-type name="COLUMN" enabled="true" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET_TRIGGER" enabled="true" /> + <object-type name="DATABASE_TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="true" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="TYPE_ATTRIBUTE" enabled="true" /> + <object-type name="ARGUMENT" enabled="true" /> + <object-type name="DIMENSION" enabled="true" /> + <object-type name="CLUSTER" enabled="true" /> + <object-type name="DBLINK" enabled="true" /> + </object-type-filter> + </filters> + <sorting> + <object-type name="COLUMN" sorting-type="NAME" /> + <object-type name="FUNCTION" sorting-type="NAME" /> + <object-type name="PROCEDURE" sorting-type="NAME" /> + <object-type name="ARGUMENT" sorting-type="POSITION" /> + </sorting> + <default-editors> + <object-type name="VIEW" editor-type="SELECTION" /> + <object-type name="PACKAGE" editor-type="SELECTION" /> + <object-type name="TYPE" editor-type="SELECTION" /> + </default-editors> + </browser-settings> + <navigation-settings> + <lookup-filters> + <lookup-objects> + <object-type name="SCHEMA" enabled="true" /> + <object-type name="USER" enabled="false" /> + <object-type name="ROLE" enabled="false" /> + <object-type name="PRIVILEGE" enabled="false" /> + <object-type name="CHARSET" enabled="false" /> + <object-type name="TABLE" enabled="true" /> + <object-type name="VIEW" enabled="true" /> + <object-type name="MATERIALIZED VIEW" enabled="true" /> + <object-type name="NESTED TABLE" enabled="false" /> + <object-type name="COLUMN" enabled="false" /> + <object-type name="INDEX" enabled="true" /> + <object-type name="CONSTRAINT" enabled="true" /> + <object-type name="DATASET TRIGGER" enabled="true" /> + <object-type name="DATABASE TRIGGER" enabled="true" /> + <object-type name="SYNONYM" enabled="false" /> + <object-type name="SEQUENCE" enabled="true" /> + <object-type name="PROCEDURE" enabled="true" /> + <object-type name="FUNCTION" enabled="true" /> + <object-type name="PACKAGE" enabled="true" /> + <object-type name="TYPE" enabled="true" /> + <object-type name="TYPE ATTRIBUTE" enabled="false" /> + <object-type name="ARGUMENT" enabled="false" /> + <object-type name="DIMENSION" enabled="false" /> + <object-type name="CLUSTER" enabled="false" /> + <object-type name="DBLINK" enabled="true" /> + </lookup-objects> + <force-database-load value="false" /> + <prompt-connection-selection value="true" /> + <prompt-schema-selection value="true" /> + </lookup-filters> + </navigation-settings> + <dataset-grid-settings> + <general> + <enable-zooming value="true" /> + <enable-column-tooltip value="true" /> + </general> + <sorting> + <nulls-first value="true" /> + <max-sorting-columns value="4" /> + </sorting> + <tracking-columns> + <columnNames value="" /> + <visible value="true" /> + <editable value="false" /> + </tracking-columns> + </dataset-grid-settings> + <dataset-editor-settings> + <text-editor-popup> + <active value="false" /> + <active-if-empty value="false" /> + <data-length-threshold value="100" /> + <popup-delay value="1000" /> + </text-editor-popup> + <values-list-popup> + <show-popup-button value="true" /> + <element-count-threshold value="1000" /> + <data-length-threshold value="250" /> + </values-list-popup> + <general> + <fetch-block-size value="100" /> + <fetch-timeout value="30" /> + <trim-whitespaces value="true" /> + <convert-empty-strings-to-null value="true" /> + <select-content-on-cell-edit value="true" /> + <large-value-preview-active value="true" /> + </general> + <filters> + <prompt-filter-dialog value="true" /> + <default-filter-type value="BASIC" /> + </filters> + <qualified-text-editor text-length-threshold="300"> + <content-types> + <content-type name="Text" enabled="true" /> + <content-type name="Properties" enabled="true" /> + <content-type name="XML" enabled="true" /> + <content-type name="DTD" enabled="true" /> + <content-type name="HTML" enabled="true" /> + <content-type name="XHTML" enabled="true" /> + <content-type name="SQL" enabled="true" /> + <content-type name="PL/SQL" enabled="true" /> + <content-type name="YAML" enabled="true" /> + </content-types> + </qualified-text-editor> + <record-navigation> + <navigation-target value="VIEWER" /> + </record-navigation> + </dataset-editor-settings> + <code-editor-settings> + <general> + <show-object-navigation-gutter value="false" /> + <show-spec-declaration-navigation-gutter value="true" /> + <enable-spellchecking value="true" /> + <enable-reference-spellchecking value="false" /> + </general> + <confirmations> + <save-changes value="false" /> + <revert-changes value="true" /> + </confirmations> + </code-editor-settings> + <code-completion-settings> + <filters> + <basic-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="false" /> + <filter-element type="OBJECT" id="view" selected="false" /> + <filter-element type="OBJECT" id="materialized view" selected="false" /> + <filter-element type="OBJECT" id="index" selected="false" /> + <filter-element type="OBJECT" id="constraint" selected="false" /> + <filter-element type="OBJECT" id="trigger" selected="false" /> + <filter-element type="OBJECT" id="synonym" selected="false" /> + <filter-element type="OBJECT" id="sequence" selected="false" /> + <filter-element type="OBJECT" id="procedure" selected="false" /> + <filter-element type="OBJECT" id="function" selected="false" /> + <filter-element type="OBJECT" id="package" selected="false" /> + <filter-element type="OBJECT" id="type" selected="false" /> + <filter-element type="OBJECT" id="dimension" selected="false" /> + <filter-element type="OBJECT" id="cluster" selected="false" /> + <filter-element type="OBJECT" id="dblink" selected="false" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </basic-filter> + <extended-filter> + <filter-element type="RESERVED_WORD" id="keyword" selected="true" /> + <filter-element type="RESERVED_WORD" id="function" selected="true" /> + <filter-element type="RESERVED_WORD" id="parameter" selected="true" /> + <filter-element type="RESERVED_WORD" id="datatype" selected="true" /> + <filter-element type="RESERVED_WORD" id="exception" selected="true" /> + <filter-element type="OBJECT" id="schema" selected="true" /> + <filter-element type="OBJECT" id="user" selected="true" /> + <filter-element type="OBJECT" id="role" selected="true" /> + <filter-element type="OBJECT" id="privilege" selected="true" /> + <user-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </user-schema> + <public-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </public-schema> + <any-schema> + <filter-element type="OBJECT" id="table" selected="true" /> + <filter-element type="OBJECT" id="view" selected="true" /> + <filter-element type="OBJECT" id="materialized view" selected="true" /> + <filter-element type="OBJECT" id="index" selected="true" /> + <filter-element type="OBJECT" id="constraint" selected="true" /> + <filter-element type="OBJECT" id="trigger" selected="true" /> + <filter-element type="OBJECT" id="synonym" selected="true" /> + <filter-element type="OBJECT" id="sequence" selected="true" /> + <filter-element type="OBJECT" id="procedure" selected="true" /> + <filter-element type="OBJECT" id="function" selected="true" /> + <filter-element type="OBJECT" id="package" selected="true" /> + <filter-element type="OBJECT" id="type" selected="true" /> + <filter-element type="OBJECT" id="dimension" selected="true" /> + <filter-element type="OBJECT" id="cluster" selected="true" /> + <filter-element type="OBJECT" id="dblink" selected="true" /> + </any-schema> + </extended-filter> + </filters> + <sorting enabled="true"> + <sorting-element type="RESERVED_WORD" id="keyword" /> + <sorting-element type="RESERVED_WORD" id="datatype" /> + <sorting-element type="OBJECT" id="column" /> + <sorting-element type="OBJECT" id="table" /> + <sorting-element type="OBJECT" id="view" /> + <sorting-element type="OBJECT" id="materialized view" /> + <sorting-element type="OBJECT" id="index" /> + <sorting-element type="OBJECT" id="constraint" /> + <sorting-element type="OBJECT" id="trigger" /> + <sorting-element type="OBJECT" id="synonym" /> + <sorting-element type="OBJECT" id="sequence" /> + <sorting-element type="OBJECT" id="procedure" /> + <sorting-element type="OBJECT" id="function" /> + <sorting-element type="OBJECT" id="package" /> + <sorting-element type="OBJECT" id="type" /> + <sorting-element type="OBJECT" id="dimension" /> + <sorting-element type="OBJECT" id="cluster" /> + <sorting-element type="OBJECT" id="dblink" /> + <sorting-element type="OBJECT" id="schema" /> + <sorting-element type="OBJECT" id="role" /> + <sorting-element type="OBJECT" id="user" /> + <sorting-element type="RESERVED_WORD" id="function" /> + <sorting-element type="RESERVED_WORD" id="parameter" /> + </sorting> + <format> + <enforce-code-style-case value="true" /> + </format> + </code-completion-settings> + <execution-engine-settings> + <statement-execution> + <fetch-block-size value="100" /> + <execution-timeout value="20" /> + <debug-execution-timeout value="600" /> + <focus-result value="false" /> + <prompt-execution value="false" /> + </statement-execution> + <script-execution> + <command-line-interfaces /> + <execution-timeout value="300" /> + </script-execution> + <method-execution> + <execution-timeout value="30" /> + <debug-execution-timeout value="600" /> + <parameter-history-size value="10" /> + </method-execution> + </execution-engine-settings> + <operation-settings> + <transactions> + <uncommitted-changes> + <on-project-close value="ASK" /> + <on-disconnect value="ASK" /> + <on-autocommit-toggle value="ASK" /> + </uncommitted-changes> + <multiple-uncommitted-changes> + <on-commit value="ASK" /> + <on-rollback value="ASK" /> + </multiple-uncommitted-changes> + </transactions> + <session-browser> + <disconnect-session value="ASK" /> + <kill-session value="ASK" /> + <reload-on-filter-change value="false" /> + </session-browser> + <compiler> + <compile-type value="KEEP" /> + <compile-dependencies value="ASK" /> + <always-show-controls value="false" /> + </compiler> + <debugger> + <debugger-type value="JDBC" /> + <use-generic-runners value="true" /> + </debugger> + </operation-settings> + <ddl-file-settings> + <extensions> + <mapping file-type-id="VIEW" extensions="vw" /> + <mapping file-type-id="TRIGGER" extensions="trg" /> + <mapping file-type-id="PROCEDURE" extensions="prc" /> + <mapping file-type-id="FUNCTION" extensions="fnc" /> + <mapping file-type-id="PACKAGE" extensions="pkg" /> + <mapping file-type-id="PACKAGE_SPEC" extensions="pks" /> + <mapping file-type-id="PACKAGE_BODY" extensions="pkb" /> + <mapping file-type-id="TYPE" extensions="tpe" /> + <mapping file-type-id="TYPE_SPEC" extensions="tps" /> + <mapping file-type-id="TYPE_BODY" extensions="tpb" /> + </extensions> + <general> + <lookup-ddl-files value="true" /> + <create-ddl-files value="false" /> + <synchronize-ddl-files value="true" /> + <use-qualified-names value="false" /> + <make-scripts-rerunnable value="true" /> + </general> + </ddl-file-settings> + <general-settings> + <regional-settings> + <date-format value="MEDIUM" /> + <number-format value="UNGROUPED" /> + <locale value="SYSTEM_DEFAULT" /> + <use-custom-formats value="false" /> + </regional-settings> + <environment> + <environment-types> + <environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" /> + <environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" /> + <environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" /> + <environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" /> + </environment-types> + <visibility-settings> + <connection-tabs value="true" /> + <dialog-headers value="true" /> + <object-editor-tabs value="true" /> + <script-editor-tabs value="false" /> + <execution-result-tabs value="true" /> + </visibility-settings> + </environment> + </general-settings> + </component> + <component name="DBNavigator.Project.StatementExecutionManager"> + <execution-variables /> + </component> +</project> \ No newline at end of file diff --git a/.idea/dictionaries/lxrent.xml b/.idea/dictionaries/lxrent.xml new file mode 100644 index 0000000000000000000000000000000000000000..18a9597c08b6d4c5e89d9f1ac588d4f431beb915 --- /dev/null +++ b/.idea/dictionaries/lxrent.xml @@ -0,0 +1,3 @@ +<component name="ProjectDictionaryState"> + <dictionary name="lxrent" /> +</component> \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000000000000000000000000000000000000..97626ba45445dc9f3afa66e6a149914dc39e3df6 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="Encoding"> + <file url="PROJECT" charset="UTF-8" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..a3ffc2d70d700eb88da2d08fd8f8f6315c44bd05 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6 (venv)" project-jdk-type="Python SDK" /> + <component name="PyCharmProfessionalAdvertiser"> + <option name="shown" value="true" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..a98c7e54a8695c83e934397a9fe7d07994cddf44 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/.idea/physical.iml" filepath="$PROJECT_DIR$/.idea/physical.iml" /> + </modules> + </component> +</project> \ No newline at end of file diff --git a/.idea/physical.iml b/.idea/physical.iml new file mode 100644 index 0000000000000000000000000000000000000000..6711606311e2664bd835f92b5c114681d2e284f5 --- /dev/null +++ b/.idea/physical.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="PYTHON_MODULE" version="4"> + <component name="NewModuleRootManager"> + <content url="file://$MODULE_DIR$" /> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> + <component name="TestRunnerService"> + <option name="PROJECT_TEST_RUNNER" value="Unittests" /> + </component> +</module> \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a25f7f4cb416c083d265558da75d457237d671 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$" vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000000000000000000000000000000000000..2128f81a14299b28345f489cb4bc4cfc01fb70be --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,237 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ChangeListManager"> + <list default="true" id="d7dd36ca-85ef-4a59-9db5-8b1ee4993a4e" name="Default Changelist" comment="" /> + <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" /> + <option name="SHOW_DIALOG" value="false" /> + <option name="HIGHLIGHT_CONFLICTS" value="true" /> + <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> + <option name="LAST_RESOLUTION" value="IGNORE" /> + </component> + <component name="FUSProjectUsageTrigger"> + <session id="-127591351"> + <usages-collector id="statistics.lifecycle.project"> + <counts> + <entry key="project.open.time.1" value="1" /> + <entry key="project.opened" value="1" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.extensions.open"> + <counts> + <entry key="py" value="5" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.types.open"> + <counts> + <entry key="Python" value="5" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.extensions.edit"> + <counts> + <entry key="py" value="28" /> + </counts> + </usages-collector> + <usages-collector id="statistics.file.types.edit"> + <counts> + <entry key="Python" value="28" /> + </counts> + </usages-collector> + </session> + </component> + <component name="FileEditorManager"> + <leaf> + <file pinned="false" current-in-tab="true"> + <entry file="file://$PROJECT_DIR$/physical/settings.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="-2335" /> + </provider> + </entry> + </file> + </leaf> + </component> + <component name="Git.Settings"> + <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" /> + </component> + <component name="IdeDocumentHistory"> + <option name="CHANGED_PATHS"> + <list> + <option value="$PROJECT_DIR$/trans2es/management/commands/trans2es_data2es_parallel.py" /> + <option value="$PROJECT_DIR$/trans2es/models/face_user_contrast_similar.py" /> + </list> + </option> + </component> + <component name="ProjectFrameBounds"> + <option name="x" value="279" /> + <option name="y" value="23" /> + <option name="width" value="1280" /> + <option name="height" value="738" /> + </component> + <component name="ProjectInspectionProfilesVisibleTreeState"> + <entry key="Project Default"> + <profile-state> + <expanded-state> + <State /> + <State> + <id>General</id> + </State> + </expanded-state> + <selected-state> + <State> + <id>Buildout</id> + </State> + </selected-state> + </profile-state> + </entry> + </component> + <component name="ProjectView"> + <navigator proportions="" version="1"> + <foldersAlwaysOnTop value="true" /> + </navigator> + <panes> + <pane id="ProjectPane"> + <subPane> + <expand> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + <item name="trans2es" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + <item name="trans2es" type="462c0819:PsiDirectoryNode" /> + <item name="management" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + <item name="trans2es" type="462c0819:PsiDirectoryNode" /> + <item name="management" type="462c0819:PsiDirectoryNode" /> + <item name="commands" type="462c0819:PsiDirectoryNode" /> + </path> + <path> + <item name="physical" type="b2602c69:ProjectViewProjectNode" /> + <item name="physical" type="462c0819:PsiDirectoryNode" /> + <item name="trans2es" type="462c0819:PsiDirectoryNode" /> + <item name="models" type="462c0819:PsiDirectoryNode" /> + </path> + </expand> + <select /> + </subPane> + </pane> + <pane id="Scope" /> + </panes> + </component> + <component name="PropertiesComponent"> + <property name="last_opened_file_path" value="$PROJECT_DIR$" /> + <property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" /> + </component> + <component name="RecentsManager"> + <key name="MoveFile.RECENT_KEYS"> + <recent name="$PROJECT_DIR$/search/views" /> + </key> + </component> + <component name="RunDashboard"> + <option name="ruleStates"> + <list> + <RuleState> + <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> + </RuleState> + <RuleState> + <option name="name" value="StatusDashboardGroupingRule" /> + </RuleState> + </list> + </option> + </component> + <component name="SvnConfiguration"> + <configuration /> + </component> + <component name="TaskManager"> + <task active="true" id="Default" summary="Default task"> + <changelist id="d7dd36ca-85ef-4a59-9db5-8b1ee4993a4e" name="Default Changelist" comment="" /> + <created>1548319196437</created> + <option name="number" value="Default" /> + <option name="presentableId" value="Default" /> + <updated>1548319196437</updated> + </task> + <servers /> + </component> + <component name="ToolWindowManager"> + <frame x="279" y="23" width="1280" height="738" extended-state="0" /> + <editor active="true" /> + <layout> + <window_info id="DB Browser" /> + <window_info id="Favorites" side_tool="true" /> + <window_info active="true" content_ui="combo" id="Project" order="0" visible="true" weight="0.2494043" /> + <window_info id="Structure" order="1" side_tool="true" weight="0.25" /> + <window_info anchor="bottom" id="DB Execution Console" /> + <window_info anchor="bottom" id="Version Control" show_stripe_button="false" /> + <window_info anchor="bottom" id="Python Console" /> + <window_info anchor="bottom" id="Terminal" visible="true" weight="0.10914928" /> + <window_info anchor="bottom" id="Event Log" side_tool="true" /> + <window_info anchor="bottom" id="Message" order="0" /> + <window_info anchor="bottom" id="Find" order="1" /> + <window_info anchor="bottom" id="Run" order="2" /> + <window_info anchor="bottom" id="Debug" order="3" weight="0.4" /> + <window_info anchor="bottom" id="Cvs" order="4" weight="0.25" /> + <window_info anchor="bottom" id="Inspection" order="5" weight="0.4" /> + <window_info anchor="bottom" id="TODO" order="6" /> + <window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" /> + <window_info anchor="right" id="Ant Build" order="1" weight="0.25" /> + <window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" /> + </layout> + </component> + <component name="VcsContentAnnotationSettings"> + <option name="myLimit" value="2678400000" /> + </component> + <component name="editorHistoryManager"> + <entry file="file://$PROJECT_DIR$/search/views/contrast_similar.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="-288" /> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/trans2es/models/face_user_contrast_similar.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="240"> + <caret line="21" column="26" selection-start-line="21" selection-start-column="26" selection-end-line="21" selection-end-column="26" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/trans2es/management/commands/trans2es_data2es_parallel.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="364"> + <caret line="129" column="63" selection-start-line="129" selection-start-column="54" selection-end-line="129" selection-end-column="63" /> + </state> + </provider> + </entry> + <entry file="file://$PROJECT_DIR$/physical/settings.py"> + <provider selected="true" editor-type-id="text-editor"> + <state relative-caret-position="-2335" /> + </provider> + </entry> + </component> + <component name="masterDetails"> + <states> + <state key="ScopeChooserConfigurable.UI"> + <settings> + <splitter-proportions> + <option name="proportions"> + <list> + <option value="0.2" /> + </list> + </option> + </splitter-proportions> + </settings> + </state> + </states> + </component> +</project> \ No newline at end of file diff --git a/libs/es.py b/libs/es.py index 0a614e7646d0cb675e70f4b4777ce4173304a26a..c4c5d6df5163bdf6101809dc556344998fe9299d 100644 --- a/libs/es.py +++ b/libs/es.py @@ -207,4 +207,4 @@ class ESPerform(object): return res except: logging.error("catch exception,err_msg:%s" % traceback.format_exc()) - return {"total_count":0,"hits":[]} \ No newline at end of file + return {"total_count":0,"hits":[]} diff --git a/physical/settings.py b/physical/settings.py index 689d1041d0a3ed42fcb66cb3444b02072dfe2a22..5d1646cea9fc281780503dcae08f935cdc76bdec 100644 --- a/physical/settings.py +++ b/physical/settings.py @@ -133,6 +133,7 @@ DATABASES = { 'PASSWORD': 'Gengmei123', # 'HOST': 'rm-2ze5k2we69904787l.mysql.rds.aliyuncs.com', "HOST": 'rm-2zeaut61u9sm21m0bjo.mysql.rds.aliyuncs.com', + #'HOST': 'rm-2zeaut61u9sm21m0b.mysql.rds.aliyuncs.com', 'PORT': '3306', 'OPTIONS': { "init_command": "SET foreign_key_checks = 0;", @@ -146,6 +147,7 @@ DATABASES = { 'PASSWORD': 'Gengmei123', # 'HOST': 'rm-2ze5k2we69904787l.mysql.rds.aliyuncs.com', "HOST": "rm-2zeaut61u9sm21m0bjo.mysql.rds.aliyuncs.com", + # 'HOST': 'rm-2zeaut61u9sm21m0b.mysql.rds.aliyuncs.com', 'PORT': '3306', # 'CONN_MAX_AGE': None, 'OPTIONS': { diff --git a/search/utils/topic.py b/search/utils/topic.py index 4ccc6f0a7fb941c5816339d61cdc4fa54a369e61..ab7d691c4629fe6b4ebbc8991f670e2df3ddf95a 100644 --- a/search/utils/topic.py +++ b/search/utils/topic.py @@ -41,7 +41,6 @@ class TopicUtils(object): logging.error("catch exception,err_msg:%s" % traceback.format_exc()) return {"total_count":0,"hits":[]} - @classmethod def analyze_related_user_id_list(cls,related_user_id_list): """ diff --git a/trans2es/management/commands/trans2es_mapping2es.py b/trans2es/management/commands/trans2es_mapping2es.py index f3f74e4e3de71c65ee96c1de1a003027bf77b732..96da91d57c17ca7aeaf011866fda99bdb103442e 100644 --- a/trans2es/management/commands/trans2es_mapping2es.py +++ b/trans2es/management/commands/trans2es_mapping2es.py @@ -6,29 +6,29 @@ from django.core.management.base import BaseCommand, CommandError import traceback import logging from libs.es import ESPerform -from trans2es.type_info import get_type_info_map,TypeInfo - +from trans2es.type_info import get_type_info_map, TypeInfo class Command(BaseCommand): - args = '' help = 'dump mapping to elasticsearch' from optparse import make_option option_list = BaseCommand.option_list + ( - make_option('-t', '--type', dest='type', help='type name to dump data to elasticsearch', metavar='TYPE',default=''), - make_option('-T', '--indices_template', dest='indices_template', help='index template name to dump data to elasticsearch', metavar='TYPE', + make_option('-t', '--type', dest='type', help='type name to dump data to elasticsearch', metavar='TYPE', + default=''), + make_option('-T', '--indices_template', dest='indices_template', + help='index template name to dump data to elasticsearch', metavar='TYPE', default=''), - make_option('-i', '--index-prefix', dest='index_prefix', help='index name to dump data to elasticsearch', metavar='INDEX_PREFIX'), + make_option('-i', '--index-prefix', dest='index_prefix', help='index name to dump data to elasticsearch', + metavar='INDEX_PREFIX'), make_option('-p', '--parallel', dest='parallel', help='parallel process count', metavar='PARALLEL'), make_option('-s', '--pks', dest='pks', help='specify sync pks, comma separated', metavar='PKS', default=''), make_option('--streaming-slicing', dest='streaming_slicing', action='store_true', default=True), make_option('--no-streaming-slicing', dest='streaming_slicing', action='store_false', default=True), ) - def handle(self, *args, **options): try: es_cli = ESPerform.get_cli() @@ -37,20 +37,20 @@ class Command(BaseCommand): for type_name in type_name_list: if len(options["type"]): - if options["type"] == "all" or type_name==options["type"]: + if options["type"] == "all" or type_name == options["type"]: official_index_name = ESPerform.get_official_index_name(type_name) index_exists = es_cli.indices.exists(official_index_name) if not index_exists: logging.info("begin create [%s] index and mapping!" % type_name) - ESPerform.create_index(es_cli,type_name) - ESPerform.put_index_mapping(es_cli,type_name) + ESPerform.create_index(es_cli, type_name) + ESPerform.put_index_mapping(es_cli, type_name) else: logging.warning("index:[%s] has already existing!" % type_name) - if len(options["indices_template"]): template_file_name = options["indices_template"] - if ESPerform.put_indices_template(es_cli=es_cli,template_file_name=template_file_name,template_name=template_file_name): + if ESPerform.put_indices_template(es_cli=es_cli, template_file_name=template_file_name, + template_name=template_file_name): logging.info("put indices template suc!") else: logging.error("put indices template err!") diff --git a/trans2es/mapping/contrast_similar.json b/trans2es/mapping/contrast_similar.json new file mode 100644 index 0000000000000000000000000000000000000000..f5c8191f3727cac8e3d322ce36e35acbc98190e5 --- /dev/null +++ b/trans2es/mapping/contrast_similar.json @@ -0,0 +1,13 @@ +{ + "dynamic":"strict", + "properties": { + "id":{"type":"long"}, + "is_online":{"type":"boolean"},//上线 + "create_time":{"type":"date", "format":"date_time_no_millis"}, + "update_time":{"type":"date", "format":"date_time_no_millis"}, + "is_deleted":{"type":"boolean"},//是å¦è¢«åˆ 除 + "participant_user_id":{"type":"long"},//å‚与者ID + "contrast_user_id_list":{"type":"long"},//对照者ID + "similarity":{"type":"double"},//相似度 + } +} \ No newline at end of file diff --git a/trans2es/models/contrast_similar.py b/trans2es/models/contrast_similar.py new file mode 100644 index 0000000000000000000000000000000000000000..7541dc67a5a67ff70454db856d50bfc0aa7bd812 --- /dev/null +++ b/trans2es/models/contrast_similar.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +import traceback +import logging +from django.db import models +import datetime +from .topic import Topic + +manager = lambda: models.Manager().db_manager(using='face') + + +class ContrastSimilar(models.Model): + class Meta: + verbose_name = u"用户脸相似度表" + db_table = "face_user_contrast_similar" + + objects = manager() + + id = models.IntegerField(verbose_name="主键ID", primary_key=True) + is_online = models.BooleanField(verbose_name="是å¦ä¸Šçº¿") + is_deleted = models.BooleanField(verbose_name="是å¦åˆ 除") + participant_user_id = models.IntegerField(verbose_name=u'å‚与者用户ID') + contrast_user_id = models.IntegerField(verbose_name="对照者用户ID") + similarity = models.FloatField(verbose_name=u'相似度', default=0) + create_time = models.DateTimeField(verbose_name=u'创建时间', default=datetime.datetime.fromtimestamp(0)) + update_time = models.DateTimeField(verbose_name=u'æ›´æ–°æ—¶é—´', default=datetime.datetime.fromtimestamp(0)) + + def get_similar_user_id(self): + + try: + similar_user_id_list = list() + if self.similarity > 0.3: + query_list = Topic.objects.filter(user_id=self.participant_user_id, is_deleted=False, is_online=True, + content_level__in=("3", "4", "5")) + for item in query_list: + if item.user_id != self.participant_user_id: + similar_user_id_list.append(item.id) + + return similar_user_id_list + except: + logging.error("catch exception,err_msg:%s" % traceback.format_exc()) + return [] diff --git a/trans2es/type_info.py b/trans2es/type_info.py index 1d42b3ec7c764456c3d781555d0b129b9d5e97f7..dd1c5f5d7e4c72f9de6ac06a46894bcdc3321f38 100644 --- a/trans2es/type_info.py +++ b/trans2es/type_info.py @@ -12,13 +12,14 @@ import elasticsearch import elasticsearch.helpers import sys -from trans2es.models import topic,user,pick_celebrity,group,celebrity,tag +from trans2es.models import topic, user, pick_celebrity, group, celebrity, tag, contrast_similar from trans2es.utils.user_transfer import UserTransfer from trans2es.utils.pick_celebrity_transfer import PickCelebrityTransfer from trans2es.utils.group_transfer import GroupTransfer from trans2es.utils.topic_transfer import TopicTransfer from trans2es.utils.celebrity_transfer import CelebrityTransfer from trans2es.utils.tag_transfer import TagTransfer +from trans2es.utils.contrast_similar_transfer import Contrast_Similar_Transfer from libs.es import ESPerform __es = None @@ -160,7 +161,7 @@ class TypeInfo(object): # traceback.print_exc() # es_result = 'error' - return ESPerform.es_helpers_bulk(es,data_list,sub_index_name,True) + return ESPerform.es_helpers_bulk(es, data_list, sub_index_name, True) def elasticsearch_bulk_insert(self, sub_index_name, instance_iterable, es=None): data_list = self.bulk_get_data(instance_iterable) @@ -244,11 +245,11 @@ def get_type_info_map(): round_insert_period=2, ), TypeInfo( - name = "user", #用户 + name="user", # 用户 type="user", model=user.User, - #query_deferred=lambda:user.User.objects.all().query, - #query_deferred=lambda: user.User.objects.prefetch_related('myuserfollow').query, + # query_deferred=lambda:user.User.objects.all().query, + # query_deferred=lambda: user.User.objects.prefetch_related('myuserfollow').query, query_deferred=lambda: user.User.objects.all().query, get_data_func=UserTransfer.get_user_data, bulk_insert_chunk_size=100, @@ -297,6 +298,16 @@ def get_type_info_map(): bulk_insert_chunk_size=100, round_insert_chunk_size=5, round_insert_period=2, + ), + TypeInfo( + name='contrast_similar', # facesimilar + type='contrast_similar', + model=contrast_similar.ContrastSimilar, + query_deferred=lambda: contrast_similar.ContrastSimilar.objects.all().query, + get_data_func=Contrast_Similar_Transfer.get_contrast_similar_data, + bulk_insert_chunk_size=100, + round_insert_chunk_size=5, + round_insert_period=2 ) ] diff --git a/trans2es/utils/contrast_similar_transfer.py b/trans2es/utils/contrast_similar_transfer.py new file mode 100644 index 0000000000000000000000000000000000000000..9aa582438632f83fd2c015923d205a4ceb6bf15c --- /dev/null +++ b/trans2es/utils/contrast_similar_transfer.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +import os +import sys +import logging +import traceback +from libs.tools import tzlc +import time +from trans2es.models.contrast_similar import ContrastSimilar + + +class Contrast_Similar_Transfer(object): + + @classmethod + def get_contrast_similar_data(cls, instance): + try: + res = dict() + + res["id"] = instance.id + res["is_online"] = instance.is_online + res["is_deleted"] = instance.is_deleted + res["participant_user_id"] = instance.participant_user_id + create_time = instance.create_time + tzlc_create_time = tzlc(create_time) + res["create_time"] = tzlc_create_time + update_time = instance.update_time + tzlc_update_time = tzlc(update_time) + res["update_time"] = tzlc_update_time + res["similarity"] = instance.similarity + res["contrast_user_id_list"] = ContrastSimilar.get_similar_user_id() + return res + except: + logging.error("catch exception,err_msg:%s" % traceback.format_exc()) + return None