scraping-rtn 0.0.6.1__tar.gz → 0.0.7.1__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.
Potentially problematic release.
This version of scraping-rtn might be problematic. Click here for more details.
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/PKG-INFO +2 -2
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/pyproject.toml +1 -1
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn/RtnSingleTeamYear.py +54 -25
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn/__init__.py +11 -11
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/PKG-INFO +2 -2
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/LICENSE +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/README.md +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/setup.cfg +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn/src.py +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/SOURCES.txt +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/dependency_links.txt +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/requires.txt +0 -0
- {scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: scraping_rtn
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.7.1
|
|
4
4
|
Summary: package to scrape gymnastics data from Road To Nationals
|
|
5
5
|
Author-email: Claire Harmon <ceharmon220@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/cgn-charmon/scraping_rtn
|
|
@@ -15,7 +15,10 @@ class RtnSingleTeamYear(object):
|
|
|
15
15
|
else:
|
|
16
16
|
self.team_id = team_id
|
|
17
17
|
|
|
18
|
-
def get_team_mapping(self):
|
|
18
|
+
def get_team_mapping(self, force_update=False):
|
|
19
|
+
if force_update:
|
|
20
|
+
get_data_from_api.cache_clear()
|
|
21
|
+
|
|
19
22
|
all_teams_data = get_data_from_api(endpoint='gymnasts2', suffix=str(self.year) + '/1').json()
|
|
20
23
|
return {team['team_name']: team['id'] for team in all_teams_data['teams']}
|
|
21
24
|
|
|
@@ -32,19 +35,22 @@ class RtnSingleTeamYear(object):
|
|
|
32
35
|
# else:
|
|
33
36
|
# raise ValueError(f'{self.team_name} does not exist in data for {self.year}')
|
|
34
37
|
|
|
35
|
-
def _get_raw_roster(self):
|
|
38
|
+
def _get_raw_roster(self, force_update=False):
|
|
36
39
|
rename_map = {'id': 'Gymnast ID', 'hometown': 'Hometown', 'school_year': 'School Year', 'events': 'Events'}
|
|
37
40
|
school_year_map = {'1': 'FR', '2': 'SO', '3': 'JR', '4': 'SR'}
|
|
38
41
|
|
|
42
|
+
if force_update:
|
|
43
|
+
get_data_from_api.cache_clear()
|
|
44
|
+
|
|
39
45
|
roster_data = get_data_from_api(endpoint='rostermain', suffix=str(self.year)+'/'+str(self.team_id)+'/1').json()
|
|
40
46
|
|
|
41
47
|
self._raw_roster = [{**{rename_map.get(k, k): v if k != 'school_year' else school_year_map.get(v, '') for k, v in data.items()},
|
|
42
48
|
**{'Name': data['fname'] + ' ' + data['lname'], 'Team': self.team_name}}
|
|
43
49
|
for data in roster_data]
|
|
44
50
|
|
|
45
|
-
def get_roster(self, include_hometowns=False, include_class=False, include_events=False):
|
|
51
|
+
def get_roster(self, include_hometowns=False, include_class=False, include_events=False, force_update=False):
|
|
46
52
|
if not hasattr(self, 'raw_roster'):
|
|
47
|
-
self._get_raw_roster()
|
|
53
|
+
self._get_raw_roster(force_update=force_update)
|
|
48
54
|
|
|
49
55
|
extra_cols = get_extra_cols(include_hometowns=include_hometowns, include_class=include_class, include_events=include_events)
|
|
50
56
|
|
|
@@ -56,7 +62,10 @@ class RtnSingleTeamYear(object):
|
|
|
56
62
|
|
|
57
63
|
return self.roster
|
|
58
64
|
|
|
59
|
-
def _get_raw_season_results(self):
|
|
65
|
+
def _get_raw_season_results(self, force_update=False):
|
|
66
|
+
if force_update:
|
|
67
|
+
get_data_from_api.cache_clear()
|
|
68
|
+
|
|
60
69
|
meets = get_data_from_api(endpoint='dashboard', suffix=str(self.year)+'/'+str(self.team_id)).json()
|
|
61
70
|
name_map = {'team_id': 'Team ID', 'team_name': 'Team', 'meet_id': 'Team Meet ID',
|
|
62
71
|
'meet_date': 'Meet Date', 'team_score': 'Score', 'home': 'Home/Away',
|
|
@@ -67,9 +76,9 @@ class RtnSingleTeamYear(object):
|
|
|
67
76
|
for k, v in data.items() if k != 'jas'} for data in meets['meets'] if data['team_name'] == self.team_name]
|
|
68
77
|
self._raw_schedule = [{k: v for k, v in data.items() if k not in ('Score', 'VT', 'UB', 'BB', 'FX')} for data in self._raw_season_results]
|
|
69
78
|
|
|
70
|
-
def get_schedule(self):
|
|
79
|
+
def get_schedule(self, force_update=False):
|
|
71
80
|
if not hasattr(self, '_raw_schedule'):
|
|
72
|
-
self._get_raw_season_results()
|
|
81
|
+
self._get_raw_season_results(force_update=force_update)
|
|
73
82
|
|
|
74
83
|
if len(self._raw_schedule) > 0:
|
|
75
84
|
return pd.DataFrame(self._raw_schedule)
|
|
@@ -91,14 +100,14 @@ class RtnSingleTeamYear(object):
|
|
|
91
100
|
* Uses team meet id to join back to meet info, such as opponent, etc.
|
|
92
101
|
"""
|
|
93
102
|
if not hasattr(self, '_raw_season_results'):
|
|
94
|
-
self._get_raw_season_results()
|
|
103
|
+
self._get_raw_season_results(force_update=force_update)
|
|
95
104
|
|
|
96
105
|
if len(self._raw_season_results) > 0:
|
|
97
106
|
if (len({'VT', 'UB', 'BB', 'FX'}.intersection(self._raw_season_results[0].keys())) != 4 or force_update):
|
|
98
107
|
if method == 'team_consistency':
|
|
99
|
-
self._team_event_scores_team_consistency()
|
|
108
|
+
self._team_event_scores_team_consistency(force_update=force_update)
|
|
100
109
|
elif method == 'by_meet':
|
|
101
|
-
self._team_event_scores_by_meet()
|
|
110
|
+
self._team_event_scores_by_meet(force_update=force_update)
|
|
102
111
|
else:
|
|
103
112
|
raise ValueError('Method must be "team_consistency" or "by_meet"')
|
|
104
113
|
|
|
@@ -109,10 +118,13 @@ class RtnSingleTeamYear(object):
|
|
|
109
118
|
|
|
110
119
|
return self.season_results
|
|
111
120
|
|
|
112
|
-
def _team_event_scores_by_meet(self):
|
|
121
|
+
def _team_event_scores_by_meet(self, force_update=False):
|
|
113
122
|
team_scores_all = []
|
|
114
123
|
for meet_id in [data['Team Meet ID'] for data in self._raw_season_results if data['Meet Date'] <= datetime.now()]:
|
|
115
124
|
try:
|
|
125
|
+
if force_update:
|
|
126
|
+
get_data_from_api.cache_clear()
|
|
127
|
+
|
|
116
128
|
meet_res = get_data_from_api(endpoint='meetresults', suffix=str(meet_id)).json()
|
|
117
129
|
# This API call returns scores from all teams at this meet, not just this team. Need to pick out correct score
|
|
118
130
|
team_scores = [score for score in meet_res['teams'] if score['tname'] == self.team_name and score['mid'] == str(meet_id)]
|
|
@@ -128,7 +140,10 @@ class RtnSingleTeamYear(object):
|
|
|
128
140
|
for i in range(len(self._raw_season_results)):
|
|
129
141
|
self._raw_season_results[i].update({'VT': np.nan, 'UB': np.nan, 'BB': np.nan, 'FX': np.nan})
|
|
130
142
|
|
|
131
|
-
def _team_event_scores_team_consistency(self):
|
|
143
|
+
def _team_event_scores_team_consistency(self, force_update=False):
|
|
144
|
+
if force_update:
|
|
145
|
+
get_data_from_api.cache_clear()
|
|
146
|
+
|
|
132
147
|
res = get_data_from_api(endpoint='teamConsistency', suffix=f'{self.year}/{self.team_id}').json()
|
|
133
148
|
if len(res['labels']) == 0:
|
|
134
149
|
print(f'No team consistency data found for {self.team_name} in {self.year}')
|
|
@@ -164,18 +179,21 @@ class RtnSingleTeamYear(object):
|
|
|
164
179
|
if not hasattr(self, '_raw_roster'):
|
|
165
180
|
self.get_roster()
|
|
166
181
|
|
|
167
|
-
self._individual_scores_individual_consistency()
|
|
182
|
+
self._individual_scores_individual_consistency(force_update=force_update)
|
|
168
183
|
elif method == 'by_meet':
|
|
169
|
-
self._individual_scores_by_meet()
|
|
184
|
+
self._individual_scores_by_meet(force_update=force_update)
|
|
170
185
|
else:
|
|
171
186
|
raise ValueError('Method must be "individual_consistency" or "by_meet"')
|
|
172
187
|
|
|
173
188
|
return self.individual_results
|
|
174
189
|
|
|
175
|
-
def _individual_scores_by_meet(self):
|
|
190
|
+
def _individual_scores_by_meet(self, force_update=False):
|
|
176
191
|
individual_scores_all = []
|
|
177
192
|
for meet_id in [meet['Team Meet ID'] for meet in self._raw_schedule if meet['Meet Date'] <= datetime.now()]:
|
|
178
193
|
try:
|
|
194
|
+
if force_update:
|
|
195
|
+
get_data_from_api.cache_clear()
|
|
196
|
+
|
|
179
197
|
meet_res = get_data_from_api(endpoint='meetresults', suffix=str(meet_id)).json()
|
|
180
198
|
if len(meet_res) == 0 or len(meet_res['scores']) == 0 or len(meet_res['scores'][0]) == 0:
|
|
181
199
|
print(f'No data found for meet {meet_id}')
|
|
@@ -211,10 +229,13 @@ class RtnSingleTeamYear(object):
|
|
|
211
229
|
'Team ID', 'Team', 'Team Meet ID', 'Home/Away', 'Opponents',
|
|
212
230
|
'Meet Name', 'Meet ID'])
|
|
213
231
|
|
|
214
|
-
def _individual_scores_individual_consistency(self):
|
|
232
|
+
def _individual_scores_individual_consistency(self, force_update=False):
|
|
215
233
|
ind_consistency_all = []
|
|
216
234
|
for gymnast in self._raw_roster:
|
|
217
235
|
try:
|
|
236
|
+
if force_update:
|
|
237
|
+
get_data_from_api.cache_clear()
|
|
238
|
+
|
|
218
239
|
res = get_data_from_api(endpoint='indConsistency', suffix=f"{self.year}/{gymnast['Gymnast ID']}").json()
|
|
219
240
|
ind_consistency = [{'Meet Date': normalize_date(res['labels'][i][:7] + str(self.year), dt_format='%b-%d-%Y'),
|
|
220
241
|
'VT': round(float(res['vts'][i]), 4) if res['vts'][i] is not None else np.nan,
|
|
@@ -236,22 +257,24 @@ class RtnSingleTeamYear(object):
|
|
|
236
257
|
else:
|
|
237
258
|
self.individual_results = pd.DataFrame(columns=SCHEDULE_COLS + IND_RESULTS_COLS)
|
|
238
259
|
|
|
239
|
-
def get_individual_nqs(self):
|
|
260
|
+
def get_individual_nqs(self, force_update=False):
|
|
240
261
|
if not hasattr(self, '_raw_roster'):
|
|
241
|
-
self._get_raw_roster()
|
|
262
|
+
self._get_raw_roster(force_update=force_update)
|
|
242
263
|
|
|
243
264
|
if not hasattr(self, '_raw_individual_nqs'):
|
|
244
|
-
self._get_raw_individual_nqs()
|
|
265
|
+
self._get_raw_individual_nqs(force_update=force_update)
|
|
245
266
|
|
|
246
267
|
if len(self._raw_individual_nqs) > 0:
|
|
247
268
|
return pd.DataFrame(self._raw_individual_nqs)
|
|
248
269
|
else:
|
|
249
270
|
return pd.DataFrame(columns=ROSTER_COLS + EVENTS) # + ['AA'])
|
|
250
271
|
|
|
251
|
-
def _get_raw_individual_nqs(self):
|
|
272
|
+
def _get_raw_individual_nqs(self, force_update=False):
|
|
252
273
|
name_map = {'maxv': 'VT', 'maxub': 'UB', 'maxbb': 'BB', 'maxfx': 'FX',
|
|
253
274
|
# 'maxaa': 'AA',
|
|
254
275
|
'gid': 'Gymnast ID'}
|
|
276
|
+
if force_update:
|
|
277
|
+
get_data_from_api.cache_clear()
|
|
255
278
|
|
|
256
279
|
nqsData = get_data_from_api(endpoint='rostermain', suffix=f'{self.year}/{self.team_id}/4').json()
|
|
257
280
|
ind_nqs = [{name_map[k]: round(float(v), 4) if k != 'gid' and v != '' else (np.nan if k != 'gid' else v)
|
|
@@ -264,18 +287,24 @@ class RtnSingleTeamYear(object):
|
|
|
264
287
|
else:
|
|
265
288
|
self._raw_individual_nqs = []
|
|
266
289
|
|
|
267
|
-
def _get_current_week(self):
|
|
290
|
+
def _get_current_week(self, force_update=False):
|
|
268
291
|
if not hasattr(self, 'week'):
|
|
292
|
+
if force_update:
|
|
293
|
+
get_data_from_api.cache_clear()
|
|
294
|
+
|
|
269
295
|
week_data = get_data_from_api(endpoint='currentweek', suffix=str(self.year)).json()
|
|
270
296
|
return min(int(week_data['week']), int(week_data['max']))
|
|
271
297
|
|
|
272
|
-
def _get_raw_rankings(self, team_vs_ind, event, week):
|
|
298
|
+
def _get_raw_rankings(self, team_vs_ind, event, week, force_update=False):
|
|
273
299
|
team_ind_map = {'team': 0, 'ind': 1}
|
|
274
300
|
event_api_map = {'VT': 1, 'UB': 2, 'BB': 3, 'FX': 4, 'AA': 5}
|
|
275
301
|
rename_map = {'rank': 'Rank', 'gid': 'Gymnast ID', 'team': 'Team', 'tid': 'Team ID',
|
|
276
302
|
'rqs': 'NQS', 'reg': 'Region', 'con': 'Conference', 'div': 'Division',
|
|
277
303
|
'usag': 'USAG', 'ave': 'Average', 'high': 'High', 'name': 'Team'}
|
|
278
304
|
|
|
305
|
+
if force_update:
|
|
306
|
+
get_data_from_api.cache_clear()
|
|
307
|
+
|
|
279
308
|
res = get_data_from_api(endpoint='results', suffix=f'{self.year}/{week}/{team_ind_map[team_vs_ind]}/{event_api_map[event]}').json()
|
|
280
309
|
if team_vs_ind == 'ind':
|
|
281
310
|
self._raw_rankings[team_vs_ind][event] = [{**{rename_map.get(k): float(v) if k in ['rqs', 'ave', 'high'] else v for k, v in data.items() if k in rename_map},
|
|
@@ -286,9 +315,9 @@ class RtnSingleTeamYear(object):
|
|
|
286
315
|
**{'Event': event}}
|
|
287
316
|
for data in res['data']]
|
|
288
317
|
|
|
289
|
-
def get_overall_rankings(self, team_vs_ind='team', event='AA', week=None):
|
|
318
|
+
def get_overall_rankings(self, team_vs_ind='team', event='AA', week=None, force_update=False):
|
|
290
319
|
if not week:
|
|
291
|
-
week = self._get_current_week()
|
|
320
|
+
week = self._get_current_week(force_update=force_update)
|
|
292
321
|
|
|
293
322
|
if not hasattr(self, '_raw_rankings'):
|
|
294
323
|
self._raw_rankings = {'team': {event: None for event in EVENT_MAP.values()},
|
|
@@ -300,7 +329,7 @@ class RtnSingleTeamYear(object):
|
|
|
300
329
|
'Division', 'Conference', 'Region', 'USAG']}
|
|
301
330
|
|
|
302
331
|
if self._raw_rankings[team_vs_ind][event] is None:
|
|
303
|
-
self._get_raw_rankings(team_vs_ind=team_vs_ind, event=event, week=week)
|
|
332
|
+
self._get_raw_rankings(team_vs_ind=team_vs_ind, event=event, week=week, force_update=force_update)
|
|
304
333
|
|
|
305
334
|
return pd.DataFrame(self._raw_rankings[team_vs_ind][event])[col_orders[team_vs_ind]]
|
|
306
335
|
|
|
@@ -7,12 +7,12 @@ def save(df, filename):
|
|
|
7
7
|
df.to_csv(filename, index=False)
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
def all_teams(year):
|
|
10
|
+
def all_teams(year, force_update=False):
|
|
11
11
|
rtn = RtnSingleTeamYear(year=year, team_name=None)
|
|
12
|
-
return list(rtn.get_team_mapping().keys())
|
|
12
|
+
return list(rtn.get_team_mapping(force_update=force_update).keys())
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
def roster(year, teams, include_hometowns=False, include_class=False, include_events=False, verbose=False):
|
|
15
|
+
def roster(year, teams, include_hometowns=False, include_class=False, include_events=False, verbose=False, force_update=False):
|
|
16
16
|
teams = validate_input(teams)
|
|
17
17
|
|
|
18
18
|
all_rosters = []
|
|
@@ -21,7 +21,7 @@ def roster(year, teams, include_hometowns=False, include_class=False, include_ev
|
|
|
21
21
|
print(f'Getting roster for {team} ', end='\r' if team != teams[-1] else None)
|
|
22
22
|
rtn = RtnSingleTeamYear(year=year, team_name=team)
|
|
23
23
|
res = rtn.get_roster(include_hometowns=include_hometowns, include_class=include_class,
|
|
24
|
-
include_events=include_events)
|
|
24
|
+
include_events=include_events, force_update=force_update)
|
|
25
25
|
if verbose and len(res) == 0:
|
|
26
26
|
print(f'\tNo roster found for {team}')
|
|
27
27
|
all_rosters.append(res)
|
|
@@ -30,7 +30,7 @@ def roster(year, teams, include_hometowns=False, include_class=False, include_ev
|
|
|
30
30
|
return pd.concat(all_rosters)[ROSTER_COLS + extra_cols]
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def schedule(year, teams, verbose=False):
|
|
33
|
+
def schedule(year, teams, verbose=False, force_update=False):
|
|
34
34
|
teams = validate_input(teams)
|
|
35
35
|
|
|
36
36
|
all_schedules = []
|
|
@@ -38,7 +38,7 @@ def schedule(year, teams, verbose=False):
|
|
|
38
38
|
if verbose:
|
|
39
39
|
print(f'Getting schedule for {team} ', end='\r' if team != teams[-1] else None)
|
|
40
40
|
rtn = RtnSingleTeamYear(year=year, team_name=team)
|
|
41
|
-
res = rtn.get_schedule()
|
|
41
|
+
res = rtn.get_schedule(force_update=force_update)
|
|
42
42
|
if verbose and len(res) == 0:
|
|
43
43
|
print(f'\tNo schedule found for {team}')
|
|
44
44
|
all_schedules.append(res)
|
|
@@ -54,7 +54,7 @@ def team_results(year, teams, method='team_consistency', force_update=False, ver
|
|
|
54
54
|
if verbose:
|
|
55
55
|
print(f'Getting schedule and results for {team} ', end='\r' if team != teams[-1] else None)
|
|
56
56
|
rtn = RtnSingleTeamYear(year=year, team_name=team)
|
|
57
|
-
res = rtn.get_team_scores(method=method,force_update=force_update)
|
|
57
|
+
res = rtn.get_team_scores(method=method, force_update=force_update)
|
|
58
58
|
if verbose and len(res) == 0:
|
|
59
59
|
print(f'\tNo schedule and results found for {team}')
|
|
60
60
|
all_results.append(res)
|
|
@@ -78,7 +78,7 @@ def individual_results(year, teams, method='by_meet', force_update=False, verbos
|
|
|
78
78
|
return pd.concat(all_scores)[SCHEDULE_COLS + IND_RESULTS_COLS]
|
|
79
79
|
|
|
80
80
|
|
|
81
|
-
def individual_nqs(year, teams, verbose=False):
|
|
81
|
+
def individual_nqs(year, teams, verbose=False, force_update=False):
|
|
82
82
|
teams = validate_input(teams)
|
|
83
83
|
|
|
84
84
|
all_nqs = []
|
|
@@ -86,7 +86,7 @@ def individual_nqs(year, teams, verbose=False):
|
|
|
86
86
|
if verbose:
|
|
87
87
|
print(f'Getting individual NQS for {team} ', end='\r' if team != teams[-1] else None)
|
|
88
88
|
rtn = RtnSingleTeamYear(year=year, team_name=team)
|
|
89
|
-
res = rtn.get_individual_nqs()
|
|
89
|
+
res = rtn.get_individual_nqs(force_update=force_update)
|
|
90
90
|
if verbose and len(res) == 0:
|
|
91
91
|
print(f'\tNo individual NQS found for {team}')
|
|
92
92
|
all_nqs.append(res)
|
|
@@ -94,6 +94,6 @@ def individual_nqs(year, teams, verbose=False):
|
|
|
94
94
|
return pd.concat(all_nqs)[ROSTER_COLS + EVENTS] # + ['AA']]
|
|
95
95
|
|
|
96
96
|
|
|
97
|
-
def rankings(year, team_vs_ind='team', event='AA', week=None):
|
|
97
|
+
def rankings(year, team_vs_ind='team', event='AA', week=None, force_update=False):
|
|
98
98
|
rtn = RtnSingleTeamYear(year=year, team_name=None)
|
|
99
|
-
return rtn.get_overall_rankings(team_vs_ind=team_vs_ind, event=event, week=week)
|
|
99
|
+
return rtn.get_overall_rankings(team_vs_ind=team_vs_ind, event=event, week=week, force_update=force_update)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: scraping_rtn
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.7.1
|
|
4
4
|
Summary: package to scrape gymnastics data from Road To Nationals
|
|
5
5
|
Author-email: Claire Harmon <ceharmon220@gmail.com>
|
|
6
6
|
Project-URL: Homepage, https://github.com/cgn-charmon/scraping_rtn
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{scraping_rtn-0.0.6.1 → scraping_rtn-0.0.7.1}/src/scraping_rtn.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|