ingestr 0.14.4__py3-none-any.whl → 0.14.6__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.
Potentially problematic release.
This version of ingestr might be problematic. Click here for more details.
- ingestr/src/buildinfo.py +1 -1
- ingestr/src/factory.py +7 -0
- ingestr/src/http/__init__.py +35 -0
- ingestr/src/http/readers.py +114 -0
- ingestr/src/jira_source/__init__.py +27 -1
- ingestr/src/jira_source/helpers.py +8 -21
- ingestr/src/monday/__init__.py +246 -0
- ingestr/src/monday/helpers.py +392 -0
- ingestr/src/monday/settings.py +328 -0
- ingestr/src/plusvibeai/__init__.py +335 -0
- ingestr/src/plusvibeai/helpers.py +544 -0
- ingestr/src/plusvibeai/settings.py +252 -0
- ingestr/src/sources.py +130 -0
- {ingestr-0.14.4.dist-info → ingestr-0.14.6.dist-info}/METADATA +1 -1
- {ingestr-0.14.4.dist-info → ingestr-0.14.6.dist-info}/RECORD +18 -10
- {ingestr-0.14.4.dist-info → ingestr-0.14.6.dist-info}/WHEEL +0 -0
- {ingestr-0.14.4.dist-info → ingestr-0.14.6.dist-info}/entry_points.txt +0 -0
- {ingestr-0.14.4.dist-info → ingestr-0.14.6.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"""PlusVibeAI source settings and constants"""
|
|
2
|
+
|
|
3
|
+
# Default start date for PlusVibeAI API requests
|
|
4
|
+
DEFAULT_START_DATE = "2020-01-01"
|
|
5
|
+
|
|
6
|
+
# PlusVibeAI API request timeout in seconds
|
|
7
|
+
REQUEST_TIMEOUT = 300
|
|
8
|
+
|
|
9
|
+
# Default page size for paginated requests
|
|
10
|
+
DEFAULT_PAGE_SIZE = 100
|
|
11
|
+
|
|
12
|
+
# Maximum page size (adjust based on API limits)
|
|
13
|
+
MAX_PAGE_SIZE = 1000
|
|
14
|
+
|
|
15
|
+
# Base API path for PlusVibeAI
|
|
16
|
+
API_BASE_PATH = "/api/v1"
|
|
17
|
+
|
|
18
|
+
# Campaign fields to retrieve from PlusVibeAI API
|
|
19
|
+
CAMPAIGN_FIELDS = (
|
|
20
|
+
# Basic Information
|
|
21
|
+
"id",
|
|
22
|
+
"camp_name",
|
|
23
|
+
"parent_camp_id",
|
|
24
|
+
"campaign_type",
|
|
25
|
+
"organization_id",
|
|
26
|
+
"workspace_id",
|
|
27
|
+
"status",
|
|
28
|
+
# Timestamps
|
|
29
|
+
"created_at",
|
|
30
|
+
"modified_at",
|
|
31
|
+
"last_lead_sent",
|
|
32
|
+
"last_paused_at_bounced",
|
|
33
|
+
# Campaign Configuration
|
|
34
|
+
"tags",
|
|
35
|
+
"template_id",
|
|
36
|
+
"email_accounts",
|
|
37
|
+
"daily_limit",
|
|
38
|
+
"interval_limit_in_min",
|
|
39
|
+
"send_priority",
|
|
40
|
+
"send_as_txt",
|
|
41
|
+
# Tracking & Settings
|
|
42
|
+
"is_emailopened_tracking",
|
|
43
|
+
"is_unsubscribed_link",
|
|
44
|
+
"exclude_ooo",
|
|
45
|
+
"is_acc_based_sending",
|
|
46
|
+
"send_risky_email",
|
|
47
|
+
"unsub_blocklist",
|
|
48
|
+
"other_email_acc",
|
|
49
|
+
"is_esp_match",
|
|
50
|
+
"stop_on_lead_replied",
|
|
51
|
+
# Bounce Settings
|
|
52
|
+
"is_pause_on_bouncerate",
|
|
53
|
+
"bounce_rate_limit",
|
|
54
|
+
"is_paused_at_bounced",
|
|
55
|
+
# Schedule
|
|
56
|
+
"schedule",
|
|
57
|
+
"first_wait_time",
|
|
58
|
+
"camp_st_date",
|
|
59
|
+
"camp_end_date",
|
|
60
|
+
# Events & Sequences
|
|
61
|
+
"events",
|
|
62
|
+
"sequences",
|
|
63
|
+
"sequence_steps",
|
|
64
|
+
"camp_emails",
|
|
65
|
+
# Lead Statistics
|
|
66
|
+
"lead_count",
|
|
67
|
+
"completed_lead_count",
|
|
68
|
+
"lead_contacted_count",
|
|
69
|
+
# Email Performance Metrics
|
|
70
|
+
"sent_count",
|
|
71
|
+
"opened_count",
|
|
72
|
+
"unique_opened_count",
|
|
73
|
+
"replied_count",
|
|
74
|
+
"bounced_count",
|
|
75
|
+
"unsubscribed_count",
|
|
76
|
+
# Reply Classification
|
|
77
|
+
"positive_reply_count",
|
|
78
|
+
"negative_reply_count",
|
|
79
|
+
"neutral_reply_count",
|
|
80
|
+
# Daily & Business Metrics
|
|
81
|
+
"email_sent_today",
|
|
82
|
+
"opportunity_val",
|
|
83
|
+
"open_rate",
|
|
84
|
+
"replied_rate",
|
|
85
|
+
# Custom Data
|
|
86
|
+
"custom_fields",
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
# Lead fields to retrieve from PlusVibeAI API
|
|
90
|
+
LEAD_FIELDS = (
|
|
91
|
+
# Basic Information
|
|
92
|
+
"_id",
|
|
93
|
+
"organization_id",
|
|
94
|
+
"campaign_id",
|
|
95
|
+
"workspace_id",
|
|
96
|
+
# Lead Status & Progress
|
|
97
|
+
"is_completed",
|
|
98
|
+
"current_step",
|
|
99
|
+
"status",
|
|
100
|
+
"label",
|
|
101
|
+
# Email Account Info
|
|
102
|
+
"email_account_id",
|
|
103
|
+
"email_acc_name",
|
|
104
|
+
# Campaign Info
|
|
105
|
+
"camp_name",
|
|
106
|
+
# Timestamps
|
|
107
|
+
"created_at",
|
|
108
|
+
"modified_at",
|
|
109
|
+
"last_sent_at",
|
|
110
|
+
# Email Engagement Metrics
|
|
111
|
+
"sent_step",
|
|
112
|
+
"replied_count",
|
|
113
|
+
"opened_count",
|
|
114
|
+
# Email Verification
|
|
115
|
+
"is_mx",
|
|
116
|
+
"mx",
|
|
117
|
+
# Contact Information
|
|
118
|
+
"email",
|
|
119
|
+
"first_name",
|
|
120
|
+
"last_name",
|
|
121
|
+
"phone_number",
|
|
122
|
+
# Address Information
|
|
123
|
+
"address_line",
|
|
124
|
+
"city",
|
|
125
|
+
"state",
|
|
126
|
+
"country",
|
|
127
|
+
"country_code",
|
|
128
|
+
# Professional Information
|
|
129
|
+
"job_title",
|
|
130
|
+
"department",
|
|
131
|
+
"company_name",
|
|
132
|
+
"company_website",
|
|
133
|
+
"industry",
|
|
134
|
+
# Social Media
|
|
135
|
+
"linkedin_person_url",
|
|
136
|
+
"linkedin_company_url",
|
|
137
|
+
# Workflow
|
|
138
|
+
"total_steps",
|
|
139
|
+
# Bounce Information
|
|
140
|
+
"bounce_msg",
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
# Email Account fields to retrieve from PlusVibeAI API
|
|
144
|
+
EMAIL_ACCOUNT_FIELDS = (
|
|
145
|
+
# Basic Information
|
|
146
|
+
"_id",
|
|
147
|
+
"email",
|
|
148
|
+
"status",
|
|
149
|
+
"warmup_status",
|
|
150
|
+
# Timestamps
|
|
151
|
+
"timestamp_created",
|
|
152
|
+
"timestamp_updated",
|
|
153
|
+
# Payload - nested object containing all configuration
|
|
154
|
+
"payload",
|
|
155
|
+
# Payload sub-fields (for reference, stored in payload object):
|
|
156
|
+
# - name (first_name, last_name)
|
|
157
|
+
# - warmup (limit, warmup_custom_words, warmup_signature, advanced, increment, reply_rate)
|
|
158
|
+
# - imap_host, imap_port
|
|
159
|
+
# - smtp_host, smtp_port
|
|
160
|
+
# - daily_limit, sending_gap
|
|
161
|
+
# - reply_to, custom_domain, signature
|
|
162
|
+
# - tags, cmps
|
|
163
|
+
# - analytics (health_scores, reply_rates, daily_counters)
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
# Email fields to retrieve from PlusVibeAI API
|
|
167
|
+
EMAIL_FIELDS = (
|
|
168
|
+
# Basic Information
|
|
169
|
+
"id",
|
|
170
|
+
"message_id",
|
|
171
|
+
"is_unread",
|
|
172
|
+
# Lead Information
|
|
173
|
+
"lead",
|
|
174
|
+
"lead_id",
|
|
175
|
+
"campaign_id",
|
|
176
|
+
# From Address
|
|
177
|
+
"from_address_email",
|
|
178
|
+
"from_address_json",
|
|
179
|
+
# Subject & Content
|
|
180
|
+
"subject",
|
|
181
|
+
"content_preview",
|
|
182
|
+
"body",
|
|
183
|
+
# Headers & Metadata
|
|
184
|
+
"headers",
|
|
185
|
+
"label",
|
|
186
|
+
"thread_id",
|
|
187
|
+
"eaccount",
|
|
188
|
+
# To/CC/BCC Addresses
|
|
189
|
+
"to_address_email_list",
|
|
190
|
+
"to_address_json",
|
|
191
|
+
"cc_address_email_list",
|
|
192
|
+
"cc_address_json",
|
|
193
|
+
"bcc_address_email_list",
|
|
194
|
+
# Timestamps
|
|
195
|
+
"timestamp_created",
|
|
196
|
+
"source_modified_at",
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
# Blocklist fields to retrieve from PlusVibeAI API
|
|
200
|
+
BLOCKLIST_FIELDS = (
|
|
201
|
+
# Basic Information
|
|
202
|
+
"_id",
|
|
203
|
+
"workspace_id",
|
|
204
|
+
"value",
|
|
205
|
+
"created_by_label",
|
|
206
|
+
# Timestamps
|
|
207
|
+
"created_at",
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
# Webhook fields to retrieve from PlusVibeAI API
|
|
211
|
+
WEBHOOK_FIELDS = (
|
|
212
|
+
# Basic Information
|
|
213
|
+
"_id",
|
|
214
|
+
"workspace_id",
|
|
215
|
+
"org_id",
|
|
216
|
+
"url",
|
|
217
|
+
"name",
|
|
218
|
+
"secret",
|
|
219
|
+
# Configuration
|
|
220
|
+
"camp_ids",
|
|
221
|
+
"evt_types",
|
|
222
|
+
"status",
|
|
223
|
+
"integration_type",
|
|
224
|
+
# Settings
|
|
225
|
+
"ignore_ooo",
|
|
226
|
+
"ignore_automatic",
|
|
227
|
+
# Timestamps
|
|
228
|
+
"created_at",
|
|
229
|
+
"modified_at",
|
|
230
|
+
"last_run",
|
|
231
|
+
# Response Data
|
|
232
|
+
"last_resp",
|
|
233
|
+
"last_recv_resp",
|
|
234
|
+
# User Information
|
|
235
|
+
"created_by",
|
|
236
|
+
"modified_by",
|
|
237
|
+
)
|
|
238
|
+
|
|
239
|
+
# Tag fields to retrieve from PlusVibeAI API
|
|
240
|
+
TAG_FIELDS = (
|
|
241
|
+
# Basic Information
|
|
242
|
+
"_id",
|
|
243
|
+
"workspace_id",
|
|
244
|
+
"org_id",
|
|
245
|
+
"name",
|
|
246
|
+
"color",
|
|
247
|
+
"description",
|
|
248
|
+
"status",
|
|
249
|
+
# Timestamps
|
|
250
|
+
"created_at",
|
|
251
|
+
"modified_at",
|
|
252
|
+
)
|
ingestr/src/sources.py
CHANGED
|
@@ -1829,6 +1829,7 @@ class JiraSource:
|
|
|
1829
1829
|
"resolutions",
|
|
1830
1830
|
"project_versions",
|
|
1831
1831
|
"project_components",
|
|
1832
|
+
"events",
|
|
1832
1833
|
]
|
|
1833
1834
|
|
|
1834
1835
|
def handles_incrementality(self) -> bool:
|
|
@@ -3760,6 +3761,52 @@ class AnthropicSource:
|
|
|
3760
3761
|
).with_resources(table)
|
|
3761
3762
|
|
|
3762
3763
|
|
|
3764
|
+
class PlusVibeAISource:
|
|
3765
|
+
resources = [
|
|
3766
|
+
"campaigns",
|
|
3767
|
+
"leads",
|
|
3768
|
+
"email_accounts",
|
|
3769
|
+
"emails",
|
|
3770
|
+
"blocklist",
|
|
3771
|
+
"webhooks",
|
|
3772
|
+
"tags",
|
|
3773
|
+
]
|
|
3774
|
+
|
|
3775
|
+
def handles_incrementality(self) -> bool:
|
|
3776
|
+
return True
|
|
3777
|
+
|
|
3778
|
+
def dlt_source(self, uri: str, table: str, **kwargs):
|
|
3779
|
+
# plusvibeai://?api_key=<key>&workspace_id=<id>
|
|
3780
|
+
parsed_uri = urlparse(uri)
|
|
3781
|
+
params = parse_qs(parsed_uri.query)
|
|
3782
|
+
|
|
3783
|
+
api_key = params.get("api_key")
|
|
3784
|
+
workspace_id = params.get("workspace_id")
|
|
3785
|
+
|
|
3786
|
+
if not api_key:
|
|
3787
|
+
raise MissingValueError("api_key", "PlusVibeAI")
|
|
3788
|
+
|
|
3789
|
+
if not workspace_id:
|
|
3790
|
+
raise MissingValueError("workspace_id", "PlusVibeAI")
|
|
3791
|
+
|
|
3792
|
+
if table not in self.resources:
|
|
3793
|
+
raise UnsupportedResourceError(table, "PlusVibeAI")
|
|
3794
|
+
|
|
3795
|
+
import dlt
|
|
3796
|
+
|
|
3797
|
+
from ingestr.src.plusvibeai import plusvibeai_source
|
|
3798
|
+
|
|
3799
|
+
dlt.secrets["sources.plusvibeai.api_key"] = api_key[0]
|
|
3800
|
+
dlt.secrets["sources.plusvibeai.workspace_id"] = workspace_id[0]
|
|
3801
|
+
|
|
3802
|
+
# Handle custom base URL if provided
|
|
3803
|
+
base_url = params.get("base_url", ["https://api.plusvibe.ai"])[0]
|
|
3804
|
+
dlt.secrets["sources.plusvibeai.base_url"] = base_url
|
|
3805
|
+
|
|
3806
|
+
src = plusvibeai_source()
|
|
3807
|
+
return src.with_resources(table)
|
|
3808
|
+
|
|
3809
|
+
|
|
3763
3810
|
class IntercomSource:
|
|
3764
3811
|
def handles_incrementality(self) -> bool:
|
|
3765
3812
|
return True
|
|
@@ -3831,3 +3878,86 @@ class IntercomSource:
|
|
|
3831
3878
|
start_date=start_date,
|
|
3832
3879
|
end_date=end_date,
|
|
3833
3880
|
).with_resources(table)
|
|
3881
|
+
|
|
3882
|
+
|
|
3883
|
+
class HttpSource:
|
|
3884
|
+
"""Source for reading CSV, JSON, and Parquet files from HTTP URLs"""
|
|
3885
|
+
|
|
3886
|
+
def handles_incrementality(self) -> bool:
|
|
3887
|
+
return False
|
|
3888
|
+
|
|
3889
|
+
def dlt_source(self, uri: str, table: str, **kwargs):
|
|
3890
|
+
"""
|
|
3891
|
+
Create a dlt source for reading files from HTTP URLs.
|
|
3892
|
+
|
|
3893
|
+
URI format: http://example.com/file.csv or https://example.com/file.json
|
|
3894
|
+
|
|
3895
|
+
Args:
|
|
3896
|
+
uri: HTTP(S) URL to the file
|
|
3897
|
+
table: Not used for HTTP source (files are read directly)
|
|
3898
|
+
**kwargs: Additional arguments:
|
|
3899
|
+
- file_format: Optional file format override ('csv', 'json', 'parquet')
|
|
3900
|
+
- chunksize: Number of records to process at once (default varies by format)
|
|
3901
|
+
- merge_key: Merge key for the resource
|
|
3902
|
+
|
|
3903
|
+
Returns:
|
|
3904
|
+
DltResource for the HTTP file
|
|
3905
|
+
"""
|
|
3906
|
+
from ingestr.src.http import http_source
|
|
3907
|
+
|
|
3908
|
+
# Extract the actual URL (remove the http:// or https:// scheme if duplicated)
|
|
3909
|
+
url = uri
|
|
3910
|
+
if uri.startswith("http://http://") or uri.startswith("https://https://"):
|
|
3911
|
+
url = uri.split("://", 1)[1]
|
|
3912
|
+
|
|
3913
|
+
file_format = kwargs.get("file_format")
|
|
3914
|
+
chunksize = kwargs.get("chunksize")
|
|
3915
|
+
merge_key = kwargs.get("merge_key")
|
|
3916
|
+
|
|
3917
|
+
reader_kwargs = {}
|
|
3918
|
+
if chunksize is not None:
|
|
3919
|
+
reader_kwargs["chunksize"] = chunksize
|
|
3920
|
+
|
|
3921
|
+
source = http_source(url=url, file_format=file_format, **reader_kwargs)
|
|
3922
|
+
|
|
3923
|
+
if merge_key:
|
|
3924
|
+
source.apply_hints(merge_key=merge_key)
|
|
3925
|
+
|
|
3926
|
+
return source
|
|
3927
|
+
|
|
3928
|
+
|
|
3929
|
+
class MondaySource:
|
|
3930
|
+
def handles_incrementality(self) -> bool:
|
|
3931
|
+
return False
|
|
3932
|
+
|
|
3933
|
+
def dlt_source(self, uri: str, table: str, **kwargs):
|
|
3934
|
+
parsed_uri = urlparse(uri)
|
|
3935
|
+
query_params = parse_qs(parsed_uri.query)
|
|
3936
|
+
api_token = query_params.get("api_token")
|
|
3937
|
+
|
|
3938
|
+
if api_token is None:
|
|
3939
|
+
raise MissingValueError("api_token", "Monday")
|
|
3940
|
+
|
|
3941
|
+
parts = table.replace(" ", "").split(":")
|
|
3942
|
+
table_name = parts[0]
|
|
3943
|
+
params = parts[1:]
|
|
3944
|
+
|
|
3945
|
+
# Get interval_start and interval_end from kwargs (command line args)
|
|
3946
|
+
interval_start = kwargs.get("interval_start")
|
|
3947
|
+
interval_end = kwargs.get("interval_end")
|
|
3948
|
+
|
|
3949
|
+
# Convert datetime to string format YYYY-MM-DD
|
|
3950
|
+
start_date = interval_start.strftime("%Y-%m-%d") if interval_start else None
|
|
3951
|
+
end_date = interval_end.strftime("%Y-%m-%d") if interval_end else None
|
|
3952
|
+
|
|
3953
|
+
from ingestr.src.monday import monday_source
|
|
3954
|
+
|
|
3955
|
+
try:
|
|
3956
|
+
return monday_source(
|
|
3957
|
+
api_token=api_token[0],
|
|
3958
|
+
params=params,
|
|
3959
|
+
start_date=start_date,
|
|
3960
|
+
end_date=end_date,
|
|
3961
|
+
).with_resources(table_name)
|
|
3962
|
+
except ResourcesNotFoundError:
|
|
3963
|
+
raise UnsupportedResourceError(table_name, "Monday")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ingestr
|
|
3
|
-
Version: 0.14.
|
|
3
|
+
Version: 0.14.6
|
|
4
4
|
Summary: ingestr is a command-line application that ingests data from various sources and stores them in any database.
|
|
5
5
|
Project-URL: Homepage, https://github.com/bruin-data/ingestr
|
|
6
6
|
Project-URL: Issues, https://github.com/bruin-data/ingestr/issues
|
|
@@ -2,17 +2,17 @@ ingestr/conftest.py,sha256=OE2yxeTCosS9CUFVuqNypm-2ftYvVBeeq7egm3878cI,1981
|
|
|
2
2
|
ingestr/main.py,sha256=qo0g3wCFl8a_1jUwXagX8L1Q8PKKQlTF7md9pfnzW0Y,27155
|
|
3
3
|
ingestr/src/.gitignore,sha256=8cX1AZTSI0TcdZFGTmS_oyBjpfCzhOEt0DdAo2dFIY8,203
|
|
4
4
|
ingestr/src/blob.py,sha256=UUWMjHUuoR9xP1XZQ6UANQmnMVyDx3d0X4-2FQC271I,2138
|
|
5
|
-
ingestr/src/buildinfo.py,sha256=
|
|
5
|
+
ingestr/src/buildinfo.py,sha256=dazsjzReTYtam8X7FVSN4WAYUmvlPNZ0XztT57SOHTU,20
|
|
6
6
|
ingestr/src/destinations.py,sha256=QtjE0AGs0WkPHaI2snWPHJ8HHi4lwXUBYLJPklz8Mvk,27772
|
|
7
7
|
ingestr/src/errors.py,sha256=Ufs4_DfE77_E3vnA1fOQdi6cmuLVNm7_SbFLkL1XPGk,686
|
|
8
|
-
ingestr/src/factory.py,sha256=
|
|
8
|
+
ingestr/src/factory.py,sha256=03eGDe2rL6qyT5sGmTGZi-XIwJbbdoedE_KjW3ZF7QY,7661
|
|
9
9
|
ingestr/src/filters.py,sha256=0n0sNAVG_f-B_1r7lW5iNtw9z_G1bxWzPaiL1i6tnbU,1665
|
|
10
10
|
ingestr/src/http_client.py,sha256=bxqsk6nJNXCo-79gW04B53DQO-yr25vaSsqP0AKtjx4,732
|
|
11
11
|
ingestr/src/loader.py,sha256=9NaWAyfkXdqAZSS-N72Iwo36Lbx4PyqIfaaH1dNdkFs,1712
|
|
12
12
|
ingestr/src/masking.py,sha256=VN0LdfvExhQ1bZMRylGtaBUIoH-vjuIUmRnYKwo3yiY,11358
|
|
13
13
|
ingestr/src/partition.py,sha256=BrIP6wFJvyR7Nus_3ElnfxknUXeCipK_E_bB8kZowfc,969
|
|
14
14
|
ingestr/src/resource.py,sha256=ZqmZxFQVGlF8rFPhBiUB08HES0yoTj8sZ--jKfaaVps,1164
|
|
15
|
-
ingestr/src/sources.py,sha256=
|
|
15
|
+
ingestr/src/sources.py,sha256=yQhmgIIfzMr8qHxQr-yDmzowti_q59khRzBDPY0Kw-I,138486
|
|
16
16
|
ingestr/src/table_definition.py,sha256=REbAbqdlmUMUuRh8nEQRreWjPVOQ5ZcfqGkScKdCrmk,390
|
|
17
17
|
ingestr/src/time.py,sha256=H_Fk2J4ShXyUM-EMY7MqCLZQhlnZMZvO952bmZPc4yE,254
|
|
18
18
|
ingestr/src/version.py,sha256=J_2xgZ0mKlvuHcjdKCx2nlioneLH0I47JiU_Slr_Nwc,189
|
|
@@ -83,6 +83,8 @@ ingestr/src/google_sheets/helpers/api_calls.py,sha256=RiVfdacbaneszhmuhYilkJnkc9
|
|
|
83
83
|
ingestr/src/google_sheets/helpers/data_processing.py,sha256=RNt2MYfdJhk4bRahnQVezpNg2x9z0vx60YFq2ukZ8vI,11004
|
|
84
84
|
ingestr/src/gorgias/__init__.py,sha256=_mFkMYwlY5OKEY0o_FK1OKol03A-8uk7bm1cKlmt5cs,21432
|
|
85
85
|
ingestr/src/gorgias/helpers.py,sha256=DamuijnvhGY9hysQO4txrVMf4izkGbh5qfBKImdOINE,5427
|
|
86
|
+
ingestr/src/http/__init__.py,sha256=Y9mQIE0RolHOh6dPjW41qzYXSG8BC0GPKxEtz2CJGpU,902
|
|
87
|
+
ingestr/src/http/readers.py,sha256=rgBwYG5SOQ7P2uzBAFMOQIevKxV51ZW41VSiRTZ0Xvo,3863
|
|
86
88
|
ingestr/src/hubspot/__init__.py,sha256=FCqjLeOjijdc9JC_NoDwtRqy3FDyY-szDi6UV7CdDN0,11548
|
|
87
89
|
ingestr/src/hubspot/helpers.py,sha256=k2b-lhxqBNKHoOSHoHegFSsk8xxjjGA0I04V0XyX2b4,7883
|
|
88
90
|
ingestr/src/hubspot/settings.py,sha256=i73MkSiJfRLMFLfiJgYdhp-rhymHTfoqFzZ4uOJdFJM,2456
|
|
@@ -92,8 +94,8 @@ ingestr/src/intercom/__init__.py,sha256=rqorWFwcfcTYrCrpSsPPM2sGOc7qq5XbYZRCDVJX
|
|
|
92
94
|
ingestr/src/intercom/helpers.py,sha256=IljM0x4K70nuahidZaP7mtIlsHkPIcZq56j9mmuSck4,21074
|
|
93
95
|
ingestr/src/intercom/settings.py,sha256=u_4P2tZiYsnlGjMTN4Ttr4bLHh1b272Pu5Q9YFq3ZCE,7053
|
|
94
96
|
ingestr/src/isoc_pulse/__init__.py,sha256=9b4eN4faatpiwTuRNPuYcEt1hEFDEjua9XhfakUigBk,4648
|
|
95
|
-
ingestr/src/jira_source/__init__.py,sha256=
|
|
96
|
-
ingestr/src/jira_source/helpers.py,sha256=
|
|
97
|
+
ingestr/src/jira_source/__init__.py,sha256=Hy-JUdo9Nu1Goti6zqWjG1GNnCzfv9cY85MFb-sqo-I,9814
|
|
98
|
+
ingestr/src/jira_source/helpers.py,sha256=vJ7fTGSQnLHKiwLQUPEpGNsHBRUyBZswL8R1A3Tz0GY,14636
|
|
97
99
|
ingestr/src/jira_source/settings.py,sha256=Ufb-sGS-x_STtWJ-y6k69hP1CVtat_J5MtFPn51TUGE,2861
|
|
98
100
|
ingestr/src/kafka/__init__.py,sha256=QUHsGmdv5_E-3z0GDHXvbk39puwuGDBsyYSDhvbA89E,3595
|
|
99
101
|
ingestr/src/kafka/helpers.py,sha256=V9WcVn3PKnEpggArHda4vnAcaV8VDuh__dSmRviJb5Y,7502
|
|
@@ -109,6 +111,9 @@ ingestr/src/linkedin_ads/dimension_time_enum.py,sha256=EmHRdkFyTAfo4chGjThrwqffW
|
|
|
109
111
|
ingestr/src/linkedin_ads/helpers.py,sha256=eUWudRVlXl4kqIhfXQ1eVsUpZwJn7UFqKSpnbLfxzds,4498
|
|
110
112
|
ingestr/src/mixpanel/__init__.py,sha256=s1QtqMP0BTGW6YtdCabJFWj7lEn7KujzELwGpBOQgfs,1796
|
|
111
113
|
ingestr/src/mixpanel/client.py,sha256=c_reouegOVYBOwHLfgYFwpmkba0Sxro1Zkml07NCYf0,3602
|
|
114
|
+
ingestr/src/monday/__init__.py,sha256=ZNdGCC_1CEYlgxAef-5QO56Drm9IMP82-rZpEvbD8aY,6918
|
|
115
|
+
ingestr/src/monday/helpers.py,sha256=xkAYTFIwjbU-dQTa4d41oQm6kFvCHv74AhCmN-H8aPE,11572
|
|
116
|
+
ingestr/src/monday/settings.py,sha256=5TC0OrTHQO52AifwP3Z2xsh4D8SDUq0WxqY5AQMjcns,5667
|
|
112
117
|
ingestr/src/mongodb/__init__.py,sha256=6-DvvaKL7XOPPRwItI7lSpoMQLEPzYubV6dKhpzbuME,7494
|
|
113
118
|
ingestr/src/mongodb/helpers.py,sha256=BKb0F-AUWjFJikE9OPP9z5wFuMmJsf8YsyWhvQ9dC1k,38076
|
|
114
119
|
ingestr/src/notion/__init__.py,sha256=36wUui8finbc85ObkRMq8boMraXMUehdABN_AMe_hzA,1834
|
|
@@ -127,6 +132,9 @@ ingestr/src/pipedrive/typing.py,sha256=lEMXu4hhAA3XkhVSlBUa-juqyupisd3c-qSQKxFvz
|
|
|
127
132
|
ingestr/src/pipedrive/helpers/__init__.py,sha256=UX1K_qnGXB0ShtnBOfp2XuVbK8RRoCK8TdEmIjRckgg,710
|
|
128
133
|
ingestr/src/pipedrive/helpers/custom_fields_munger.py,sha256=rZ4AjdITHfJE2NNomCR7vMBS1KnWpEGVF6fADwsIHUE,4488
|
|
129
134
|
ingestr/src/pipedrive/helpers/pages.py,sha256=Klpjw2OnMuhzit3PpiHKsfzGcJ3rQPSQBl3HhE3-6eA,3358
|
|
135
|
+
ingestr/src/plusvibeai/__init__.py,sha256=Uo-N2-1kbq5RJw8ym5tm8rqVchVbJJ2hOd6bwsg1zdM,10125
|
|
136
|
+
ingestr/src/plusvibeai/helpers.py,sha256=5hxxA2-XUtkZA1xrstZ39ilzUh4EouNDOiiL-NzGu9w,17939
|
|
137
|
+
ingestr/src/plusvibeai/settings.py,sha256=3Hb7jcUNshSlGO4E27yUe_8n3f0VArX9XTmkTkN-Tvo,5366
|
|
130
138
|
ingestr/src/quickbooks/__init__.py,sha256=cZUuVCOTGPHTscRj6i0DytO63_fWF-4ieMxoU4PcyTg,3727
|
|
131
139
|
ingestr/src/revenuecat/__init__.py,sha256=5HbyZuEOekkbeeT72sM_bnGygSyYdmd_vczfAUz7xoM,4029
|
|
132
140
|
ingestr/src/revenuecat/helpers.py,sha256=CYU6l79kplnfL87GfdxyGeEBrBSWEZfGP0GyjPHuVDk,9619
|
|
@@ -172,8 +180,8 @@ ingestr/testdata/merge_expected.csv,sha256=DReHqWGnQMsf2PBv_Q2pfjsgvikYFnf1zYcQZ
|
|
|
172
180
|
ingestr/testdata/merge_part1.csv,sha256=Pw8Z9IDKcNU0qQHx1z6BUf4rF_-SxKGFOvymCt4OY9I,185
|
|
173
181
|
ingestr/testdata/merge_part2.csv,sha256=T_GiWxA81SN63_tMOIuemcvboEFeAmbKc7xRXvL9esw,287
|
|
174
182
|
ingestr/tests/unit/test_smartsheets.py,sha256=zf3DXT29Y4TH2lNPBFphdjlaelUUyPJcsW2UO68RzDs,4862
|
|
175
|
-
ingestr-0.14.
|
|
176
|
-
ingestr-0.14.
|
|
177
|
-
ingestr-0.14.
|
|
178
|
-
ingestr-0.14.
|
|
179
|
-
ingestr-0.14.
|
|
183
|
+
ingestr-0.14.6.dist-info/METADATA,sha256=3akmbk91m4xi1AMYFkuMPKmAtlcUSzwCOsYbeXwFlsk,15265
|
|
184
|
+
ingestr-0.14.6.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
185
|
+
ingestr-0.14.6.dist-info/entry_points.txt,sha256=oPJy0KBnPWYjDtP1k8qwAihcTLHSZokSQvRAw_wtfJM,46
|
|
186
|
+
ingestr-0.14.6.dist-info/licenses/LICENSE.md,sha256=cW8wIhn8HFE-KLStDF9jHQ1O_ARWP3kTpk_-eOccL24,1075
|
|
187
|
+
ingestr-0.14.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|