leadguru-jobs 0.560.0__tar.gz → 0.562.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.
Files changed (61) hide show
  1. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/PKG-INFO +1 -1
  2. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/PKG-INFO +1 -1
  3. leadguru_jobs-0.562.0/lgt_jobs/jobs/connect_sources.py +90 -0
  4. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/slack_client/slack_client.py +4 -3
  5. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/enums.py +1 -0
  6. leadguru_jobs-0.560.0/lgt_jobs/jobs/connect_sources.py +0 -82
  7. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/MANIFEST.in +0 -0
  8. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/README.md +0 -0
  9. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/SOURCES.txt +0 -0
  10. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/dependency_links.txt +0 -0
  11. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/not-zip-safe +0 -0
  12. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/requires.txt +0 -0
  13. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/leadguru_jobs.egg-info/top_level.txt +0 -0
  14. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/__init__.py +0 -0
  15. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/assets/images/arrow.png +0 -0
  16. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/assets/images/firework.png +0 -0
  17. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/assets/images/lock.png +0 -0
  18. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/assets/images/logo.png +0 -0
  19. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/assets/images/mail.png +0 -0
  20. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/basejobs.py +0 -0
  21. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/env.py +0 -0
  22. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/__init__.py +0 -0
  23. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/analytics.py +0 -0
  24. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/bot_stats_update.py +0 -0
  25. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/chat_history.py +0 -0
  26. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/inbox_leads.py +0 -0
  27. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/mass_message.py +0 -0
  28. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/send_code.py +0 -0
  29. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/send_slack_message.py +0 -0
  30. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/update_slack_profile.py +0 -0
  31. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/user_balance_update.py +0 -0
  32. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/jobs/workspace_connect.py +0 -0
  33. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/__init__.py +0 -0
  34. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/discord_client/__init__.py +0 -0
  35. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/discord_client/discord_client.py +0 -0
  36. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/discord_client/methods.py +0 -0
  37. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/enums/__init__.py +0 -0
  38. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/enums/slack_errors.py +0 -0
  39. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/helpers.py +0 -0
  40. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/lgt_logging.py +0 -0
  41. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/pubsub/__init__.py +0 -0
  42. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/pubsub/messages.py +0 -0
  43. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/pubsub/pubsubfactory.py +0 -0
  44. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/slack_client/__init__.py +0 -0
  45. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/slack_client/methods.py +0 -0
  46. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_common/slack_client/web_client.py +0 -0
  47. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/__init__.py +0 -0
  48. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/analytics.py +0 -0
  49. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/engine.py +0 -0
  50. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/helpers.py +0 -0
  51. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/model.py +0 -0
  52. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/lgt_data/mongo_repository.py +0 -0
  53. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/main.py +0 -0
  54. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/runner.py +0 -0
  55. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/services/__init__.py +0 -0
  56. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/services/web_client.py +0 -0
  57. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/simple_job.py +0 -0
  58. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/smtp.py +0 -0
  59. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/lgt_jobs/templates/new_message.html +0 -0
  60. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/setup.cfg +0 -0
  61. {leadguru_jobs-0.560.0 → leadguru_jobs-0.562.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: leadguru_jobs
3
- Version: 0.560.0
3
+ Version: 0.562.0
4
4
  Summary: LGT jobs builds
5
5
  Author-email: developer@leadguru.co
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: leadguru_jobs
3
- Version: 0.560.0
3
+ Version: 0.562.0
4
4
  Summary: LGT jobs builds
5
5
  Author-email: developer@leadguru.co
6
6
  Classifier: Development Status :: 5 - Production/Stable
@@ -0,0 +1,90 @@
1
+ from abc import ABC
2
+ from typing import List
3
+ import logging as log
4
+ from lgt_jobs.basejobs import BaseBackgroundJob, BaseBackgroundJobData
5
+ from lgt_jobs.jobs.bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
6
+ from lgt_jobs.runner import BackgroundJobRunner
7
+ from lgt_jobs.lgt_data.engine import UserTrackAction
8
+ from lgt_jobs.lgt_data.enums import SourceType, UserAction, StatusConnection
9
+ from lgt_jobs.lgt_data.model import BaseModel, DedicatedBotModel, Server, Source, SlackUser
10
+ from lgt_jobs.lgt_data.mongo_repository import DedicatedBotRepository, UserMongoRepository
11
+
12
+
13
+ class ConnectSourceJobData(BaseBackgroundJobData, BaseModel):
14
+ slack_email: str
15
+ sources_ids: List[str]
16
+ action_user_email: str
17
+ user_email: str
18
+
19
+
20
+ class ConnectSourceJob(BaseBackgroundJob, ABC):
21
+ @property
22
+ def job_data_type(self) -> type:
23
+ return ConnectSourceJobData
24
+
25
+ def exec(self, data: ConnectSourceJobData):
26
+ users_repository = UserMongoRepository()
27
+ bots_repository = DedicatedBotRepository()
28
+ action_user = users_repository.get_by_email(data.action_user_email)
29
+ user = users_repository.get_by_email(data.user_email)
30
+ if not action_user:
31
+ log.info(f'[ConnectSourceJobData]: Unable to find user with email: {data.action_user_email}')
32
+ return
33
+
34
+ slack_user: SlackUser = action_user.get_slack_user(data.slack_email)
35
+ if not slack_user:
36
+ log.info(f"[ConnectSourceJobData]: You have no credentials for {data.slack_email}. Try to login to Slack.")
37
+ slack_user.status = StatusConnection.COMPLETE
38
+ users_repository.set(action_user.id, slack_users=[user.to_dic() for user in action_user.slack_users])
39
+ return
40
+ bots = []
41
+ for ws in slack_user.workspaces:
42
+ try:
43
+ if ws.id in data.sources_ids:
44
+ active_bot = bots_repository.get_one(user_id=action_user.id, active_server_id=ws.id)
45
+ bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, include_deleted=True,
46
+ user_name=data.slack_email)
47
+ if active_bot:
48
+ continue
49
+ if not bot:
50
+ bot = DedicatedBotModel()
51
+ bot.servers = [Server()]
52
+
53
+ bot.user_name = slack_user.email
54
+ bot.slack_url = ws.url
55
+ bot.user_id = action_user.id
56
+ bot.created_by = user.email
57
+ bot.registration_link = ws.url
58
+ bot.token = ws.token
59
+ bot.cookies = slack_user.cookies
60
+ bot.deleted = False
61
+ bot.paused = False
62
+ bot.invalid_creds = False
63
+ bot.banned = False
64
+ bot.two_factor_required = ws.two_factor_required
65
+ source = Source()
66
+
67
+ for server in bot.servers:
68
+ server.id = ws.id
69
+ server.name = ws.domain
70
+ server.deleted = False
71
+ server.active = True
72
+ server.icon = ws.icon
73
+
74
+ source.source_id = ws.id
75
+ source.source_name = ws.domain
76
+ bot.type = source.source_type = SourceType.SLACK
77
+ bot.icon = ws.icon
78
+ bot.source = source
79
+ bots_repository.add_or_update(bot)
80
+ UserTrackAction.track(action_user.id, UserAction.START_SOURCE, ws.id)
81
+ bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, user_name=slack_user.email)
82
+ bots.append(bot)
83
+ BackgroundJobRunner.submit(BotStatsUpdateJob, BotStatsUpdateJobData(bot_id=str(bot.id)))
84
+ except Exception:
85
+ import traceback
86
+ log.exception(f"[ConnectSourceJobData]: Error to connect {ws.id}")
87
+ traceback.print_exc()
88
+ slack_user.status = StatusConnection.COMPLETE
89
+ users_repository.set(action_user.id, slack_users=[user.to_dic() for user in action_user.slack_users])
90
+ return bots
@@ -54,13 +54,14 @@ class SlackClient:
54
54
 
