leadguru-jobs 0.702.0__py3-none-any.whl → 0.703.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {leadguru_jobs-0.702.0.dist-info → leadguru_jobs-0.703.0.dist-info}/METADATA +1 -1
- {leadguru_jobs-0.702.0.dist-info → leadguru_jobs-0.703.0.dist-info}/RECORD +7 -7
- lgt_jobs/env.py +3 -1
- lgt_jobs/jobs/chat_history.py +2 -6
- lgt_jobs/main.py +30 -24
- {leadguru_jobs-0.702.0.dist-info → leadguru_jobs-0.703.0.dist-info}/WHEEL +0 -0
- {leadguru_jobs-0.702.0.dist-info → leadguru_jobs-0.703.0.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
|
|
1
1
|
lgt_jobs/__init__.py,sha256=fQ97ZFeVtbOgODPdB26x7ku45AQPQ8ixeziiCAjNYZM,2451
|
2
2
|
lgt_jobs/basejobs.py,sha256=LPEclvY6fIG17YMGy9pRK0Q58n62gkI5W1BTK6R2p-c,1234
|
3
|
-
lgt_jobs/env.py,sha256=
|
4
|
-
lgt_jobs/main.py,sha256=
|
3
|
+
lgt_jobs/env.py,sha256=HHlpQgZrRQMMuPZYhP94A8b29T_10sKRo98mh0_hh3Y,907
|
4
|
+
lgt_jobs/main.py,sha256=zd0TdwFBUXUmFfUw552rPt6Rd_uG-LWEE6wTs8TCxIk,2081
|
5
5
|
lgt_jobs/runner.py,sha256=pS-Qwyfuk22aQ1Mk3p-Q0ysdZfKy1Bh9YoWBlDaLeM8,2234
|
6
6
|
lgt_jobs/simple_job.py,sha256=EBxhre3749GEAzJyaV1GXYy3P0pzwHchxcZ2kSN1vWU,527
|
7
7
|
lgt_jobs/smtp.py,sha256=k0qh-Qk9AeSU3WrCOVmuWkfpi9xzwaPMzbw9cED-pZw,1150
|
@@ -15,7 +15,7 @@ lgt_jobs/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
lgt_jobs/jobs/analytics.py,sha256=IIsWt4A1qUw3w-S-8W16uKY1FRVWfXXA41_mu4uCNiM,979
|
16
16
|
lgt_jobs/jobs/bot_stats_update.py,sha256=3gq1Ilj_RHddYeSny_238ITs7YIfCf7d4BmfYU8PKlo,8177
|
17
17
|
lgt_jobs/jobs/bots_killer.py,sha256=s2f7kal4vAMJd9YaMQ1X3FkCrLWCKNb-bWeI9RZ1Oco,506
|
18
|
-
lgt_jobs/jobs/chat_history.py,sha256=
|
18
|
+
lgt_jobs/jobs/chat_history.py,sha256=H2ezntWSdtiE4KREL-RIHXKdDm2xs9PgEm-K8XKH9MA,4739
|
19
19
|
lgt_jobs/jobs/connect_sources.py,sha256=vOKu2Q9cmQsj4VMVzOoEJkD1wzE9XurbIChx35rES8I,4957
|
20
20
|
lgt_jobs/jobs/inbox_leads.py,sha256=S6sGXePmWDsT8FvtFOBi3BJALtaDlF6aaQZsHntzHm0,4958
|
21
21
|
lgt_jobs/jobs/load_slack_people.py,sha256=SaDpp3JCNVKcyZ2WSJ9TyP5lUUZJnGlPUyWdRNzfMkU,4183
|
@@ -108,7 +108,7 @@ lgt_jobs/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
|
|
108
108
|
lgt_jobs/services/k8_manager.py,sha256=bXpka9psIQ5UJ6QG_e4xolmE_3gtmNrzzZeL03bJ62I,995
|
109
109
|
lgt_jobs/services/web_client.py,sha256=oMyWJxwGeIe3f40fPT7xcisjDg3BhA3Ipf8dr1jVT-Y,1549
|
110
110
|
lgt_jobs/templates/new_message.html,sha256=dZl8UmdAOOMq4nidvAgMFroSrTV7Pw0RWt2yLp_2idg,6989
|
111
|
-
leadguru_jobs-0.
|
112
|
-
leadguru_jobs-0.
|
113
|
-
leadguru_jobs-0.
|
114
|
-
leadguru_jobs-0.
|
111
|
+
leadguru_jobs-0.703.0.dist-info/METADATA,sha256=31uspm0mO0bGWegRCtwa5F5_EthxKCK-rwJT-AmIXBQ,1317
|
112
|
+
leadguru_jobs-0.703.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
113
|
+
leadguru_jobs-0.703.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
|
114
|
+
leadguru_jobs-0.703.0.dist-info/RECORD,,
|
lgt_jobs/env.py
CHANGED
@@ -2,7 +2,7 @@ import os
|
|
2
2
|
|
3
3
|
project_id = os.environ.get('PROJECT_ID')
|
4
4
|
background_jobs_topic = os.environ.get('BACKGROUND_JOBS_TOPIC')
|
5
|
-
background_jobs_subscriber = os.environ.get('BACKGROUND_JOBS_SUBSCRIBER')
|
5
|
+
background_jobs_subscriber = os.environ.get('BACKGROUND_JOBS_SUBSCRIBER', 'subscriber')
|
6
6
|
mongo_connection_string = os.environ.get('MONGO_CONNECTION_STRING')
|
7
7
|
smtp_host = os.environ.get('SMTP_HOST')
|
8
8
|
smtp_login = os.environ.get('SMTP_LOGIN')
|
@@ -14,3 +14,5 @@ service_account_password = os.environ.get('SERVICE_ACCOUNT_PASSWORD')
|
|
14
14
|
v2_server_host = os.environ.get('V2_SERVER_HOST')
|
15
15
|
v3_server_host = os.environ.get('V3_SERVER_HOST')
|
16
16
|
v1_server_host = os.environ.get('V1_SERVER_HOST')
|
17
|
+
max_messages = int(os.environ.get('MAX_MESSAGES', 10))
|
18
|
+
pool_size = int(os.environ.get('POOL_SIZE', 10))
|
lgt_jobs/jobs/chat_history.py
CHANGED
@@ -33,9 +33,6 @@ class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
|
33
33
|
|
34
34
|
def exec(self, data: LoadChatHistoryJobData):
|
35
35
|
user = UserMongoRepository().get(data.user_id)
|
36
|
-
if user.subscription_expired_at.replace(tzinfo=UTC) < datetime.now(UTC):
|
37
|
-
log.info(f"[LoadChatHistoryJob]: {user.email} has expired subscription")
|
38
|
-
return
|
39
36
|
bots = DedicatedBotRepository().get_all(only_valid=True, user_id=user.id, source_type=SourceType.SLACK)
|
40
37
|
if not bots:
|
41
38
|
return
|
@@ -47,7 +44,6 @@ class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
|
47
44
|
if not contacts:
|
48
45
|
continue
|
49
46
|
|
50
|
-
log.info(f"[LoadChatHistoryJob]: processing {len(contacts)} contacts for user: {user.email}")
|
51
47
|
for contact in contacts:
|
52
48
|
message = self._update_history(contact=contact, bot=bot)
|
53
49
|
|
@@ -93,7 +89,7 @@ class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
|
93
89
|
|
94
90
|
messages = history.get('messages', [])
|
95
91
|
if not messages:
|
96
|
-
return
|
92
|
+
return
|
97
93
|
|
98
94
|
messages = [ChatMessage.from_slack_response(bot, m, contact.sender_id) for m in messages]
|
99
95
|
new_messages = self._get_new_messages(contact, bot, messages)
|
@@ -106,4 +102,4 @@ class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
|
106
102
|
self.user_leads_repo.update_many_by_sender_id(contact.sender_id, last_action_at=now)
|
107
103
|
return new_messages[-1]
|
108
104
|
|
109
|
-
return
|
105
|
+
return
|
lgt_jobs/main.py
CHANGED
@@ -1,35 +1,28 @@
|
|
1
1
|
import json
|
2
|
-
import
|
3
|
-
|
4
|
-
import
|
2
|
+
import traceback
|
3
|
+
|
4
|
+
from concurrent.futures import ThreadPoolExecutor
|
5
|
+
|
5
6
|
from lgt_common.pubsub.pubsubfactory import PubSubFactory
|
6
7
|
import logging as log
|
7
8
|
from lgt_jobs.env import project_id, background_jobs_topic, background_jobs_subscriber
|
8
9
|
from lgt_jobs.runner import BackgroundJobRunner
|
9
|
-
from lgt_jobs import jobs_map
|
10
|
+
from lgt_jobs import jobs_map, env
|
10
11
|
import google.cloud.logging
|
11
|
-
|
12
|
-
|
12
|
+
from google.cloud.pubsub_v1 import SubscriberClient
|
13
|
+
from google.cloud.pubsub_v1.types import FlowControl
|
14
|
+
from google.cloud.pubsub_v1.subscriber.scheduler import ThreadScheduler
|
13
15
|
|
14
16
|
|
15
|
-
def
|
17
|
+
def callback(message):
|
16
18
|
try:
|
19
|
+
data = json.loads(message.data)
|
17
20
|
log.info(f"[JOB]: {data} [START]")
|
18
21
|
BackgroundJobRunner.run(jobs_map=jobs_map, data=data)
|
19
22
|
log.info(f"[JOB]: {data} [FINISHED]")
|
20
|
-
except Exception:
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
def run_background_job_with_lock(message):
|
25
|
-
try:
|
26
|
-
data = json.loads(message.data)
|
27
|
-
with lock:
|
28
|
-
run_background_job(data)
|
29
|
-
except:
|
30
|
-
import traceback
|
31
|
-
log.error(f"[ERROR][JOB]: {message.data} [ERROR] {traceback.format_exception(*sys.exc_info())} ")
|
32
|
-
traceback.print_exception(*sys.exc_info())
|
23
|
+
except Exception as exception:
|
24
|
+
log.error(f"[ERROR][JOB]: {message.data} [ERROR] {traceback.format_exception(exception)} ")
|
25
|
+
traceback.print_exception(exception)
|
33
26
|
finally:
|
34
27
|
# accept message any way
|
35
28
|
message.ack()
|
@@ -41,7 +34,20 @@ if __name__ == '__main__':
|
|
41
34
|
factory = PubSubFactory(project_id)
|
42
35
|
factory.create_topic_if_doesnt_exist(background_jobs_topic)
|
43
36
|
factory.create_subscription_if_doesnt_exist(background_jobs_subscriber, background_jobs_topic, 600)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
subscription_path = factory.get_subscription_path(background_jobs_subscriber, background_jobs_topic)
|
38
|
+
# Launching a subscription
|
39
|
+
future = SubscriberClient().subscribe(
|
40
|
+
subscription_path,
|
41
|
+
callback=callback,
|
42
|
+
flow_control=FlowControl(max_messages=env.max_messages),
|
43
|
+
scheduler=ThreadScheduler(executor=ThreadPoolExecutor(max_workers=env.pool_size))
|
44
|
+
)
|
45
|
+
|
46
|
+
log.info(f"Subscription to {subscription_path} started. We are waiting for a message..\n")
|
47
|
+
|
48
|
+
try:
|
49
|
+
future.result() # Block the current thread until an exception occurs
|
50
|
+
except Exception as exception:
|
51
|
+
log.error(f"[ERROR][SUBSCRIBER]: {traceback.format_exception(exception)}")
|
52
|
+
traceback.print_exception(exception)
|
53
|
+
future.cancel()
|
File without changes
|
File without changes
|