schoolapp-api 2.1.3__tar.gz → 2.1.4__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 (38) hide show
  1. {schoolapp_api-2.1.3/schoolapp_api.egg-info → schoolapp_api-2.1.4}/PKG-INFO +1 -1
  2. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/pyproject.toml +1 -1
  3. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/auth.py +4 -3
  4. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/http_client.py +15 -10
  5. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4/schoolapp_api.egg-info}/PKG-INFO +1 -1
  6. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/LICENSE +0 -0
  7. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/README.md +0 -0
  8. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/__init__.py +0 -0
  9. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/constants.py +0 -0
  10. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/__init__.py +0 -0
  11. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/attendance_manager.py +0 -0
  12. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/base_manager.py +0 -0
  13. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/course_manager.py +0 -0
  14. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/grades_manager.py +0 -0
  15. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/managers/profile_manager.py +0 -0
  16. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/__init__.py +0 -0
  17. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/absences.py +0 -0
  18. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/annees.py +0 -0
  19. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/filieres.py +0 -0
  20. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/modules.py +0 -0
  21. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/note_elem.py +0 -0
  22. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/note_mod.py +0 -0
  23. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/profile.py +0 -0
  24. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/sanctions.py +0 -0
  25. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/semestres.py +0 -0
  26. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/parsers/stats.py +0 -0
  27. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/school_app_client.py +0 -0
  28. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/__init__.py +0 -0
  29. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/annee.py +0 -0
  30. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/base.py +0 -0
  31. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/element.py +0 -0
  32. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/module.py +0 -0
  33. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api/types/semestre.py +0 -0
  34. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api.egg-info/SOURCES.txt +0 -0
  35. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api.egg-info/dependency_links.txt +0 -0
  36. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api.egg-info/requires.txt +0 -0
  37. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/schoolapp_api.egg-info/top_level.txt +0 -0
  38. {schoolapp_api-2.1.3 → schoolapp_api-2.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schoolapp-api
3
- Version: 2.1.3
3
+ Version: 2.1.4
4
4
  Summary: Professional client for interacting with the School App API
5
5
  Author: Aferiad Kamal
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "schoolapp-api"
7
- version = "2.1.3"
7
+ version = "2.1.4"
8
8
  description = "Professional client for interacting with the School App API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.7"
@@ -71,11 +71,12 @@ class AuthManager:
71
71
 
72
72
  def check_session(self):
73
73
  """
74
- Confirm whether the session is still valid.
74
+ Confirm whether the session is still valid by visiting the index page.
75
75
  """
76
- code, url, content = self.http_client.get(self.login_url)
76
+ from schoolapp_api.constants import INDEX_URL
77
+ code, url, content = self.http_client.get(INDEX_URL)
77
78
 
78
- # If server redirects us back to login, session is dead
79
+ # If server redirects us to login, session is dead
79
80
  if url and "/login" in url:
80
81
  self.logged_in = False
81
82
  return False
@@ -24,13 +24,9 @@ class HTTPClient:
24
24
  def __init__(self, base_url):
25
25
  self.base_url = base_url
26
26
  self.cookie_jar = http.cookiejar.CookieJar()
27
- opener = urllib.request.build_opener(
28
- urllib.request.HTTPCookieProcessor(self.cookie_jar),
29
- NoRedirectHandler()
27
+ self.opener = urllib.request.build_opener(
28
+ urllib.request.HTTPCookieProcessor(self.cookie_jar)
30
29
  )
31
- urllib.request.install_opener(opener)
32
- # opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(self.cookie_jar))
33
- # urllib.request.install_opener(opener)
34
30
  self.headers = DEFAULT_HEADERS.copy()
35
31
 
36
32
  def get(self, url, params=None):
@@ -43,15 +39,20 @@ class HTTPClient:
43
39
 
44
40
  req = urllib.request.Request(url, headers=self.headers, method="GET")
45
41
 
46
- with urllib.request.urlopen(req) as response:
42
+ with self.opener.open(req, timeout=15) as response:
47
43
  code = response.getcode()
48
44
  response_url = response.geturl()
49
45
  content = response.read().decode("utf-8")
50
46
  return code, response_url, content
51
47
 
52
48
  except urllib.error.HTTPError as e:
49
+ # Still get content from error page if possible (some portals return 401 with nice HTML)
50
+ try:
51
+ content = e.read().decode("utf-8")
52
+ except:
53
+ content = None
53
54
  logger.error(f"HTTP Error {e.code}: {e.reason}")
54
- return e.code, None, None
55
+ return e.code, e.url, content
55
56
  except Exception as e:
56
57
  logger.error(f"GET Error: {e}")
57
58
  return None, None, None
@@ -66,14 +67,18 @@ class HTTPClient:
66
67
  if referer:
67
68
  req.add_header('Referer', referer)
68
69
 
69
- with urllib.request.urlopen(req) as response:
70
+ with self.opener.open(req, timeout=15) as response:
70
71
  code = response.getcode()
71
72
  response_url = response.geturl()
72
73
  content = response.read().decode('utf-8')
73
74
  return code, response_url, content
74
75
  except urllib.error.HTTPError as e:
76
+ try:
77
+ content = e.read().decode("utf-8")
78
+ except:
79
+ content = None
75
80
  logger.error(f"HTTP Error {e.code}: {e.reason}")
76
- return e.code, None, None
81
+ return e.code, e.url, content
77
82
  except Exception as e:
78
83
  logger.error(f"POST Error: {e}")
79
84
  return None, None, None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: schoolapp-api
3
- Version: 2.1.3
3
+ Version: 2.1.4
4
4
  Summary: Professional client for interacting with the School App API
5
5
  Author: Aferiad Kamal
6
6
  License: MIT
File without changes
File without changes
File without changes