55
55
  def users_list(self, cursor=None, limit: int = 1000):
56
56
  url = f'{self.base_url}{SlackMethods.users_list}'
57
+ payload = {}
57
58
  if cursor:
58
- url += f'&cursor={cursor}'
59
+ payload['cursor'] = cursor
59
60
 
60
61
  if limit:
61
- url += f'&limit={limit}'
62
+ payload['limit'] = limit
62
63
 
63
- return requests.get(url=url, cookies=self.cookies, headers=self.headers).json()
64
+ return requests.get(url=url, cookies=self.cookies, headers=self.headers, params=payload).json()
64
65
 
65
66
  def upload_file(self, file, file_name):
66
67
  payload = {"content": file, "filename": file_name}
@@ -43,6 +43,7 @@ class UserAction(str, Enum):
43
43
 
44
44
 
45
45
  class StatusConnection(str, Enum):
46
+ SOURCES_IN_PROGRESS = 'Sources in progress',
46
47
  IN_PROGRESS = 'In progress',
47
48
  COMPLETE = 'Complete',
48
49
  FAILED = 'Failed'
@@ -1,82 +0,0 @@
1
- from abc import ABC
2
- from typing import List
3
- import logging as log
4
- from lgt_jobs.basejobs import BaseBackgroundJob, BaseBackgroundJobData
5
- from lgt_jobs.jobs.bot_stats_update import BotStatsUpdateJob, BotStatsUpdateJobData
6
- from lgt_jobs.runner import BackgroundJobRunner
7
- from lgt_jobs.lgt_data.engine import UserTrackAction
8
- from lgt_jobs.lgt_data.enums import SourceType, UserAction, StatusConnection
9
- from lgt_jobs.lgt_data.model import BaseModel, DedicatedBotModel, Server, Source, SlackUser
10
- from lgt_jobs.lgt_data.mongo_repository import DedicatedBotRepository, UserMongoRepository
11
-
12
-
13
- class ConnectSourceJobData(BaseBackgroundJobData, BaseModel):
14
- slack_email: str
15
- sources_ids: List[str]
16
- action_user_email: str
17
- user_email: str
18
-
19
-
20
- class ConnectSourceJob(BaseBackgroundJob, ABC):
21
- @property
22
- def job_data_type(self) -> type:
23
- return ConnectSourceJobData
24
-
25
- def exec(self, data: ConnectSourceJobData):
26
- users_repository = UserMongoRepository()
27
- bots_repository = DedicatedBotRepository()
28
- action_user = users_repository.get_by_email(data.action_user_email)
29
- user = users_repository.get_by_email(data.user_email)
30
- if not action_user:
31
- log.info(f'Unable to find user with email: {data.action_user_email}')
32
- return
33
-
34
- slack_user: SlackUser = action_user.get_slack_user(data.slack_email)
35
- if not slack_user:
36
- log.info(f"You have no credentials for {data.slack_email}. Try to login to Slack.")
37
- bots = []
38
- for ws in slack_user.workspaces:
39
- if ws.id in data.sources_ids:
40
- active_bot = bots_repository.get_one(user_id=action_user.id, active_server_id=ws.id)
41
- bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, include_deleted=True,
42
- user_name=data.slack_email)
43
- if active_bot:
44
- continue
45
- if not bot:
46
- bot = DedicatedBotModel()
47
- bot.servers = [Server()]
48
-
49
- bot.user_name = slack_user.email
50
- bot.slack_url = ws.url
51
- bot.user_id = action_user.id
52
- bot.created_by = user.email
53
- bot.registration_link = ws.url
54
- bot.token = ws.token
55
- bot.cookies = slack_user.cookies
56
- bot.deleted = False
57
- bot.paused = False
58
- bot.invalid_creds = False
59
- bot.banned = False
60
- bot.two_factor_required = ws.two_factor_required
61
- source = Source()
62
-
63
- for server in bot.servers:
64
- server.id = ws.id
65
- server.name = ws.domain
66
- server.deleted = False
67
- server.active = True
68
- server.icon = ws.icon
69
-
70
- source.source_id = ws.id
71
- source.source_name = ws.domain
72
- bot.type = source.source_type = SourceType.SLACK
73
- bot.icon = ws.icon
74
- bot.source = source
75
- bots_repository.add_or_update(bot)
76
- UserTrackAction.track(action_user.id, UserAction.START_SOURCE, ws.id)
77
- bot = bots_repository.get_one(user_id=action_user.id, server_id=ws.id, user_name=slack_user.email)
78
- bots.append(bot)
79
- BackgroundJobRunner.submit(BotStatsUpdateJob, BotStatsUpdateJobData(bot_id=str(bot.id)))
80
- slack_user.status = StatusConnection.COMPLETE
81
- users_repository.set(action_user.id, slack_users=[user.to_dic() for user in action_user.slack_users])
82
- return bots