leadguru-jobs 0.586.0__py3-none-any.whl → 0.587.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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: leadguru_jobs
3
- Version: 0.586.0
3
+ Version: 0.587.0
4
4
  Summary: LGT jobs builds
5
5
  Author-email: developer@leadguru.co
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -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=R6mf5FxhWbyx92AYXlj0FZVjz2Tgz86mBvLHrsQ9AFE,7502
15
+ lgt_jobs/jobs/bot_stats_update.py,sha256=yDA6-FqSC5T2jTPaHImSjnuI6OD0pw-BF9VagsfmkXM,7806
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=qgjIRzAQRbJBx--eYsTtYgOUh2-p3N_-LIltfbJrYYo,7102
25
+ lgt_jobs/jobs/workspace_connect.py,sha256=LSZkkuPuHTqxvaTgqz_Y_kGIkF3Mmn_xwKf2h0uDWVg,7115
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=tvRn0P039Dp5d22-DivQhP2uQMC7ixZc7oe7IA4WrPE,2442
30
+ lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=_zX7yfDi6ShNuA3zhuDvf9TZacJwGPX0Tcu1OIAmj_U,2540
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=TFUffL8Dn-vIJ3ZaCVN-cj1Qnjb8F9GJyuk6Fo7mR1s,21645
42
+ lgt_jobs/lgt_data/analytics.py,sha256=fiN88zcIxs_bRMmXL7ftp4FvBeJ5I7QBPE4tbwKJ39E,21689
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=QAWnCPHEoNdXaPPCgMi_tHLx11zj0xcGUUUg2CDS3DQ,28554
46
+ lgt_jobs/lgt_data/model.py,sha256=G_x0C7mR__OtM_ps2X5_Rg7iK1ijh4iCYbavsLxdaqA,28652
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.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,,
51
+ leadguru_jobs-0.587.0.dist-info/METADATA,sha256=MPIxEW1Inlsqy1YT-kHPIcOxgL2oFYvbtFWYLyYkMHA,1319
52
+ leadguru_jobs-0.587.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
53
+ leadguru_jobs-0.587.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
54
+ leadguru_jobs-0.587.0.dist-info/RECORD,,
@@ -32,6 +32,7 @@ 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)])
35
36
 
36
37
  if bot.source.source_type == SourceType.DISCORD:
37
38
  client = DiscordClient(bot.token)
@@ -71,6 +72,8 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
71
72
  if discord_server.icon:
72
73
  discord_server.icon = (f'https://cdn.discordapp.com/icons/{discord_server.id}/'
73
74
  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)
74
77
  time.sleep(random.randint(1, 2))
75
78
 
76
79
  bot.servers = discord_servers
@@ -107,7 +110,6 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
107
110
  bot.source.source_name = bot_name
108
111
  bot.slack_url = bot.registration_link = team_info['team']['url']
109
112
  bots_rep.add_or_update(bot)
110
- received_messages, filtered_messages = get_bots_aggregated_analytics(bot_ids=[bot.id])
111
113
  try:
112
114
  channels_response = client.channels_list()
113
115
  except:
@@ -124,23 +126,20 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
124
126
  connected_channels = 0
125
127
  channels_users = {}
126
128
  active_channels = {}
127
- users_count = 0
128
129
  for channel in channels:
129
130
  if channel['is_member']:
130
131
  active_channels[channel['id']] = channel['name']
131
132
  connected_channels += 1
132
133
  num_members = channel.get('num_members', 0)
133
134
  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)
139
137
  bot.connected_channels = connected_channels
140
138
  bot.channels = len(channels)
141
139
  bot.channels_users = channels_users
142
140
  if bot.recent_messages is None:
143
141
  bot.recent_messages = []
142
+ max_users_count = 0
144
143
  if bot.servers:
145
144
  channels = [Channel.from_dic(channel_dict) for channel_dict in channels]
146
145
  for channel in channels:
@@ -150,8 +149,12 @@ class BotStatsUpdateJob(BaseBackgroundJob, ABC):
150
149
  channel.subscribers = channels_users.get(slack_channel.id, 0)
151
150
  else:
152
151
  channel.active = channel.is_member
152
+ if channel.subscribers > max_users_count:
153
+ max_users_count = channel.subscribers
153
154
  bot.servers[0].channels = channels
154
- bot.servers[0].subscribers = users_count
155
+ bot.servers[0].subscribers = max_users_count
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)
155
158
 
156
159
  # save only last 50 messages
157
160
  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 .bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
10
+ from lgt_jobs.jobs.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,7 +29,8 @@ 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}", headers=self.headers)
32
+ response = requests.get(f"{self.base_url}{DiscordMethods.USER_GUILDS.value}?with_counts=true",
33
+ headers=self.headers)
33
34
  return self.__response(response).json()
34
35
 
35
36
  def get_dms(self) -> list | dict:
@@ -43,7 +44,8 @@ class DiscordClient:
43
44
  return response.json()
44
45
 
45
46
  def get_channels(self, guild_id: str) -> list | dict:
46
- response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}", headers=self.headers)
47
+ response = requests.get(f"{self.base_url}{DiscordMethods.guild_channels(guild_id)}?with_counts=true",
48
+ headers=self.headers)
47
49
  return self.__response(response).json()
48
50
 
49
51
  def get_invite_link(self, channel_id: str) -> Response:
@@ -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.lgt_admin
11
+ db = client.get_database('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[f'received_messages'].aggregate(pipeline))
543
+ received_messages = list(db.get_collection('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[f'filtered_messages'].aggregate(pipeline))
548
+ filtered_messages = list(db.get_collection('filtered_messages').aggregate(pipeline))
549
549
  received_messages_dic = OrderedDict()
550
550
  filtered_messages_dic = OrderedDict()
551
551
 
@@ -102,8 +102,6 @@ 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
107
105
  self.recent_messages: List[str] = []
108
106
  self.icon = None
109
107
  self.active_channels = {}
@@ -162,6 +160,9 @@ class Server:
162
160
  self.active = False
163
161
  self.deleted = False
164
162
  self.subscribers = 0
163
+ self.approximate_member_count = 0
164
+ self.messages_received: int = 0
165
+ self.messages_filtered: int = 0
165
166
 
166
167
  @classmethod
167
168
  def from_dic(cls, dic: dict):
@@ -174,6 +175,7 @@ class Server:
174
175
  setattr(model, k, v)
175
176
 
176
177
  model.channels = [Channel.from_dic(channel) for channel in dic.get("channels", [])]
178
+ model.subscribers = dic.get('approximate_member_count')
177
179
  return model
178
180
 
179
181
  def to_dic(self):
@@ -326,11 +328,11 @@ class UserModel(BaseModel):
326
328
  def subscription_expired(self):
327
329
  return self.subscription_expired_at.replace(tzinfo=UTC) < datetime.now(UTC)
328
330
 
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)
331
+ def get_slack_user(self, slack_email: str) -> SlackUser:
332
+ return next(filter(lambda x: slack_email == x.email, self.slack_users), None)
331
333
 
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)
334
+ def get_discord_user(self, login: str) -> DiscordUser:
335
+ return next(filter(lambda x: login == x.login, self.discord_users), None)
334
336
 
335
337
 
336
338
  class DiscordUser(DictionaryModel):