From d8dee0ab111fdfc0c7bb712b2626cb39dbdfa7e3 Mon Sep 17 00:00:00 2001 From: Jim Laney Date: Mon, 8 Oct 2018 11:06:06 -0700 Subject: [PATCH 1/4] drops python-coveralls --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index d2bb270..f10f7cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,9 +8,9 @@ before_script: - pip install nose2 - pip install coverage - pip install commonconf -- pip install python-coveralls +- pip install coveralls script: -- pycodestyle uw_grad/ --exclude=uw_grad/tests +- pycodestyle uw_grad/ - coverage run --source=uw_grad uw_grad/test.py -v after_script: - coveralls @@ -25,4 +25,4 @@ deploy: secure: og2aSaURgwLh85l6ZvZUZ9JQpKOws2OF0OGpzMWbNvH9VT1JLW1roEbr5ocUhnWYpkOjt+YLDL8R6Id/8KbUuMi2RXrcstoXM9/SICtfceMHX+3tlx+YLX7Xtud5q9z+QcxurfpeHjfLHyAxbwz7GE2gkUOUwtSy4i403qcMJ5TAlCmoYZn6Jdce/0n+8j9aqeduryMPHJQ2Y/jQtqt4RcYIhk3ZYHoC2TLayKyZmMU+7XYqBmFoHNwVWVenSgOGK+iB/B1/ZRnjqOGG5kSz40wSRHAkYNRRz0nGSf7w9v4zRbNRsisiEMmXRvzpFAId3ekrKlIiNuMRvVUlKCkH1iC1ExZSh1txhAnVgz8gCocNMelqJQXhxsO4dxAHlxEQzAFHoQFTL8yHxSzbhhyq0cyzWtrOssRe6srFT6aViM4pGAUX6Hp3nR4H5oh83VQxO++tosOkalA80rLDhw5WCja4ETmTYOqCwWNlIgEcWBgSCQvpwds32UHUx/D7wIbX2U9Lqw9ij64tjIDTAKy2zcPhH6WhqL8OWR5jyrGz5Ug6YN1CUd4Scz0WmrlDodWQ9sk2iG2YNiLc/wERYHvDPcme5eCIi+21PBfMI/ZkTXZXNe3fmfXPPaU4IkUjT0OHAn+4qySr2mBHUaKb2Ne1Lw3ceRCHTs0uJ+CLcpxEJfM= on: tags: true -condition: $TRAVIS_PYTHON_VERSION = "3.6" + python: '3.6' From edf130349849de3336c7838ef56c3c764de79754 Mon Sep 17 00:00:00 2001 From: Jim Laney Date: Mon, 8 Oct 2018 11:06:29 -0700 Subject: [PATCH 2/4] pycodestyle fixes for tests --- uw_grad/tests/test_committee.py | 2 +- uw_grad/tests/test_petition.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/uw_grad/tests/test_committee.py b/uw_grad/tests/test_committee.py index fd70478..a420477 100644 --- a/uw_grad/tests/test_committee.py +++ b/uw_grad/tests/test_committee.py @@ -84,7 +84,7 @@ def test_get_committee_by_syskey(self): "GSR") member_json = json_data["members"][3] self.assertEqual(member_json["member_type"], - None) + None) def test_error(self): self.assertRaises(DataFailureException, diff --git a/uw_grad/tests/test_petition.py b/uw_grad/tests/test_petition.py index fdfb38d..e10509c 100644 --- a/uw_grad/tests/test_petition.py +++ b/uw_grad/tests/test_petition.py @@ -49,7 +49,6 @@ def test_get_petition_by_syskey(self): self.assertEqual(json_data['gradschool_decision'], "Pending") - petition = requests[2] self.assertEqual(petition.dept_recommend, "withdraw") self.assertEqual(petition.gradschool_decision, "withdraw") @@ -62,7 +61,6 @@ def test_get_petition_by_syskey(self): self.assertEqual(json_data['gradschool_decision'], "Withdraw") - petition = requests[3] self.assertEqual(petition.gradschool_decision, "withdrawn") self.assertIsNone(petition.decision_date) From 8165651e647922a165b6479c1a35c018baa94e0e Mon Sep 17 00:00:00 2001 From: Jim Laney Date: Mon, 8 Oct 2018 11:10:53 -0700 Subject: [PATCH 3/4] use format() instead of %s --- uw_grad/committee.py | 11 +++++----- uw_grad/degree.py | 13 +++++++----- uw_grad/leave.py | 7 ++++--- uw_grad/models.py | 48 ++++++++++++++++++++++---------------------- uw_grad/petition.py | 7 ++++--- 5 files changed, 46 insertions(+), 40 deletions(-) diff --git a/uw_grad/committee.py b/uw_grad/committee.py index 51f34cc..3ec2db0 100644 --- a/uw_grad/committee.py +++ b/uw_grad/committee.py @@ -1,19 +1,20 @@ """ -Interfacing with the Grad Scho Committee Request API +Interfacing with the Grad School Committee Request API """ import logging import json +from urllib.parse import urlencode from uw_grad.models import GradCommitteeMember, GradCommittee from uw_grad import get_resource, parse_datetime -PREFIX = "/services/students/v1/api/committee?id=" -SUFFIX = "&status=active" +PREFIX = "/services/students/v1/api/committee" logger = logging.getLogger(__name__) -def get_committee_by_syskey(system_key): - url = "%s%s%s" % (PREFIX, system_key, SUFFIX) +def get_committee_by_syskey(system_key, status="active"): + params = [("id", system_key), ("status", status), ] + url = "{}?{}".format(PREFIX, urlencode(params)) return _process_json(json.loads(get_resource(url))) diff --git a/uw_grad/degree.py b/uw_grad/degree.py index 3ce9a94..a4ed61a 100644 --- a/uw_grad/degree.py +++ b/uw_grad/degree.py @@ -1,19 +1,22 @@ """ -Interfacing with the Grad Scho Degree Request API +Interfacing with the Grad School Degree Request API """ import logging import json +from urllib.parse import urlencode from uw_grad.models import GradDegree from uw_grad import get_resource, parse_datetime -PREFIX = "/services/students/v1/api/request?id=" -SUFFIX = "&exclude_past_quarter=true" +PREFIX = "/services/students/v1/api/request" logger = logging.getLogger(__name__) -def get_degree_by_syskey(system_key): - url = "%s%s%s" % (PREFIX, system_key, SUFFIX) +def get_degree_by_syskey(system_key, exclude_past_quarter=True): + params = [ + ("id", system_key), + ("exclude_past_quarter", "true" if exclude_past_quarter else ""), ] + url = "{}?{}".format(PREFIX, urlencode(params)) return _process_json(json.loads(get_resource(url))) diff --git a/uw_grad/leave.py b/uw_grad/leave.py index a3d9d43..cfe4c71 100644 --- a/uw_grad/leave.py +++ b/uw_grad/leave.py @@ -1,18 +1,19 @@ """ -Interfacing with the GradScho Degree Request API +Interfacing with the GradSchool Degree Request API """ import logging import json +from urllib.parse import urlencode from uw_grad.models import GradLeave, GradTerm from uw_grad import get_resource, parse_datetime -PREFIX = "/services/students/v1/api/leave?id=" +PREFIX = "/services/students/v1/api/leave" logger = logging.getLogger(__name__) def get_leave_by_syskey(system_key): - url = "%s%s" % (PREFIX, system_key) + url = "{}?{}".format(PREFIX, urlencode([("id", system_key), ])) return _process_json(json.loads(get_resource(url))) diff --git a/uw_grad/models.py b/uw_grad/models.py index 11d64d4..a5dbb34 100644 --- a/uw_grad/models.py +++ b/uw_grad/models.py @@ -123,19 +123,19 @@ class GradCommitteeMember(models.Model): status = models.CharField(max_length=64) def __eq__(self, other): - return self.member_type == other.member_type and\ - self.last_name == other.last_name and\ - self.first_name == other.first_name + return (self.member_type == other.member_type and + self.last_name == other.last_name and + self.first_name == other.first_name) def __ne__(self, other): - return self.member_type != other.member_type or\ - self.last_name != other.last_name or\ - self.first_name != other.first_name + return (self.member_type != other.member_type or + self.last_name != other.last_name or + self.first_name != other.first_name) def __lt__(self, other): - return self.member_type == other.member_type and\ - self.last_name < other.last_name or\ - self.member_type < other.member_type + return (self.member_type == other.member_type and + self.last_name < other.last_name or + self.member_type < other.member_type) def is_type_chair(self): return self.member_type == self.CHAIR @@ -147,29 +147,29 @@ def is_type_member(self): return self.member_type == self.MEMBER def is_reading_committee_member(self): - return self.reading_type is not None and\ - self.reading_type == self.MEMBER + return (self.reading_type is not None and + self.reading_type == self.MEMBER) def is_reading_committee_chair(self): - return self.reading_type is not None and\ - self.reading_type == self.CHAIR + return (self.reading_type is not None and + self.reading_type == self.CHAIR) def get_reading_display(self): - if self.is_reading_committee_chair() or\ - self.is_reading_committee_member(): + if (self.is_reading_committee_chair() or + self.is_reading_committee_member()): return self.get_reading_type_display() return None def __str__(self): - return "%s: %s, %s: %s, %s: %s, %s: %s, %s: %s, %s: %s, %s: %s" %\ - ( - "member_type", self.member_type, - "reading_type", self.reading_type, - "last_name", self.last_name, - "first_name", self.first_name, - "dept", self.dept, - "email", self.email, - "status", self.status) + return ("member_type: {}, reading_type: {}, last_name: {}, " + "first_name: {}, dept: {}, email: {}, status: {}").format( + self.member_type, + self.reading_type, + self.last_name, + self.first_name, + self.dept, + self.email, + self.status) def json_data(self): return { diff --git a/uw_grad/petition.py b/uw_grad/petition.py index ce3fb89..96c3649 100644 --- a/uw_grad/petition.py +++ b/uw_grad/petition.py @@ -1,18 +1,19 @@ """ -Interfacing with the Grad Scho Petition Request API +Interfacing with the Grad School Petition Request API """ import logging import json +from urllib.parse import urlencode from uw_grad.models import GradPetition from uw_grad import get_resource, parse_datetime -PREFIX = "/services/students/v1/api/petition?id=" +PREFIX = "/services/students/v1/api/petition" logger = logging.getLogger(__name__) def get_petition_by_syskey(system_key): - url = "%s%s" % (PREFIX, system_key) + url = "{}?{}".format(PREFIX, urlencode([("id", system_key), ])) return _process_json(json.loads(get_resource(url))) From e45bbe2c377ccfd96509cd357373ca64cf986c43 Mon Sep 17 00:00:00 2001 From: Jim Laney Date: Mon, 8 Oct 2018 11:22:30 -0700 Subject: [PATCH 4/4] adds tests for alternate param values --- uw_grad/tests/test_committee.py | 5 +++++ uw_grad/tests/test_degree.py | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/uw_grad/tests/test_committee.py b/uw_grad/tests/test_committee.py index a420477..ea75d52 100644 --- a/uw_grad/tests/test_committee.py +++ b/uw_grad/tests/test_committee.py @@ -87,5 +87,10 @@ def test_get_committee_by_syskey(self): None) def test_error(self): + # Not found syskey self.assertRaises(DataFailureException, get_committee_by_syskey, "0000000001") + + # Not found status param + self.assertRaises(DataFailureException, + get_committee_by_syskey, "000083856", status="all") diff --git a/uw_grad/tests/test_degree.py b/uw_grad/tests/test_degree.py index 6b73c81..d1397c3 100644 --- a/uw_grad/tests/test_degree.py +++ b/uw_grad/tests/test_degree.py @@ -38,5 +38,11 @@ def test_get_request_by_regid(self): self.assertTrue(degree.is_status_not_graduate()) def test_error(self): + # Not found syskey self.assertRaises(DataFailureException, get_degree_by_syskey, "000000001") + + # Not found exclude_past_quarter param + self.assertRaises( + DataFailureException, get_degree_by_syskey, + "000083856", exclude_past_quarter=False)