runtilities 2.2.1.dev1__tar.gz → 2.3.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 (42) hide show
  1. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/PKG-INFO +1 -1
  2. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/runningahead.py +3 -0
  3. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/runsignup.py +47 -16
  4. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/version.py +1 -1
  5. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/PKG-INFO +1 -1
  6. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/README.md +0 -0
  7. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/__init__.py +0 -0
  8. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/analyzeagegrade.py +0 -0
  9. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/athlinks.py +0 -0
  10. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/athlinksresults.py +0 -0
  11. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/comparegpx.py +0 -0
  12. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/competitor.py +0 -0
  13. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/competitor2csv.py +0 -0
  14. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/getweather.py +0 -0
  15. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/gpx2kml.py +0 -0
  16. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/parseralogxml.py +0 -0
  17. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/parseresults.py +0 -0
  18. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/parserun-bk3.py +0 -0
  19. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/parsetcx.py +0 -0
  20. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/ra2membersfile.py +0 -0
  21. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/racewx-render.py +0 -0
  22. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/racewx.py +0 -0
  23. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/renderclubagstats.py +0 -0
  24. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/runningaheadmembers.py +0 -0
  25. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/runningaheadparticipants.py +0 -0
  26. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/runningaheadresults.py +0 -0
  27. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/strava.py +0 -0
  28. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/textnormalize.py +0 -0
  29. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/ultrasignup.py +0 -0
  30. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/ultrasignupresults.py +0 -0
  31. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/xmldict.py +0 -0
  32. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/xmldict1.py +0 -0
  33. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/xmldict2.py +0 -0
  34. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/running/xmlreader.py +0 -0
  35. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/SOURCES.txt +0 -0
  36. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/dependency_links.txt +0 -0
  37. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/entry_points.txt +0 -0
  38. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/not-zip-safe +0 -0
  39. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/requires.txt +0 -0
  40. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/runtilities.egg-info/top_level.txt +0 -0
  41. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/setup.cfg +0 -0
  42. {runtilities-2.2.1.dev1 → runtilities-2.3.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtilities
3
- Version: 2.2.1.dev1
3
+ Version: 2.3.0
4
4
  Summary: running related scripts
5
5
  Home-page: http://github.com/louking/running
6
6
  Author: Lou King
@@ -46,6 +46,9 @@ from oauthlib.oauth2 import BackendApplicationClient
46
46
  # home grown
47
47
  # from running import *
48
48
  from loutilities import apikey
49
+ import version
50
+
51
+ class parameterError(Exception): pass
49
52
 
50
53
  # OAuth stuff
51
54
  auth_url = 'https://www.runningahead.com/oauth2/authorize'
@@ -37,6 +37,7 @@ from tempfile import NamedTemporaryFile
37
37
  # pypi
38
38
  from flask import current_app
39
39
  import requests
40
+ from universalclient import Client as UniversalClient
40
41
 
41
42
  # github
42
43
 
@@ -49,21 +50,19 @@ from loutilities.csvwt import record2csv
49
50
  from loutilities.nicknames import NameDenormalizer
50
51
  names = NameDenormalizer()
51
52
 
53
+ # use api.runsignup.com per https://info.runsignup.com/2025/08/06/upgrading-our-api-infrastructure-for-ai-api-runsignup-com/
54
+
52
55
  # login API (deprecated)
53
- login_url = 'https://runsignup.com/rest/login'
54
- logout_url = 'https://runsignup.com/rest/logout'
56
+ login_url = 'https://api.runsignup.com/rest/login'
57
+ logout_url = 'https://api.runsignup.com/rest/logout'
55
58
 
56
59
  # methods
57
- members_url = 'https://runsignup.com/rest/club/{club_id}/members'
58
- getrace_url = 'https://runsignup.com/rest/race/{race_id}'
59
- getracedivisions_url = 'https://runsignup.com/rest/race/{race_id}/divisions/divisions'
60
- getresultsets_url = 'https://runsignup.com/rest/race/{race_id}/results/get-result-sets'
61
- geteventresults_url = 'https://runsignup.com/rest/race/{race_id}/results/get-results'
62
-
63
- # OAuth stuff - NOT USED
64
- # request_token_url = 'https://runsignup.com/oauth/requestToken.php'
65
- # verify_url = 'https://runsignup.com/OAuth/Verify'
66
- # access_token_url = 'https://runsignup.com/oauth/accessToken.php'
60
+ members_url = 'https://api.runsignup.com/rest/club/{club_id}/members'
61
+ getrace_url = 'https://api.runsignup.com/rest/race/{race_id}'
62
+ getracedivisions_url = 'https://api.runsignup.com/rest/race/{race_id}/divisions/divisions'
63
+ getresultsets_url = 'https://api.runsignup.com/rest/race/{race_id}/results/get-result-sets'
64
+ geteventresults_url = 'https://api.runsignup.com/rest/race/{race_id}/results/get-results'
65
+ getraceparticipants_url = 'https://api.runsignup.com/rest/race/{race_id}/participants'
67
66
 
68
67
  KMPERMILE = 1.609344
69
68
 
@@ -152,7 +151,7 @@ class RunSignUp():
152
151
  # email / password supplied
153
152
  else:
154
153
  # login to runsignup - note temporary keys will expire 1 hour after last API call
155
- # see https://runsignup.com/API/login/POST
154
+ # see https://api.runsignup.com/API/login/POST
156
155
  r = requests.post(login_url, params={'format' : 'json'}, data={'email' : self.email, 'password' : self.password})
157
156
  resp = r.json()
158
157
 
@@ -175,8 +174,8 @@ class RunSignUp():
175
174
  requires credentials
176
175
 
177
176
  :param club_id: numeric club id
178
- :param kwargs: non-default arguments, per https://runsignup.com/API/club/:club_id/members/GET
179
- :return: members list (format per https://runsignup.com/API/club/:club_id/members/GET)
177
+ :param kwargs: non-default arguments, per https://api.runsignup.com/API/club/:club_id/members/GET
178
+ :return: members list (format per https://api.runsignup.com/API/club/:club_id/members/GET)
180
179
  '''
181
180
  """
182
181
  return members accessible to this application
@@ -637,7 +636,7 @@ class ClubMembership():
637
636
  holds attributes for club membership
638
637
  '''
639
638
  # set up transformation to flatten record into ClubMembership object with attributes named as Transform keys
640
- # transform is from RunSignUp.members.get - see https://runsignup.com/API/club/:club_id/members/GET
639
+ # transform is from RunSignUp.members.get - see https://api.runsignup.com/API/club/:club_id/members/GET
641
640
  xformmapping = {
642
641
  'user_id': lambda mem: mem['user']['user_id'],
643
642
  'membership_id': 'membership_id',
@@ -873,3 +872,35 @@ class ClubMemberships():
873
872
  self.userid2mem[member]
874
873
  for member in self.userid2mem
875
874
  )
875
+
876
+ class RunSignupFluent(UniversalClient):
877
+ from rauth import OAuth2Service
878
+
879
+ '''
880
+ Fluent interface to RunSignUp API -- see https://universal-client.readthedocs.io
881
+ '''
882
+ def __init__(self, key=None, secret=None, debug=False):
883
+ '''
884
+ initialize RunSignUp Fluent client
885
+
886
+ :param key: api key for RunSignUp
887
+ :param secret: api secret for RunSignUp
888
+ :param debug: debug flag
889
+ '''
890
+ # rsuservice = Oauth2Service(
891
+ # name='runsignup',
892
+ # authorize_url='https://www.runsignup.com/oauth2/authorize',
893
+ # access_token_url='https://api.runsignup.com/oauth2/token',
894
+ # client_id=key,
895
+ # client_secret=secret,
896
+ # )
897
+
898
+ self._params = params = {'api_key' : key,
899
+ 'api_secret' : secret,
900
+ 'format' : 'json' }
901
+
902
+ super().__init__(
903
+ url='https://api.runsignup.com/rest',
904
+ params=params,
905
+ )
906
+
@@ -1,2 +1,2 @@
1
1
  # this string is used for the version string in the documentation, as well as the egg
2
- __version__ = '2.2.1.dev1'
2
+ __version__ = '2.3.0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: runtilities
3
- Version: 2.2.1.dev1
3
+ Version: 2.3.0
4
4
  Summary: running related scripts
5
5
  Home-page: http://github.com/louking/running
6
6
  Author: Lou King
File without changes
File without changes
File without changes