leadguru-jobs 0.552.0__py3-none-any.whl → 0.554.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.552.0
3
+ Version: 0.554.0
4
4
  Summary: LGT jobs builds
5
5
  Author-email: developer@leadguru.co
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -1,4 +1,4 @@
1
- lgt_jobs/__init__.py,sha256=lrhMUJ7a5YSkYswQkQe981b_w8h8NHyncwfEduXEq6Q,1992
1
+ lgt_jobs/__init__.py,sha256=kmM5J3qBJd-fOZa2I4gkh36IytrgN6_18gWwwpR3n6Y,2156
2
2
  lgt_jobs/basejobs.py,sha256=LPEclvY6fIG17YMGy9pRK0Q58n62gkI5W1BTK6R2p-c,1234
3
3
  lgt_jobs/env.py,sha256=cRO03GGvstUjBsv3uYO-iakrOvAk_ZWUP_fnmf21iZQ,789
4
4
  lgt_jobs/main.py,sha256=cK_nkBtJHnUNDbba1WZotqPtI_6OWxiYQkAgco9OAmE,1539
@@ -14,6 +14,7 @@ lgt_jobs/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  lgt_jobs/jobs/analytics.py,sha256=IIsWt4A1qUw3w-S-8W16uKY1FRVWfXXA41_mu4uCNiM,979
15
15
  lgt_jobs/jobs/bot_stats_update.py,sha256=R6mf5FxhWbyx92AYXlj0FZVjz2Tgz86mBvLHrsQ9AFE,7502
16
16
  lgt_jobs/jobs/chat_history.py,sha256=QZdSWlk_DrDJt5yrNApYHiUEWQMYcKyuXaP_PlzkjYw,6303
17
+ lgt_jobs/jobs/connect_sources.py,sha256=2tl1MGdm6l0yFwCXlD0J2tFSQpj7i1eT9sYd1nMOwWA,3596
17
18
  lgt_jobs/jobs/inbox_leads.py,sha256=EYxdQPseNBY5ON7BK3LpnXDCgQpzHTPLRJCZmZiAAHA,5582
18
19
  lgt_jobs/jobs/mass_message.py,sha256=1mFcBlL2MhzLbj5yrd_NyJc7TXDWCcROAzGDnr0miMU,2035
19
20
  lgt_jobs/jobs/send_code.py,sha256=dIlLPkG3GgGKIEqGiElyzrtdrnJNTL1Ak2V0xnE-WIQ,824
@@ -41,12 +42,12 @@ lgt_jobs/lgt_data/analytics.py,sha256=TFUffL8Dn-vIJ3ZaCVN-cj1Qnjb8F9GJyuk6Fo7mR1
41
42
  lgt_jobs/lgt_data/engine.py,sha256=Rsbz-CApAo_TVDssdjBkv8v_fVOZm_Uh1S6W4fnaEWo,7728
42
43
  lgt_jobs/lgt_data/enums.py,sha256=GZn6wm-kOd3veEOo1qlOR8QYje4vKaGV0na9jGt9388,2160
43
44
  lgt_jobs/lgt_data/helpers.py,sha256=NDa-V5EYaJfkGoWsmQSwSe6N_jxNxs8tHRQzW1iST6k,480
44
- lgt_jobs/lgt_data/model.py,sha256=DDfoWeH6rLWKoZsFJ2tI5Yagj1WlOa0PIJp-GqBIVSA,28112
45
+ lgt_jobs/lgt_data/model.py,sha256=HZenmwr_fmxVw0XhUlgHZJOaSK_Ouv9mBcY6DfC61oU,28098
45
46
  lgt_jobs/lgt_data/mongo_repository.py,sha256=qqbt-oJ-RHmICLARgWvHuyPwVeKFkUqJZ2MA1bfIlXs,44762
46
47
  lgt_jobs/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
48
  lgt_jobs/services/web_client.py,sha256=GLWsJkIC8rv6xLFaLwcMm4EwBlVDu0njORwkZqBJaE4,2086
48
49
  lgt_jobs/templates/new_message.html,sha256=BD_E90akmQ1Wf07wtZAjeK_7DUKRmja5HFHVo_AKI24,6994
49
- leadguru_jobs-0.552.0.dist-info/METADATA,sha256=d2G2A5FPYUDcindqpyi2XhBWploffLPalXpgVTXGYug,1319
50
- leadguru_jobs-0.552.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
51
- leadguru_jobs-0.552.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
52
- leadguru_jobs-0.552.0.dist-info/RECORD,,
50
+ leadguru_jobs-0.554.0.dist-info/METADATA,sha256=Rney8pzxyO6HwI3AvxAeekzMpaaXotwznfx8IgZ3fmM,1319
51
+ leadguru_jobs-0.554.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
52
+ leadguru_jobs-0.554.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
53
+ leadguru_jobs-0.554.0.dist-info/RECORD,,
lgt_jobs/__init__.py CHANGED
@@ -3,6 +3,7 @@ name = "lgt_jobs"
3
3
  from .jobs.user_balance_update import UpdateUserBalanceJob, UpdateUserBalanceJobData
4
4
  from .jobs.send_slack_message import SendSlackMessageJob, SendSlackMessageJobData
5
5
  from .jobs.analytics import (TrackAnalyticsJob, TrackAnalyticsJobData)
6
+ from .jobs.connect_sources import (ConnectSourceJobData, ConnectSourceJob)
6
7
  from .jobs.bot_stats_update import (BotStatsUpdateJob, BotStatsUpdateJobData)
