leadguru-jobs 0.639.0__py3-none-any.whl → 0.640.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.
Files changed (60) hide show
  1. {leadguru_jobs-0.639.0.dist-info → leadguru_jobs-0.640.0.dist-info}/METADATA +1 -1
  2. leadguru_jobs-0.640.0.dist-info/RECORD +109 -0
  3. lgt_jobs/lgt_data/models/boards/__init__.py +0 -0
  4. lgt_jobs/lgt_data/models/boards/board.py +39 -0
  5. lgt_jobs/lgt_data/models/boards/status.py +14 -0
  6. lgt_jobs/lgt_data/models/bots/__init__.py +0 -0
  7. lgt_jobs/lgt_data/models/bots/base_bot.py +44 -0
  8. lgt_jobs/lgt_data/models/bots/bot_info.py +33 -0
  9. lgt_jobs/lgt_data/models/bots/dedicated_bot.py +90 -0
  10. lgt_jobs/lgt_data/models/chat/__init__.py +0 -0
  11. lgt_jobs/lgt_data/models/chat/file.py +8 -0
  12. lgt_jobs/lgt_data/models/chat/grouped_messages.py +17 -0
  13. lgt_jobs/lgt_data/models/chat/message.py +85 -0
  14. lgt_jobs/lgt_data/models/chat/request.py +15 -0
  15. lgt_jobs/lgt_data/models/chat/scheduled_message.py +14 -0
  16. lgt_jobs/lgt_data/models/contacts/__init__.py +0 -0
  17. lgt_jobs/lgt_data/models/contacts/contact.py +22 -0
  18. lgt_jobs/lgt_data/models/external/__init__.py +0 -0
  19. lgt_jobs/lgt_data/models/external/cloud/__init__.py +0 -0
  20. lgt_jobs/lgt_data/models/external/cloud/file.py +18 -0
  21. lgt_jobs/lgt_data/models/external/discord/__init__.py +0 -0
  22. lgt_jobs/lgt_data/models/external/discord/user.py +45 -0
  23. lgt_jobs/lgt_data/models/external/slack/__init__.py +0 -0
  24. lgt_jobs/lgt_data/models/external/slack/timezone.py +8 -0
  25. lgt_jobs/lgt_data/models/external/slack/user.py +43 -0
  26. lgt_jobs/lgt_data/models/external/user_workspace.py +32 -0
  27. lgt_jobs/lgt_data/models/leads/__init__.py +0 -0
  28. lgt_jobs/lgt_data/models/leads/config.py +13 -0
  29. lgt_jobs/lgt_data/models/leads/extended_lead.py +46 -0
  30. lgt_jobs/lgt_data/models/leads/lead.py +48 -0
  31. lgt_jobs/lgt_data/models/leads/message.py +51 -0
  32. lgt_jobs/lgt_data/models/notifications/__init__.py +0 -0
  33. lgt_jobs/lgt_data/models/notifications/notification.py +248 -0
  34. lgt_jobs/lgt_data/models/notifications/notification_settings.py +52 -0
  35. lgt_jobs/lgt_data/models/people/__init__.py +0 -0
  36. lgt_jobs/lgt_data/models/people/people.py +75 -0
  37. lgt_jobs/lgt_data/models/people/profile.py +13 -0
  38. lgt_jobs/lgt_data/models/post/__init__.py +0 -0
  39. lgt_jobs/lgt_data/models/post/message.py +18 -0
  40. lgt_jobs/lgt_data/models/post/post.py +15 -0
  41. lgt_jobs/lgt_data/models/templates/__init__.py +0 -0
  42. lgt_jobs/lgt_data/models/templates/template.py +12 -0
  43. lgt_jobs/lgt_data/models/user/__init__.py +0 -0
  44. lgt_jobs/lgt_data/models/user/feature.py +10 -0
  45. lgt_jobs/lgt_data/models/user/general_settings.py +9 -0
  46. lgt_jobs/lgt_data/models/user/reset_password.py +7 -0
  47. lgt_jobs/lgt_data/models/user/subscription.py +22 -0
  48. lgt_jobs/lgt_data/models/user/user.py +95 -0
  49. lgt_jobs/lgt_data/models/user/user_follow_ups.py +20 -0
  50. lgt_jobs/lgt_data/models/user/user_page.py +19 -0
  51. lgt_jobs/lgt_data/models/user/verification.py +12 -0
  52. lgt_jobs/lgt_data/models/user_leads/__init__.py +0 -0
  53. lgt_jobs/lgt_data/models/user_leads/extended_user_lead.py +41 -0
  54. lgt_jobs/lgt_data/models/user_leads/user_lead.py +33 -0
  55. lgt_jobs/lgt_data/repositories/__init__.py +0 -0
  56. lgt_jobs/lgt_data/repositories/post/__init__.py +0 -0
  57. lgt_jobs/lgt_data/repositories/post/posts.py +28 -0
  58. leadguru_jobs-0.639.0.dist-info/RECORD +0 -54
  59. {leadguru_jobs-0.639.0.dist-info → leadguru_jobs-0.640.0.dist-info}/WHEEL +0 -0
  60. {leadguru_jobs-0.639.0.dist-info → leadguru_jobs-0.640.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,7 @@
1
+ from lgt_jobs.lgt_data.models.base import BaseModel
2
+
3
+
4
+ class UserResetPasswordModel(BaseModel):
5
+ def __init__(self):
6
+ super().__init__()
7
+ self.email = None
@@ -0,0 +1,22 @@
1
+ from datetime import datetime
2
+
3
+ from lgt_jobs.lgt_data.models.base import BaseModel
4
+ from lgt_jobs.lgt_data.models.user.feature import Feature
5
+
6
+
7
+ class Subscription(BaseModel):
8
+ features: list[Feature]
9
+ duration_days: int
10
+ name: str
11
+ price: int
12
+ limits: int
13
+ trial: bool
14
+ updated_at: datetime = None
15
+
16
+ @classmethod
17
+ def from_dic(cls, dic: dict):
18
+ if not dic:
19
+ return None
20
+ model: Subscription | None = super().from_dic(dic)
21
+ model.features = [Feature.from_dic(feature) for feature in dic.get('features', [])]
22
+ return model
@@ -0,0 +1,95 @@
1
+ import copy
2
+ from datetime import UTC, datetime
3
+ from typing import List, Optional
4
+
5
+ from bson import ObjectId
6
+
7
+ from lgt_jobs.lgt_data.enums import UserRole
8
+ from lgt_jobs.lgt_data.models.base import BaseModel
9
+ from lgt_jobs.lgt_data.models.external.discord.user import DiscordUser
10
+ from lgt_jobs.lgt_data.models.external.slack.user import SlackUser
11
+ from lgt_jobs.lgt_data.models.notifications.notification_settings import NotificationSettings
12
+ from lgt_jobs.lgt_data.models.people.profile import Profile
13
+ from lgt_jobs.lgt_data.models.user.general_settings import GeneralSettings
14
+
15
+
16
+ class UserModel(BaseModel):
17
+ def __init__(self):
18
+ super().__init__()
19
+ self.email: Optional[str] = None
20
+ self.password: Optional[str] = None
21
+ self.roles: List[str] = []
22
+ self.user_name: str = ''
23
+ self.company: str = ''
24
+ self.company_size: Optional[int] = None
25
+ self.company_industries: Optional[List[str]] = None
26
+ self.company_technologies: Optional[List[str]] = None
27
+ self.company_locations: Optional[List[str]] = None
28
+ self.company_web_site: str = ''
29
+ self.company_description: str = ''
30
+ self.position: str = ''
31
+ self.leads_limit: Optional[int] = None
32
+ self.leads_proceeded: Optional[int] = None
33
+ self.leads_filtered: Optional[int] = None
34
+ self.leads_limit_updated_at: Optional[int] = None
35
+ self.paid_lead_price: int = 1
36
+ self.state: int = 0
37
+ self.credits_exceeded_at: Optional[datetime] = None
38
+ self.unanswered_leads_period = None
39
+ self.inactive = None
40
+ self.slack_users: List[SlackUser] = []
41
+ self.discord_users: List[DiscordUser] = []
42
+ self.verified: bool = False
43
+ self.subscription_id: ObjectId | None = None
44
+ self.subscription_expired_at: datetime | None = None
45
+ self.balance: str | None = None
46
+ self.subscription_name: str | None = None
47
+ self.subscription_expiration_notified = False
48
+ self.subscription_expiration_warning_notified = False
49
+ self.notification_settings: NotificationSettings | None = None
50
+ self.general_settings: GeneralSettings | None = None
51
+
52
+ @classmethod
53
+ def from_dic(cls, dic: dict):
54
+ if not dic:
55
+ return None
56
+
57
+ model: UserModel = cls()
58
+ for k, v in dic.items():
59
+ setattr(model, k, v)
60
+
61
+ if '_id' in dic:
62
+ setattr(model, 'id', dic['_id'])
63
+
64
+ model.slack_profile = Profile.from_dic(dic.get('slack_profile'))
65
+ model.slack_users = [SlackUser.from_dic(user) for user in dic.get('slack_users', [])]
66
+ model.discord_users = [DiscordUser.from_dic(user) for user in dic.get('discord_users', [])]
67
+ model.notification_settings = NotificationSettings.from_dic(dic.get('notification_settings'))
68
+ model.general_settings = GeneralSettings.from_dic(dic.get('general_settings'))
69
+ return model
70
+
71
+ def to_dic(self):
72
+ result = copy.deepcopy(self.__dict__)
73
+
74
+ if result.get('slack_profile'):
75
+ result['slack_profile'] = result.get('slack_profile').__dict__
76
+ if result.get('notification_settings'):
77
+ result['notification_settings'] = NotificationSettings.to_dic(result.get('notification_settings'))
78
+ if result.get('general_settings'):
79
+ result['general_settings'] = GeneralSettings.to_dic(result.get('general_settings'))
80
+
81
+ return result
82
+
83
+ @property
84
+ def is_admin(self):
85
+ return UserRole.ADMIN in self.roles
86
+
87
+ @property
88
+ def subscription_expired(self):
89
+ return self.subscription_expired_at.replace(tzinfo=UTC) < datetime.now(UTC)
90
+
91
+ def get_slack_user(self, slack_email: str) -> SlackUser:
92
+ return next(filter(lambda x: slack_email == x.email, self.slack_users), None)
93
+
94
+ def get_discord_user(self, login: str) -> DiscordUser:
95
+ return next(filter(lambda x: login == x.login, self.discord_users), None)
@@ -0,0 +1,20 @@
1
+ from lgt_jobs.lgt_data.models.base import DictionaryModel
2
+ from lgt_jobs.lgt_data.models.leads.extended_lead import ExtendedLeadModel
3
+ from lgt_jobs.lgt_data.models.notifications.notification_settings import NotificationSettings
4
+
5
+
6
+ class UserFollowUps(DictionaryModel):
7
+ actual_follow_ups: list[ExtendedLeadModel] = []
8
+ overdue_follow_ups: list[ExtendedLeadModel] = []
9
+ email: str | None = None
10
+ notification_settings: NotificationSettings | None = None
11
+
12
+ @classmethod
13
+ def from_dic(cls, dic: dict):
14
+ if not dic:
15
+ return None
16
+ model: UserFollowUps | None = super().from_dic(dic)
17
+ model.actual_follow_ups = [ExtendedLeadModel.from_dic(lead) for lead in dic.get('actual_follow_ups', [])]
18
+ model.overdue_follow_ups = [ExtendedLeadModel.from_dic(lead) for lead in dic.get('overdue_follow_ups', [])]
19
+ model.notification_settings = NotificationSettings.from_dic(dic.get('notification_settings'))
20
+ return model
@@ -0,0 +1,19 @@
1
+ from typing import List
2
+
3
+ from lgt_jobs.lgt_data.models.user.user import UserModel
4
+
5
+
6
+ class UsersPage:
7
+ users: List[UserModel]
8
+ count: int = 0
9
+
10
+ def __init__(self, users: List[UserModel], count: int):
11
+ self.users = users
12
+ self.count = count
13
+
14
+ @staticmethod
15
+ def from_dic(dic: dict):
16
+ users = [UserModel.from_dic(doc) for doc in dic.get('page', [])]
17
+ count = dic.get('count', 0)
18
+ return UsersPage(users=users, count=count)
19
+
@@ -0,0 +1,12 @@
1
+ from datetime import datetime, UTC
2
+
3
+ from lgt_jobs.lgt_data.models.base import DictionaryModel
4
+
5
+
6
+ class UserVerificationModel(DictionaryModel):
7
+ pass
8
+
9
+ def __init__(self):
10
+ super().__init__()
11
+ self.email = None
12
+ self.created_at = datetime.now(UTC)
File without changes
@@ -0,0 +1,41 @@
1
+ from typing import List
2
+
3
+ from lgt_jobs.lgt_data.models.bots.bot_info import BotInfo
4
+ from lgt_jobs.lgt_data.models.leads.lead import LeadModel
5
+ from lgt_jobs.lgt_data.models.people.people import SlackMemberInformation
6
+ from lgt_jobs.lgt_data.models.user_leads.user_lead import UserLeadModel
7
+
8
+
9
+ class ExtendedUserLeadModel(UserLeadModel):
10
+ pass
11
+
12
+ def __init__(self):
13
+ super().__init__()
14
+ self.contact: SlackMemberInformation | None = None
15
+ self.previous_publications = []
16
+ self.bots: List[BotInfo] = []
17
+ self.user_email: str | None = None
18
+
19
+ @classmethod
20
+ def from_dic(cls, dic: dict):
21
+ if not dic:
22
+ return None
23
+
24
+ result: ExtendedUserLeadModel | None = super().from_dic(dic)
25
+ if not result:
26
+ return None
27
+
28
+ result.contact = SlackMemberInformation.from_dic(dic.get('contact'))
29
+ result.previous_publications = [LeadModel.from_dic(lead) for lead in dic.get('previous_publications', [])]
30
+ return result
31
+
32
+ def to_dic(self):
33
+ result = super().to_dic()
34
+ result["contact"] = self.contact.to_dic()
35
+ return result
36
+
37
+ def to_csv(self, board_name: str) -> List[str]:
38
+ return [self.message.source, self.contact.real_name, self.contact.title, self.contact.email,
39
+ self.notes, board_name, self.status,
40
+ self.followup_date.strftime("%d.%m.%Y %H:%M") if self.followup_date else "",
41
+ self.message.message.replace('\n', ' ').strip()]
@@ -0,0 +1,33 @@
1
+ from datetime import datetime, UTC
2
+
3
+ from bson import ObjectId
4
+
5
+ from lgt_jobs.lgt_data.models.leads.lead import LeadModel
6
+
7
+
8
+ class UserLeadModel(LeadModel):
9
+ pass
10
+
11
+ def __init__(self):
12
+ super().__init__()
13
+ self.order: int = 0
14
+ self.followup_date: datetime | None = None
15
+ self.user_id: ObjectId | None = None
16
+ self.chat_viewed_at: datetime | None = None
17
+ self.board_id: ObjectId | None = None
18
+
19
+ @classmethod
20
+ def from_dic(cls, dic: dict):
21
+ if not dic:
22
+ return None
23
+
24
+ result: UserLeadModel | None = super().from_dic(dic)
25
+ if not result:
26
+ return None
27
+
28
+ if result.followup_date:
29
+ result.followup_date.replace(tzinfo=UTC)
30
+
31
+ result.chat_viewed_at = dic.get('chat_viewed_at')
32
+ return result
33
+
File without changes
File without changes
@@ -0,0 +1,28 @@
1
+ from bson import ObjectId
2
+
3
+ from lgt_jobs.lgt_data.models.post.post import Post
4
+ from lgt_jobs.lgt_data.mongo_repository import BaseMongoRepository
5
+
6
+
7
+ class PostsRepository(BaseMongoRepository):
8
+ collection_name = 'posts'
9
+
10
+ def get_users_posts(self, ids: list[str]) -> dict[ObjectId, list[Post]]:
11
+ pipeline = [
12
+ {
13
+ '$lookup': {
14
+ 'from': 'posted_messages',
15
+ 'as': 'messages',
16
+ 'let': {'id': '$_id'},
17
+ 'pipeline': [
18
+ {'$match': {'$expr': {'$and': [{'$in': ['$id', ids]}, {'$eq': ['$$id', '$post_id']}]}}}
19
+ ]}},
20
+ {
21
+ '$match': {'messages': {'$ne': []}}
22
+ },
23
+ {
24
+ '$group': {'_id': '$user_id', 'posts': {'$push': '$$ROOT'}}
25
+ }]
26
+ docs = self.collection().aggregate(pipeline)
27
+ posts_map = {doc['_id']: [Post.from_dic(post) for post in doc['posts']] for doc in docs}
28
+ return posts_map
@@ -1,54 +0,0 @@
1
- lgt_jobs/__init__.py,sha256=efDX0VsSwC2we92quUu8E62MqC-4audo0Rv37Y6USnk,2144
2
- lgt_jobs/basejobs.py,sha256=LPEclvY6fIG17YMGy9pRK0Q58n62gkI5W1BTK6R2p-c,1234
3
- lgt_jobs/env.py,sha256=cRO03GGvstUjBsv3uYO-iakrOvAk_ZWUP_fnmf21iZQ,789
4
- lgt_jobs/main.py,sha256=cK_nkBtJHnUNDbba1WZotqPtI_6OWxiYQkAgco9OAmE,1539
5
- lgt_jobs/runner.py,sha256=pS-Qwyfuk22aQ1Mk3p-Q0ysdZfKy1Bh9YoWBlDaLeM8,2234
6
- lgt_jobs/simple_job.py,sha256=EBxhre3749GEAzJyaV1GXYy3P0pzwHchxcZ2kSN1vWU,527
7
- lgt_jobs/smtp.py,sha256=k0qh-Qk9AeSU3WrCOVmuWkfpi9xzwaPMzbw9cED-pZw,1150
8
- lgt_jobs/assets/images/arrow.png,sha256=Lr_zG1TyySAWX78jiojcV7j8BHe2S_Oi7eZYAfe4YbM,536
9
- lgt_jobs/assets/images/firework.png,sha256=9d_0lUpDFfT3e4JTgp5XVb03qAdtO9yNVi1c1KoQDp8,33754
10
- lgt_jobs/assets/images/lock.png,sha256=515llTFqboG9PYXIrXhlbPZ5lQOHXjEYyQkXc9WfJxc,5978
11
- lgt_jobs/assets/images/logo.png,sha256=nt377FGkBalBF9Z9TYQRv9loHolTXwU8_VRYvCXXzx0,12596
12
- lgt_jobs/assets/images/mail.png,sha256=eORzQcAMkFr7DjgtABVhJ_zFuXgO7OXv78lLF4b39B0,7168
13
- lgt_jobs/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- lgt_jobs/jobs/analytics.py,sha256=IIsWt4A1qUw3w-S-8W16uKY1FRVWfXXA41_mu4uCNiM,979
15
- lgt_jobs/jobs/bot_stats_update.py,sha256=COwSaw0conDZOcdI5VkyW4vTFIo6PFn9LgvhTejYYeQ,8448
16
- lgt_jobs/jobs/chat_history.py,sha256=rj337uHT2XmyDu3oMPbnCBxSsRn4roxDNS0hsbvoI7I,5040
17
- lgt_jobs/jobs/connect_sources.py,sha256=vOKu2Q9cmQsj4VMVzOoEJkD1wzE9XurbIChx35rES8I,4957
18
- lgt_jobs/jobs/inbox_leads.py,sha256=6UhPp9AfSAGb3elFDT6jm7j2HZ9jPOPngsUj-hUKAYw,4867
19
- lgt_jobs/jobs/load_slack_people.py,sha256=JEggnsWvfA7L45lObwuBFIvBVhwfePbq08E89VXpI8E,3264
20
- lgt_jobs/jobs/mass_message.py,sha256=1mFcBlL2MhzLbj5yrd_NyJc7TXDWCcROAzGDnr0miMU,2035
21
- lgt_jobs/jobs/send_code.py,sha256=dIlLPkG3GgGKIEqGiElyzrtdrnJNTL1Ak2V0xnE-WIQ,824
22
- lgt_jobs/jobs/send_slack_message.py,sha256=yJVzGQijM5KL-QDA0EQy-8-kvR7TSZmRw-4tX1ge5Hk,2343
23
- lgt_jobs/jobs/update_slack_profile.py,sha256=GU28azaNz1zYsCAAF_BShJxLUecQb7AbO5XPgiv7yHg,3654
24
- lgt_jobs/jobs/workspace_connect.py,sha256=iapbDVdFL6ZkZJlIZywASATAmK25ZikSd1IiB1LLrRo,7203
25
- lgt_jobs/lgt_common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- lgt_jobs/lgt_common/helpers.py,sha256=3T47_Abw7datSIxVqIHTCB-sh-rnahWrmrFG8sSY9ZE,178
27
- lgt_jobs/lgt_common/discord_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
- lgt_jobs/lgt_common/discord_client/discord_client.py,sha256=IA5JgoZq-oowkEGLRReZbW4Wa7cTtdSTPfGKF6ymNm8,4067
29
- lgt_jobs/lgt_common/discord_client/methods.py,sha256=qFbNRsI1VlPZD2os5d4bdZhrnu69OW__fhMRssF0oMk,633
30
- lgt_jobs/lgt_common/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
31
- lgt_jobs/lgt_common/enums/slack_errors.py,sha256=nK7uoguq0F8bIHROp73oeszehT7CgS_VU45n9_Gq_WY,172
32
- lgt_jobs/lgt_common/pubsub/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- lgt_jobs/lgt_common/pubsub/messages.py,sha256=rm7uKbxwDTWJqsVA8Kee-4YT58bThjCEV2Q0559Lrzg,1397
34
- lgt_jobs/lgt_common/pubsub/pubsubfactory.py,sha256=rfUDooYuhBQ2pE9FdDxZOpXjbrvlpiiQLCGOtnTFbSg,2204
35
- lgt_jobs/lgt_common/slack_client/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
- lgt_jobs/lgt_common/slack_client/methods.py,sha256=ctKF_1UHEmSWaRsoGEgMZicVabV7eEufZ7pjxdMAx8g,1455
37
- lgt_jobs/lgt_common/slack_client/slack_client.py,sha256=SR3YjJCJ-_8BPu29sFtF0ULijNL3QkBrvp_JXkm4DDk,13806
38
- lgt_jobs/lgt_common/slack_client/web_client.py,sha256=WCu8mqYhauuxp9iDAMsjocchKD78iWdcnbu7Ozdyzq8,3448
39
- lgt_jobs/lgt_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
- lgt_jobs/lgt_data/analytics.py,sha256=yfrFPXrBofzZqUNn479JkrbZXDa2ljgk-Le0YrQ9rew,21690
41
- lgt_jobs/lgt_data/engine.py,sha256=GY8FOl3dl7euKjQRML_H3ophaSTgfQ8ICMRv1NpE2oE,7745
42
- lgt_jobs/lgt_data/enums.py,sha256=27Gd_o5QVCrSUMIfL0DJ72xV77T9fK0kYrOaC78O0SU,2292
43
- lgt_jobs/lgt_data/helpers.py,sha256=S_1P7pnx14dllmen-TzjA9pkKWQr39x8-v6iv7FUYnQ,423
44
- lgt_jobs/lgt_data/model.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
- lgt_jobs/lgt_data/mongo_repository.py,sha256=FBhE2nhrQ42njW9Muf3DZElJRva5IiZ_f-XmEQwgzrc,54209
46
- lgt_jobs/lgt_data/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
47
- lgt_jobs/lgt_data/models/base.py,sha256=YaiceCaaF45snOLx-bQoYJ1aTWrfgMQeHWjAaRnzGKE,592
48
- lgt_jobs/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
49
- lgt_jobs/services/web_client.py,sha256=oMyWJxwGeIe3f40fPT7xcisjDg3BhA3Ipf8dr1jVT-Y,1549
50
- lgt_jobs/templates/new_message.html,sha256=dZl8UmdAOOMq4nidvAgMFroSrTV7Pw0RWt2yLp_2idg,6989
51
- leadguru_jobs-0.639.0.dist-info/METADATA,sha256=MAx8qvGobve7qzMmzciWlx-I0WGlZLzOlBNdJ8z_5ac,1319
52
- leadguru_jobs-0.639.0.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
53
- leadguru_jobs-0.639.0.dist-info/top_level.txt,sha256=rIuw1DqwbnZyeoarBSC-bYeGOhv9mZBs7_afl9q4_JI,9
54
- leadguru_jobs-0.639.0.dist-info/RECORD,,