leadguru-jobs 0.584.0__py3-none-any.whl → 0.586.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.584.0.dist-info → leadguru_jobs-0.586.0.dist-info}/METADATA +1 -1
- {leadguru_jobs-0.584.0.dist-info → leadguru_jobs-0.586.0.dist-info}/RECORD +10 -10
- lgt_jobs/jobs/bot_stats_update.py +6 -9
- lgt_jobs/jobs/workspace_connect.py +1 -1
- lgt_jobs/lgt_common/discord_client/discord_client.py +2 -4
- lgt_jobs/lgt_data/analytics.py +3 -3
- lgt_jobs/lgt_data/model.py +6 -8
- lgt_jobs/smtp.py +6 -5
- {leadguru_jobs-0.584.0.dist-info → leadguru_jobs-0.586.0.dist-info}/WHEEL +0 -0
- {leadguru_jobs-0.584.0.dist-info → leadguru_jobs-0.586.0.dist-info}/top_level.txt +0 -0
@@ -4,7 +4,7 @@ lgt_jobs/env.py,sha256=cRO03GGvstUjBsv3uYO-iakrOvAk_ZWUP_fnmf21iZQ,789
|
|
4
4
|
lgt_jobs/main.py,sha256=cK_nkBtJHnUNDbba1WZotqPtI_6OWxiYQkAgco9OAmE,1539
|
5
5
|
lgt_jobs/runner.py,sha256=7KHpMHWwCjDlPDKnkNqrGAyIVn4Po62VqjYGVa85if8,2218
|
6
6
|
lgt_jobs/simple_job.py,sha256=sta7MP-57iwRewPycmTAc9dvSbocbGjWhb1QYYj7ccA,519
|
7
|
-
lgt_jobs/smtp.py,sha256=
|
7
|
+
lgt_jobs/smtp.py,sha256=k0qh-Qk9AeSU3WrCOVmuWkfpi9xzwaPMzbw9cED-pZw,1150
|
8
8
|
lgt_jobs/assets/images/arrow.png,sha256=Lr_zG1TyySAWX78jiojcV7j8BHe2S_Oi7eZYAfe4YbM,536
|
9
9
|
lgt_jobs/assets/images/firework.png,sha256=9d_0lUpDFfT3e4JTgp5XVb03qAdtO9yNVi1c1KoQDp8,33754
|
10
10
|
lgt_jobs/assets/images/lock.png,sha256=515llTFqboG9PYXIrXhlbPZ5lQOHXjEYyQkXc9WfJxc,5978
|
@@ -12,7 +12,7 @@ lgt_jobs/assets/images/logo.png,sha256=nt377FGkBalBF9Z9TYQRv9loHolTXwU8_VRYvCXXz
|
|
12
12
|
lgt_jobs/assets/images/mail.png,sha256=eORzQcAMkFr7DjgtABVhJ_zFuXgO7OXv78lLF4b39B0,7168
|
13
13
|
lgt_jobs/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
14
14
|
lgt_jobs/jobs/analytics.py,sha256=IIsWt4A1qUw3w-S-8W16uKY1FRVWfXXA41_mu4uCNiM,979
|
15
|
-
lgt_jobs/jobs/bot_stats_update.py,sha256=
|
15
|
+
lgt_jobs/jobs/bot_stats_update.py,sha256=R6mf5FxhWbyx92AYXlj0FZVjz2Tgz86mBvLHrsQ9AFE,7502
|
16
16
|
lgt_jobs/jobs/chat_history.py,sha256=tZ4XyOGdy1k6r4uotxSSKbXjTR_oRK6Ym0YthFYBtl8,6200
|
17
17
|
lgt_jobs/jobs/connect_sources.py,sha256=_eA86KnS3AC6YCI1xk7VCV7lFmPRxta-wUStfdmajQU,4790
|
18
18
|
lgt_jobs/jobs/inbox_leads.py,sha256=OSX-FNx27gWEKNBBc-hyq2odCxXytz7WHtQJajtz274,5670
|
@@ -22,12 +22,12 @@ lgt_jobs/jobs/send_code.py,sha256=dIlLPkG3GgGKIEqGiElyzrtdrnJNTL1Ak2V0xnE-WIQ,82
|
|
22
22
|
lgt_jobs/jobs/send_slack_message.py,sha256=IuRqDGcDrz2EAZzF6nrLXO0aSA4mETB_tGOEbcMhjHE,2562
|
23
23
|
lgt_jobs/jobs/update_slack_profile.py,sha256=0fUHBd2gEBne52sTfxwji2Wu-oYDM5dLGsL-rHq5kwM,2765
|
24
24
|
lgt_jobs/jobs/user_balance_update.py,sha256=HxeEmDdloK9EcoEj1ybYTgxIkB0IQNLnss_kk3rLI1Q,2404
|
25
|
-
lgt_jobs/jobs/workspace_connect.py,sha256=
|
25
|
+
lgt_jobs/jobs/workspace_connect.py,sha256=qgjIRzAQRbJBx--eYsTtYgOUh2-p3N_-LIltfbJrYYo,7102
|
26
26
|
lgt_jobs/lgt_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
27
27
|
lgt_jobs/lgt_common/helpers.py,sha256=tJNrKJYPa_MBmfRVrpHryoOWe4gnv7xOlmHuTh-bMBw,428
|
28
28
|
lgt_jobs/lgt_common/lgt_logging.py,sha256=Zxr2sPpY-qU_YbL_47OM6dE_JA1ejG_Vr1PNnjF_jwo,576
|
29
29
|
lgt_jobs/lgt_common/discord_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
30
|
-
lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=
|
30
|
+
lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=tvRn0P039Dp5d22-DivQhP2uQMC7ixZc7oe7IA4WrPE,2442
|
31
31
|
lgt_jobs/lgt_common/discord_client/methods.py,sha256=C46Vq9_-dlvs0nEW6ck8QvAmE_nPUfU89MJUhHaPMLk,391
|
32
32
|
lgt_jobs/lgt_common/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
33
33
|
lgt_jobs/lgt_common/enums/slack_errors.py,sha256=nK7uoguq0F8bIHROp73oeszehT7CgS_VU45n9_Gq_WY,172
|
@@ -39,16 +39,16 @@ lgt_jobs/lgt_common/slack_client/methods.py,sha256=ctKF_1UHEmSWaRsoGEgMZicVabV7e
|
|
39
39
|
lgt_jobs/lgt_common/slack_client/slack_client.py,sha256=icHapSOszFYnSofJ-eWl4lUWSOqng6S9XSRFfMx87Rg,13836
|
40
40
|
lgt_jobs/lgt_common/slack_client/web_client.py,sha256=JrkEepL6EhEtX3Psv_sd25bcRB2P23LoGnFHcczQpnc,4778
|
41
41
|
lgt_jobs/lgt_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
|
-
lgt_jobs/lgt_data/analytics.py,sha256=
|
42
|
+
lgt_jobs/lgt_data/analytics.py,sha256=TFUffL8Dn-vIJ3ZaCVN-cj1Qnjb8F9GJyuk6Fo7mR1s,21645
|
43
43
|
lgt_jobs/lgt_data/engine.py,sha256=Rsbz-CApAo_TVDssdjBkv8v_fVOZm_Uh1S6W4fnaEWo,7728
|
44
44
|
lgt_jobs/lgt_data/enums.py,sha256=jBH5WGBtDAvFrh4iiPIzlQ-XrImMpuwqstuasG55mJ0,2209
|
45
45
|
lgt_jobs/lgt_data/helpers.py,sha256=NDa-V5EYaJfkGoWsmQSwSe6N_jxNxs8tHRQzW1iST6k,480
|
46
|
-
lgt_jobs/lgt_data/model.py,sha256=
|
46
|
+
lgt_jobs/lgt_data/model.py,sha256=QAWnCPHEoNdXaPPCgMi_tHLx11zj0xcGUUUg2CDS3DQ,28554
|
47
47
|
lgt_jobs/lgt_data/mongo_repository.py,sha256=kLE906lfqhHF9gp1qvH_3XKCZGCZnxjLMrBLWBy7doo,46099
|
48
48
|
lgt_jobs/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
49
49
|
lgt_jobs/services/web_client.py,sha256=GLWsJkIC8rv6xLFaLwcMm4EwBlVDu0njORwkZqBJaE4,2086
|
50
50
|
lgt_jobs/templates/new_message.html,sha256=dZl8UmdAOOMq4nidvAgMFroSrTV7Pw0RWt2yLp_2idg,6989
|
51
|
-
leadguru_jobs-0.
|
52
|
-
leadguru_jobs-0.
|
53
|
-
leadguru_jobs-0.
|
54
|
-
leadguru_jobs-0.
|
51
|
+
leadguru_jobs-0.586.0.dist-info/METADATA,sha256=nQOygMxPU916N2ufLOUtLfKM2-_HXSvTNlmuAR3B_k8,1319
|
52
|
+
leadguru_jobs-0.586.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
53
|
+
leadguru_jobs-0.586.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
|
54
|
+
leadguru_jobs-0.586.0.dist-info/RECORD,,
|
@@ -32,7 +32,6 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
32
32
|
bots_rep = DedicatedBotRepository()
|
33
33
|
users_rep = UserMongoRepository()
|
34
34
|
bot = bots_rep.get_one(id=data.bot_id, include_deleted=True)
|
35
|
-
received_messages, filtered_messages = get_bots_aggregated_analytics(bot_ids=[str(bot.id)])
|
36
35
|
|
37
36
|
if bot.source.source_type == SourceType.DISCORD:
|
38
37
|
client = DiscordClient(bot.token)
|
@@ -72,8 +71,6 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
72
71
|
if discord_server.icon:
|
73
72
|
discord_server.icon = (f'https://cdn.discordapp.com/icons/{discord_server.id}/'
|
74
73
|
f'{discord_server.icon}.png')
|
75
|
-
discord_server.messages_received = received_messages.get(discord_server.id)
|
76
|
-
discord_server.messages_filtered = filtered_messages.get(discord_server.id)
|
77
74
|
time.sleep(random.randint(1, 2))
|
78
75
|
|
79
76
|
bot.servers = discord_servers
|
@@ -110,6 +107,7 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
110
107
|
bot.source.source_name = bot_name
|
111
108
|
bot.slack_url = bot.registration_link = team_info['team']['url']
|
112
109
|
bots_rep.add_or_update(bot)
|
110
|
+
received_messages, filtered_messages = get_bots_aggregated_analytics(bot_ids=[bot.id])
|
113
111
|
try:
|
114
112
|
channels_response = client.channels_list()
|
115
113
|
except:
|
@@ -126,20 +124,23 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
126
124
|
connected_channels = 0
|
127
125
|
channels_users = {}
|
128
126
|
active_channels = {}
|
127
|
+
users_count = 0
|
129
128
|
for channel in channels:
|
130
129
|
if channel['is_member']:
|
131
130
|
active_channels[channel['id']] = channel['name']
|
132
131
|
connected_channels += 1
|
133
132
|
num_members = channel.get('num_members', 0)
|
134
133
|
channels_users[channel['id']] = num_members
|
134
|
+
users_count += num_members
|
135
135
|
|
136
136
|
bot.active_channels = active_channels
|
137
|
+
bot.messages_received = received_messages.get(bot.source.source_id, 0)
|
138
|
+
bot.messages_filtered = filtered_messages.get(bot.source.source_id, 0)
|
137
139
|
bot.connected_channels = connected_channels
|
138
140
|
bot.channels = len(channels)
|
139
141
|
bot.channels_users = channels_users
|
140
142
|
if bot.recent_messages is None:
|
141
143
|
bot.recent_messages = []
|
142
|
-
max_users_count = 0
|
143
144
|
if bot.servers:
|
144
145
|
channels = [Channel.from_dic(channel_dict) for channel_dict in channels]
|
145
146
|
for channel in channels:
|
@@ -149,12 +150,8 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
|
|
149
150
|
channel.subscribers = channels_users.get(slack_channel.id, 0)
|
150
151
|
else:
|
151
152
|
channel.active = channel.is_member
|
152
|
-
if channel.subscribers > max_users_count:
|
153
|
-
max_users_count = channel.subscribers
|
154
153
|
bot.servers[0].channels = channels
|
155
|
-
bot.servers[0].subscribers =
|
156
|
-
bot.servers[0].messages_received = received_messages.get(bot.source.source_id, 0)
|
157
|
-
bot.servers[0].messages_filtered = filtered_messages.get(bot.source.source_id, 0)
|
154
|
+
bot.servers[0].subscribers = users_count
|
158
155
|
|
159
156
|
# save only last 50 messages
|
160
157
|
bot.recent_messages = bot.recent_messages[-50:]
|
@@ -7,7 +7,7 @@ from lgt_jobs.lgt_data.enums import StatusConnection, SourceType
|
|
7
7
|
from lgt_jobs.lgt_data.model import UserWorkspace, SlackUser, DedicatedBotModel
|
8
8
|
from lgt_jobs.lgt_data.mongo_repository import UserMongoRepository, DedicatedBotRepository
|
9
9
|
from lgt_jobs.basejobs import BaseBackgroundJobData, BaseBackgroundJob
|
10
|
-
from
|
10
|
+
from .bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
|
11
11
|
from lgt_jobs.runner import BackgroundJobRunner
|
12
12
|
import logging as log
|
13
13
|
from pydantic import BaseModel
|
@@ -29,8 +29,7 @@ class DiscordClient:
|
|
29
29
|
return {}
|
30
30
|
|
31
31
|
def get_servers(self) -> list | dict:
|
32
|
-
response = requests.get(f"{self.base_url}{DiscordMethods.USER_GUILDS.value}
|
33
|
-
headers=self.headers)
|
32
|
+
response = requests.get(f"{self.base_url}{DiscordMethods.USER_GUILDS.value}", headers=self.headers)
|
34
33
|
return self.__response(response).json()
|
35
34
|
|
36
35
|
def get_dms(self) -> list | dict:
|
@@ -44,8 +43,7 @@ class DiscordClient:
|
|
44
43
|
return response.json()
|
45
44
|
|
46
45
|
def get_channels(self, guild_id: str) -> list | dict:
|
47
|
-
response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}
|
48
|
-
headers=self.headers)
|
46
|
+
response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}", headers=self.headers)
|
49
47
|
return self.__response(response).json()
|
50
48
|
|
51
49
|
def get_invite_link(self, channel_id: str) -> Response:
|
lgt_jobs/lgt_data/analytics.py
CHANGED
@@ -8,7 +8,7 @@ from lgt_jobs.lgt_data.mongo_repository import to_object_id
|
|
8
8
|
from pymongo import MongoClient
|
9
9
|
|
10
10
|
client = MongoClient(os.environ.get('MONGO_CONNECTION_STRING', 'mongodb://127.0.0.1:27017/'))
|
11
|
-
db = client.
|
11
|
+
db = client.lgt_admin
|
12
12
|
|
13
13
|
|
14
14
|
def _build_date_aggregated_analytics_pipeline(source_id=None, email=None, started_at: datetime = None,
|
@@ -540,12 +540,12 @@ def get_bots_aggregated_analytics(from_date: datetime = None,
|
|
540
540
|
if bot_ids is not None:
|
541
541
|
pipeline.insert(0, {"$match": {"extra_ids": {"$in": bot_ids}}})
|
542
542
|
|
543
|
-
received_messages = list(db
|
543
|
+
received_messages = list(db[f'received_messages'].aggregate(pipeline))
|
544
544
|
|
545
545
|
if configs is not None:
|
546
546
|
pipeline.insert(0, {"$match": {"attributes": {"$in": configs}}})
|
547
547
|
|
548
|
-
filtered_messages = list(db
|
548
|
+
filtered_messages = list(db[f'filtered_messages'].aggregate(pipeline))
|
549
549
|
received_messages_dic = OrderedDict()
|
550
550
|
filtered_messages_dic = OrderedDict()
|
551
551
|
|
lgt_jobs/lgt_data/model.py
CHANGED
@@ -102,6 +102,8 @@ class BaseBotModel(Credentials):
|
|
102
102
|
self.connected_channels = None
|
103
103
|
self.channels_users = None
|
104
104
|
self.users_count = None
|
105
|
+
self.messages_received: int = 0
|
106
|
+
self.messages_filtered: int = 0
|
105
107
|
self.recent_messages: List[str] = []
|
106
108
|
self.icon = None
|
107
109
|
self.active_channels = {}
|
@@ -160,9 +162,6 @@ class Server:
|
|
160
162
|
self.active = False
|
161
163
|
self.deleted = False
|
162
164
|
self.subscribers = 0
|
163
|
-
self.approximate_member_count = 0
|
164
|
-
self.messages_received: int = 0
|
165
|
-
self.messages_filtered: int = 0
|
166
165
|
|
167
166
|
@classmethod
|
168
167
|
def from_dic(cls, dic: dict):
|
@@ -175,7 +174,6 @@ class Server:
|
|
175
174
|
setattr(model, k, v)
|
176
175
|
|
177
176
|
model.channels = [Channel.from_dic(channel) for channel in dic.get("channels", [])]
|
178
|
-
model.subscribers = dic.get('approximate_member_count')
|
179
177
|
return model
|
180
178
|
|
181
179
|
def to_dic(self):
|
@@ -328,11 +326,11 @@ class UserModel(BaseModel):
|
|
328
326
|
def subscription_expired(self):
|
329
327
|
return self.subscription_expired_at.replace(tzinfo=UTC) < datetime.now(UTC)
|
330
328
|
|
331
|
-
def get_slack_user(self, slack_email: str)
|
332
|
-
return next(filter(lambda x: slack_email == x.email, self.slack_users), None)
|
329
|
+
def get_slack_user(self, slack_email: str):
|
330
|
+
return next(filter(lambda x: slack_email == x.email and not x.deleted, self.slack_users), None)
|
333
331
|
|
334
|
-
def get_discord_user(self, login: str)
|
335
|
-
return next(filter(lambda x: login == x.login, self.discord_users), None)
|
332
|
+
def get_discord_user(self, login: str):
|
333
|
+
return next(filter(lambda x: login == x.login and not x.deleted, self.discord_users), None)
|
336
334
|
|
337
335
|
|
338
336
|
class DiscordUser(DictionaryModel):
|
lgt_jobs/smtp.py
CHANGED
@@ -2,7 +2,7 @@ from abc import ABC
|
|
2
2
|
from pydantic import BaseModel
|
3
3
|
import logging as log
|
4
4
|
from lgt_jobs.basejobs import BaseBackgroundJobData, BaseBackgroundJob
|
5
|
-
from lgt_jobs.env import smtp_login, smtp_password
|
5
|
+
from lgt_jobs.env import smtp_login, smtp_password
|
6
6
|
from lgt_jobs.lgt_data.enums import ImageName
|
7
7
|
|
8
8
|
"""
|
@@ -14,7 +14,7 @@ class SendMailJobData(BaseBackgroundJobData, BaseModel):
|
|
14
14
|
html: str
|
15
15
|
subject: str
|
16
16
|
recipient: str
|
17
|
-
sender: str = "noreply@leadguru.
|
17
|
+
sender: str = "noreply@leadguru.io"
|
18
18
|
images: list[ImageName] = []
|
19
19
|
|
20
20
|
|
@@ -24,13 +24,14 @@ class SendMailJob(BaseBackgroundJob, ABC):
|
|
24
24
|
return SendMailJobData
|
25
25
|
|
26
26
|
def exec(self, data: SendMailJobData):
|
27
|
-
from redmail import
|
28
|
-
|
27
|
+
from redmail import gmail
|
28
|
+
gmail.username = smtp_login
|
29
|
+
gmail.password = smtp_password
|
29
30
|
body_image = {}
|
30
31
|
for image in data.images:
|
31
32
|
body_image[f'IMAGE_{ImageName(image.value).name}'] = f'lgt_jobs/assets/images/{image.value}'
|
32
33
|
|
33
|
-
|
34
|
+
gmail.send(
|
34
35
|
sender=f"Leadguru <{data.sender}>",
|
35
36
|
receivers=[data.recipient],
|
36
37
|
subject=data.subject,
|
File without changes
|
File without changes
|