Commit a93815da authored by lixiaofang's avatar lixiaofang

新项目

parents
<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>
<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
<?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
<component name="ProjectDictionaryState">
<dictionary name="lxrent" />
</component>
\ No newline at end of file
<?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
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 2.7 (gaia_env)" project-jdk-type="Python SDK" />
<component name="PyCharmProfessionalAdvertiser">
<option name="shown" value="true" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/vest.iml" filepath="$PROJECT_DIR$/.idea/vest.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?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
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="8a5543fd-f32d-4426-b921-0848e1e04eaf" 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="39352142">
<usages-collector id="statistics.lifecycle.project">
<counts>
<entry key="project.open.time.0" value="1" />
<entry key="project.open.time.24" value="1" />
<entry key="project.opened" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.extensions.open">
<counts>
<entry key="py" value="101" />
<entry key="txt" value="6" />
<entry key="vest_ids" value="1" />
<entry key="xml" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.open">
<counts>
<entry key="PLAIN_TEXT" value="7" />
<entry key="Python" value="101" />
<entry key="XML" value="2" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.extensions.edit">
<counts>
<entry key="dummy" value="34" />
<entry key="py" value="5830" />
<entry key="txt" value="82" />
<entry key="xml" value="10" />
</counts>
</usages-collector>
<usages-collector id="statistics.file.types.edit">
<counts>
<entry key="PLAIN_TEXT" value="116" />
<entry key="Python" value="5830" />
<entry key="XML" value="10" />
</counts>
</usages-collector>
</session>
</component>
<component name="FileEditorManager">
<splitter split-orientation="horizontal" split-proportion="0.53833866">
<split-first>
<leaf>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/moment/views/irrigation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405">
<caret line="27" selection-start-line="27" selection-end-line="27" />
<folding>
<element signature="e#46#57#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/comment/views/auto_comment.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="138">
<caret line="63" column="40" lean-forward="true" selection-start-line="63" selection-start-column="40" selection-end-line="63" selection-end-column="40" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/moment/views/process_time.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="287">
<caret line="259" column="42" selection-start-line="259" selection-start-column="42" selection-end-line="259" selection-end-column="42" />
<folding>
<element signature="e#24#39#0" expanded="true" />
<marker date="1576662151000" expanded="true" signature="9066:9071" ph="..." />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/follow/views/auto_follow.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="589">
<caret line="85" column="29" selection-start-line="85" selection-end-line="86" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/moment/views/get_keyword.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="496">
<caret line="59" selection-start-line="59" selection-start-column="2" selection-end-line="63" selection-end-column="15" />
<folding>
<element signature="e#0#12#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/click/views/auto_click.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="283">
<caret line="53" column="34" selection-start-line="53" selection-start-column="34" selection-end-line="53" selection-end-column="34" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</split-first>
<split-second>
<leaf>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/moment/views/consum.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="435">
<caret line="77" column="73" selection-start-line="77" selection-start-column="73" selection-end-line="77" selection-end-column="73" />
<folding>
<element signature="e#46#57#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
</leaf>
</split-second>
</splitter>
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Python Script" />
</list>
</option>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>python</find>
<find>functools32</find>
<find>gm-protocolclea</find>
<find>gm_rpcd</find>
<find>view</find>
<find>auto_click_user</find>
<find>auto_comment_user</find>
<find>KAFKA_GM_LOGGING_TOPIC_NAME</find>
<find>auto_follow_user</find>
</findStrings>
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/conf/views/auto_conf.py" />
<option value="$PROJECT_DIR$/moment/views/auto_conf.py" />
<option value="$PROJECT_DIR$/app_conf.xml" />
<option value="$PROJECT_DIR$/moment/views/cum_kafka.py" />
<option value="$PROJECT_DIR$/moment/views/irrigatiom.py" />
<option value="$PROJECT_DIR$/libs/log_settings.py" />
<option value="$PROJECT_DIR$/click/view/auto_click.py" />
<option value="$PROJECT_DIR$/moment/view/consum.py" />
<option value="$PROJECT_DIR$/follow/view/auto_follow.py" />
<option value="$PROJECT_DIR$/click/apps.py" />
<option value="$PROJECT_DIR$/comment/apps.py" />
<option value="$PROJECT_DIR$/follow/apps.py" />
<option value="$PROJECT_DIR$/moment/apps.py" />
<option value="$PROJECT_DIR$/click/__init__.py" />
<option value="$PROJECT_DIR$/libs/cache.py" />
<option value="$PROJECT_DIR$/moment/views/test.py" />
<option value="$PROJECT_DIR$/vest/settings_local.py" />
<option value="$PROJECT_DIR$/moment/views/save_data.py" />
<option value="$PROJECT_DIR$/moment/views/get_keyword.py" />
<option value="$PROJECT_DIR$/moment/views/irrigation.py" />
<option value="$PROJECT_DIR$/requirements.txt" />
<option value="$PROJECT_DIR$/vest/settings.py" />
<option value="$PROJECT_DIR$/follow/views/auto_follow.py" />
<option value="$PROJECT_DIR$/comment/views/auto_comment.py" />
<option value="$PROJECT_DIR$/click/views/auto_click.py" />
<option value="$PROJECT_DIR$/moment/views/consum.py" />
<option value="$PROJECT_DIR$/moment/views/vest_ids.txt" />
<option value="$PROJECT_DIR$/moment/views/process_time.py" />
</list>
</option>
</component>
<component name="ProjectFrameBounds">
<option name="x" value="-336" />
<option name="y" value="-1080" />
<option name="width" value="1920" />
<option name="height" value="1080" />
</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="Scope" />
<pane id="ProjectPane">
<subPane>
<expand>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
<item name="click" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
<item name="click" type="462c0819:PsiDirectoryNode" />
<item name="views" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
<item name="moment" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
<item name="moment" type="462c0819:PsiDirectoryNode" />
<item name="views" type="462c0819:PsiDirectoryNode" />
</path>
<path>
<item name="vest" type="b2602c69:ProjectViewProjectNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
<item name="vest" type="462c0819:PsiDirectoryNode" />
</path>
</expand>
<select />
</subPane>
</pane>
</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$/vest" />
</key>
<key name="CopyFile.RECENT_KEYS">
<recent name="$PROJECT_DIR$/libs" />
<recent name="$PROJECT_DIR$/click/views" />
<recent name="$PROJECT_DIR$/comment/views" />
<recent name="$PROJECT_DIR$/follow/views" />
<recent name="$PROJECT_DIR$/moment/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="RunManager" selected="Python.test">
<configuration name="irrigatiom" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="vest" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="$USER_HOME$/venv/bin/python3.6" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/manage.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="test" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="vest" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="$USER_HOME$/venv/bin/python3.6" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/moment/views" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/moment/views/get_keyword.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<list>
<item itemvalue="Python.irrigatiom" />
<item itemvalue="Python.test" />
</list>
<recent_temporary>
<list>
<item itemvalue="Python.test" />
<item itemvalue="Python.irrigatiom" />
</list>
</recent_temporary>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="8a5543fd-f32d-4426-b921-0848e1e04eaf" name="Default Changelist" comment="" />
<created>1576475849294</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1576475849294</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-336" y="-1080" width="1920" height="1080" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Favorites" order="0" side_tool="true" />
<window_info id="DB Browser" order="1" weight="0.2406672" />
<window_info content_ui="combo" id="Project" order="2" visible="true" weight="0.19589257" />
<window_info id="Structure" order="3" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" order="0" show_stripe_button="false" />
<window_info anchor="bottom" id="Terminal" order="1" weight="0.30098686" />
<window_info anchor="bottom" id="Event Log" order="2" side_tool="true" />
<window_info anchor="bottom" id="Python Console" order="3" />
<window_info anchor="bottom" id="DB Execution Console" order="4" />
<window_info anchor="bottom" id="Message" order="5" />
<window_info anchor="bottom" id="Find" order="6" weight="0.32953367" />
<window_info active="true" anchor="bottom" id="Run" order="7" visible="true" weight="0.2746114" />
<window_info anchor="bottom" id="Debug" order="8" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="9" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="10" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="11" />
<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>
<layout-to-restore>
<window_info id="Favorites" order="0" side_tool="true" />
<window_info id="DB Browser" order="1" weight="0.2406672" />
<window_info active="true" content_ui="combo" id="Project" order="2" visible="true" weight="0.25496426" />
<window_info id="Structure" order="3" side_tool="true" weight="0.25" />
<window_info anchor="bottom" id="Version Control" order="0" show_stripe_button="false" />
<window_info anchor="bottom" id="Terminal" order="1" weight="0.30098686" />
<window_info anchor="bottom" id="Event Log" order="2" side_tool="true" />
<window_info anchor="bottom" id="Python Console" order="3" />
<window_info anchor="bottom" id="DB Execution Console" order="4" />
<window_info anchor="bottom" id="Message" order="5" />
<window_info anchor="bottom" id="Find" order="6" weight="0.32953367" />
<window_info anchor="bottom" id="Run" order="7" visible="true" weight="0.0" />
<window_info anchor="bottom" id="Debug" order="8" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="9" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="10" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="11" />
<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-to-restore>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/moment/views/process_time.py</url>
<line>243</line>
<option name="timeStamp" value="8" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/vest/settings_local.py</url>
<line>44</line>
<option name="timeStamp" value="10" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/moment/views/process_time.py</url>
<line>278</line>
<option name="timeStamp" value="11" />
</line-breakpoint>
<line-breakpoint enabled="true" suspend="THREAD" type="python-line">
<url>file://$PROJECT_DIR$/moment/views/process_time.py</url>
<line>273</line>
<option name="timeStamp" value="12" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/manage.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/error.py" />
<entry file="file://$PROJECT_DIR$/moment/views/cum_kafka.py" />
<entry file="file://$PROJECT_DIR$/follow/tests.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/comment/tests.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/follow/views.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/libs/error.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="270">
<caret line="18" lean-forward="true" selection-start-line="18" selection-end-line="18" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/click/views.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/moment/views.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/moment/models.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/comment/apps.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="60">
<caret line="4" column="19" selection-start-line="4" selection-start-column="19" selection-end-line="4" selection-end-column="19" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/follow/apps.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" lean-forward="true" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vest/log_settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="180">
<caret line="13" column="47" selection-start-line="13" selection-start-column="36" selection-end-line="13" selection-end-column="47" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/app_conf.xml">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="120">
<caret line="8" column="30" selection-start-line="8" selection-start-column="30" selection-end-line="8" selection-end-column="30" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/click/apps.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/apps.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" selection-start-line="5" selection-end-line="5" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vest/wsgi.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="210">
<caret line="16" selection-start-line="16" selection-end-line="16" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vest/urls.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="10" selection-start-line="10" selection-end-line="10" />
<folding>
<element signature="e#0#41#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/click/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/click/tests.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/libs/rpc.py">
<provider selected="true" editor-type-id="text-editor">
<state>
<folding>
<element signature="e#0#32#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/comment/views/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/click/views/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/follow/views/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/libs/__init__.py">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/libs/cache.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="75">
<caret line="5" selection-start-line="5" selection-end-line="5" />
<folding>
<element signature="e#0#12#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/tests.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="45">
<caret line="3" lean-forward="true" selection-start-line="3" selection-end-line="3" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vest/settings.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="636">
<caret line="92" column="26" selection-start-line="92" selection-start-column="26" selection-end-line="92" selection-end-column="26" />
<folding>
<element signature="e#303#330#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/vest/settings_local.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="675">
<caret line="45" lean-forward="true" selection-start-line="45" selection-end-line="45" />
<folding>
<element signature="e#15#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/irrigation.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="405">
<caret line="27" selection-start-line="27" selection-end-line="27" />
<folding>
<element signature="e#46#57#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/requirements.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="330">
<caret line="22" column="7" selection-start-line="22" selection-start-column="7" selection-end-line="22" selection-end-column="7" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/consum.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="435">
<caret line="77" column="73" selection-start-line="77" selection-start-column="73" selection-end-line="77" selection-end-column="73" />
<folding>
<element signature="e#46#57#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/vest_ids.txt">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="165">
<caret line="11" selection-start-line="11" selection-end-line="11" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/save_data.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="150">
<caret line="10" column="39" selection-start-line="10" selection-start-column="39" selection-end-line="10" selection-end-column="39" />
<folding>
<element signature="e#46#58#0" expanded="true" />
<element signature="e#381#4140#0" />
<element signature="e#4158#8383#0" />
<element signature="e#8399#12717#0" />
<element signature="e#12737#17282#0" />
<element signature="e#17304#21926#0" />
<element signature="e#21945#26982#0" />
<element signature="e#26999#31880#0" />
<element signature="e#31901#38048#0" />
<element signature="e#38070#44352#0" />
<element signature="e#44366#46757#0" />
<element signature="e#46773#49274#0" />
<element signature="e#49298#52936#0" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/click/views/auto_click.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="283">
<caret line="53" column="34" selection-start-line="53" selection-start-column="34" selection-end-line="53" selection-end-column="34" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/follow/views/auto_follow.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="589">
<caret line="85" column="29" selection-start-line="85" selection-end-line="86" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/get_keyword.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="496">
<caret line="59" selection-start-line="59" selection-start-column="2" selection-end-line="63" selection-end-column="15" />
<folding>
<element signature="e#0#12#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/comment/views/auto_comment.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="138">
<caret line="63" column="40" lean-forward="true" selection-start-line="63" selection-start-column="40" selection-end-line="63" selection-end-column="40" />
<folding>
<element signature="e#24#39#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/moment/views/process_time.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="287">
<caret line="259" column="42" selection-start-line="259" selection-start-column="42" selection-end-line="259" selection-end-column="42" />
<folding>
<element signature="e#24#39#0" expanded="true" />
<marker date="1576662151000" expanded="true" signature="9066:9071" ph="..." />
</folding>
</state>
</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
<?xml version="1.0" encoding="utf-8"?>
<gm_rpcd_config>
<info config_name="app" version="1.0"/>
<config name="application_name" value="vest"/>
<config name="service_list">
<element value="vest"/>
</config>
<config name="initializer_list">
<element value="moment.views.relation_search"/>
</config>
<config name="statuses" value="vest.system:statuses"/>
</gm_rpcd_config>
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class SearchConfig(AppConfig):
name = 'click'
from django.db import models
# Create your models here.
from django.test import TestCase
# Create your tests here.
# -*- coding: UTF-8 -*-
import datetime
import logging
import traceback
import random
import time
from moment.views.process_time import get_content_time_by_create_time, get_click_follow_time_by_create_time, \
get_vest_userid
from moment.views.process_time import save_data_to_kafka
logger = logging.getLogger(__name__)
def auto_click_user(card_info):
"""
发帖后2小时:[1-3]个赞
对所有帖子每天1次轮询:
3星以下:
1天前发的回答:[1-3]个赞
2-15天前发的回答:[0-1]个赞
15天前或更早发的:每隔6天[0-1]个赞
3星以上:
1天前发的回答:[6-12]个赞
2-15天前发的回答:[0-6]个赞
15天前或更早发的回答:每隔5天[0-2]个赞
3.轮询时间-发布时间超过365天,终止点赞
被点赞兜底:每个人每天最多收到20个点赞
10-23点随机(对于非当天有效)
随机马甲(运营给予一批马甲号,只使用这些马甲号)
"""
try:
if card_info:
###先获取kafka的数据
create_time = card_info["create_time"]
content_level = card_info["content_level"]
card_info["action_type"] = "click"
# 当满足这些条件的时候 代表已经完成了下发的所有的时间或者还没有下发过时间 需要给予新的时间
if ("all_follow_id" in card_info and "all_push_time" in card_info and len(
card_info['all_follow_id']) == 0 and len(card_info['all_push_time']) == 0) or (
"all_follow_id" not in card_info and "all_push_time" not in card_info):
###根据创建时间回答等级去获取对应的下发时间
get_time = get_click_follow_time_by_create_time(create_time, content_level, action_type="follow")
if len(get_time) > 0:
###拿到下发时间后根据下发的时间个数去拿对应个数的马甲账号
userids = get_vest_userid(need_comment_num=len(get_time))
for i in range(0, len(userids)):
card_info["all_follow_id"] = userids
card_info["current_user_id"] = userids[0]
card_info['type'] = "have_get_push_time"
card_info['current_push_time'] = get_time[0]
card_info['all_push_time'] = get_time
card_info["need_pust_num"] = len(userids)
card_info["have_pust_num"] = 0
save_data_to_kafka(card_info) # 存储数据
else:
pass
else: # 代表还有push好的时间没有下发完成 需要继续使用这些
logging.info("get--------click--------------card_info:%s" % card_info)
current_user_id = card_info["current_user_id"]
card_info["all_follow_id"].remove(current_user_id)
current_push_time = card_info['current_push_time']
card_info['all_push_time'].remove(current_push_time)
if len(card_info["all_follow_id"]) > 0:
card_info["current_user_id"] = card_info["all_follow_id"].pop()
if len(card_info["all_follow_id"]) > 0:
card_info['current_push_time'] = card_info['all_push_time'].pop()
card_info["have_pust_num"] = card_info["have_pust_num"] + 1
save_data_to_kafka(card_info) # 存储数据
logging.info("get--------click--------------card_info:%s" % card_info)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class SearchConfig(AppConfig):
name = 'comment'
from django.db import models
# Create your models here.
from django.test import TestCase
# Create your tests here.
# -*- coding: UTF-8 -*-
import datetime
import logging
import traceback
import random
import time
from moment.views.process_time import get_content_time_by_create_time, get_vest_userid_and_comment, get_vest_userid
from moment.views.process_time import save_data_to_kafka
logger = logging.getLogger(__name__)
def auto_comment_user(card_info):
"""
当天发布之后
2-4小时内随机,给予[0-1]个评论
对所有回答每天1次夜里24点轮询:
1天-6天之间发的的回答:
3星以下
[0-1]个评论
4星以上
[2-4]个评论
6天后,每10天:
3星以下
[0-1]个评论
4星以上
[0-2]个评论
轮询时间-发布时间超过365天,终止加评论
兜底:一天一人最多20条马甲评论,每条马甲评论的间隔时间40分钟-60分种。过24点清掉今天待发送队列。
评论时间10-23点随机(对于非当天有效)
随机马甲(运营给予一批马甲号,只使用这些马甲号)
从马甲评论库(excel)里取评论
覆盖所有发布回答的作者
覆盖所有内容来源:后台创建、app创建
"""
try:
if card_info:
###先获取kafka的数据
create_time = card_info["create_time"]
content_level = card_info["content_level"]
card_info["action_type"] = "comment"
tag_names = card_info['tag_names']
# 当满足这些条件的时候 代表已经完成了下发的所有的时间或者还没有下发过时间 需要给予新的时间
if ("all_follow_id" in card_info and "all_push_time" in card_info and len(
card_info['all_follow_id']) == 0 and len(card_info['all_push_time']) == 0) or (
"all_follow_id" not in card_info and "all_push_time" not in card_info):
###根据创建时间回答等级去获取对应的下发时间
get_time = get_content_time_by_create_time(create_time, content_level, action_type="follow")
if len(get_time) > 0:
###拿到下发时间后根据下发的时间个数去拿对应个数的马甲账号
all_content = get_vest_userid_and_comment(need_comment_num=len(get_time), tag_names=tag_names)
all_userids = get_vest_userid(need_comment_num=len(get_time))
for i in range(0, len(all_userids)):
card_info["all_follow_id"] = all_userids
card_info["current_user_id"] = all_userids[0]
card_info['type'] = "have_get_push_time"
card_info['current_push_time'] = get_time[0]
card_info['all_push_time'] = get_time
card_info["need_pust_num"] = len(all_userids)
card_info["have_pust_num"] = 0
card_info['comment_content'] = all_content[i]
save_data_to_kafka(card_info) # 存储数据
else:
pass
else: # 代表还有push好的时间没有下发完成 需要继续使用这些
logging.info("get-------comment---------------card_info:%s" % card_info)
current_user_id = card_info["current_user_id"]
card_info["all_follow_id"].remove(current_user_id)
current_push_time = card_info['current_push_time']
card_info['all_push_time'].remove(current_push_time)
card_info["have_pust_num"] = card_info["have_pust_num"] + 1
if len(card_info["all_follow_id"]) > 0:
card_info["current_user_id"] = card_info["all_follow_id"].pop()
if len(card_info["all_follow_id"]) > 0:
card_info['current_push_time'] = card_info['all_push_time'].pop()
save_data_to_kafka(card_info) # 存储数据
logging.info("get-------comment---------------card_info:%s" % card_info)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class SearchConfig(AppConfig):
name = 'follow'
from django.db import models
# Create your models here.
from django.test import TestCase
# Create your tests here.
from django.shortcuts import render
# Create your views here.
# -*- coding: UTF-8 -*-
import datetime
import logging
import traceback
import random
import time
from moment.views.process_time import get_content_time_by_create_time, get_click_follow_time_by_create_time, \
get_vest_userid
from moment.views.process_time import save_data_to_kafka
logger = logging.getLogger(__name__)
def auto_follow_user(card_info):
"""
灌水功能下发关注
发帖后2小时:[1-3]个粉丝
对所有回答每天1次轮询:
3星以下:
1天前发的回答:[1-3]个粉丝
2-15天前发的回答:[0-1]个粉丝
15天前或更早发的回答:每隔10天[0-2]个粉丝
2. 3星以上:
1天前发的回答:[5-10]个粉丝
前2-15天发的回答:[0-5]个粉丝
15天前或更早发的回答:每隔10天[0-2]个粉丝
3.轮询时间-发布时间超过365天,终止加粉
加粉兜底:每天每个人最多涨20个马甲粉丝
10-23点随机(对于非当天有效)
随机马甲(运营给予一批马甲号,只使用这些马甲号)
:param card_info:
:return:
"""
try:
if card_info:
###先获取kafka的数据
create_time = card_info["create_time"]
content_level = card_info["content_level"]
card_info["action_type"] = "follow"
# 当满足这些条件的时候 代表已经完成了下发的所有的时间或者还没有下发过时间 需要给予新的时间
if ("all_follow_id" in card_info and "all_push_time" in card_info and len(
card_info['all_follow_id']) == 0 and len(card_info['all_push_time']) == 0) or (
"all_follow_id" not in card_info and "all_push_time" not in card_info):
###根据创建时间回答等级去获取对应的下发时间
get_time = get_click_follow_time_by_create_time(create_time, content_level, action_type="follow")
if len(get_time) > 0:
###拿到下发时间后根据下发的时间个数去拿对应个数的马甲账号
userids = get_vest_userid(need_comment_num=len(get_time))
for i in range(0, len(userids)):
card_info["all_follow_id"] = userids
card_info["current_user_id"] = userids[0]
card_info['type'] = "have_get_push_time"
card_info['current_push_time'] = get_time[0]
card_info['all_push_time'] = get_time
card_info["need_pust_num"] = len(userids)
card_info["have_pust_num"] = 0
save_data_to_kafka(card_info) # 存储数据
else:
pass
else: # 代表还有push好的时间没有下发完成 需要继续使用这些
logging.info("get-----follow----card_info:%s" % card_info)
card_info["have_pust_num"] = card_info["have_pust_num"] + 1
current_user_id = card_info["current_user_id"]
card_info["all_follow_id"].remove(current_user_id)
current_push_time = card_info['current_push_time']
card_info['all_push_time'].remove(current_push_time)
if len(card_info["all_follow_id"]) > 0:
card_info["current_user_id"] = card_info["all_follow_id"][0]
if len(card_info["all_follow_id"]) > 0:
card_info['current_push_time'] = card_info['all_push_time'][0]
save_data_to_kafka(card_info) # 存储数据
logging.info("get-----follow----card_info:%s" % card_info)
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
import redis
from django.conf import settings
redis_client = redis.StrictRedis.from_url(settings.REDIS_URL)
redis_client2 = redis.StrictRedis.from_url(settings.REDIS_URL2)
from gm_rpcd.all import RPCDFaultException
from gm_types.doris.error import ERROR
from raven.contrib.django.raven_compat.models import client as _sentry_client
def raise_error(error_code, message=None):
assert error_code != 0
if message is None:
message = ERROR.getDesc(error_code)
raise RPCDFaultException(code=error_code, message=message)
def logging_exception(send_to_sentry=True):
try:
# send exception info to sentry, fail silently
_sentry_client.captureException()
except:
pass
from django.conf import settings
from helios.rpc import create_default_invoker
_rpc_invoker = create_default_invoker(debug=settings.DEBUG)
def get_rpc_invoker():
return _rpc_invoker
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "vest.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class SearchConfig(AppConfig):
name = 'moment'
from django.db import models
# Create your models here.
from django.test import TestCase
# Create your tests here.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from kafka import KafkaProducer
from kafka import KafkaConsumer
from gm_rpcd.all import bind
import traceback
from django.conf import settings
from follow.views.auto_follow import auto_follow_user
from click.views.auto_click import auto_click_user
from comment.views.auto_comment import auto_comment_user
import datetime
import time
import logging
def kafka_consum(topic_name=None):
try:
topic_name = settings.KAFKA_TOPIC_NAME if not topic_name else topic_name
consumser_obj = KafkaConsumer(topic_name, bootstrap_servers=[settings.KAFKA_BROKER_LIST])
logging.info("get consumser_obj:%s" % consumser_obj)
while True:
msg_dict = consumser_obj.poll(timeout_ms=100)
for msg_key in msg_dict:
consume_msg = msg_dict[msg_key]
for msg in consume_msg:
card_info = json.loads(msg.value)
logging.info("get card_info:%s" % card_info)
# 代表当天数据
current_push_time = card_info['current_push_time']
create_time = card_info['create_time']
action_type = card_info['action_type']
nowtime = datetime.datetime.now()
# nowtime = now.strftime('%Y-%m-%d %H:%M:%S')
push_time_date = datetime.datetime.strptime(current_push_time, '%Y-%m-%d %H:%M:%S')
logging.info("get push_time_date:%s" % push_time_date)
logging.info("get push_time_date:%s" % type(push_time_date))
logging.info("get nowtime:%s" % nowtime)
logging.info("get nowtime:%s" % type(nowtime))
if push_time_date <= nowtime: # push_time已经到时间了 需要去下发
logging.info("get push_time_date:%s" % push_time_date)
# 判断如果当前的push_time 和当前的创建时间一样 需要给push_time下发真的push时间
if current_push_time == create_time:
auto_follow_user(card_info)
auto_comment_user(card_info)
auto_click_user(card_info)
else:
# current_push_time = card_info['current_push_time']
# current_time = datetime.datetime.strptime(current_push_time, '%Y-%m-%d %H:%M:%S')
# now = datetime.datetime.now()
# 需要判断是否真的已经下发完了 如果是时间过了但是没有下发直接下发了
# 当前已下发完 需要判断最新一次的下发时间是否是今天 是的话直接跳过
if card_info['have_pust_num'] == card_info['need_pust_num']:
if nowtime.day - push_time_date.day == 0: # 是今天的话直接跳过
pass
else:
# 再存储起来?
pass
# 还有一种是下发时间还没有到 之前没有轮询到
else:
if card_info['have_pust_num'] <= card_info['need_pust_num'] and \
push_time_date < nowtime:
if action_type == "comment": # 在这里去调评论的接口
logging.info("get------------------comment-----------------")
# 调完接口后需要再次去拿新的push_time的时间
auto_comment_user(card_info)
elif action_type == "click": # 在这里去调点赞的接口
logging.info("get--------------click---------------------")
auto_click_user(card_info)
elif action_type == "follow": # 在这里去调关注的接口
logging.info("get----------follow-------------------------")
auto_follow_user(card_info)
else: # push_time时间未到 需要等待
logging.info("push_time时间未到========================需要等待")
pass
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import jieba
import jieba.analyse
class GetContentKeyWords(object):
def __init__(self):
self.jeiba = jieba
self.tag_list = ["瘦脸针kyc", "双眼皮kyc", "水光针kyc", "玻尿酸kyc", "吸脂kyc", "埋线提升kyc", "鼻综合kyc", "光子嫩肤kyc", "没有想法kyc",
"牙齿kyc", "抗衰紧致kyc", "胸部kyc"]
self.star_list = []
self.synonym_tag_list = []
self.tags = ""
self.stars = ""
self.synonym_tags = ""
def add_tag_word(self):
jieba = self.jeiba
if self.tag_list:
for word in self.tag_list:
jieba.add_word(word)
if self.star_list:
for word in self.star_list:
jieba.add_word(word)
if self.synonym_tag_list:
for word in self.synonym_tag_list:
jieba.add_word(word)
def get(self, content):
self.add_tag_word()
return self.jeiba.cut(content)
def get_keywords(self, content, k=None):
self.add_tag_word()
jieba = self.jeiba
keywords = jieba.analyse.extract_tags(content, topK=9999, withWeight=True, allowPOS=())
tags = []
stars = []
synonym_tags = []
for item in keywords:
if item[0] in self.tag_list:
tags.append(str(item[0]))
if item[0] in self.star_list:
stars.append(str(item[0]))
if item[0] in self.synonym_tag_list:
synonym_tags.append(str(item[0]))
self.tags = ",".join(tags[:k])
self.stars = ",".join(stars[:k])
self.synonym_tags = ",".join(synonym_tags[:k])
# a = GetContentKeyWords()
# a.tag_list = ["天安门", "北京"]
#
# a.get_keywords("我爱北京天安门,天安门上太阳升",2)
# print(a.tags)
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from kafka import KafkaProducer
from kafka import KafkaConsumer
from gm_rpcd.all import bind
import traceback
from django.conf import settings
import datetime
import time
import logging
@bind('vest/moment/vest_irrigation')
def vest_irrigation(card_id=0, card_type=None, create_time="", content_level=0, tag_names=[]):
try:
producer = KafkaProducer(bootstrap_servers=[settings.KAFKA_BROKER_LIST])
topic = settings.KAFKA_TOPIC_NAME
msg_dict = {
"card_id": card_id,
"card_type": card_type,
"create_time": create_time,
"content_level": content_level,
"tag_names": tag_names,
"type": "get_write_answer_userinfo",
"current_push_time": create_time
}
producer.send(topic, json.dumps(msg_dict).encode())
producer.close()
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
# -*- coding: UTF-8 -*-
import datetime
import time
import logging
from libs.error import logging_exception
import traceback
import random
from kafka import KafkaProducer
import random
from django.conf import settings
import json
from libs.cache import redis_client
from moment.views.get_keyword import GetContentKeyWords
import pymysql
logger = logging.getLogger(__name__)
def strTimeProp(start, end, prop, frmt):
stime = time.mktime(time.strptime(start, frmt))
etime = time.mktime(time.strptime(end, frmt))
ptime = stime + prop * (etime - stime)
return int(ptime)
def randomDate(create_time, frmt='%Y-%m-%d %H:%M:%S', action_type=None):
if action_type in ("follow", "click"):
action_num = random.randint(1, 3)
if action_type == "comment":
action_num = random.randint(0, 1)
start = str(create_time + datetime.timedelta(hours=2))
end = str(create_time + datetime.timedelta(hours=4))
random_times = [randomDate_six_one(start, end, frmt) for _ in range(action_num)]
have_sort_times = sorted(random_times, key=lambda date: get_list(date))
return have_sort_times
def randomDate_six_one(start, end, frmt='%Y-%m-%d %H:%M:%S'):
return time.strftime(frmt, time.localtime(strTimeProp(start, end, random.random(), frmt)))
def get_list(date):
return datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S").timestamp()
def get_one_six_days_random_time(frmt='%Y-%m-%d %H:%M:%S', num_days=0, action_type=None, content_level=0):
try:
if num_days == 1 and action_type in ("follow", "click") and content_level < 3:
action_num = random.randint(1, 3)
if num_days == 1 and action_type in ("follow") and content_level >= 3:
action_num = random.randint(5, 10)
if num_days <= 15 and num_days > 1 and action_type in ("follow", "click") and content_level < 3:
action_num = random.randint(0, 1)
if num_days <= 15 and num_days > 1 and action_type in ("follow") and content_level >= 3:
action_num = random.randint(0, 5)
if num_days == 1 and action_type in ("click") and content_level >= 3:
action_num = random.randint(6, 12)
if num_days <= 15 and num_days > 1 and action_type in ("click") and content_level >= 3:
action_num = random.randint(0, 6)
if num_days >= 1 and num_days <= 6 and action_type in ("comment"):
if content_level <= 3:
action_num = random.randint(0, 1)
else:
action_num = random.randint(2, 4)
now = datetime.datetime.now()
zeroday = str(datetime.datetime(now.year, now.month, now.day, 0, 0, 0))
lastday = str(datetime.datetime(now.year, now.month, now.day + 1, 0, 0, 0))
random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)]
have_sort_times = sorted(random_times, key=lambda date: get_list(date))
return have_sort_times
except:
logger.error("catch exception,err_log:%s" % traceback.format_exc())
return False
def get_ten_last_days_random_time(num_days=None, frmt='%Y-%m-%d %H:%M:%S', action_type=None, content_level=0):
try:
##比较当前时间和最后一次创建时间的差
now = datetime.datetime.now()
if num_days > 15 and action_type in ("follow"):
action_num = random.randint(0, 2)
add_number = 10
if num_days > 15 and action_type in ("click"):
if content_level < 3:
action_num = random.randint(0, 1)
add_number = 6
else:
action_num = random.randint(0, 2)
add_number = 5
if num_days > 6 and action_type in ("comment"):
if content_level <= 3:
action_num = random.randint(0, 1)
add_number = 10
else:
action_num = random.randint(0, 2)
add_number = 10
zeroday = str(datetime.datetime(now.year, now.month, now.day + add_number, 0, 0, 0))
lastday = str(datetime.datetime(now.year, now.month, now.day + add_number + 1, 0, 0, 0))
random_times = [randomDate_six_one(zeroday, lastday, frmt) for _ in range(action_num)]
have_sort_times = sorted(random_times, key=lambda date: get_list(date))
return have_sort_times
except:
logger.error("catch exception,err_log:%s" % traceback.format_exc())
return False
def get_content_time_by_create_time(create_time="", content_level=0, action_type=None, is_today=False):
try:
min = 60
now = datetime.datetime.now()
createt = datetime.datetime.strptime(create_time, '%Y-%m-%d %H:%M:%S')
nowt = now.strftime('%Y-%m-%d %H:%M:%S')
##获取创建时间和当前时间的相差秒数
num = (now - createt).total_seconds()
num_days = now.day - createt.day
# 创建时间切换成分钟数便于比较
mins = divmod(num, min)[0]
##根据转换后的分钟数进行比较
##转化成分数后进行一层一层的比较
if is_today == True:
if mins < 120 and num_days == 0:
print("时候未到")
return []
##进入当天的下发时间
elif mins >= 120 and num_days == 0:
print("当天")
get_time = randomDate(create_time=createt, action_type=action_type)
return get_time
else:
if mins < 120 and num_days == 0:
print("时候未到")
return []
##进入当天的下发时间
elif mins >= 120 and mins <= 4 * 60 and num_days == 0:
print("当天")
get_time = randomDate(create_time=createt, action_type=action_type)
print(get_time)
return get_time
elif num_days >= 1 and num_days <= 6:
print("1-6天的")
get_time = get_one_six_days_random_time(content_level=content_level, num_days=num_days,
action_type=action_type)
print(get_time)
return get_time
elif num_days > 6 and num_days <= 365:
print("6天后的")
push_time = '2019-12-16 16:23:20'
get_time = get_ten_last_days_random_time(num_days=num_days, content_level=content_level)
print(get_time)
return get_time
else:
##需要删掉kafka的数据不再进行下发
print("所有下发结束")
return []
except:
logger.error("catch exception,err_log:%s" % traceback.format_exc())
def get_click_follow_time_by_create_time(create_time="", content_level=0, action_type=None):
try:
min = 60
now = datetime.datetime.now()
createt = datetime.datetime.strptime(create_time, '%Y-%m-%d %H:%M:%S')
nowt = now.strftime('%Y-%m-%d %H:%M:%S')
##获取创建时间和当前时间的相差秒数
num = (now - createt).total_seconds()
num_days = now.day - createt.day
# 创建时间切换成分钟数便于比较
mins = divmod(num, min)[0]
##根据转换后的分钟数进行比较
##转化成分数后进行一层一层的比较
if mins < 120 and num_days == 0:
print("时候未到")
return []
##进入当天的下发时间
elif mins >= 120 and num_days == 0:
print("当天")
get_time = randomDate(create_time=createt, action_type=action_type)
logging.info("拿到当天的时间 get get_time:%s" % get_time)
return get_time
elif num_days == 1:
print("1天的")
get_time = get_one_six_days_random_time(num_days=num_days, action_type=action_type,
content_level=content_level)
logging.info("1天的 get get_time:%s" % get_time)
print(get_time)
return get_time
elif num_days > 1 and num_days <= 15:
print("2-15天后的")
get_time = get_one_six_days_random_time(num_days=num_days, action_type=action_type,
content_level=content_level)
logging.info("2-15天后的的时间 get get_time:%s" % get_time)
print(get_time)
return get_time
elif num_days > 15 and num_days <= 365:
##需要删掉kafka的数据不再进行下发
print("15天后的")
get_time = get_ten_last_days_random_time(num_days=num_days, action_type=action_type,
content_level=content_level)
logging.info("拿到当天的时间 get get_time:%s" % get_time)
return get_time
else:
print("所有下发结束")
return []
except:
logger.error("catch exception,err_log:%s" % traceback.format_exc())
def save_data_to_kafka(card_info):
try:
producer = KafkaProducer(bootstrap_servers=settings.KAFKA_BROKER_LIST)
topic = settings.KAFKA_TOPIC_NAME
producer.send(topic, json.dumps(card_info).encode())
producer.close()
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
def get_vest_userid(need_comment_num=0):
user_list = []
if need_comment_num:
for i in range(0, need_comment_num):
user_data = open("moment/views/vest_ids.txt", "r")
for i in user_data.readlines():
user_list.append(int(i.strip()))
user_ids = random.sample(user_list, need_comment_num)
return user_ids
else:
return 12345
def get_vest_userid_and_comment(need_comment_num=0, tag_names=[], card_id=0):
try:
##先根据card_id回去内容提取关键字
db_zhengxing_eagle = pymysql.connect(host=settings.DATABASES.HOST, port=3306, user=settings.DATABASES.USER,
password=settings.DATABASES.PASSWORD,
db=settings.DATABASES.NAME,
cursorclass=pymysql.cursors.DictCursor)
zhengxing_cursor = db_zhengxing_eagle.cursor()
sql = 'select name from api_tag where id = %s ' % (card_id)
zhengxing_cursor.execute(sql)
data = zhengxing_cursor.fetchall()
logging.info("get data:%s" % data)
zhengxing_cursor.close()
ck = GetContentKeyWords()
keywords = ck.get_keywords(data, len(ck.tag_list))
tag_names.append(keywords)
if need_comment_num:
all_comment_list = []
redis_key = "vest_kyc_tag_content_data"
all_keys = redis_client.hkeys(redis_key)
all_keys_name = []
for item in all_keys:
all_keys_name.append(str(item, encoding="utf-8"))
for item in tag_names:
if item in all_keys_name:
service_closure_tags = redis_client.hget(redis_key, item)
closure_tags = json.loads(service_closure_tags)
all_comment_list.extend(closure_tags)
if all_comment_list:
content = random.sample(all_comment_list, need_comment_num)
else:
content = None
else:
content = None
logging.info("get content:%s" % content)
return content
except:
logging.error("catch exception,err_msg:%s" % traceback.format_exc())
This source diff could not be displayed because it is too large. You can view the blob instead.
12345
23456
24244
53555
54647
655757
57575
5747
4653
466546
57745645
celery==4.2.1
Django==1.8
elasticsearch==6.3.1
git+ssh://git@git.wanmeizhensuo.com/backend/gm-config.git@v0.1.3
git+ssh://git@git.wanmeizhensuo.com/backend/gm-logging.git@v0.8.4
git+ssh://git@git.wanmeizhensuo.com/backend/gm-protocol.git@master
git+ssh://git@git.wanmeizhensuo.com/gushitong/gm-serializer.git@v0.1.1
git+ssh://git@git.wanmeizhensuo.com/system/gm-tracer.git@v0.1.2
git+ssh://git@git.wanmeizhensuo.com/backend/gm-types.git@master
git+ssh://git@git.wanmeizhensuo.com/backend/gm-upload.git@master
git+ssh://git@git.wanmeizhensuo.com/system/kafka-python.git@master
PyMySQL==0.7.10
python-dateutil==1.5
python-json-logger==0.1.11
raven==5.25.0
redis==2.10.6
requests==2.2.1
urllib3==1.24.1
git+ssh://git@git.wanmeizhensuo.com/backend/helios.git@v0.7.2
virtualenv==15.1.0
gevent==1.2.1
git+ssh://git@git.wanmeizhensuo.com/backend/gm-rpcd.git@v0.2.2
jieba==0.39
\ No newline at end of file
# coding=utf-8
"""
__author__ = 'xumingming'
"""
import os
import logging
LOG_DIR = '/data/log/vest/app/'
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(module)s.%(funcName)s Line:%(lineno)d %(message)s',
filename=os.path.join(LOG_DIR, 'filelog.log'),
)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'verbose': {
'format': '%(asctime)s %(levelname)s %(module)s.%(funcName)s Line:%(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
'profile': {
'format': '%(asctime)s %(message)s'
},
'raw': {
'format': '%(message)s'
}
},
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
# 默认的服务器Log(保存到log/filelog.log中, 通过linux的logrotate来处理日志的分割
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'filelog.log'),
'formatter': 'verbose',
},
# 默认的服务器ERROR log
'default_err': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'error_logger.log'),
'formatter': 'verbose',
},
'exception_logger': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'exception_logger.log'),
'formatter': 'verbose',
},
'tracer_handler': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'tracer.log'),
'formatter': 'raw'
},
},
'loggers': {
'django': {
'handlers': ['default'],
'propagate': True,
'level': 'INFO',
},
'django.request': {
'handlers': ['default_err'],
'level': 'ERROR',
'propagate': False,
},
'exception_logger': {
'handlers': ['exception_logger'],
'level': 'INFO',
'propagate': False,
},
'gm_tracer.subscribe': {
'handlers': ['tracer_handler'],
'propagate': False,
'level': 'INFO'
},
},
}
"""
Django settings for vest project.
Generated by 'django-admin startproject' using Django 1.8.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.8/ref/settings/
"""
from .log_settings import *
from .settings_local import *
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '18i6m2l99g9ev46#)j4d)h!_zn8co-52veo69spj*1&v%x-^n0'
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
ALLOWED_HOSTS = []
# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
"click",
"moment",
'follow',
'comment'
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)
# ROOT_URLCONF = 'vest.urls'
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
WSGI_APPLICATION = 'vest.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# Internationalization
# https://docs.djangoproject.com/en/1.8/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
# coding=utf-8
from celery import *
from celery.schedules import crontab
KAFKA_TOPIC_NAME = "auto_vest"
KAFKA_BROKER_LIST = "kafka-service-0.kafka-service-headless.test:9092"
CELERY_BROKER_URL = 'redis://redis.paas-test.env:6379/0'
REDIS_URL = 'redis://redis.paas-test.env:6379/0'
REDIS_URL2 = 'redis://redis.paas-test.env:6379/0'
COUNT_LIMIT = 50
REDIS = {
'doctor': {'host': 'redis.paas-test.env', 'port': 6379, 'db': 1, },
}
# from base
DATABASES = {
'ENGINE': 'django.db.backends.mysql', # 设置为mysql数据库
'NAME': 'zhengxing_test',
'USER': 'work',
'PASSWORD': 'Gengmei1',
'HOST': 'bj-cdb-6slgqwlc.sql.tencentcdb.com',
'PORT': '62120',
'OPTIONS': {
"init_command": "SET foreign_key_checks = 0;",
"charset": "utf8mb4", # 为了支持emoji表情
},
}
GM_KV_HOSTS = [
{
"host": "redis.paas-test.env",
"port": 6379,
"db": 11,
"password": ""
},
{
"host": "redis.paas-test.env",
"port": 6379,
"db": 11,
"password": ""
}
]
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
# Examples:
# url(r'^$', 'vest.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
]
"""
WSGI config for vest project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "vest.settings")
application = get_wsgi_application()
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment