From 6f99ac77f8f1abc083c0aa37c42efc35a489578b Mon Sep 17 00:00:00 2001 From: aviiciii Date: Fri, 20 Jan 2023 23:12:24 +0530 Subject: [PATCH] added parsing of roll no fixed dept name and code bug --- README.md | 8 + .../__pycache__/__init__.cpython-310.pyc | Bin 0 -> 173 bytes src/rollno/__pycache__/module.cpython-310.pyc | Bin 0 -> 1912 bytes src/rollno/module.py | 65 ++++- tests/test_module.py | 270 ++++++++++++------ 5 files changed, 246 insertions(+), 97 deletions(-) create mode 100644 src/rollno/__pycache__/__init__.cpython-310.pyc create mode 100644 src/rollno/__pycache__/module.cpython-310.pyc diff --git a/README.md b/README.md index c2c2e09..bf58f28 100644 --- a/README.md +++ b/README.md @@ -27,3 +27,11 @@ eg) 2021PECCB101 PEC - Panimalar Engineering College CB - Department (Computer Science and Business Systems) 101 - Roll Number of Student + + +### Release Steps + +- change version number in pyproject.toml +- add modules to pyproject.toml +- add dependencies if any +- add new functions in readme diff --git a/src/rollno/__pycache__/__init__.cpython-310.pyc b/src/rollno/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0cbcfcbfb8583306c9d7dc917a0168ec7698e151 GIT binary patch literal 173 zcmd1j<>g`kf?dZ?C5r;-#~=i&!!oa6qL?X;_|JLNAJFksl;qmtMOvSAeXNPhbG>wAwcX*8+?%7?%G68s9i z-*K>97!1CEs#{9utlzL2HS!aG|wDMO2}61nm;9b_TP^-t_+K z=4R_)WBtLacN?>V*7_rCz2=Kf+iM#Z9~y*sxQ*z2w9k&w+cGmiXuLM0F49{hP z{$uEzd$5+$3|`@THlx`hL(fu}&z$Z*S5%iQ%N7+kq4N{=CI?)nls=Xd=~P{AlCsGfCHQ?yM7>Mi8tXNt`!{LyKjisOWu~9Dli_Hb zO2xbIfa5@NKNfs@tixDp&AStw%Aua}8)=<*05qxK{ZChS*z5<@xaV|GvfQb2yog zyI-B(+)`&g>vE!%yg*;v*XYFmM-JI?2=d9C)+JSMW$J)?;4(-;? zdB9o4BgMy&yI;vkN2x@4wh6snZ4tuS@O#w-a{WEJ7cu!Ytfkk$xMju|z512@s5Y2g zrM6xFt3=t~wxc*uy;6}UOp3rjHBUfc9Gm}3o0+FzGJyM}$lFgbRp~kym)N$;+!eQ3 G|KJ~@DCKMb literal 0 HcmV?d00001 diff --git a/src/rollno/module.py b/src/rollno/module.py index 26e06af..aecadae 100644 --- a/src/rollno/module.py +++ b/src/rollno/module.py @@ -1,6 +1,8 @@ import regex +# Regex for rollno +regex_rollno = r'^(20[1-3]{1}[0-9]{1})(PEC)([A-Z]{2})([0-9]{3})$' def isvalid(rollno): """ @@ -8,8 +10,7 @@ def isvalid(rollno): Returns True if valid, False otherwise """ - # Regex for rollno - regex_rollno = r'^20[1-3]{1}[0-9]{1}(PEC)[A-Z]{2}[0-9]{3}$' + # Check if rollno is valid if regex.match(regex_rollno, rollno.strip().upper()): @@ -18,7 +19,45 @@ def isvalid(rollno): return False -def getdeptcode(rollno): +def parse(rollno, required): + + """ + Parse rollno + Returns parsed rollno if valid, None otherwise + """ + + # Check if rollno is valid + if isvalid(rollno): + + # Match regex + re = regex.match(regex_rollno, rollno.strip().upper()) + + + # Return required + if required == 'year': + # Get year + year = re.group(1) + return year + + elif required == 'college_code': + # Get college code + college_code = re.group(2) + return college_code + elif required == 'department_code': + # Get department code + department_code = re.group(3) + return department_code + elif required == 'shortrollno': + # Get shortrollno + shortrollno = re.group(4) + return shortrollno + else: + return None + else: + return None + + +def get_dept_code(rollno): """ Get department code from rollno Returns department code if valid, None otherwise @@ -26,17 +65,16 @@ def getdeptcode(rollno): # Check if rollno is valid if isvalid(rollno): + # Get department code - department_code=rollno[5:7] + department_code = parse(rollno, 'department_code') return department_code else: return None - - -def getdept(rollno): +def get_dept(rollno): """ Get department from rollno Returns department if valid, None otherwise @@ -50,17 +88,22 @@ def getdept(rollno): 'IT': 'Information Technology', 'EC': 'Electronics and Communication Engineering', 'EE': 'Electrical and Electronics Engineering', - 'CE': 'Computer Science and Engineering', - 'CC': 'Computer Science and Communication Engineering', + 'CE': 'Civil Engineering', + 'CC': 'Computer and Communication Engineering', 'ME': 'Mechanical Engineering', 'AD': 'Artificial Intelligence and Data Science' } # Get department code - department_code=getdeptcode(rollno) + department_code = parse(rollno, 'department_code') + # Get department name and return - department= departments[department_code] + try: + department= departments[department_code] + except KeyError: + return None + return department else: return None \ No newline at end of file diff --git a/tests/test_module.py b/tests/test_module.py index ff3e8df..83d628d 100644 --- a/tests/test_module.py +++ b/tests/test_module.py @@ -1,105 +1,203 @@ import unittest -from src.thecodingsociety import valid +from src.rollno import isvalid, parse, get_dept_code, get_dept class TestParse(unittest.TestCase): + + # ------------------------------------------------------ + + # Valid rollno + + # ------------------------------------------------------ + + def test_correct_rollno(self): - self.assertTrue(valid('2021PECCB901')) - self.assertTrue(valid('2021PECCB012')) - self.assertTrue(valid('2021PECCB123')) - self.assertTrue(valid('2021PECCB234')) - self.assertTrue(valid('2021PECCB345')) - self.assertTrue(valid('2021PECCB456')) - self.assertTrue(valid('2021PECCB567')) - self.assertTrue(valid('2021PECCB678')) - self.assertTrue(valid('2021PECCB789')) - self.assertTrue(valid('2021PECCB890')) + self.assertTrue(isvalid('2021PECCB901')) + self.assertTrue(isvalid('2021PECCB012')) + self.assertTrue(isvalid('2021PECCB123')) + self.assertTrue(isvalid('2021PECCB234')) + self.assertTrue(isvalid('2021PECCB345')) + self.assertTrue(isvalid('2021PECCB456')) + self.assertTrue(isvalid('2021PECCB567')) + self.assertTrue(isvalid('2021PECCB678')) + self.assertTrue(isvalid('2021PECCB789')) + self.assertTrue(isvalid('2021PECCB890')) def test_correct_dept(self): - self.assertTrue(valid('2021PECCB000')) - self.assertTrue(valid('2021PECCS000')) - self.assertTrue(valid('2021PECIT000')) - self.assertTrue(valid('2021PECEC000')) - self.assertTrue(valid('2021PECEE000')) - self.assertTrue(valid('2021PECCE000')) - self.assertTrue(valid('2021PECME000')) - self.assertTrue(valid('2021PECAD000')) - self.assertTrue(valid('2021PECCC000')) + self.assertTrue(isvalid('2021PECCB000')) + self.assertTrue(isvalid('2021PECCS000')) + self.assertTrue(isvalid('2021PECIT000')) + self.assertTrue(isvalid('2021PECEC000')) + self.assertTrue(isvalid('2021PECEE000')) + self.assertTrue(isvalid('2021PECCE000')) + self.assertTrue(isvalid('2021PECME000')) + self.assertTrue(isvalid('2021PECAD000')) + self.assertTrue(isvalid('2021PECCC000')) def test_correct_year(self): - self.assertTrue(valid('2018PECCB000')) - self.assertTrue(valid('2019PECCB000')) - self.assertTrue(valid('2020PECCB000')) - self.assertTrue(valid('2021PECCB000')) - self.assertTrue(valid('2022PECCB000')) - self.assertTrue(valid('2023PECCB000')) - self.assertTrue(valid('2024PECCB000')) - self.assertTrue(valid('2025PECCB000')) - self.assertTrue(valid('2026PECCB000')) - self.assertTrue(valid('2027PECCB000')) - self.assertTrue(valid('2028PECCB000')) - self.assertTrue(valid('2029PECCB000')) - self.assertTrue(valid('2030PECCB000')) + self.assertTrue(isvalid('2018PECCB000')) + self.assertTrue(isvalid('2019PECCB000')) + self.assertTrue(isvalid('2020PECCB000')) + self.assertTrue(isvalid('2021PECCB000')) + self.assertTrue(isvalid('2022PECCB000')) + self.assertTrue(isvalid('2023PECCB000')) + self.assertTrue(isvalid('2024PECCB000')) + self.assertTrue(isvalid('2025PECCB000')) + self.assertTrue(isvalid('2026PECCB000')) + self.assertTrue(isvalid('2027PECCB000')) + self.assertTrue(isvalid('2028PECCB000')) + self.assertTrue(isvalid('2029PECCB000')) + self.assertTrue(isvalid('2030PECCB000')) def test_lettercase(self): - self.assertTrue(valid('2021peccb000')) - self.assertTrue(valid('2021PECCB000')) - self.assertTrue(valid('2021PeCcB000')) - self.assertTrue(valid('2021pEcCb000')) - - def test_invalid_rollno(self): - self.assertFalse(valid('2021PECCB00')) - self.assertFalse(valid('2021PECCB0000')) - self.assertFalse(valid('2021PECCB00000')) - self.assertFalse(valid('2021PECCB000000')) - self.assertFalse(valid('2021PECCB0000000')) - self.assertFalse(valid('2021PECCBXXX')) - self.assertFalse(valid('2021PECCB000X')) - self.assertFalse(valid('2021PECB00X0')) - self.assertFalse(valid('2021PECB00X0')) + self.assertTrue(isvalid('2021peccb000')) + self.assertTrue(isvalid('2021PECCB000')) + self.assertTrue(isvalid('2021PeCcB000')) + self.assertTrue(isvalid('2021pEcCb000')) + + def test_inisvalid_rollno(self): + self.assertFalse(isvalid('2021PECCB00')) + self.assertFalse(isvalid('2021PECCB0000')) + self.assertFalse(isvalid('2021PECCB00000')) + self.assertFalse(isvalid('2021PECCB000000')) + self.assertFalse(isvalid('2021PECCB0000000')) + self.assertFalse(isvalid('2021PECCBXXX')) + self.assertFalse(isvalid('2021PECCB000X')) + self.assertFalse(isvalid('2021PECB00X0')) + self.assertFalse(isvalid('2021PECB00X0')) - def test_invalid_dept(self): - self.assertFalse(valid('2021PEC11000')) - self.assertFalse(valid('2021PEC22000')) - self.assertFalse(valid('2021PEC33000')) - self.assertFalse(valid('2021PEC44000')) - self.assertFalse(valid('2021PEC55000')) - self.assertFalse(valid('2021PEC66000')) - self.assertFalse(valid('2021PEC000')) - self.assertFalse(valid('2021PEC0B000')) - self.assertFalse(valid('2021PEC1B000')) - self.assertFalse(valid('2021PEC2B000')) - self.assertFalse(valid('2021PEC3B000')) - self.assertFalse(valid('2021PEC4B000')) - self.assertFalse(valid('2021PEC5B000')) - self.assertFalse(valid('2021PEC6B000')) - self.assertFalse(valid('2021PEC7B000')) - self.assertFalse(valid('2021PEC8B000')) - self.assertFalse(valid('2021PEC9B000')) - - def test_invalid_year(self): - self.assertFalse(valid('2007PECCB000')) - self.assertFalse(valid('2008PECCB000')) - self.assertFalse(valid('2009PECCB000')) - self.assertFalse(valid('2000PECCB000')) - self.assertFalse(valid('1000PECCB000')) - self.assertFalse(valid('0000PECCB000')) - self.assertFalse(valid('0009PECCB000')) - self.assertFalse(valid('9900PECCB000')) - self.assertFalse(valid('9999PECCB000')) + def test_inisvalid_dept(self): + self.assertFalse(isvalid('2021PEC11000')) + self.assertFalse(isvalid('2021PEC22000')) + self.assertFalse(isvalid('2021PEC33000')) + self.assertFalse(isvalid('2021PEC44000')) + self.assertFalse(isvalid('2021PEC55000')) + self.assertFalse(isvalid('2021PEC66000')) + self.assertFalse(isvalid('2021PEC000')) + self.assertFalse(isvalid('2021PEC0B000')) + self.assertFalse(isvalid('2021PEC1B000')) + self.assertFalse(isvalid('2021PEC2B000')) + self.assertFalse(isvalid('2021PEC3B000')) + self.assertFalse(isvalid('2021PEC4B000')) + self.assertFalse(isvalid('2021PEC5B000')) + self.assertFalse(isvalid('2021PEC6B000')) + self.assertFalse(isvalid('2021PEC7B000')) + self.assertFalse(isvalid('2021PEC8B000')) + self.assertFalse(isvalid('2021PEC9B000')) + + def test_inisvalid_year(self): + self.assertFalse(isvalid('2007PECCB000')) + self.assertFalse(isvalid('2008PECCB000')) + self.assertFalse(isvalid('2009PECCB000')) + self.assertFalse(isvalid('2000PECCB000')) + self.assertFalse(isvalid('1000PECCB000')) + self.assertFalse(isvalid('0000PECCB000')) + self.assertFalse(isvalid('0009PECCB000')) + self.assertFalse(isvalid('9900PECCB000')) + self.assertFalse(isvalid('9999PECCB000')) def test_pec(self): - self.assertFalse(valid('2021PITCB000')) - self.assertFalse(valid('2021PITCB000')) - self.assertFalse(valid('2021PCECB000')) - self.assertFalse(valid('2021BECCB000')) - self.assertFalse(valid('2021EPCCB000')) - self.assertFalse(valid('2021MECCB000')) - self.assertFalse(valid('2021CECCB000')) - self.assertFalse(valid('2021EECCB000')) - self.assertFalse(valid('2021PEXCB000')) + self.assertFalse(isvalid('2021PITCB000')) + self.assertFalse(isvalid('2021PITCB000')) + self.assertFalse(isvalid('2021PCECB000')) + self.assertFalse(isvalid('2021BECCB000')) + self.assertFalse(isvalid('2021EPCCB000')) + self.assertFalse(isvalid('2021MECCB000')) + self.assertFalse(isvalid('2021CECCB000')) + self.assertFalse(isvalid('2021EECCB000')) + self.assertFalse(isvalid('2021PEXCB000')) + # ------------------------------------------------------ + + # Parse + + # ------------------------------------------------------ + + def test_year(self): + self.assertEqual(parse('2021PECCB000', 'year'), '2021') + self.assertEqual(parse('2020PECCB000', 'year'), '2020') + self.assertEqual(parse('2019PECCB000', 'year'), '2019') + self.assertEqual(parse('2018PECCB000', 'year'), '2018') + + def test_dept(self): + self.assertEqual(parse('2021PECCB000', 'department_code'), 'CB') + self.assertEqual(parse('2021PECCS000', 'department_code'), 'CS') + self.assertEqual(parse('2021PECEC000', 'department_code'), 'EC') + self.assertEqual(parse('2021PECME000', 'department_code'), 'ME') + self.assertEqual(parse('2021PECCE000', 'department_code'), 'CE') + self.assertEqual(parse('2021PECIT000', 'department_code'), 'IT') + self.assertEqual(parse('2021PECEE000', 'department_code'), 'EE') + + def test_shortrollno(self): + self.assertEqual(parse('2021PECCB000', 'shortrollno'), '000') + self.assertEqual(parse('2021PECCB001', 'shortrollno'), '001') + self.assertEqual(parse('2021PECCB010', 'shortrollno'), '010') + self.assertEqual(parse('2021PECCB100', 'shortrollno'), '100') + self.assertEqual(parse('2021PECCB999', 'shortrollno'), '999') + + def test_invalid(self): + self.assertEqual(parse('2021PECCB000', 'invalid'), None) + self.assertEqual(parse('2021PECCB00', 'year'), None) + self.assertEqual(parse('2021PECCB0000', 'year'), None) + self.assertEqual(parse('2021PECB000', 'dept'), None) + self.assertEqual(parse('2021PECCB00X', 'shortrollno'), None) + self.assertEqual(parse('2021PECCB000', 'rollno'), None) + + # ------------------------------------------------------ + + # Get Department + + # ------------------------------------------------------ + + + def test_get_dept(self): + self.assertEqual(get_dept('2021PECCB000'), 'Computer Science and Business Systems') + self.assertEqual(get_dept('2021PECCS000'), 'Computer Science and Engineering') + self.assertEqual(get_dept('2021PECIT000'), 'Information Technology') + self.assertEqual(get_dept('2021PECEC000'), 'Electronics and Communication Engineering') + self.assertEqual(get_dept('2021PECEE000'), 'Electrical and Electronics Engineering') + self.assertEqual(get_dept('2021PECME000'), 'Mechanical Engineering') + self.assertEqual(get_dept('2021PECCE000'), 'Civil Engineering') + self.assertEqual(get_dept('2021PECCC000'), 'Computer and Communication Engineering') + self.assertEqual(get_dept('2021PECME000'), 'Mechanical Engineering') + self.assertEqual(get_dept('2021PECAD000'), 'Artificial Intelligence and Data Science') + + def test_get_dept_invalid(self): + self.assertEqual(get_dept('2021PECCB00'), None) + self.assertEqual(get_dept('2021PECCB0000'), None) + self.assertEqual(get_dept('2021PECB0B0'), None) + self.assertEqual(get_dept('2021PITB000'), None) + self.assertEqual(get_dept('2021PITCB00X'), None) + self.assertEqual(get_dept('2021PECCB0T0'), None) + + # ------------------------------------------------------ + + # Get Dept Code + + # ------------------------------------------------------ + def test_get_dept_code(self): + self.assertEqual(get_dept_code('2021PECCB000'), 'CB') + self.assertEqual(get_dept_code('2021PECCS000'), 'CS') + self.assertEqual(get_dept_code('2021PECIT000'), 'IT') + self.assertEqual(get_dept_code('2021PECEC000'), 'EC') + self.assertEqual(get_dept_code('2021PECEE000'), 'EE') + self.assertEqual(get_dept_code('2021PECME000'), 'ME') + self.assertEqual(get_dept_code('2021PECCE000'), 'CE') + self.assertEqual(get_dept_code('2021PECCC000'), 'CC') + self.assertEqual(get_dept_code('2021PECAD000'), 'AD') + + def test_get_dept_code_invalid(self): + self.assertEqual(get_dept_code('2021PECCB00'), None) + self.assertEqual(get_dept_code('2021PECCB0000'), None) + self.assertEqual(get_dept_code('2021PECB0B0'), None) + self.assertEqual(get_dept_code('2021PITB000'), None) + self.assertEqual(get_dept_code('2021PITCB00X'), None) + self.assertEqual(get_dept_code('2021PECCB0T0'), None) + + + + if __name__ == '__main__': unittest.main()