leadguru-jobs 0.620.0__tar.gz → 0.622.0__tar.gz
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.620.0 → leadguru_jobs-0.622.0}/PKG-INFO +1 -1
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/PKG-INFO +1 -1
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/SOURCES.txt +2 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/chat_history.py +7 -5
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/inbox_leads.py +8 -23
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/send_slack_message.py +3 -5
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/web_client.py +1 -31
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/analytics.py +1 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/enums.py +0 -1
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/model.py +28 -1
- leadguru_jobs-0.622.0/lgt_jobs/lgt_data/models/message_request.py +10 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/mongo_repository.py +13 -21
- leadguru_jobs-0.622.0/lgt_jobs/services/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/services/web_client.py +0 -12
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/MANIFEST.in +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/README.md +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/dependency_links.txt +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/not-zip-safe +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/requires.txt +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/leadguru_jobs.egg-info/top_level.txt +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/assets/images/arrow.png +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/assets/images/firework.png +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/assets/images/lock.png +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/assets/images/logo.png +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/assets/images/mail.png +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/basejobs.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/env.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/analytics.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/bot_stats_update.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/connect_sources.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/load_slack_people.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/mass_message.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/send_code.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/update_slack_profile.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/user_balance_update.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/jobs/workspace_connect.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/discord_client.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/methods.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/enums/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/enums/slack_errors.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/helpers.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/lgt_logging.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/pubsub/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/pubsub/messages.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/pubsub/pubsubfactory.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/methods.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/slack_client.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/engine.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_data/helpers.py +0 -0
- {leadguru_jobs-0.620.0/lgt_jobs/services → leadguru_jobs-0.622.0/lgt_jobs/lgt_data/models}/__init__.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/main.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/runner.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/simple_job.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/smtp.py +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/templates/new_message.html +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/setup.cfg +0 -0
- {leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/setup.py +0 -0
@@ -55,6 +55,8 @@ lgt_jobs/lgt_data/enums.py
|
|
55
55
|
lgt_jobs/lgt_data/helpers.py
|
56
56
|
lgt_jobs/lgt_data/model.py
|
57
57
|
lgt_jobs/lgt_data/mongo_repository.py
|
58
|
+
lgt_jobs/lgt_data/models/__init__.py
|
59
|
+
lgt_jobs/lgt_data/models/message_request.py
|
58
60
|
lgt_jobs/services/__init__.py
|
59
61
|
lgt_jobs/services/web_client.py
|
60
62
|
lgt_jobs/templates/new_message.html
|
@@ -2,10 +2,10 @@ from datetime import datetime, UTC
|
|
2
2
|
from abc import ABC
|
3
3
|
from typing import Optional, List
|
4
4
|
import logging as log
|
5
|
-
from lgt_jobs.lgt_common.slack_client.web_client import SlackWebClient
|
5
|
+
from lgt_jobs.lgt_common.slack_client.web_client import SlackWebClient
|
6
6
|
from lgt_jobs.lgt_data.model import ChatMessage, UserContact, DedicatedBotModel
|
7
7
|
from lgt_jobs.lgt_data.mongo_repository import UserMongoRepository, DedicatedBotRepository, UserContactsRepository, \
|
8
|
-
ChatRepository
|
8
|
+
ChatRepository, UserLeadMongoRepository
|
9
9
|
from pydantic import BaseModel
|
10
10
|
from lgt_jobs.lgt_data.enums import SourceType
|
11
11
|
from lgt_jobs.runner import BaseBackgroundJob, BaseBackgroundJobData
|
@@ -23,6 +23,7 @@ class LoadChatHistoryJobData(BaseBackgroundJobData, BaseModel):
|
|
23
23
|
class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
24
24
|
chat_repo = ChatRepository()
|
25
25
|
contacts_repo = UserContactsRepository()
|
26
|
+
user_leads_repo = UserLeadMongoRepository()
|
26
27
|
|
27
28
|
@property
|
28
29
|
def job_data_type(self) -> type:
|
@@ -97,14 +98,15 @@ class LoadChatHistoryJob(BaseBackgroundJob, ABC):
|
|
97
98
|
if not messages:
|
98
99
|
return None
|
99
100
|
|
100
|
-
messages = [
|
101
|
+
messages = [ChatMessage.from_slack_response(bot, m, contact.sender_id) for m in messages]
|
101
102
|
new_messages = self._get_new_messages(contact, bot, messages)
|
102
103
|
chat_history = [message.to_dic() for message in new_messages]
|
103
104
|
self.chat_repo.upsert_messages(chat_history)
|
104
105
|
if bot.associated_user != contact.sender_id and new_messages:
|
105
106
|
log.info(f'[LoadChatHistoryJob]: New message. Sender id: {contact.sender_id}, bot id: {bot.id}')
|
106
|
-
|
107
|
-
|
107
|
+
now = datetime.now(UTC)
|
108
|
+
self.contacts_repo.update(contact.user_id, contact.sender_id, contact.source_id, last_message_at=now)
|
109
|
+
self.user_leads_repo.update_many_by_sender_id(contact.sender_id, last_action_at=now)
|
108
110
|
return new_messages[-1]
|
109
111
|
|
110
112
|
return None
|
@@ -1,10 +1,10 @@
|
|
1
1
|
from abc import ABC
|
2
2
|
import logging as log
|
3
3
|
from lgt_jobs.lgt_common.slack_client.web_client import SlackWebClient
|
4
|
-
from lgt_jobs.lgt_data.
|
5
|
-
from lgt_jobs.lgt_data.
|
4
|
+
from lgt_jobs.lgt_data.model import UserModel, DedicatedBotModel, SlackMemberInformation
|
5
|
+
from lgt_jobs.lgt_data.models.message_request import MessageRequest
|
6
6
|
from lgt_jobs.lgt_data.mongo_repository import UserMongoRepository, DedicatedBotRepository, \
|
7
|
-
SlackContactUserRepository,
|
7
|
+
SlackContactUserRepository, UserContactsRepository, MessageRequestsRepository
|
8
8
|
from pydantic import BaseModel
|
9
9
|
from lgt_jobs.basejobs import BaseBackgroundJob, BaseBackgroundJobData
|
10
10
|
from lgt_jobs.services.web_client import V3ServerClient
|
@@ -35,12 +35,9 @@ class InboxLeadsJob(BaseBackgroundJob, ABC):
|
|
35
35
|
for dedicated_bot in dedicated_bots:
|
36
36
|
self.create_inbox_leads(user, dedicated_bot)
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
if not inbox_board:
|
41
|
-
return
|
38
|
+
@staticmethod
|
39
|
+
def create_inbox_leads(user: UserModel, dedicated_bot: DedicatedBotModel):
|
42
40
|
slack_client = SlackWebClient(dedicated_bot.token, dedicated_bot.cookies)
|
43
|
-
|
44
41
|
attempt = 0
|
45
42
|
conversations_list = []
|
46
43
|
while attempt < 3:
|
@@ -85,21 +82,9 @@ class InboxLeadsJob(BaseBackgroundJob, ABC):
|
|
85
82
|
slack_profile = slack_client.get_profile(sender_id).get('user')
|
86
83
|
InboxLeadsJob.create_people(slack_profile, dedicated_bot)
|
87
84
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
message=messages[0].get("text"))
|
92
|
-
log.info(f"[InboxLeadsJob]: Save lead for user: {user.email}")
|
93
|
-
if save_lead_response.status_code == 200:
|
94
|
-
lead = UserLeadModel.from_dic(save_lead_response.json())
|
95
|
-
self.v3_client.update_user_lead(lead.message.message_id, user.email,
|
96
|
-
im_id, str(inbox_board[0].id), "Received")
|
97
|
-
log.info(f"[InboxLeadsJob]: Added inbox lead {lead.id} for user: {user.email}")
|
98
|
-
|
99
|
-
else:
|
100
|
-
log.warning(f"[InboxLeadsJob]: Error to save lead from contact. "
|
101
|
-
f"Details {save_lead_response.content}, "
|
102
|
-
f"status code: {save_lead_response.status_code}")
|
85
|
+
log.info(f"[InboxLeadsJob]: New message request from {sender_id} for user: {user.email}")
|
86
|
+
message_request = MessageRequest.from_slack_response(dedicated_bot, messages[0], sender_id)
|
87
|
+
MessageRequestsRepository().insert(message_request.to_dic())
|
103
88
|
|
104
89
|
@staticmethod
|
105
90
|
def create_people(slack_profile: dict, dedicated_bot: DedicatedBotModel):
|
@@ -2,10 +2,9 @@ from datetime import datetime, UTC
|
|
2
2
|
from abc import ABC
|
3
3
|
from typing import Optional
|
4
4
|
import logging as log
|
5
|
-
from lgt_jobs.lgt_common.slack_client.web_client import SlackWebClient
|
5
|
+
from lgt_jobs.lgt_common.slack_client.web_client import SlackWebClient
|
6
6
|
from lgt_jobs.lgt_data.model import ChatMessage
|
7
|
-
from lgt_jobs.lgt_data.mongo_repository import DedicatedBotRepository, UserContactsRepository,
|
8
|
-
ChatRepository
|
7
|
+
from lgt_jobs.lgt_data.mongo_repository import DedicatedBotRepository, UserContactsRepository, ChatRepository
|
9
8
|
from pydantic import BaseModel
|
10
9
|
from lgt_jobs.basejobs import BaseBackgroundJobData, BaseBackgroundJob
|
11
10
|
|
@@ -31,7 +30,6 @@ class SendSlackMessageJob(BaseBackgroundJob, ABC):
|
|
31
30
|
if not bot:
|
32
31
|
return
|
33
32
|
|
34
|
-
user = UserMongoRepository().get(bot.user_id)
|
35
33
|
user_contacts_repository = UserContactsRepository()
|
36
34
|
uc = user_contacts_repository.find_one(bot.user_id, sender_id=data.sender_id,
|
37
35
|
source_id=bot.source.source_id)
|
@@ -54,6 +52,6 @@ class SendSlackMessageJob(BaseBackgroundJob, ABC):
|
|
54
52
|
message = resp.get('message') if 'message' in resp \
|
55
53
|
else slack_client.conversation_replies(channel_id, resp['file_msg_ts'])['messages'][0]
|
56
54
|
|
57
|
-
message_model: ChatMessage =
|
55
|
+
message_model: ChatMessage = ChatMessage().from_slack_response(bot, message, data.sender_id)
|
58
56
|
message_model.viewed = True
|
59
57
|
ChatRepository().upsert_messages([message_model.to_dic()])
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/web_client.py
RENAMED
@@ -1,36 +1,6 @@
|
|
1
1
|
from google.cloud import storage
|
2
|
-
from datetime import
|
3
|
-
from lgt_jobs.lgt_data.model import ChatMessage, LeadGuruFile, DedicatedBotModel
|
2
|
+
from datetime import timedelta
|
4
3
|
from lgt_jobs.lgt_common.slack_client.slack_client import SlackClient
|
5
|
-
from lgt_jobs.lgt_data.mongo_repository import to_object_id
|
6
|
-
|
7
|
-
|
8
|
-
class SlackMessageConvertService:
|
9
|
-
@staticmethod
|
10
|
-
def from_slack_response(bot: DedicatedBotModel, message_data: dict, sender_id: str) -> ChatMessage:
|
11
|
-
result = ChatMessage()
|
12
|
-
result.sender_id = sender_id
|
13
|
-
result.bot_id = to_object_id(bot.id)
|
14
|
-
result.text = message_data.get('text', '')
|
15
|
-
result.user = message_data.get('user', '')
|
16
|
-
result.id = message_data.get('ts', '')
|
17
|
-
result.attachments = message_data.get('attachments', [])
|
18
|
-
result.files = []
|
19
|
-
result.user_id = to_object_id(bot.user_id)
|
20
|
-
result.source_id = bot.source.source_id
|
21
|
-
if 'files' in message_data:
|
22
|
-
for file in message_data.get('files'):
|
23
|
-
if file.get('mode') != "tombstone" and file.get('url_private_download'):
|
24
|
-
leadguru_file = LeadGuruFile()
|
25
|
-
leadguru_file.id = file['id']
|
26
|
-
leadguru_file.content_type = file['mimetype']
|
27
|
-
leadguru_file.file_name = file['name']
|
28
|
-
leadguru_file.blob_path = f'slack_files/{bot.user_name}/slack_files/{file["id"]}'
|
29
|
-
result.files.append(leadguru_file)
|
30
|
-
|
31
|
-
js_ticks = int(result.id.split('.')[0] + result.id.split('.')[1][3:])
|
32
|
-
result.created_at = datetime.fromtimestamp(js_ticks / 1000.0)
|
33
|
-
return result
|
34
4
|
|
35
5
|
|
36
6
|
class SlackFilesClient:
|
@@ -81,6 +81,7 @@ def _prepare_date_analytics_doc(doc, ordered_result_dict: Dict[str, int]):
|
|
81
81
|
ordered_result_dict[str_date] = item["count"]
|
82
82
|
return ordered_result_dict
|
83
83
|
|
84
|
+
|
84
85
|
def get_channel_aggregated_analytics(from_date: datetime = None, to_date: datetime = None,
|
85
86
|
bot_id: Optional[str | ObjectId] = None):
|
86
87
|
pipeline = [
|
@@ -7,6 +7,8 @@ from typing import Optional, List
|
|
7
7
|
from lgt_jobs.lgt_data.enums import UserRole, SourceType, FeaturesEnum, FeatureOptions, NotificationType
|
8
8
|
from bson import ObjectId
|
9
9
|
|
10
|
+
from lgt_jobs.lgt_data.mongo_repository import to_object_id
|
11
|
+
|
10
12
|
|
11
13
|
class DictionaryModel(ABC):
|
12
14
|
@classmethod
|
@@ -361,7 +363,6 @@ class UserModel(BaseModel):
|
|
361
363
|
self.company_web_site: str = ''
|
362
364
|
self.company_description: str = ''
|
363
365
|
self.position: str = ''
|
364
|
-
# self.new_message_notified_at: Optional[datetime] = None # TODO: Move to settings
|
365
366
|
self.leads_limit: Optional[int] = None
|
366
367
|
self.leads_proceeded: Optional[int] = None
|
367
368
|
self.leads_filtered: Optional[int] = None
|
@@ -705,6 +706,32 @@ class ChatMessage:
|
|
705
706
|
setattr(model, k, v)
|
706
707
|
return model
|
707
708
|
|
709
|
+
@classmethod
|
710
|
+
def from_slack_response(cls, bot: DedicatedBotModel, message_data: dict, sender_id: str) -> ChatMessage:
|
711
|
+
model = cls()
|
712
|
+
model.sender_id = sender_id
|
713
|
+
model.bot_id = to_object_id(bot.id)
|
714
|
+
model.text = message_data.get('text', '')
|
715
|
+
model.user = message_data.get('user', '')
|
716
|
+
model.id = message_data.get('ts', '')
|
717
|
+
model.attachments = message_data.get('attachments', [])
|
718
|
+
model.files = []
|
719
|
+
model.user_id = to_object_id(bot.user_id)
|
720
|
+
model.source_id = bot.source.source_id
|
721
|
+
if 'files' in message_data:
|
722
|
+
for file in message_data.get('files'):
|
723
|
+
if file.get('mode') != "tombstone" and file.get('url_private_download'):
|
724
|
+
leadguru_file = LeadGuruFile()
|
725
|
+
leadguru_file.id = file['id']
|
726
|
+
leadguru_file.content_type = file['mimetype']
|
727
|
+
leadguru_file.file_name = file['name']
|
728
|
+
leadguru_file.blob_path = f'slack_files/{bot.user_name}/slack_files/{file["id"]}'
|
729
|
+
model.files.append(leadguru_file)
|
730
|
+
|
731
|
+
js_ticks = int(model.id.split('.')[0] + model.id.split('.')[1][3:])
|
732
|
+
model.created_at = datetime.fromtimestamp(js_ticks / 1000.0)
|
733
|
+
return model
|
734
|
+
|
708
735
|
|
709
736
|
class ScheduledChatMessage(ChatMessage):
|
710
737
|
post_at: Optional[datetime]
|
@@ -0,0 +1,10 @@
|
|
1
|
+
from lgt_jobs.lgt_data.model import ChatMessage, DedicatedBotModel
|
2
|
+
|
3
|
+
|
4
|
+
class MessageRequest(ChatMessage):
|
5
|
+
hidden: bool = False
|
6
|
+
|
7
|
+
@classmethod
|
8
|
+
def from_slack_response(cls, bot: DedicatedBotModel, message_data: dict, sender_id: str):
|
9
|
+
message = super().from_slack_response(bot, message_data, sender_id)
|
10
|
+
return message.from_dic(message.to_dic())
|
@@ -35,7 +35,7 @@ class BaseMongoRepository:
|
|
35
35
|
return client[self.database_name][collection_name]
|
36
36
|
|
37
37
|
def insert_many(self, items):
|
38
|
-
insert_items =
|
38
|
+
insert_items = [item.to_dic() for item in items]
|
39
39
|
self.collection().insert_many(insert_items)
|
40
40
|
|
41
41
|
def insert(self, item: BaseModel):
|
@@ -85,7 +85,7 @@ class UserMongoRepository(BaseMongoRepository):
|
|
85
85
|
if has_new_message:
|
86
86
|
pipeline['notification_settings.incoming_messages.enabled'] = True
|
87
87
|
pipeline['notification_settings.incoming_messages.need_to_notify'] = True
|
88
|
-
|
88
|
+
|
89
89
|
if connected_slack_email:
|
90
90
|
pipeline['slack_users.email'] = connected_slack_email
|
91
91
|
|
@@ -179,6 +179,10 @@ class UserLeadMongoRepository(BaseMongoRepository):
|
|
179
179
|
self.collection().update_many({'message.source.source_id': source_id},
|
180
180
|
{'$set': {'message.source': source_data}})
|
181
181
|
|
182
|
+
def update_many_by_sender_id(self, sender_id: str, **kwargs):
|
183
|
+
update_dict = {k: v for k, v in kwargs.items() if v is not None}
|
184
|
+
self.collection().update_many({'message.sender_id': sender_id}, {'$set': update_dict}, upsert=False)
|
185
|
+
|
182
186
|
def get_many(self, ids: list, user_id):
|
183
187
|
docs = self.collection().find({"id": {'$in': ids}, 'user_id': to_object_id(user_id)})
|
184
188
|
leads = [ExtendedUserLeadModel.from_dic(lead) for lead in docs]
|
@@ -229,11 +233,11 @@ class UserLeadMongoRepository(BaseMongoRepository):
|
|
229
233
|
configs = kwargs.get('config', None)
|
230
234
|
bots_names = kwargs.get('bots_names', None)
|
231
235
|
locations = kwargs.get('locations', None)
|
232
|
-
dedicated_bots_ids = kwargs.get('dedicated_bots_ids', None)
|
233
236
|
with_chat = kwargs.get('with_chat', None)
|
234
237
|
leads_ids = kwargs.get('leads_ids', None)
|
235
238
|
exclude_leads = kwargs.get('exclude_leads', None)
|
236
239
|
exclude_senders = kwargs.get('exclude_senders', None)
|
240
|
+
deleted = kwargs.get('deleted', False)
|
237
241
|
|
238
242
|
pipeline['message.profile.display_name'] = {
|
239
243
|
"$ne": "Slackbot"
|
@@ -310,8 +314,8 @@ class UserLeadMongoRepository(BaseMongoRepository):
|
|
310
314
|
if bots_names is not None:
|
311
315
|
pipeline['message.name'] = {'$in': bots_names}
|
312
316
|
|
313
|
-
|
314
|
-
|
317
|
+
pipeline['deleted'] = deleted
|
318
|
+
|
315
319
|
return pipeline
|
316
320
|
|
317
321
|
def get_daily_analytics_by_workspace(self, user_configs: list,
|
@@ -661,22 +665,6 @@ class SpamLeadsMongoRepository(LeadMongoRepository):
|
|
661
665
|
return pipeline
|
662
666
|
|
663
667
|
|
664
|
-
class GarbageLeadsMongoRepository(SpamLeadsMongoRepository):
|
665
|
-
pass
|
666
|
-
|
667
|
-
def __init__(self):
|
668
|
-
super().__init__()
|
669
|
-
self.collection_name = 'garbage_leads'
|
670
|
-
|
671
|
-
|
672
|
-
class GarbageUserLeadsMongoRepository(UserLeadMongoRepository):
|
673
|
-
pass
|
674
|
-
|
675
|
-
def __init__(self):
|
676
|
-
self.database_name = 'lgt_admin'
|
677
|
-
self.collection_name = 'garbage_leads'
|
678
|
-
|
679
|
-
|
680
668
|
class SpamUserLeadsMongoRepository(UserLeadMongoRepository):
|
681
669
|
pass
|
682
670
|
|
@@ -1206,6 +1194,10 @@ class ChatRepository(BaseMongoRepository):
|
|
1206
1194
|
self.collection().delete_one({"id": _id, 'user_id': to_object_id(user_id)})
|
1207
1195
|
|
1208
1196
|
|
1197
|
+
class MessageRequestsRepository(BaseMongoRepository):
|
1198
|
+
collection_name = 'message_requests'
|
1199
|
+
|
1200
|
+
|
1209
1201
|
class UserVerificationMongoRepository(BaseMongoRepository):
|
1210
1202
|
pass
|
1211
1203
|
|
File without changes
|
@@ -34,18 +34,6 @@ class V3ServerClient(BaseHttpClient):
|
|
34
34
|
return requests.post(f'{v3_server_host}/{self.api_version}/user_leads/update',
|
35
35
|
headers=headers, params=payload, json=update_lead_payload).json()
|
36
36
|
|
37
|
-
def save_lead_from_contact(self, sender_id: str, source_id: str, email: str, message: str = None) -> Response:
|
38
|
-
payload = {
|
39
|
-
'sender_id': sender_id,
|
40
|
-
'source_id': source_id,
|
41
|
-
'user_email': email,
|
42
|
-
'message': message,
|
43
|
-
'inbox': True
|
44
|
-
}
|
45
|
-
headers = self._create_default_headers()
|
46
|
-
return requests.post(f'{v3_server_host}/{self.api_version}/user_leads/create',
|
47
|
-
headers=headers, params=payload)
|
48
|
-
|
49
37
|
|
50
38
|
class BillingServerClient:
|
51
39
|
api_version = 'api'
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/__init__.py
RENAMED
File without changes
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/discord_client.py
RENAMED
File without changes
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/discord_client/methods.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/__init__.py
RENAMED
File without changes
|
File without changes
|
{leadguru_jobs-0.620.0 → leadguru_jobs-0.622.0}/lgt_jobs/lgt_common/slack_client/slack_client.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|