7
8
  from .jobs.chat_history import (LoadChatHistoryJob, LoadChatHistoryJobData)
8
9
  from .jobs.update_slack_profile import (UpdateExternalUserProfileJob, UpdateExternalUserProfileJobData)
@@ -22,6 +23,7 @@ jobs_map = {
22
23
  "SendSlackMessageJob": SendSlackMessageJob,
23
24
  "UpdateUserBalanceJob": UpdateUserBalanceJob,
24
25
  "SendMassMessageSlackChannelJob": SendMassMessageSlackChannelJob,
26
+ "ConnectSourceJob": ConnectSourceJob
25
27
  }
26
28
  __all__ = [
27
29
  # Jobs
@@ -35,6 +37,7 @@ __all__ = [
35
37
  SendSlackMessageJob,
36
38
  UpdateUserBalanceJob,
37
39
  SendMassMessageSlackChannelJob,
40
+ ConnectSourceJob,
38
41
 
39
42
  # module classes
40
43
  BackgroundJobRunner,
@@ -50,6 +53,7 @@ __all__ = [
50
53
  SendSlackMessageJobData,
51
54
  UpdateUserBalanceJobData,
52
55
  SendMassMessageSlackChannelJobData,
56
+ ConnectSourceJobData,
53
57
  # mapping
54
58
  jobs_map
55
59
  ]
@@ -0,0 +1,81 @@
1
+ from abc import ABC
2
+ from typing import List
3
+ import logging as log
4
+ from lgt_jobs import BaseBackgroundJob, BaseBackgroundJobData, BackgroundJobRunner, BotStatsUpdateJob, \
5
+ BotStatsUpdateJobData
6
+ from lgt_jobs.lgt_data.engine import UserTrackAction
7
+ from lgt_jobs.lgt_data.enums import SourceType, UserAction, StatusConnection
8
+ from lgt_jobs.lgt_data.model import BaseModel, DedicatedBotModel, Server, Source, SlackUser
9
+ from lgt_jobs.lgt_data.mongo_repository import DedicatedBotRepository, UserMongoRepository
10
+
11
+
12
+ class ConnectSourceJobData(BaseBackgroundJobData, BaseModel):
13
+ slack_email: str
14
+ sources_ids: List[str]
15
+ action_user_email: str
16
+ user_email: str
17
+
18
+
19
+ class ConnectSourceJob(BaseBackgroundJob, ABC):
20
+ @property
21
+ def job_data_type(self) -> type:
22
+ return ConnectSourceJobData
23
+
24
+ def exec(self, data: ConnectSourceJobData):
25
+ users_repository = UserMongoRepository()
26
+ bots_repository = DedicatedBotRepository()
27
+ action_user = users_repository.get_by_email(data.action_user_email)
28
+ user = users_repository.get_by_email(data.user_email)
29
+ if not action_user:
30
+ log.info(f'Unable to find user with email: {data.action_user_email}')
31
+ return
32
+
33
+ slack_user: SlackUser = action_user.get_slack_user(data.slack_email)
34
+ if not slack_user:
35
+ log.info(f"You have no credentials for {data.slack_email}. Try to login to Slack.")
36
+ bots = []
37
+ for ws in slack_user.workspaces:
38
+ if ws.id in data.sources_ids:
39
+ active_bot = bots_repository.get_one(user_id=action_user.id, active_server_id=ws.id)
40
+ bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, include_deleted=True,
41
+ user_name=data.slack_email)
42
+ if active_bot:
43
+ continue
44
+ if not bot:
45
+ bot = DedicatedBotModel()
46
+ bot.servers = [Server()]
47
+
48
+ bot.user_name = slack_user.email
49
+ bot.slack_url = ws.url
50
+ bot.user_id = action_user.id
51
+ bot.created_by = user.email
52
+ bot.registration_link = ws.url
53
+ bot.token = ws.token
54
+ bot.cookies = slack_user.cookies
55
+ bot.deleted = False
56
+ bot.paused = False
57
+ bot.invalid_creds = False
58
+ bot.banned = False
59
+ bot.two_factor_required = ws.two_factor_required
60
+ source = Source()
61
+
62
+ for server in bot.servers:
63
+ server.id = ws.id
64
+ server.name = ws.domain
65
+ server.deleted = False
66
+ server.active = True
67
+ server.icon = ws.icon
68
+
69
+ source.source_id = ws.id
70
+ source.source_name = ws.domain
71
+ bot.type = source.source_type = SourceType.SLACK
72
+ bot.icon = ws.icon
73
+ bot.source = source
74
+ bots_repository.add_or_update(bot)
75
+ UserTrackAction.track(action_user.id, UserAction.START_SOURCE, ws.id)
76
+ bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, user_name=slack_user.email)
77
+ bots.append(bot)
78
+ BackgroundJobRunner.submit(BotStatsUpdateJob, BotStatsUpdateJobData(bot_id=str(bot.id)))
79
+ slack_user.status = StatusConnection.COMPLETE
80
+ users_repository.set(action_user.id, slack_users=[user.to_dic() for user in action_user.slack_users])
81
+ return bots
@@ -290,8 +290,8 @@ class UserModel(BaseModel):
290
290
  self.subscription_expired_at: datetime | None = None
291
291
  self.balance: str | None = None
292
292
  self.subscription_name: str | None = None
293
- self.subscription_expiration_notified = False
294
- self.subscription_expiration_warning_notified = False
293
+ self.trial_expiration_notified = False
294
+ self.trial_expiration_warning_notified = False
295
295
 
296
296
  @classmethod
297
297
  def from_dic(cls, dic: dict):