ladok3 4.17__py3-none-any.whl → 4.18__py3-none-any.whl

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 ladok3 might be problematic. Click here for more details.

ladok3/__init__.py CHANGED
@@ -293,6 +293,22 @@ class LadokSession:
293
293
  f"{response.text}"
294
294
  )
295
295
 
296
+ # added by GQMJr
297
+ def studystructure_student_JSON(self, uid):
298
+ """
299
+ Returns a dictionary of student information. This contains programmes that
300
+ the student is admitted to.
301
+ """
302
+ r = self.session.get(
303
+ url=self.base_gui_proxy_url
304
+ + "/studiedeltagande/internal/studiestruktur/student/"
305
+ + uid,
306
+ headers=self.headers,
307
+ )
308
+ if r.status_code == 200:
309
+ return r.json()
310
+ return None
311
+
296
312
  def search_course_rounds_JSON(self, /, **kwargs):
297
313
  """Query LADOK about course rounds, possible keys:
298
314
  code, round_code, name
@@ -339,6 +355,67 @@ class LadokSession:
339
355
  f"can't get course instance data for {instance_id}: " f"{response.text}"
340
356
  )
341
357
 
358
+ # added by GQMJr
359
+ def course_instances_JSON(self, course_code, lang="sv"):
360
+ """
361
+ Returns a list of dictionaries with course instances for a given course code.
362
+ The course code is a string such as "DD1310". The language code is 'en' or
363
+ 'sv'.
364
+
365
+ Note that there seems to be a limit of 403 for the number of pages.
366
+ """
367
+ r = self.session.get(
368
+ url=self.base_gui_proxy_url
369
+ + "/resultat/internal/kurstillfalle/filtrera?kurskod="
370
+ + course_code
371
+ + "&page=1&limit=100&skipCount=false&sprakkod="
372
+ + lang, # not sure about this one /CO
373
+ headers=self.headers,
374
+ ).json()
375
+ return r
376
+
377
+ # added by GQMJr
378
+ def instance_info(self, course_code, instance_code, lang="sv"):
379
+ """
380
+ Returns a dictionary of course instance information.
381
+
382
+ course_code - course code, such as "DD1310"
383
+
384
+ instance_code - instance of the course ('TillfallesKod')
385
+
386
+ lang - language code 'en' or 'sv', defaults to 'sv'
387
+ """
388
+ r = self.session.get(
389
+ url=self.base_gui_proxy_url
390
+ + "/resultat/internal/kurstillfalle/filtrera?kurskod="
391
+ + course_code
392
+ + "&page=1&limit=25&skipCount=false&sprakkod="
393
+ + lang,
394
+ headers=self.headers,
395
+ )
396
+ if r.status_code == requests.codes.ok:
397
+ rj = r.json()
398
+ for course in rj["Resultat"]:
399
+ if course["TillfallesKod"] == instance_code:
400
+ return course
401
+ return None
402
+
403
+ # added by GQMJr
404
+ def instance_info_uid(self, instance_uid):
405
+ """
406
+ Returns a dictionary of course instance information.
407
+
408
+ instance_uid: course's Uid (from course_integration_id or
409
+ sis_course_id in Canvas)
410
+ """
411
+ r = self.session.get(
412
+ url=self.base_gui_proxy_url
413
+ + "/resultat/internal/kurstillfalle/"
414
+ + instance_uid,
415
+ headers=self.headers,
416
+ ).json()
417
+ return r
418
+
342
419
  def course_round_components_JSON(self, round_id):
343
420
  response = self.put_query(
344
421
  "/resultat/internal/kurstillfalle/moment", {"Identitet": [round_id]}
@@ -608,141 +685,460 @@ class LadokSession:
608
685
  f"{response.text}"
609
686
  )
610
687
 
611
- ##############################################################
612
- #
613
- # LadokSession
614
- #
615
- # get_results returnerar en dictionary med momentnamn och resultat
616
- # save_result sparar resultat för en student som utkast
617
- #
618
- # The original LadokSession code is from Alexander Baltatzis <alba@kth.se> on
619
- # 2020-07-20
620
- #
621
- # I (Gerald Q. Maguire Jr.) have extended on 2020-07-21 and later with the code
622
- # as noted below.
623
- #
624
- # I (Daniel Bosk) adapted (on 2021-01-08) the methods to a refactored
625
- # LadokSession class.
688
+ # added by GQMJr
689
+ def grading_rights(self):
690
+ """
691
+ Returns a list of dictionaries with the grading rights of the logged in user.
692
+ """
693
+ r = self.session.get(
694
+ url=self.base_gui_proxy_url
695
+ + "/resultat/internal/resultatrattighet/listaforinloggadanvandare",
696
+ headers=self.headers,
697
+ ).json()
698
+ return r["Resultatrattighet"]
626
699
 
627
- #####################################################################
628
- #
629
- # get_results
630
- #
631
- # person_nr - personnummer, siffror i strängformat
632
- # t.ex. 19461212-1212
633
- # course_code - kurskod t.ex. DD1321
634
- #
635
- # RETURNERAR en dictionary från ladok med momentnamn, resultat
636
- #
637
- # {'LABP': {'date': '2019-01-14', 'grade': 'P', 'status': 'attested'},
638
- # 'LABD': {'date': '2019-03-23', 'grade': 'E', 'status': 'pending(1)'},
639
- # 'TEN1': {'date': '2019-03-13', 'grade': 'F', 'status': 'pending(2)'}}
640
- #
641
- # status: kan ha följande värden vilket gissningsvis betyder:
642
- # attested - attesterad
643
- # pending(1) - utkast
644
- # pending(2) - klarmarkerad
645
- #
646
- def get_results(self, person_nr_raw, course_code):
647
- person_nr_raw = str(person_nr_raw)
648
- person_nr = format_personnummer(person_nr_raw)
649
- if not person_nr:
650
- raise Exception("Invalid person nr " + person_nr_raw)
700
+ # added by GQMJr
701
+ def organization_info_JSON(self):
702
+ """
703
+ Returns a dictionary of organization information for the entire institution
704
+ of the logged in user.
705
+ """
706
+ r = self.session.get(
707
+ url=self.base_gui_proxy_url + "/resultat/internal/organisation/utanlankar",
708
+ headers=self.headers,
709
+ ).json()
710
+ return r
651
711
 
652
- student_data = self.__get_student_data(person_nr)
712
+ # added by GQMJr
713
+ def larosatesinformation_JSON(self):
714
+ """
715
+ Returns a dictionary of the university or college information.
716
+ """
717
+ r = self.session.get(
718
+ url=self.base_gui_proxy_url
719
+ + "/kataloginformation/internal/grunddata/larosatesinformation",
720
+ headers=self.headers,
721
+ ).json()
722
+ return r
653
723
 
654
- student_course = next(
655
- x
656
- for x in self.__get_student_courses(student_data["id"])
657
- if x["code"] == course_code
658
- )
724
+ # added by GQMJr
725
+ def undervisningssprak_JSON(self):
726
+ """
727
+ Returns a dictionary of teaching languages.
728
+ """
729
+ r = self.session.get(
730
+ url=self.base_gui_proxy_url
731
+ + "/kataloginformation/internal/grunddata/undervisningssprak",
732
+ headers=self.headers,
733
+ ).json()
734
+ return r
659
735
 
660
- # get attested results
736
+ # added by GQMJr
737
+ def i18n_translation_JSON(self, lang="sv"):
738
+ """
739
+ Returns a dictionary of i18n translations used in Ladok3.
740
+ """
661
741
  r = self.session.get(
662
742
  url=self.base_gui_proxy_url
663
- + "/resultat/studentresultat/attesterade/student/"
664
- + student_data["id"],
743
+ + "/kataloginformation/internal/i18n/oversattningar/sprakkod/"
744
+ + lang,
665
745
  headers=self.headers,
666
746
  ).json()
747
+ return r
667
748
 
668
- results_attested_current_course = None
669
- results = {} # return value
749
+ # added by GQMJr
750
+ def svenskorter_JSON(self):
751
+ """
752
+ Returns a dictionary of Swedish places with their KommunID.
753
+ """
754
+ r = self.session.get(
755
+ url=self.base_gui_proxy_url
756
+ + "/kataloginformation/internal/grunddata/svenskort",
757
+ headers=self.headers,
758
+ ).json()
759
+ return r
670
760
 
671
- for course in r["StudentresultatPerKurs"]:
672
- if course["KursUID"] == student_course["education_id"]:
673
- results_attested_current_course = course["Studentresultat"]
674
- break
761
+ # added by GQMJr
762
+ def kommuner_JSON(self):
763
+ """
764
+ Returns a dictionary of Swedish municipalities.
765
+ """
766
+ r = self.session.get(
767
+ url=self.base_gui_proxy_url
768
+ + "/kataloginformation/internal/grunddata/kommun",
769
+ headers=self.headers,
770
+ ).json()
771
+ return r
675
772
 
676
- if results_attested_current_course:
677
- for result in results_attested_current_course:
678
- try:
679
- d = {
680
- "grade": result["Betygsgradskod"],
681
- "status": "attested",
682
- "date": result["Examinationsdatum"],
683
- }
684
- results[result["Utbildningskod"]] = d
685
- except:
686
- pass # tillgodoräknanden har inga betyg och då är result['Utbildningskod'] == None
773
+ # added by GQMJr
774
+ def lander_JSON(self):
775
+ """
776
+ Returns a dictionary of countries.
777
+ """
778
+ r = self.session.get(
779
+ url=self.base_gui_proxy_url + "/kataloginformation/internal/grunddata/land",
780
+ headers=self.headers,
781
+ ).json()
782
+ return r
687
783
 
688
- # get pending results
784
+ # added by GQMJr
785
+ def undervisningstid_JSON(self):
786
+ """
787
+ Returns a dictionary of teaching times.
788
+ """
689
789
  r = self.session.get(
690
790
  url=self.base_gui_proxy_url
691
- + "/resultat/resultat/resultat/student/"
692
- + student_data["id"]
693
- + "/kurs/"
694
- + student_course["education_id"]
695
- + "?resultatstatus=UTKAST&resultatstatus=KLARMARKERAT",
791
+ + "/kataloginformation/internal/grunddata/undervisningstid",
696
792
  headers=self.headers,
697
793
  ).json()
794
+ return r
698
795
 
699
- for result in r["Resultat"]:
700
- r = self.session.get(
701
- url=self.base_gui_proxy_url
702
- + "/resultat/utbildningsinstans/"
703
- + result["UtbildningsinstansUID"],
704
- headers=self.headers,
705
- ).json()
706
- d_grade = result["Betygsgradsobjekt"]["Kod"]
707
- d_status = "pending(" + str(result["ProcessStatus"]) + ")"
708
- # utkast har inte datum tydligen ...
709
- d_date = (
710
- "0"
711
- if "Examinationsdatum" not in result
712
- else result["Examinationsdatum"]
713
- )
714
- d = {"grade": d_grade, "status": d_status, "date": d_date}
715
- results[r["Utbildningskod"]] = d
716
- return results
796
+ # RETURNERAR JSON of Successive Specializations
797
+ def successivfordjupning_JSON(self):
798
+ """
799
+ Returns a dictionary of Successive Specializations.
800
+ """
801
+ r = self.session.get(
802
+ url=self.base_gui_proxy_url
803
+ + "/kataloginformation/internal/grunddata/successivfordjupning",
804
+ headers=self.headers,
805
+ ).json()
806
+ return r
717
807
 
718
- #####################################################################
719
- #
720
- # save_result
721
- #
722
- # person_nr - personnummer, flera format accepteras enligt regex:
723
- # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
724
- # course_code - kurskod t.ex. DD1321
725
- # course_moment - ladokmoment/kursbetyg t.ex. TEN1, LAB1, DD1321 (!)
726
- # om labmomententet är samma som course_code så sätts kursbetyg!
727
- # result_date - betygsdatum, flera format accepteras enligt regex
728
- # (\d\d)?(\d\d)-?(\d\d)-?(\d\d)
729
- # grade_code - det betyg som ska sättas
730
- # grade_scale - betygsskala t.ex. AF eller PF. Möjliga betygsskalor
731
- # listas i self.__grade_scales.
732
- #
733
- # RETURNERAR True om det gått bra, kastar (förhoppningsvis) undantag
734
- # om det går dåligt.
735
- def save_result(
736
- self,
737
- person_nr_raw,
738
- course_code,
739
- course_moment,
740
- result_date_raw,
741
- grade_raw,
742
- grade_scale,
743
- ):
744
- if grade_raw in ["AF", "PF"]:
745
- raise Exception("Invalid grade: " + grade_raw + " looks like a grade_scale")
808
+ # added by GQMJr
809
+ def undervisningsform_JSON(self):
810
+ """
811
+ Returns forms of education.
812
+ """
813
+ r = self.session.get(
814
+ url=self.base_gui_proxy_url
815
+ + "/kataloginformation/internal/grunddata/undervisningsform",
816
+ headers=self.headers,
817
+ ).json()
818
+ return r
819
+
820
+ # added by GQMJr
821
+ def LokalaPerioder_JSON(self):
822
+ """
823
+ Returns local periods.
824
+ """
825
+ r = self.session.get(
826
+ url=self.base_gui_proxy_url
827
+ + "/kataloginformation/internal/grunddata/period",
828
+ headers=self.headers,
829
+ ).json()
830
+ return r
831
+
832
+ # added by GQMJr
833
+ def nivainomstudieordning_JSON(self):
834
+ """
835
+ Returns education levels.
836
+ """
837
+ r = self.session.get(
838
+ url=self.base_gui_proxy_url
839
+ + "/kataloginformation/internal/grunddata/nivainomstudieordning",
840
+ headers=self.headers,
841
+ ).json()
842
+ return r
843
+
844
+ # added by GQMJr
845
+ def amnesgrupp_JSON(self):
846
+ """
847
+ Returns subject area groups.
848
+ """
849
+ r = self.session.get(
850
+ url=self.base_gui_proxy_url
851
+ + "/kataloginformation/internal/grunddata/amnesgrupp",
852
+ headers=self.headers,
853
+ ).json()
854
+ return r
855
+
856
+ # added by GQMJr
857
+ def studietakt_JSON(self):
858
+ """
859
+ Returns study paces.
860
+ """
861
+ r = self.session.get(
862
+ url=self.base_gui_proxy_url
863
+ + "/kataloginformation/internal/grunddata/studietakt",
864
+ headers=self.headers,
865
+ ).json()
866
+ return r
867
+
868
+ # added by GQMJr
869
+ def finansieringsform_JSON(self):
870
+ """
871
+ Returns forms of financing.
872
+ """
873
+ r = self.session.get(
874
+ url=self.base_gui_proxy_url
875
+ + "/kataloginformation/internal/grunddata/finansieringsform",
876
+ headers=self.headers,
877
+ ).json()
878
+ return r
879
+
880
+ # added by GQMJr
881
+ def utbildningsomrade_JSON(self):
882
+ """
883
+ Returns subject areas.
884
+ """
885
+ r = self.session.get(
886
+ url=self.base_gui_proxy_url
887
+ + "/kataloginformation/internal/grunddata/utbildningsomrade",
888
+ headers=self.headers,
889
+ ).json()
890
+ return r
891
+
892
+ # added by GQMJr
893
+ def kravpatidigarestudier_JSON(self):
894
+ """
895
+ Returns requirements for earlier studies.
896
+ """
897
+ r = self.session.get(
898
+ url=self.base_gui_proxy_url
899
+ + "/kataloginformation/internal/grunddata/kravpatidigarestudier",
900
+ headers=self.headers,
901
+ ).json()
902
+ return r
903
+
904
+ # added by GQMJr
905
+ def studieordning_JSON(self):
906
+ """
907
+ Returns study regulations.
908
+ """
909
+ r = self.session.get(
910
+ url=self.base_gui_proxy_url
911
+ + "/kataloginformation/internal/grunddata/studieordning",
912
+ headers=self.headers,
913
+ ).json()
914
+ return r
915
+
916
+ # added by GQMJr
917
+ def enhet_JSON(self):
918
+ """
919
+ Returns credit units.
920
+ """
921
+ r = self.session.get(
922
+ url=self.base_gui_proxy_url
923
+ + "/kataloginformation/internal/grunddata/enhet",
924
+ headers=self.headers,
925
+ ).json()
926
+ return r
927
+
928
+ # added by GQMJr
929
+ def studielokalisering_JSON(self):
930
+ """
931
+ Returns study locations.
932
+ """
933
+ r = self.session.get(
934
+ url=self.base_gui_proxy_url
935
+ + "/kataloginformation/internal/grunddata/studielokalisering",
936
+ headers=self.headers,
937
+ ).json()
938
+ return r
939
+
940
+ # added by GQMJr
941
+ def antagningsomgang_JSON(self):
942
+ """
943
+ Returns the admission round.
944
+ """
945
+ r = self.session.get(
946
+ url=self.base_gui_proxy_url
947
+ + "/kataloginformation/internal/grunddata/antagningsomgang",
948
+ headers=self.headers,
949
+ ).json()
950
+ return r
951
+
952
+ # added by GQMJr
953
+ def utbildningstyp_JSON(self):
954
+ """
955
+ Returns types of education.
956
+
957
+ For information about these, see
958
+
959
+ https://ladok.se/wp-content/uploads/2018/01/Funktionsbeskrivning_095.pdf
960
+ """
961
+ r = self.session.get(
962
+ url=self.base_gui_proxy_url
963
+ + "/kataloginformation/internal/grunddata/utbildningstyp",
964
+ headers=self.headers,
965
+ ).json()
966
+ return r
967
+
968
+ # added by GQMJr
969
+ def aktivitetstillfallestyp_JSON(self):
970
+ """
971
+ Returns the activity types.
972
+ """
973
+ r = self.session.get(
974
+ url=self.base_gui_proxy_url
975
+ + "/kataloginformation/internal/grunddata/aktivitetstillfallestyp",
976
+ headers=self.headers,
977
+ ).json()
978
+ return r
979
+
980
+ # added by GQMJr
981
+ def catalog_service_index_JSON(self):
982
+ """
983
+ Returns the catalog service index.
984
+ """
985
+ r = self.session.get(
986
+ url=self.base_gui_proxy_url + "/kataloginformation/internal/service/index",
987
+ headers=self.headers,
988
+ ).json()
989
+ return r
990
+
991
+ # added by GQMJr
992
+ def omradesbehorighet_JSON(self):
993
+ """
994
+ Returns områdesbehörighet. See
995
+
996
+ https://antagning.se/globalassets/omradesbehorigheter-hogskolan.pdf
997
+
998
+ for more information.
999
+ """
1000
+ r = self.session.get(
1001
+ url=self.base_gui_proxy_url
1002
+ + "/kataloginformation/internal/grunddata/omradesbehorighet",
1003
+ headers=self.headers,
1004
+ ).json()
1005
+ return r
1006
+
1007
+ ##############################################################
1008
+ #
1009
+ # LadokSession
1010
+ #
1011
+ # get_results returnerar en dictionary med momentnamn och resultat
1012
+ # save_result sparar resultat för en student som utkast
1013
+ #
1014
+ # The original LadokSession code is from Alexander Baltatzis <alba@kth.se> on
1015
+ # 2020-07-20
1016
+ #
1017
+ # I (Gerald Q. Maguire Jr.) have extended on 2020-07-21 and later with the code
1018
+ # as noted below.
1019
+ #
1020
+ # I (Daniel Bosk) adapted (on 2021-01-08) the methods to a refactored
1021
+ # LadokSession class.
1022
+
1023
+ #####################################################################
1024
+ #
1025
+ # get_results
1026
+ #
1027
+ # person_nr - personnummer, siffror i strängformat
1028
+ # t.ex. 19461212-1212
1029
+ # course_code - kurskod t.ex. DD1321
1030
+ #
1031
+ # RETURNERAR en dictionary från ladok med momentnamn, resultat
1032
+ #
1033
+ # {'LABP': {'date': '2019-01-14', 'grade': 'P', 'status': 'attested'},
1034
+ # 'LABD': {'date': '2019-03-23', 'grade': 'E', 'status': 'pending(1)'},
1035
+ # 'TEN1': {'date': '2019-03-13', 'grade': 'F', 'status': 'pending(2)'}}
1036
+ #
1037
+ # status: kan ha följande värden vilket gissningsvis betyder:
1038
+ # attested - attesterad
1039
+ # pending(1) - utkast
1040
+ # pending(2) - klarmarkerad
1041
+ #
1042
+ def get_results(self, person_nr_raw, course_code):
1043
+ person_nr_raw = str(person_nr_raw)
1044
+ person_nr = format_personnummer(person_nr_raw)
1045
+ if not person_nr:
1046
+ raise Exception("Invalid person nr " + person_nr_raw)
1047
+
1048
+ student_data = self.__get_student_data(person_nr)
1049
+
1050
+ student_course = next(
1051
+ x
1052
+ for x in self.__get_student_courses(student_data["id"])
1053
+ if x["code"] == course_code
1054
+ )
1055
+
1056
+ # get attested results
1057
+ r = self.session.get(
1058
+ url=self.base_gui_proxy_url
1059
+ + "/resultat/studentresultat/attesterade/student/"
1060
+ + student_data["id"],
1061
+ headers=self.headers,
1062
+ ).json()
1063
+
1064
+ results_attested_current_course = None
1065
+ results = {} # return value
1066
+
1067
+ for course in r["StudentresultatPerKurs"]:
1068
+ if course["KursUID"] == student_course["education_id"]:
1069
+ results_attested_current_course = course["Studentresultat"]
1070
+ break
1071
+
1072
+ if results_attested_current_course:
1073
+ for result in results_attested_current_course:
1074
+ try:
1075
+ d = {
1076
+ "grade": result["Betygsgradskod"],
1077
+ "status": "attested",
1078
+ "date": result["Examinationsdatum"],
1079
+ }
1080
+ results[result["Utbildningskod"]] = d
1081
+ except:
1082
+ pass # tillgodoräknanden har inga betyg och då är result['Utbildningskod'] == None
1083
+
1084
+ # get pending results
1085
+ r = self.session.get(
1086
+ url=self.base_gui_proxy_url
1087
+ + "/resultat/resultat/resultat/student/"
1088
+ + student_data["id"]
1089
+ + "/kurs/"
1090
+ + student_course["education_id"]
1091
+ + "?resultatstatus=UTKAST&resultatstatus=KLARMARKERAT",
1092
+ headers=self.headers,
1093
+ ).json()
1094
+
1095
+ for result in r["Resultat"]:
1096
+ r = self.session.get(
1097
+ url=self.base_gui_proxy_url
1098
+ + "/resultat/utbildningsinstans/"
1099
+ + result["UtbildningsinstansUID"],
1100
+ headers=self.headers,
1101
+ ).json()
1102
+ d_grade = result["Betygsgradsobjekt"]["Kod"]
1103
+ d_status = "pending(" + str(result["ProcessStatus"]) + ")"
1104
+ # utkast har inte datum tydligen ...
1105
+ d_date = (
1106
+ "0"
1107
+ if "Examinationsdatum" not in result
1108
+ else result["Examinationsdatum"]
1109
+ )
1110
+ d = {"grade": d_grade, "status": d_status, "date": d_date}
1111
+ results[r["Utbildningskod"]] = d
1112
+ return results
1113
+
1114
+ #####################################################################
1115
+ #
1116
+ # save_result
1117
+ #
1118
+ # person_nr - personnummer, flera format accepteras enligt regex:
1119
+ # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
1120
+ # course_code - kurskod t.ex. DD1321
1121
+ # course_moment - ladokmoment/kursbetyg t.ex. TEN1, LAB1, DD1321 (!)
1122
+ # om labmomententet är samma som course_code så sätts kursbetyg!
1123
+ # result_date - betygsdatum, flera format accepteras enligt regex
1124
+ # (\d\d)?(\d\d)-?(\d\d)-?(\d\d)
1125
+ # grade_code - det betyg som ska sättas
1126
+ # grade_scale - betygsskala t.ex. AF eller PF. Möjliga betygsskalor
1127
+ # listas i self.__grade_scales.
1128
+ #
1129
+ # RETURNERAR True om det gått bra, kastar (förhoppningsvis) undantag
1130
+ # om det går dåligt.
1131
+ def save_result(
1132
+ self,
1133
+ person_nr_raw,
1134
+ course_code,
1135
+ course_moment,
1136
+ result_date_raw,
1137
+ grade_raw,
1138
+ grade_scale,
1139
+ ):
1140
+ if grade_raw in ["AF", "PF"]:
1141
+ raise Exception("Invalid grade: " + grade_raw + " looks like a grade_scale")
746
1142
 
747
1143
  if (grade_raw == "P" and grade_scale == "AF") or (
748
1144
  grade_raw in "ABCDE" and grade_scale == "PF"
@@ -855,2848 +1251,93 @@ class LadokSession:
855
1251
  + grade_raw
856
1252
  + " "
857
1253
  + result_date_raw
858
- + ": "
859
- + r.json()["Meddelande"]
860
- )
861
-
862
- return True
863
-
864
- #####################################################################
865
- #
866
- # get_student_data
867
- #
868
- # person_nr - personnummer, flera format accepteras enligt regex:
869
- # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
870
- #
871
- # RETURNERAR {'id': 'xxxx', 'first_name': 'x', 'last_name': 'y', 'person_nr': 'xxx', 'alive': True}
872
-
873
- def get_student_data(self, person_nr_raw):
874
- person_nr = format_personnummer(person_nr_raw)
875
-
876
- if not person_nr:
877
- raise Exception("Invalid person nr " + person_nr_raw)
878
-
879
- student_data = self.__get_student_data(person_nr)
880
- return student_data
881
-
882
- #####################################################################
883
- #
884
- # get_student_name
885
- #
886
- # person_nr - personnummer, flera format accepteras enligt regex:
887
- # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
888
- #
889
- # RETURNERAR en dictionary med för- och efternamn
890
- #
891
- # {"first_name" : 'Anna', "last_name : 'Andersson'}
892
- #
893
- def get_student_name(self, person_nr_raw):
894
- person_nr = format_personnummer(person_nr_raw)
895
-
896
- if not person_nr:
897
- raise Exception("Invalid person nr " + person_nr_raw)
898
-
899
- student_data = self.__get_student_data(person_nr)
900
- return {
901
- "first_name": student_data["first_name"],
902
- "last_name": student_data["last_name"],
903
- }
904
-
905
- # added by GQMJr
906
- #####################################################################
907
- #
908
- # all_grading_scale
909
- #
910
- #
911
- # RETURNERAR en dictionary of the grading scales
912
- def all_grading_scale(self):
913
- return self.get_grade_scales()
914
-
915
- # added by GQMJr
916
- #####################################################################
917
- #
918
- # grading_rights
919
- #
920
- #
921
- # RETURNERAR en dictionary of the grading rights (of the logged in user)
922
- def grading_rights(self):
923
- r = self.session.get(
924
- url=self.base_gui_proxy_url
925
- + "/resultat/resultatrattighet/listaforinloggadanvandare",
926
- headers=self.headers,
927
- ).json()
928
- return r["Resultatrattighet"]
929
-
930
- # added by GQMJr
931
- #####################################################################
932
- #
933
- # change_locale
934
- #
935
- # lang - language code 'en' or 'sv', defaults to 'sv'
936
- #
937
- # RETURNERAR reponse to the request
938
- def change_locale(self, lang="sv"):
939
- r = self.session.get(
940
- url=self.base_gui_url + "/services/i18n/changeLocale?lang=" + lang,
941
- headers=self.headers,
942
- ).json()
943
- return r
944
-
945
- # added by GQMJr
946
- #####################################################################
947
- #
948
- # course_instances_JSON
949
- #
950
- # course_code - course code, such as "II2202"
951
- #
952
- # lang - language code 'en' or 'sv', defaults to 'sv'
953
- #
954
- # RETURNERAR JSON of resultat/kurstillfalle
955
- #
956
- # Example: ladok_session.course_instances('II2202', 'en')
957
- def course_instances_JSON(self, course_code, lang="sv"):
958
- # note that there seems to be a limit of 403 for the number of pages
959
- r = self.session.get(
960
- url=self.base_gui_proxy_url
961
- + "/resultat/kurstillfalle/filtrera?kurskod="
962
- + course_code
963
- + "&page=1&limit=100&skipCount=false&sprakkod="
964
- + lang,
965
- headers=self.headers,
966
- ).json()
967
- return r
968
-
969
- # added by GQMJr
970
- #####################################################################
971
- #
972
- # organization_info_JSON
973
- #
974
- # RETURNERAR en dictionary of organization information for the entire institution of the logged in user
975
- def organization_info_JSON(self):
976
- r = self.session.get(
977
- url=self.base_gui_proxy_url + "/resultat/organisation/utanlankar",
978
- headers=self.headers,
979
- ).json()
980
- return r
981
-
982
- # added by GQMJr
983
- #####################################################################
984
- #
985
- # period_info_JSON
986
- #
987
- # RETURNERAR JSON of /resultat/grunddata/period
988
- def period_info_JSON(self):
989
- r = self.session.get(
990
- url=self.base_gui_proxy_url + "/resultat/grunddata/period",
991
- headers=self.headers,
992
- ).json()
993
- return r
994
-
995
- # added by GQMJr
996
- #####################################################################
997
- #
998
- # instance_info
999
- #
1000
- # course_code - course code, such as "II2202"
1001
- #
1002
- # instance_code - instance of the course ('TillfallesKod')
1003
- #
1004
- # lang - language code 'en' or 'sv', defaults to 'sv'
1005
- #
1006
- # RETURNERAR en dictionary of course instance information
1007
- #
1008
- # Example: ii=ladok_session.instance_info('II2202', instance_code, 'en')
1009
- def instance_info(self, course_code, instance_code, lang="sv"):
1010
- r = self.session.get(
1011
- url=self.base_gui_proxy_url
1012
- + "/resultat/kurstillfalle/filtrera?kurskod="
1013
- + course_code
1014
- + "&page=1&limit=25&skipCount=false&sprakkod="
1015
- + lang,
1016
- headers=self.headers,
1017
- )
1018
- if r.status_code == requests.codes.ok:
1019
- rj = r.json()
1020
- for course in rj["Resultat"]:
1021
- if course["TillfallesKod"] == instance_code:
1022
- return course
1023
- return None
1024
-
1025
- # added by GQMJr
1026
- #####################################################################
1027
- #
1028
- # instance_info_uid
1029
- #
1030
- # instance_uid -- course's Uid (from course_integration_id)
1031
- #
1032
- # RETURNERAR en dictionary of course instance information
1033
- #
1034
- # Example: ii=ladok_session.instance_info_uid(instance_uid)
1035
- def instance_info_uid(self, instance_uid):
1036
- r = self.session.get(
1037
- url=self.base_gui_proxy_url + "/resultat/kurstillfalle/" + instance_uid,
1038
- headers=self.headers,
1039
- ).json()
1040
- return r
1041
-
1042
- # added by GQMJr
1043
- #####################################################################
1044
- #
1045
- # studystructure_student_JSON
1046
- #
1047
- # uid - uid of a student
1048
- #
1049
- # RETURNERAR en dictionary of student information
1050
- def studystructure_student_JSON(self, uid):
1051
- r = self.session.get(
1052
- url=self.base_gui_proxy_url
1053
- + "/studiedeltagande/studiestruktur/student/"
1054
- + uid,
1055
- headers=self.headers,
1056
- )
1057
- if r.status_code == 200:
1058
- return r.json()
1059
- return None
1060
-
1061
- # added by GQMJr
1062
- #####################################################################
1063
- #
1064
- # larosatesinformation_JSON
1065
- #
1066
- # RETURNERAR JSON of the university or college information
1067
- def larosatesinformation_JSON(self):
1068
- r = self.session.get(
1069
- url=self.base_gui_proxy_url
1070
- + "/kataloginformation/grunddata/larosatesinformation",
1071
- headers=self.headers,
1072
- ).json()
1073
- return r
1074
-
1075
- # { 'Larosatesinformation': [ { 'Benamning': { 'en': 'Royal Institute of '
1076
- # 'Technology',
1077
- # 'sv': 'Kungliga Tekniska '
1078
- # 'högskolan'},
1079
- # 'Beskrivning': {},
1080
- # 'Giltighetsperiod': {'link': []},
1081
- # 'ID': '29',
1082
- # 'Kod': 'KTH',
1083
- # 'LarosateID': 29,
1084
- # 'OrtID': 18,
1085
- # 'link': []}],
1086
- # 'link': []}
1087
- # added by GQMJr
1088
- #####################################################################
1089
- #
1090
- # undervisningssprak
1091
- #
1092
- # RETURNERAR en dictionary of languages used for instruction
1093
- def undervisningssprak_JSON(self):
1094
- r = self.session.get(
1095
- url=self.base_gui_proxy_url
1096
- + "/kataloginformation/grunddata/undervisningssprak",
1097
- headers=self.headers,
1098
- ).json()
1099
- return r
1100
-
1101
- # { 'Undervisningssprak': [ { 'Benamning': { 'en': 'English',
1102
- # 'sv': 'Engelska'},
1103
- # 'Beskrivning': {},
1104
- # 'Giltighetsperiod': {'link': []},
1105
- # 'ID': '2',
1106
- # 'Kod': 'ENG',
1107
- # 'LarosateID': -1,
1108
- # 'link': []},
1109
- # { 'Benamning': {'en': 'Russian', 'sv': 'Ryska'},
1110
- # 'Beskrivning': {},
1111
- # 'Giltighetsperiod': {'link': []},
1112
- # 'ID': '4',
1113
- # 'Kod': 'RUS',
1114
- # 'LarosateID': -1,
1115
- # 'link': []},
1116
- # { 'Benamning': { 'en': 'Sign Language',
1117
- # 'sv': 'Teckenspråk'},
1118
- # 'Beskrivning': {},
1119
- # 'Giltighetsperiod': {'link': []},
1120
- # 'ID': '5',
1121
- # 'Kod': 'SGN',
1122
- # 'LarosateID': -1,
1123
- # 'link': []},
1124
- # { 'Benamning': { 'en': 'Spanish',
1125
- # 'sv': 'Spanska'},
1126
- # 'Beskrivning': {},
1127
- # 'Giltighetsperiod': {'link': []},
1128
- # 'ID': '3',
1129
- # 'Kod': 'SPA',
1130
- # 'LarosateID': -1,
1131
- # 'link': []},
1132
- # { 'Benamning': { 'en': 'Swedish',
1133
- # 'sv': 'Svenska'},
1134
- # 'Beskrivning': {},
1135
- # 'Giltighetsperiod': {'link': []},
1136
- # 'ID': '1',
1137
- # 'Kod': 'SWE',
1138
- # 'LarosateID': -1,
1139
- # 'link': []},
1140
- # { 'Benamning': {'en': 'Danish', 'sv': 'Danska'},
1141
- # 'Beskrivning': {},
1142
- # 'Giltighetsperiod': {'link': []},
1143
- # 'ID': '109804',
1144
- # 'Kod': 'DAN',
1145
- # 'LarosateID': -1,
1146
- # 'link': []},
1147
- # { 'Benamning': { 'en': 'Finnish',
1148
- # 'sv': 'Finska'},
1149
- # 'Beskrivning': {},
1150
- # 'Giltighetsperiod': {'link': []},
1151
- # 'ID': '109805',
1152
- # 'Kod': 'FIN',
1153
- # 'LarosateID': -1,
1154
- # 'link': []},
1155
- # { 'Benamning': { 'en': 'Italian',
1156
- # 'sv': 'Italienska'},
1157
- # 'Beskrivning': {},
1158
- # 'Giltighetsperiod': {'link': []},
1159
- # 'ID': '109806',
1160
- # 'Kod': 'ITA',
1161
- # 'LarosateID': -1,
1162
- # 'link': []},
1163
- # { 'Benamning': { 'en': 'Japanese',
1164
- # 'sv': 'Japanska'},
1165
- # 'Beskrivning': {},
1166
- # 'Giltighetsperiod': {'link': []},
1167
- # 'ID': '109807',
1168
- # 'Kod': 'JPN',
1169
- # 'LarosateID': -1,
1170
- # 'link': []},
1171
- # { 'Benamning': { 'en': 'Norwegian',
1172
- # 'sv': 'Norska'},
1173
- # 'Beskrivning': {},
1174
- # 'Giltighetsperiod': {'link': []},
1175
- # 'ID': '109808',
1176
- # 'Kod': 'NOR',
1177
- # 'LarosateID': -1,
1178
- # 'link': []},
1179
- # { 'Benamning': { 'en': 'Portugese',
1180
- # 'sv': 'Portugisiska'},
1181
- # 'Beskrivning': {},
1182
- # 'Giltighetsperiod': {'link': []},
1183
- # 'ID': '109809',
1184
- # 'Kod': 'POR',
1185
- # 'LarosateID': -1,
1186
- # 'link': []},
1187
- # { 'Benamning': { 'en': 'French',
1188
- # 'sv': 'Franska'},
1189
- # 'Beskrivning': {},
1190
- # 'Giltighetsperiod': {'link': []},
1191
- # 'ID': '109810',
1192
- # 'Kod': 'FRE',
1193
- # 'LarosateID': -1,
1194
- # 'link': []},
1195
- # { 'Benamning': {'en': 'German', 'sv': 'Tyska'},
1196
- # 'Beskrivning': {},
1197
- # 'Giltighetsperiod': {'link': []},
1198
- # 'ID': '109811',
1199
- # 'Kod': 'GER',
1200
- # 'LarosateID': -1,
1201
- # 'link': []},
1202
- # { 'Benamning': { 'en': 'Chinese',
1203
- # 'sv': 'Kinesiska'},
1204
- # 'Beskrivning': {},
1205
- # 'Giltighetsperiod': {'link': []},
1206
- # 'ID': '111033',
1207
- # 'Kod': 'CHI',
1208
- # 'LarosateID': -1,
1209
- # 'link': []},
1210
- # { 'Benamning': { 'en': 'Arabic',
1211
- # 'sv': 'Arabiska'},
1212
- # 'Beskrivning': {},
1213
- # 'Giltighetsperiod': {'link': []},
1214
- # 'ID': '111032',
1215
- # 'Kod': 'ARA',
1216
- # 'LarosateID': -1,
1217
- # 'link': []}],
1218
- # 'link': []}
1219
- # added by GQMJr
1220
- #####################################################################
1221
- #
1222
- # i18n_translation_JSON
1223
- #
1224
- # lang - language code 'en' or 'sv', defaults to 'sv'
1225
- # RETURNERAR JSON of i18n translations used in Ladok3
1226
- def i18n_translation_JSON(self, lang="sv"):
1227
- r = self.session.get(
1228
- url=self.base_gui_proxy_url
1229
- + "/kataloginformation/i18n/oversattningar/sprakkod/"
1230
- + lang,
1231
- headers=self.headers,
1232
- ).json()
1233
- return r
1234
-
1235
- # the above i18n translations are used for example in:
1236
- # 'Utbildningstillfallestyp': { 'Benamningar': { 'en': 'Course instance', 'sv': 'Kurstillfälle'},
1237
- # 'Giltighetsperiod': { 'link': [ ]},
1238
- # 'Grundtyp': 'KURS',
1239
- # 'ID': 52,
1240
- # 'Kod': '2007KTF',
1241
- # 'RegelverkForUtbildningstyp': { 'Regelvarden': [ { 'Regelnamn': 'commons.domain.regel.ingar.i.grupp.overfors.till.nya', 'link': [ ]},
1242
- # { 'Regelnamn': 'commons.domain.regel.informationsbehorighet.grundavancerad', 'Varde': 'true', 'link': [ ]},
1243
- # { 'Regelnamn': 'commons.domain.regel.kan.utannonseras', 'Varde': 'true', 'link': [ ]},
1244
- # { 'Regelnamn': 'commons.domain.regel.grupp.for.utsokning',
1245
- # 'Varde': 'grupp.for.utsokning.grundavanceradniva', 'link': [ ]}],
1246
- # All of the things of the form "commons-domain.*" are i18n keys to look the actual text to be used.
1247
- # for example:
1248
- # in Swedish:
1249
- # { 'I18nNyckel': 'commons.domain.regel.ingar.i.grupp.overfors.till.nya',
1250
- # 'Text': 'Ingår i grupp: Överförs till NyA',
1251
- # 'link': []},
1252
- # In English:
1253
- # { 'I18nNyckel': 'commons.domain.regel.ingar.i.grupp.overfors.till.nya',
1254
- # 'Text': 'Part of group: Transferred to NyA',
1255
- # 'link': []},
1256
- # added by GQMJr
1257
- #####################################################################
1258
- #
1259
- # svenskorter_JSON
1260
- #
1261
- # RETURNERAR JSON of places in Sweden with their KommunID
1262
- def svenskorter_JSON(self):
1263
- r = self.session.get(
1264
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/svenskort",
1265
- headers=self.headers,
1266
- ).json()
1267
- return r
1254
+ + ": "
1255
+ + r.json()["Meddelande"]
1256
+ )
1268
1257
 
1269
- # returns:
1270
- # { 'SvenskOrt': [ { 'Benamning': { 'en': 'Stockholm (Botkyrka)',
1271
- # 'sv': 'Stockholm (Botkyrka)'},
1272
- # 'Beskrivning': {},
1273
- # 'Giltighetsperiod': {'link': []},
1274
- # 'ID': '110990',
1275
- # 'Kod': 'L0127',
1276
- # 'KommunID': '8',
1277
- # 'LarosateID': -1,
1278
- # 'link': []},
1279
- # ... ], 'link': []}
1280
- # added by GQMJr
1281
- #####################################################################
1282
- #
1283
- # kommuner_JSON
1284
- #
1285
- # RETURNERAR JSON of places in Sweden with their KommunID
1286
- def kommuner_JSON(self):
1287
- r = self.session.get(
1288
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/kommun",
1289
- headers=self.headers,
1290
- ).json()
1291
- return r
1258
+ return True
1292
1259
 
1293
- # returns:
1294
- # { 'Kommun': [ { 'Benamning': {'en': 'Knivsta', 'sv': 'Knivsta'},
1295
- # 'Beskrivning': {},
1296
- # 'Giltighetsperiod': {'link': []},
1297
- # 'ID': '29',
1298
- # 'Kod': '0330',
1299
- # 'LanID': 2,
1300
- # 'LarosateID': -1,
1301
- # 'link': []},
1302
- # { 'Benamning': {'en': 'Heby', 'sv': 'Heby'},
1303
- # 'Beskrivning': { 'sv': 'Överförd från Västmanlands '
1304
- # 'till Uppsala län'},
1305
- # 'Giltighetsperiod': { 'Startdatum': '2007-01-01',
1306
- # 'link': []},
1307
- # 'ID': '30',
1308
- # 'Kod': '0331',
1309
- # 'LanID': 2,
1310
- # 'LarosateID': -1,
1311
- # 'link': []},
1312
- # ], 'link': []}
1313
- # added by GQMJr
1314
1260
  #####################################################################
1315
1261
  #
1316
- # lander_JSON
1317
- #
1318
- # RETURNERAR JSON of countries
1319
- def lander_JSON(self):
1320
- r = self.session.get(
1321
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/land",
1322
- headers=self.headers,
1323
- ).json()
1324
- return r
1325
-
1326
- # returns:
1327
- # { 'Land': [ { 'Benamning': {'en': 'Bolivia', 'sv': 'Bolivia'},
1328
- # 'Beskrivning': {},
1329
- # 'Giltighetsperiod': {'link': []},
1330
- # 'ID': '20',
1331
- # 'Kod': 'BO',
1332
- # 'LarosateID': -1,
1333
- # 'link': []},
1334
- # { 'Benamning': {'en': 'Brazil', 'sv': 'Brasilien'},
1335
- # 'Beskrivning': {},
1336
- # 'Giltighetsperiod': {'link': []},
1337
- # 'ID': '21',
1338
- # 'Kod': 'BR',
1339
- # 'LarosateID': -1,
1340
- # 'link': []},
1341
- # ... ], 'link': []}
1342
- # added by GQMJr
1343
- #####################################################################
1262
+ # get_student_data
1344
1263
  #
1345
- # undervisningstid_JSON
1264
+ # person_nr - personnummer, flera format accepteras enligt regex:
1265
+ # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
1346
1266
  #
1347
- # RETURNERAR JSON of teaching times
1348
- def undervisningstid_JSON(self):
1349
- r = self.session.get(
1350
- url=self.base_gui_proxy_url
1351
- + "/kataloginformation/grunddata/undervisningstid",
1352
- headers=self.headers,
1353
- ).json()
1354
- return r
1267
+ # RETURNERAR {'id': 'xxxx', 'first_name': 'x', 'last_name': 'y', 'person_nr': 'xxx', 'alive': True}
1355
1268
 
1356
- # returns:
1357
- # { 'Undervisningstid': [ { 'Benamning': { 'en': 'Mixed-time',
1358
- # 'sv': 'Blandad '
1359
- # 'undervisningstid'},
1360
- # 'Beskrivning': {},
1361
- # 'Giltighetsperiod': {'link': []},
1362
- # 'ID': '101051',
1363
- # 'Kod': 'BLA',
1364
- # 'LarosateID': -1,
1365
- # 'link': []},
1366
- # { 'Benamning': {'en': 'Day-time', 'sv': 'Dagtid'},
1367
- # 'Beskrivning': {},
1368
- # 'Giltighetsperiod': {'link': []},
1369
- # 'ID': '101052',
1370
- # 'Kod': 'DAG',
1371
- # 'LarosateID': -1,
1372
- # 'link': []},
1373
- # { 'Benamning': { 'en': 'Afternoon-time',
1374
- # 'sv': 'Eftermiddagstid'},
1375
- # 'Beskrivning': {},
1376
- # 'Giltighetsperiod': {'link': []},
1377
- # 'ID': '101053',
1378
- # 'Kod': 'EFT',
1379
- # 'LarosateID': -1,
1380
- # 'link': []},
1381
- # { 'Benamning': { 'en': 'No teaching',
1382
- # 'sv': 'Ingen '
1383
- # 'undervisningstid'},
1384
- # 'Beskrivning': {},
1385
- # 'Giltighetsperiod': { 'Slutdatum': '2016-04-30',
1386
- # 'link': []},
1387
- # 'ID': '101054',
1388
- # 'Kod': 'ING',
1389
- # 'LarosateID': -1,
1390
- # 'link': []},
1391
- # { 'Benamning': { 'en': 'Evening-time',
1392
- # 'sv': 'Kvällstid'},
1393
- # 'Beskrivning': {},
1394
- # 'Giltighetsperiod': {'link': []},
1395
- # 'ID': '101055',
1396
- # 'Kod': 'KVÄ',
1397
- # 'LarosateID': -1,
1398
- # 'link': []},
1399
- # { 'Benamning': { 'en': 'Weekends',
1400
- # 'sv': 'Veckoslut'},
1401
- # 'Beskrivning': {},
1402
- # 'Giltighetsperiod': {'link': []},
1403
- # 'ID': '101056',
1404
- # 'Kod': 'VSL',
1405
- # 'LarosateID': -1,
1406
- # 'link': []}],
1407
- # 'link': []}
1408
- # added by GQMJr
1409
- #####################################################################
1410
- #
1411
- # successivfordjupning_JSON
1412
- #
1413
- # RETURNERAR JSON of Successive Specializations
1414
- def successivfordjupning_JSON(self):
1415
- r = self.session.get(
1416
- url=self.base_gui_proxy_url
1417
- + "/kataloginformation/grunddata/successivfordjupning",
1418
- headers=self.headers,
1419
- ).json()
1420
- return r
1269
+ def get_student_data(self, person_nr_raw):
1270
+ person_nr = format_personnummer(person_nr_raw)
1421
1271
 
1422
- # returns:
1423
- # { 'SuccessivFordjupning': [ { 'Benamning': { 'en': 'Second cycle, '
1424
- # 'contains degree '
1425
- # 'project for Master '
1426
- # 'of Arts/Master of '
1427
- # 'Science (60 '
1428
- # 'credits)',
1429
- # 'sv': 'Avancerad nivå, '
1430
- # 'innehåller '
1431
- # 'examensarbete för '
1432
- # 'magisterexamen'},
1433
- # 'Beskrivning': {},
1434
- # 'Giltighetsperiod': {'link': []},
1435
- # 'ID': '1',
1436
- # 'Kod': 'A1E',
1437
- # 'LarosateID': -1,
1438
- # 'NivaInomStudieordningID': 2,
1439
- # 'link': []},
1440
- # { 'Benamning': { 'en': 'Second cycle, has '
1441
- # 'second-cycle '
1442
- # 'course/s as entry '
1443
- # 'requirements',
1444
- # 'sv': 'Avancerad nivå, '
1445
- # 'har kurs/er på '
1446
- # 'avancerad nivå som '
1447
- # 'förkunskapskrav'},
1448
- # 'Beskrivning': {},
1449
- # 'Giltighetsperiod': {'link': []},
1450
- # 'ID': '2',
1451
- # 'Kod': 'A1F',
1452
- # 'LarosateID': -1,
1453
- # 'NivaInomStudieordningID': 2,
1454
- # 'link': []},
1455
- # ... ], 'link': []}
1456
- # added by GQMJr
1457
- #####################################################################
1458
- #
1459
- # undervisningsform_JSON
1460
- #
1461
- # RETURNERAR JSON of forms of education
1462
- def undervisningsform_JSON(self):
1463
- r = self.session.get(
1464
- url=self.base_gui_proxy_url
1465
- + "/kataloginformation/grunddata/undervisningsform",
1466
- headers=self.headers,
1467
- ).json()
1468
- return r
1272
+ if not person_nr:
1273
+ raise Exception("Invalid person nr " + person_nr_raw)
1469
1274
 
1470
- # returns:
1471
- # { 'Undervisningsform': [ { 'Benamning': { 'en': '- No translation '
1472
- # 'available -',
1473
- # 'sv': 'IT-baserad distans'},
1474
- # 'Beskrivning': {},
1475
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1476
- # 'link': []},
1477
- # 'ID': '133253',
1478
- # 'Kod': 'ITD',
1479
- # 'LarosateID': 29,
1480
- # 'link': []},
1481
- # { 'Benamning': { 'en': '- No translation '
1482
- # 'available -',
1483
- # 'sv': 'Undervisningsområdet'},
1484
- # 'Beskrivning': {},
1485
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1486
- # 'link': []},
1487
- # 'ID': '133252',
1488
- # 'Kod': 'LU',
1489
- # 'LarosateID': 29,
1490
- # 'link': []},
1491
- # { 'Benamning': { 'en': 'Distance learning',
1492
- # 'sv': 'Distans'},
1493
- # 'Beskrivning': { 'sv': 'Obligatoriska '
1494
- # 'träffar kan '
1495
- # 'förekomma'},
1496
- # 'Giltighetsperiod': {'link': []},
1497
- # 'ID': '2',
1498
- # 'Kod': 'DST',
1499
- # 'LarosateID': -1,
1500
- # 'link': []},
1501
- # { 'Benamning': { 'en': 'No teaching',
1502
- # 'sv': 'Ingen undervisning'},
1503
- # 'Beskrivning': {},
1504
- # 'Giltighetsperiod': { 'Slutdatum': '2016-04-30',
1505
- # 'link': []},
1506
- # 'ID': '4',
1507
- # 'Kod': 'ING',
1508
- # 'LarosateID': -1,
1509
- # 'link': []},
1510
- # { 'Benamning': { 'en': 'Web-based distance '
1511
- # 'learning',
1512
- # 'sv': 'IT-baserad '
1513
- # 'distansutbildning'},
1514
- # 'Beskrivning': { 'sv': 'Ingen platsbunden '
1515
- # 'undervisning'},
1516
- # 'Giltighetsperiod': { 'Slutdatum': '2016-04-30',
1517
- # 'link': []},
1518
- # 'ID': '3',
1519
- # 'Kod': 'ITD',
1520
- # 'LarosateID': -1,
1521
- # 'link': []},
1522
- # { 'Benamning': { 'en': 'Normal teaching',
1523
- # 'sv': 'Normal'},
1524
- # 'Beskrivning': {},
1525
- # 'Giltighetsperiod': {'link': []},
1526
- # 'ID': '1',
1527
- # 'Kod': 'NML',
1528
- # 'LarosateID': -1,
1529
- # 'link': []}],
1530
- # 'link': []}
1531
- # added by GQMJr
1532
- #####################################################################
1533
- #
1534
- # LokalaPerioder_JSON
1535
- #
1536
- # RETURNERAR JSON of local periods
1537
- def LokalaPerioder_JSON(self):
1538
- r = self.session.get(
1539
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/period",
1540
- headers=self.headers,
1541
- ).json()
1542
- return r
1275
+ student_data = self.__get_student_data(person_nr)
1276
+ return student_data
1543
1277
 
1544
- # returns:
1545
- # { 'Period': [
1546
- # ...
1547
- # { 'Benamning': { 'en': 'Calendar year 2020',
1548
- # 'sv': 'Kalenderår 2020'},
1549
- # 'Beskrivning': {},
1550
- # 'FromDatum': '2020-01-01',
1551
- # 'Giltighetsperiod': { 'Slutdatum': '2020-12-31',
1552
- # 'Startdatum': '2020-01-01',
1553
- # 'link': []},
1554
- # 'ID': '29151',
1555
- # 'Kod': '2020',
1556
- # 'LarosateID': 29,
1557
- # 'PeriodtypID': 1,
1558
- # 'TomDatum': '2020-12-31',
1559
- # 'link': []},
1560
- # { 'Benamning': { 'en': 'Last six months of 2020',
1561
- # 'sv': 'Andra halvår 2020'},
1562
- # 'Beskrivning': {},
1563
- # 'FromDatum': '2020-07-01',
1564
- # 'Giltighetsperiod': { 'Slutdatum': '2020-12-31',
1565
- # 'Startdatum': '2020-07-01',
1566
- # 'link': []},
1567
- # 'ID': '29252',
1568
- # 'Kod': '2020H',
1569
- # 'LarosateID': 29,
1570
- # 'PeriodtypID': 3,
1571
- # 'TomDatum': '2020-12-31',
1572
- # 'link': []},
1573
- # { 'Benamning': { 'en': 'First six months of 2020',
1574
- # 'sv': 'Första halvår 2020'},
1575
- # 'Beskrivning': {},
1576
- # 'FromDatum': '2020-01-01',
1577
- # 'Giltighetsperiod': { 'Slutdatum': '2020-06-30',
1578
- # 'Startdatum': '2020-01-01',
1579
- # 'link': []},
1580
- # 'ID': '29324',
1581
- # 'Kod': '2020V',
1582
- # 'LarosateID': 29,
1583
- # 'PeriodtypID': 3,
1584
- # 'TomDatum': '2020-06-30',
1585
- # 'link': []},
1586
- # ...
1587
- # 'link': []}
1588
- # added by GQMJr
1589
1278
  #####################################################################
1590
1279
  #
1591
- # nivainomstudieordning_JSON
1592
- #
1593
- # RETURNERAR JSON of education levels
1594
- def nivainomstudieordning_JSON(self):
1595
- r = self.session.get(
1596
- url=self.base_gui_proxy_url
1597
- + "/kataloginformation/grunddata/nivainomstudieordning",
1598
- headers=self.headers,
1599
- ).json()
1600
- return r
1601
-
1602
- # returns:
1603
- # { 'NivaInomStudieordning': [ { 'Benamning': { 'en': 'First cycle',
1604
- # 'sv': 'Grundnivå'},
1605
- # 'Beskrivning': {},
1606
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01', 'link': []},
1607
- # 'ID': '1',
1608
- # 'Kod': '1',
1609
- # 'LarosateID': -1,
1610
- # 'link': []},
1611
- # { 'Benamning': { 'en': 'Second cycle',
1612
- # 'sv': 'Avancerad nivå'},
1613
- # 'Beskrivning': {},
1614
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01', 'link': []},
1615
- # 'ID': '2',
1616
- # 'Kod': '2',
1617
- # 'LarosateID': -1,
1618
- # 'link': []},
1619
- # { 'Benamning': { 'en': 'Third cycle',
1620
- # 'sv': 'Forskarnivå'},
1621
- # 'Beskrivning': {},
1622
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01', 'link': []},
1623
- # 'ID': '3',
1624
- # 'Kod': '3',
1625
- # 'LarosateID': -1,
1626
- # 'link': []},
1627
- # { 'Benamning': { 'en': 'Postgraduate '
1628
- # 'level',
1629
- # 'sv': 'Forskarutbildning'},
1630
- # 'Beskrivning': {},
1631
- # 'Giltighetsperiod': { 'Slutdatum': '2007-06-30',
1632
- # 'Startdatum': '1977-07-01', 'link': []},
1633
- # 'ID': '5',
1634
- # 'Kod': 'F',
1635
- # 'LarosateID': -1,
1636
- # 'link': []},
1637
- # { 'Benamning': { 'en': 'Undergraduate '
1638
- # 'level',
1639
- # 'sv': 'Grundutbildning'},
1640
- # 'Beskrivning': {},
1641
- # 'Giltighetsperiod': { 'Slutdatum': '2007-06-30',
1642
- # 'Startdatum': '1977-07-01', 'link': []},
1643
- # 'ID': '4',
1644
- # 'Kod': 'G',
1645
- # 'LarosateID': -1,
1646
- # 'link': []}],
1647
- # 'link': []}
1648
- # added by GQMJr
1649
- #####################################################################
1280
+ # get_student_name
1650
1281
  #
1651
- # amnesgrupp_JSON
1282
+ # person_nr - personnummer, flera format accepteras enligt regex:
1283
+ # (\d\d)?(\d\d)(\d\d\d\d)[+\-]?(\w\w\w\w)
1652
1284
  #
1653
- # RETURNERAR JSON of subject area groups
1654
- def amnesgrupp_JSON(self):
1655
- r = self.session.get(
1656
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/amnesgrupp",
1657
- headers=self.headers,
1658
- ).json()
1659
- return r
1660
-
1661
- # returns:
1662
- # { 'Amnesgrupp': [ { 'Benamning': { 'en': 'Archival Science',
1663
- # 'sv': 'Arkivvetenskap'},
1664
- # 'Beskrivning': {},
1665
- # 'Giltighetsperiod': {'link': []},
1666
- # 'ID': '10',
1667
- # 'Kod': 'AV1',
1668
- # 'LarosateID': -1,
1669
- # 'link': []},
1670
- # ...
1671
- # { 'Benamning': {'en': 'Philosophy', 'sv': 'Filosofi'},
1672
- # 'Beskrivning': {},
1673
- # 'Giltighetsperiod': {'link': []},
1674
- # 'ID': '42',
1675
- # 'Kod': 'FI2',
1676
- # 'LarosateID': -1,
1677
- # 'link': []},
1678
- # ...
1679
- # { 'Benamning': { 'en': 'Informatics/Computer and '
1680
- # 'Systems Sciences',
1681
- # 'sv': 'Informatik/data- och '
1682
- # 'systemvetenskap'},
1683
- # 'Beskrivning': {},
1684
- # 'Giltighetsperiod': {'link': []},
1685
- # 'ID': '68',
1686
- # 'Kod': 'IF1',
1687
- # 'LarosateID': -1,
1688
- # 'link': []},
1689
- # ...
1690
- # { 'Benamning': { 'en': 'Electronics',
1691
- # 'sv': 'Elektronik'},
1692
- # 'Beskrivning': {},
1693
- # 'Giltighetsperiod': {'link': []},
1694
- # 'ID': '30',
1695
- # 'Kod': 'EL1',
1696
- # 'LarosateID': -1,
1697
- # 'link': []},
1698
- # ... ],
1699
- # 'link': []}
1700
- # added by GQMJr
1701
- #####################################################################
1285
+ # RETURNERAR en dictionary med för- och efternamn
1702
1286
  #
1703
- # studietakt_JSON
1287
+ # {"first_name" : 'Anna', "last_name : 'Andersson'}
1704
1288
  #
1705
- # RETURNERAR JSON of study tempos
1706
- def studietakt_JSON(self):
1707
- r = self.session.get(
1708
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/studietakt",
1709
- headers=self.headers,
1710
- ).json()
1711
- return r
1289
+ def get_student_name(self, person_nr_raw):
1290
+ person_nr = format_personnummer(person_nr_raw)
1712
1291
 
1713
- # returns:
1714
- # { 'Studietakt': [ { 'Benamning': { 'en': '- No translation available -',
1715
- # 'sv': 'Noll'},
1716
- # 'Beskrivning': {},
1717
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1718
- # 'link': []},
1719
- # 'ID': '133268',
1720
- # 'Kod': '0',
1721
- # 'LarosateID': 29,
1722
- # 'Takt': 0,
1723
- # 'link': []},
1724
- # { 'Benamning': { 'en': '- No translation available -',
1725
- # 'sv': 'Kvartstid'},
1726
- # 'Beskrivning': {},
1727
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1728
- # 'link': []},
1729
- # 'ID': '133270',
1730
- # 'Kod': '1',
1731
- # 'LarosateID': 29,
1732
- # 'Takt': 1,
1733
- # 'link': []},
1734
- # { 'Benamning': { 'en': '- No translation available -',
1735
- # 'sv': 'Kvartstid'},
1736
- # 'Beskrivning': {},
1737
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1738
- # 'link': []},
1739
- # 'ID': '133282',
1740
- # 'Kod': '11',
1741
- # 'LarosateID': 29,
1742
- # 'Takt': 11,
1743
- # 'link': []},
1744
- # { 'Benamning': { 'en': '- No translation available -',
1745
- # 'sv': 'Kvartstid'},
1746
- # 'Beskrivning': {},
1747
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1748
- # 'link': []},
1749
- # 'ID': '133281',
1750
- # 'Kod': '13',
1751
- # 'LarosateID': 29,
1752
- # 'Takt': 13,
1753
- # 'link': []},
1754
- # { 'Benamning': { 'en': '- No translation available -',
1755
- # 'sv': 'Kvartstid'},
1756
- # 'Beskrivning': {},
1757
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1758
- # 'link': []},
1759
- # 'ID': '133278',
1760
- # 'Kod': '14',
1761
- # 'LarosateID': 29,
1762
- # 'Takt': 14,
1763
- # 'link': []},
1764
- # { 'Benamning': { 'en': '- No translation available -',
1765
- # 'sv': 'Kvartstid'},
1766
- # 'Beskrivning': {},
1767
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1768
- # 'link': []},
1769
- # 'ID': '133283',
1770
- # 'Kod': '15',
1771
- # 'LarosateID': 29,
1772
- # 'Takt': 15,
1773
- # 'link': []},
1774
- # { 'Benamning': { 'en': '- No translation available -',
1775
- # 'sv': 'Kvartstid'},
1776
- # 'Beskrivning': {},
1777
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1778
- # 'link': []},
1779
- # 'ID': '133280',
1780
- # 'Kod': '16',
1781
- # 'LarosateID': 29,
1782
- # 'Takt': 16,
1783
- # 'link': []},
1784
- # { 'Benamning': { 'en': '- No translation available -',
1785
- # 'sv': 'Kvartstid'},
1786
- # 'Beskrivning': {},
1787
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1788
- # 'link': []},
1789
- # 'ID': '133289',
1790
- # 'Kod': '18',
1791
- # 'LarosateID': 29,
1792
- # 'Takt': 18,
1793
- # 'link': []},
1794
- # { 'Benamning': { 'en': '- No translation available -',
1795
- # 'sv': 'Kvartstid'},
1796
- # 'Beskrivning': {},
1797
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1798
- # 'link': []},
1799
- # 'ID': '133279',
1800
- # 'Kod': '19',
1801
- # 'LarosateID': 29,
1802
- # 'Takt': 19,
1803
- # 'link': []},
1804
- # { 'Benamning': { 'en': '- No translation available -',
1805
- # 'sv': 'Kvartstid'},
1806
- # 'Beskrivning': {},
1807
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1808
- # 'link': []},
1809
- # 'ID': '133271',
1810
- # 'Kod': '2',
1811
- # 'LarosateID': 29,
1812
- # 'Takt': 2,
1813
- # 'link': []},
1814
- # { 'Benamning': { 'en': '- No translation available -',
1815
- # 'sv': 'Kvartstid'},
1816
- # 'Beskrivning': {},
1817
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1818
- # 'link': []},
1819
- # 'ID': '133285',
1820
- # 'Kod': '20',
1821
- # 'LarosateID': 29,
1822
- # 'Takt': 20,
1823
- # 'link': []},
1824
- # { 'Benamning': { 'en': '- No translation available -',
1825
- # 'sv': 'Kvartstid'},
1826
- # 'Beskrivning': {},
1827
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1828
- # 'link': []},
1829
- # 'ID': '133287',
1830
- # 'Kod': '21',
1831
- # 'LarosateID': 29,
1832
- # 'Takt': 21,
1833
- # 'link': []},
1834
- # { 'Benamning': { 'en': '- No translation available -',
1835
- # 'sv': 'Kvartstid'},
1836
- # 'Beskrivning': {},
1837
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1838
- # 'link': []},
1839
- # 'ID': '133290',
1840
- # 'Kod': '22',
1841
- # 'LarosateID': 29,
1842
- # 'Takt': 22,
1843
- # 'link': []},
1844
- # { 'Benamning': { 'en': '- No translation available -',
1845
- # 'sv': 'Kvartstid'},
1846
- # 'Beskrivning': {},
1847
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1848
- # 'link': []},
1849
- # 'ID': '133284',
1850
- # 'Kod': '23',
1851
- # 'LarosateID': 29,
1852
- # 'Takt': 23,
1853
- # 'link': []},
1854
- # { 'Benamning': { 'en': '- No translation available -',
1855
- # 'sv': 'Kvartstid'},
1856
- # 'Beskrivning': {},
1857
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1858
- # 'link': []},
1859
- # 'ID': '133286',
1860
- # 'Kod': '24',
1861
- # 'LarosateID': 29,
1862
- # 'Takt': 24,
1863
- # 'link': []},
1864
- # { 'Benamning': { 'en': '- No translation available -',
1865
- # 'sv': 'Kvartstid'},
1866
- # 'Beskrivning': {},
1867
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1868
- # 'link': []},
1869
- # 'ID': '133288',
1870
- # 'Kod': '26',
1871
- # 'LarosateID': 29,
1872
- # 'Takt': 26,
1873
- # 'link': []},
1874
- # { 'Benamning': { 'en': '- No translation available -',
1875
- # 'sv': 'Kvartstid'},
1876
- # 'Beskrivning': {},
1877
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1878
- # 'link': []},
1879
- # 'ID': '133291',
1880
- # 'Kod': '27',
1881
- # 'LarosateID': 29,
1882
- # 'Takt': 27,
1883
- # 'link': []},
1884
- # { 'Benamning': { 'en': '- No translation available -',
1885
- # 'sv': 'Kvartstid'},
1886
- # 'Beskrivning': {},
1887
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1888
- # 'link': []},
1889
- # 'ID': '133292',
1890
- # 'Kod': '28',
1891
- # 'LarosateID': 29,
1892
- # 'Takt': 28,
1893
- # 'link': []},
1894
- # { 'Benamning': { 'en': '- No translation available -',
1895
- # 'sv': 'Kvartstid'},
1896
- # 'Beskrivning': {},
1897
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1898
- # 'link': []},
1899
- # 'ID': '133294',
1900
- # 'Kod': '29',
1901
- # 'LarosateID': 29,
1902
- # 'Takt': 29,
1903
- # 'link': []},
1904
- # { 'Benamning': { 'en': '- No translation available -',
1905
- # 'sv': 'Kvartstid'},
1906
- # 'Beskrivning': {},
1907
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1908
- # 'link': []},
1909
- # 'ID': '133274',
1910
- # 'Kod': '3',
1911
- # 'LarosateID': 29,
1912
- # 'Takt': 3,
1913
- # 'link': []},
1914
- # { 'Benamning': { 'en': '- No translation available -',
1915
- # 'sv': 'Kvartstid'},
1916
- # 'Beskrivning': {},
1917
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1918
- # 'link': []},
1919
- # 'ID': '133293',
1920
- # 'Kod': '30',
1921
- # 'LarosateID': 29,
1922
- # 'Takt': 30,
1923
- # 'link': []},
1924
- # { 'Benamning': { 'en': '- No translation available -',
1925
- # 'sv': 'Kvartstid'},
1926
- # 'Beskrivning': {},
1927
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1928
- # 'link': []},
1929
- # 'ID': '133296',
1930
- # 'Kod': '31',
1931
- # 'LarosateID': 29,
1932
- # 'Takt': 31,
1933
- # 'link': []},
1934
- # { 'Benamning': { 'en': '- No translation available -',
1935
- # 'sv': 'Kvartstid'},
1936
- # 'Beskrivning': {},
1937
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1938
- # 'link': []},
1939
- # 'ID': '133295',
1940
- # 'Kod': '32',
1941
- # 'LarosateID': 29,
1942
- # 'Takt': 32,
1943
- # 'link': []},
1944
- # { 'Benamning': { 'en': '- No translation available -',
1945
- # 'sv': 'Kvartstid'},
1946
- # 'Beskrivning': {},
1947
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1948
- # 'link': []},
1949
- # 'ID': '133299',
1950
- # 'Kod': '34',
1951
- # 'LarosateID': 29,
1952
- # 'Takt': 34,
1953
- # 'link': []},
1954
- # { 'Benamning': { 'en': '- No translation available -',
1955
- # 'sv': 'Kvartstid'},
1956
- # 'Beskrivning': {},
1957
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1958
- # 'link': []},
1959
- # 'ID': '133298',
1960
- # 'Kod': '35',
1961
- # 'LarosateID': 29,
1962
- # 'Takt': 35,
1963
- # 'link': []},
1964
- # { 'Benamning': { 'en': '- No translation available -',
1965
- # 'sv': 'Kvartstid'},
1966
- # 'Beskrivning': {},
1967
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1968
- # 'link': []},
1969
- # 'ID': '133297',
1970
- # 'Kod': '36',
1971
- # 'LarosateID': 29,
1972
- # 'Takt': 36,
1973
- # 'link': []},
1974
- # { 'Benamning': { 'en': '- No translation available -',
1975
- # 'sv': 'Kvartstid'},
1976
- # 'Beskrivning': {},
1977
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1978
- # 'link': []},
1979
- # 'ID': '133307',
1980
- # 'Kod': '37',
1981
- # 'LarosateID': 29,
1982
- # 'Takt': 37,
1983
- # 'link': []},
1984
- # { 'Benamning': { 'en': '- No translation available -',
1985
- # 'sv': 'Halvtid'},
1986
- # 'Beskrivning': {},
1987
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1988
- # 'link': []},
1989
- # 'ID': '133303',
1990
- # 'Kod': '38',
1991
- # 'LarosateID': 29,
1992
- # 'Takt': 38,
1993
- # 'link': []},
1994
- # { 'Benamning': { 'en': '- No translation available -',
1995
- # 'sv': 'Halvtid'},
1996
- # 'Beskrivning': {},
1997
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
1998
- # 'link': []},
1999
- # 'ID': '133300',
2000
- # 'Kod': '39',
2001
- # 'LarosateID': 29,
2002
- # 'Takt': 39,
2003
- # 'link': []},
2004
- # { 'Benamning': { 'en': '- No translation available -',
2005
- # 'sv': 'Kvartstid'},
2006
- # 'Beskrivning': {},
2007
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2008
- # 'link': []},
2009
- # 'ID': '133269',
2010
- # 'Kod': '4',
2011
- # 'LarosateID': 29,
2012
- # 'Takt': 4,
2013
- # 'link': []},
2014
- # { 'Benamning': { 'en': '- No translation available -',
2015
- # 'sv': 'Halvtid'},
2016
- # 'Beskrivning': {},
2017
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2018
- # 'link': []},
2019
- # 'ID': '133302',
2020
- # 'Kod': '40',
2021
- # 'LarosateID': 29,
2022
- # 'Takt': 40,
2023
- # 'link': []},
2024
- # { 'Benamning': { 'en': 'One-tenth-time',
2025
- # 'sv': 'Tiondelsfart'},
2026
- # 'Beskrivning': {},
2027
- # 'Giltighetsperiod': {'link': []},
2028
- # 'ID': '8',
2029
- # 'Kod': '10',
2030
- # 'LarosateID': -1,
2031
- # 'Takt': 10,
2032
- # 'link': []},
2033
- # { 'Benamning': {'en': 'Full-time', 'sv': 'Helfart'},
2034
- # 'Beskrivning': {},
2035
- # 'Giltighetsperiod': {'link': []},
2036
- # 'ID': '1',
2037
- # 'Kod': '100',
2038
- # 'LarosateID': -1,
2039
- # 'Takt': 100,
2040
- # 'link': []},
2041
- # { 'Benamning': { 'en': 'One-eight-time',
2042
- # 'sv': 'Åttondelsfart'},
2043
- # 'Beskrivning': {},
2044
- # 'Giltighetsperiod': {'link': []},
2045
- # 'ID': '128190',
2046
- # 'Kod': '12',
2047
- # 'LarosateID': -1,
2048
- # 'Takt': 12,
2049
- # 'link': []},
2050
- # { 'Benamning': { 'en': 'One-sixth-time',
2051
- # 'sv': 'Sjättedelsfart'},
2052
- # 'Beskrivning': {},
2053
- # 'Giltighetsperiod': {'link': []},
2054
- # 'ID': '7',
2055
- # 'Kod': '17',
2056
- # 'LarosateID': -1,
2057
- # 'Takt': 17,
2058
- # 'link': []},
2059
- # { 'Benamning': { 'en': 'One-quarter-time',
2060
- # 'sv': 'Kvartsfart'},
2061
- # 'Beskrivning': {},
2062
- # 'Giltighetsperiod': {'link': []},
2063
- # 'ID': '6',
2064
- # 'Kod': '25',
2065
- # 'LarosateID': -1,
2066
- # 'Takt': 25,
2067
- # 'link': []},
2068
- # { 'Benamning': { 'en': 'One-third-time',
2069
- # 'sv': 'Tredjedelsfart'},
2070
- # 'Beskrivning': {},
2071
- # 'Giltighetsperiod': {'link': []},
2072
- # 'ID': '5',
2073
- # 'Kod': '33',
2074
- # 'LarosateID': -1,
2075
- # 'Takt': 33,
2076
- # 'link': []},
2077
- # { 'Benamning': {'en': 'Half-time', 'sv': 'Halvfart'},
2078
- # 'Beskrivning': {},
2079
- # 'Giltighetsperiod': {'link': []},
2080
- # 'ID': '4',
2081
- # 'Kod': '50',
2082
- # 'LarosateID': -1,
2083
- # 'Takt': 50,
2084
- # 'link': []},
2085
- # { 'Benamning': { 'en': 'Two-thirds-time',
2086
- # 'sv': 'Tvåtredjedelsfart'},
2087
- # 'Beskrivning': { 'sv': 'Ändras till '
2088
- # '"Tvåtredjedelsfart" efter '
2089
- # 'fullbordad '
2090
- # 'produktionssättning.'},
2091
- # 'Giltighetsperiod': {'link': []},
2092
- # 'ID': '3',
2093
- # 'Kod': '67',
2094
- # 'LarosateID': -1,
2095
- # 'Takt': 67,
2096
- # 'link': []},
2097
- # { 'Benamning': { 'en': 'Three-quarters-time',
2098
- # 'sv': 'Trekvartsfart'},
2099
- # 'Beskrivning': {},
2100
- # 'Giltighetsperiod': {'link': []},
2101
- # 'ID': '2',
2102
- # 'Kod': '75',
2103
- # 'LarosateID': -1,
2104
- # 'Takt': 75,
2105
- # 'link': []},
2106
- # { 'Benamning': { 'en': '- No translation available -',
2107
- # 'sv': 'Halvtid'},
2108
- # 'Beskrivning': {},
2109
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2110
- # 'link': []},
2111
- # 'ID': '133304',
2112
- # 'Kod': '41',
2113
- # 'LarosateID': 29,
2114
- # 'Takt': 41,
2115
- # 'link': []},
2116
- # { 'Benamning': { 'en': '- No translation available -',
2117
- # 'sv': 'Halvtid'},
2118
- # 'Beskrivning': {},
2119
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2120
- # 'link': []},
2121
- # 'ID': '133305',
2122
- # 'Kod': '42',
2123
- # 'LarosateID': 29,
2124
- # 'Takt': 42,
2125
- # 'link': []},
2126
- # { 'Benamning': { 'en': '- No translation available -',
2127
- # 'sv': 'Halvtid'},
2128
- # 'Beskrivning': {},
2129
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2130
- # 'link': []},
2131
- # 'ID': '133301',
2132
- # 'Kod': '43',
2133
- # 'LarosateID': 29,
2134
- # 'Takt': 43,
2135
- # 'link': []},
2136
- # { 'Benamning': { 'en': '- No translation available -',
2137
- # 'sv': 'Halvtid'},
2138
- # 'Beskrivning': {},
2139
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2140
- # 'link': []},
2141
- # 'ID': '133312',
2142
- # 'Kod': '44',
2143
- # 'LarosateID': 29,
2144
- # 'Takt': 44,
2145
- # 'link': []},
2146
- # { 'Benamning': { 'en': '- No translation available -',
2147
- # 'sv': 'Halvtid'},
2148
- # 'Beskrivning': {},
2149
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2150
- # 'link': []},
2151
- # 'ID': '133308',
2152
- # 'Kod': '45',
2153
- # 'LarosateID': 29,
2154
- # 'Takt': 45,
2155
- # 'link': []},
2156
- # { 'Benamning': { 'en': '- No translation available -',
2157
- # 'sv': 'Halvtid'},
2158
- # 'Beskrivning': {},
2159
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2160
- # 'link': []},
2161
- # 'ID': '133306',
2162
- # 'Kod': '46',
2163
- # 'LarosateID': 29,
2164
- # 'Takt': 46,
2165
- # 'link': []},
2166
- # { 'Benamning': { 'en': '- No translation available -',
2167
- # 'sv': 'Halvtid'},
2168
- # 'Beskrivning': {},
2169
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2170
- # 'link': []},
2171
- # 'ID': '133310',
2172
- # 'Kod': '47',
2173
- # 'LarosateID': 29,
2174
- # 'Takt': 47,
2175
- # 'link': []},
2176
- # { 'Benamning': { 'en': '- No translation available -',
2177
- # 'sv': 'Halvtid'},
2178
- # 'Beskrivning': {},
2179
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2180
- # 'link': []},
2181
- # 'ID': '133309',
2182
- # 'Kod': '48',
2183
- # 'LarosateID': 29,
2184
- # 'Takt': 48,
2185
- # 'link': []},
2186
- # { 'Benamning': { 'en': '- No translation available -',
2187
- # 'sv': 'Halvtid'},
2188
- # 'Beskrivning': {},
2189
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2190
- # 'link': []},
2191
- # 'ID': '133311',
2192
- # 'Kod': '49',
2193
- # 'LarosateID': 29,
2194
- # 'Takt': 49,
2195
- # 'link': []},
2196
- # { 'Benamning': { 'en': '- No translation available -',
2197
- # 'sv': 'Kvartstid'},
2198
- # 'Beskrivning': {},
2199
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2200
- # 'link': []},
2201
- # 'ID': '133276',
2202
- # 'Kod': '5',
2203
- # 'LarosateID': 29,
2204
- # 'Takt': 5,
2205
- # 'link': []},
2206
- # { 'Benamning': { 'en': '- No translation available -',
2207
- # 'sv': 'Halvtid'},
2208
- # 'Beskrivning': {},
2209
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2210
- # 'link': []},
2211
- # 'ID': '133318',
2212
- # 'Kod': '51',
2213
- # 'LarosateID': 29,
2214
- # 'Takt': 51,
2215
- # 'link': []},
2216
- # { 'Benamning': { 'en': '- No translation available -',
2217
- # 'sv': 'Halvtid'},
2218
- # 'Beskrivning': {},
2219
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2220
- # 'link': []},
2221
- # 'ID': '133315',
2222
- # 'Kod': '52',
2223
- # 'LarosateID': 29,
2224
- # 'Takt': 52,
2225
- # 'link': []},
2226
- # { 'Benamning': { 'en': '- No translation available -',
2227
- # 'sv': 'Halvtid'},
2228
- # 'Beskrivning': {},
2229
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2230
- # 'link': []},
2231
- # 'ID': '133314',
2232
- # 'Kod': '53',
2233
- # 'LarosateID': 29,
2234
- # 'Takt': 53,
2235
- # 'link': []},
2236
- # { 'Benamning': { 'en': '- No translation available -',
2237
- # 'sv': 'Halvtid'},
2238
- # 'Beskrivning': {},
2239
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2240
- # 'link': []},
2241
- # 'ID': '133313',
2242
- # 'Kod': '54',
2243
- # 'LarosateID': 29,
2244
- # 'Takt': 54,
2245
- # 'link': []},
2246
- # { 'Benamning': { 'en': '- No translation available -',
2247
- # 'sv': 'Halvtid'},
2248
- # 'Beskrivning': {},
2249
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2250
- # 'link': []},
2251
- # 'ID': '133316',
2252
- # 'Kod': '55',
2253
- # 'LarosateID': 29,
2254
- # 'Takt': 55,
2255
- # 'link': []},
2256
- # { 'Benamning': { 'en': '- No translation available -',
2257
- # 'sv': 'Halvtid'},
2258
- # 'Beskrivning': {},
2259
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2260
- # 'link': []},
2261
- # 'ID': '133319',
2262
- # 'Kod': '56',
2263
- # 'LarosateID': 29,
2264
- # 'Takt': 56,
2265
- # 'link': []},
2266
- # { 'Benamning': { 'en': '- No translation available -',
2267
- # 'sv': 'Halvtid'},
2268
- # 'Beskrivning': {},
2269
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2270
- # 'link': []},
2271
- # 'ID': '133317',
2272
- # 'Kod': '57',
2273
- # 'LarosateID': 29,
2274
- # 'Takt': 57,
2275
- # 'link': []},
2276
- # { 'Benamning': { 'en': '- No translation available -',
2277
- # 'sv': 'Halvtid'},
2278
- # 'Beskrivning': {},
2279
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2280
- # 'link': []},
2281
- # 'ID': '133320',
2282
- # 'Kod': '58',
2283
- # 'LarosateID': 29,
2284
- # 'Takt': 58,
2285
- # 'link': []},
2286
- # { 'Benamning': { 'en': '- No translation available -',
2287
- # 'sv': 'Halvtid'},
2288
- # 'Beskrivning': {},
2289
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2290
- # 'link': []},
2291
- # 'ID': '133322',
2292
- # 'Kod': '59',
2293
- # 'LarosateID': 29,
2294
- # 'Takt': 59,
2295
- # 'link': []},
2296
- # { 'Benamning': { 'en': '- No translation available -',
2297
- # 'sv': 'Kvartstid'},
2298
- # 'Beskrivning': {},
2299
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2300
- # 'link': []},
2301
- # 'ID': '133272',
2302
- # 'Kod': '6',
2303
- # 'LarosateID': 29,
2304
- # 'Takt': 6,
2305
- # 'link': []},
2306
- # { 'Benamning': { 'en': '- No translation available -',
2307
- # 'sv': 'Halvtid'},
2308
- # 'Beskrivning': {},
2309
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2310
- # 'link': []},
2311
- # 'ID': '133323',
2312
- # 'Kod': '60',
2313
- # 'LarosateID': 29,
2314
- # 'Takt': 60,
2315
- # 'link': []},
2316
- # { 'Benamning': { 'en': '- No translation available -',
2317
- # 'sv': 'Halvtid'},
2318
- # 'Beskrivning': {},
2319
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2320
- # 'link': []},
2321
- # 'ID': '133321',
2322
- # 'Kod': '61',
2323
- # 'LarosateID': 29,
2324
- # 'Takt': 61,
2325
- # 'link': []},
2326
- # { 'Benamning': { 'en': '- No translation available -',
2327
- # 'sv': 'Halvtid'},
2328
- # 'Beskrivning': {},
2329
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2330
- # 'link': []},
2331
- # 'ID': '133332',
2332
- # 'Kod': '62',
2333
- # 'LarosateID': 29,
2334
- # 'Takt': 62,
2335
- # 'link': []},
2336
- # { 'Benamning': { 'en': '- No translation available -',
2337
- # 'sv': 'Halvtid'},
2338
- # 'Beskrivning': {},
2339
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2340
- # 'link': []},
2341
- # 'ID': '133331',
2342
- # 'Kod': '63',
2343
- # 'LarosateID': 29,
2344
- # 'Takt': 63,
2345
- # 'link': []},
2346
- # { 'Benamning': { 'en': '- No translation available -',
2347
- # 'sv': 'Halvtid'},
2348
- # 'Beskrivning': {},
2349
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2350
- # 'link': []},
2351
- # 'ID': '133325',
2352
- # 'Kod': '64',
2353
- # 'LarosateID': 29,
2354
- # 'Takt': 64,
2355
- # 'link': []},
2356
- # { 'Benamning': { 'en': '- No translation available -',
2357
- # 'sv': 'Halvtid'},
2358
- # 'Beskrivning': {},
2359
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2360
- # 'link': []},
2361
- # 'ID': '133324',
2362
- # 'Kod': '65',
2363
- # 'LarosateID': 29,
2364
- # 'Takt': 65,
2365
- # 'link': []},
2366
- # { 'Benamning': { 'en': '- No translation available -',
2367
- # 'sv': 'Halvtid'},
2368
- # 'Beskrivning': {},
2369
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2370
- # 'link': []},
2371
- # 'ID': '133327',
2372
- # 'Kod': '66',
2373
- # 'LarosateID': 29,
2374
- # 'Takt': 66,
2375
- # 'link': []},
2376
- # { 'Benamning': { 'en': '- No translation available -',
2377
- # 'sv': 'Halvtid'},
2378
- # 'Beskrivning': {},
2379
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2380
- # 'link': []},
2381
- # 'ID': '133328',
2382
- # 'Kod': '68',
2383
- # 'LarosateID': 29,
2384
- # 'Takt': 68,
2385
- # 'link': []},
2386
- # { 'Benamning': { 'en': '- No translation available -',
2387
- # 'sv': 'Halvtid'},
2388
- # 'Beskrivning': {},
2389
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2390
- # 'link': []},
2391
- # 'ID': '133329',
2392
- # 'Kod': '69',
2393
- # 'LarosateID': 29,
2394
- # 'Takt': 69,
2395
- # 'link': []},
2396
- # { 'Benamning': { 'en': '- No translation available -',
2397
- # 'sv': 'Kvartstid'},
2398
- # 'Beskrivning': {},
2399
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2400
- # 'link': []},
2401
- # 'ID': '133277',
2402
- # 'Kod': '7',
2403
- # 'LarosateID': 29,
2404
- # 'Takt': 7,
2405
- # 'link': []},
2406
- # { 'Benamning': { 'en': '- No translation available -',
2407
- # 'sv': 'Halvtid'},
2408
- # 'Beskrivning': {},
2409
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2410
- # 'link': []},
2411
- # 'ID': '133330',
2412
- # 'Kod': '70',
2413
- # 'LarosateID': 29,
2414
- # 'Takt': 70,
2415
- # 'link': []},
2416
- # { 'Benamning': { 'en': '- No translation available -',
2417
- # 'sv': 'Halvtid'},
2418
- # 'Beskrivning': {},
2419
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2420
- # 'link': []},
2421
- # 'ID': '133326',
2422
- # 'Kod': '71',
2423
- # 'LarosateID': 29,
2424
- # 'Takt': 71,
2425
- # 'link': []},
2426
- # { 'Benamning': { 'en': '- No translation available -',
2427
- # 'sv': 'Halvtid'},
2428
- # 'Beskrivning': {},
2429
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2430
- # 'link': []},
2431
- # 'ID': '133333',
2432
- # 'Kod': '72',
2433
- # 'LarosateID': 29,
2434
- # 'Takt': 72,
2435
- # 'link': []},
2436
- # { 'Benamning': { 'en': '- No translation available -',
2437
- # 'sv': 'Nästan heltid'},
2438
- # 'Beskrivning': {},
2439
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2440
- # 'link': []},
2441
- # 'ID': '133334',
2442
- # 'Kod': '73',
2443
- # 'LarosateID': 29,
2444
- # 'Takt': 73,
2445
- # 'link': []},
2446
- # { 'Benamning': { 'en': '- No translation available -',
2447
- # 'sv': 'Nästan heltid'},
2448
- # 'Beskrivning': {},
2449
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2450
- # 'link': []},
2451
- # 'ID': '133342',
2452
- # 'Kod': '74',
2453
- # 'LarosateID': 29,
2454
- # 'Takt': 74,
2455
- # 'link': []},
2456
- # { 'Benamning': { 'en': '- No translation available -',
2457
- # 'sv': 'Nästan heltid'},
2458
- # 'Beskrivning': {},
2459
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2460
- # 'link': []},
2461
- # 'ID': '133335',
2462
- # 'Kod': '76',
2463
- # 'LarosateID': 29,
2464
- # 'Takt': 76,
2465
- # 'link': []},
2466
- # { 'Benamning': { 'en': '- No translation available -',
2467
- # 'sv': 'Nästan heltid'},
2468
- # 'Beskrivning': {},
2469
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2470
- # 'link': []},
2471
- # 'ID': '133347',
2472
- # 'Kod': '77',
2473
- # 'LarosateID': 29,
2474
- # 'Takt': 77,
2475
- # 'link': []},
2476
- # { 'Benamning': { 'en': '- No translation available -',
2477
- # 'sv': 'Nästan heltid'},
2478
- # 'Beskrivning': {},
2479
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2480
- # 'link': []},
2481
- # 'ID': '133339',
2482
- # 'Kod': '78',
2483
- # 'LarosateID': 29,
2484
- # 'Takt': 78,
2485
- # 'link': []},
2486
- # { 'Benamning': { 'en': '- No translation available -',
2487
- # 'sv': 'Nästan heltid'},
2488
- # 'Beskrivning': {},
2489
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2490
- # 'link': []},
2491
- # 'ID': '133338',
2492
- # 'Kod': '79',
2493
- # 'LarosateID': 29,
2494
- # 'Takt': 79,
2495
- # 'link': []},
2496
- # { 'Benamning': { 'en': '- No translation available -',
2497
- # 'sv': 'Kvartstid'},
2498
- # 'Beskrivning': {},
2499
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2500
- # 'link': []},
2501
- # 'ID': '133275',
2502
- # 'Kod': '8',
2503
- # 'LarosateID': 29,
2504
- # 'Takt': 8,
2505
- # 'link': []},
2506
- # { 'Benamning': { 'en': '- No translation available -',
2507
- # 'sv': 'Nästan heltid'},
2508
- # 'Beskrivning': {},
2509
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2510
- # 'link': []},
2511
- # 'ID': '133337',
2512
- # 'Kod': '80',
2513
- # 'LarosateID': 29,
2514
- # 'Takt': 80,
2515
- # 'link': []},
2516
- # { 'Benamning': { 'en': '- No translation available -',
2517
- # 'sv': 'Nästan heltid'},
2518
- # 'Beskrivning': {},
2519
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2520
- # 'link': []},
2521
- # 'ID': '133336',
2522
- # 'Kod': '81',
2523
- # 'LarosateID': 29,
2524
- # 'Takt': 81,
2525
- # 'link': []},
2526
- # { 'Benamning': { 'en': '- No translation available -',
2527
- # 'sv': 'Nästan heltid'},
2528
- # 'Beskrivning': {},
2529
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2530
- # 'link': []},
2531
- # 'ID': '133340',
2532
- # 'Kod': '82',
2533
- # 'LarosateID': 29,
2534
- # 'Takt': 82,
2535
- # 'link': []},
2536
- # { 'Benamning': { 'en': '- No translation available -',
2537
- # 'sv': 'Nästan heltid'},
2538
- # 'Beskrivning': {},
2539
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2540
- # 'link': []},
2541
- # 'ID': '133345',
2542
- # 'Kod': '83',
2543
- # 'LarosateID': 29,
2544
- # 'Takt': 83,
2545
- # 'link': []},
2546
- # { 'Benamning': { 'en': '- No translation available -',
2547
- # 'sv': 'Nästan heltid'},
2548
- # 'Beskrivning': {},
2549
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2550
- # 'link': []},
2551
- # 'ID': '133341',
2552
- # 'Kod': '84',
2553
- # 'LarosateID': 29,
2554
- # 'Takt': 84,
2555
- # 'link': []},
2556
- # { 'Benamning': { 'en': '- No translation available -',
2557
- # 'sv': 'Nästan heltid'},
2558
- # 'Beskrivning': {},
2559
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2560
- # 'link': []},
2561
- # 'ID': '133343',
2562
- # 'Kod': '85',
2563
- # 'LarosateID': 29,
2564
- # 'Takt': 85,
2565
- # 'link': []},
2566
- # { 'Benamning': { 'en': '- No translation available -',
2567
- # 'sv': 'Nästan heltid'},
2568
- # 'Beskrivning': {},
2569
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2570
- # 'link': []},
2571
- # 'ID': '133344',
2572
- # 'Kod': '86',
2573
- # 'LarosateID': 29,
2574
- # 'Takt': 86,
2575
- # 'link': []},
2576
- # { 'Benamning': { 'en': '- No translation available -',
2577
- # 'sv': 'Nästan heltid'},
2578
- # 'Beskrivning': {},
2579
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2580
- # 'link': []},
2581
- # 'ID': '133346',
2582
- # 'Kod': '87',
2583
- # 'LarosateID': 29,
2584
- # 'Takt': 87,
2585
- # 'link': []},
2586
- # { 'Benamning': { 'en': '- No translation available -',
2587
- # 'sv': 'Nästan heltid'},
2588
- # 'Beskrivning': {},
2589
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2590
- # 'link': []},
2591
- # 'ID': '133348',
2592
- # 'Kod': '88',
2593
- # 'LarosateID': 29,
2594
- # 'Takt': 88,
2595
- # 'link': []},
2596
- # { 'Benamning': { 'en': '- No translation available -',
2597
- # 'sv': 'Nästan heltid'},
2598
- # 'Beskrivning': {},
2599
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2600
- # 'link': []},
2601
- # 'ID': '133349',
2602
- # 'Kod': '89',
2603
- # 'LarosateID': 29,
2604
- # 'Takt': 89,
2605
- # 'link': []},
2606
- # { 'Benamning': { 'en': '- No translation available -',
2607
- # 'sv': 'Kvartstid'},
2608
- # 'Beskrivning': {},
2609
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2610
- # 'link': []},
2611
- # 'ID': '133273',
2612
- # 'Kod': '9',
2613
- # 'LarosateID': 29,
2614
- # 'Takt': 9,
2615
- # 'link': []},
2616
- # { 'Benamning': { 'en': '- No translation available -',
2617
- # 'sv': 'Nästan heltid'},
2618
- # 'Beskrivning': {},
2619
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2620
- # 'link': []},
2621
- # 'ID': '133350',
2622
- # 'Kod': '90',
2623
- # 'LarosateID': 29,
2624
- # 'Takt': 90,
2625
- # 'link': []},
2626
- # { 'Benamning': { 'en': '- No translation available -',
2627
- # 'sv': 'Nästan heltid'},
2628
- # 'Beskrivning': {},
2629
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2630
- # 'link': []},
2631
- # 'ID': '133352',
2632
- # 'Kod': '91',
2633
- # 'LarosateID': 29,
2634
- # 'Takt': 91,
2635
- # 'link': []},
2636
- # { 'Benamning': { 'en': '- No translation available -',
2637
- # 'sv': 'Nästan heltid'},
2638
- # 'Beskrivning': {},
2639
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2640
- # 'link': []},
2641
- # 'ID': '133358',
2642
- # 'Kod': '92',
2643
- # 'LarosateID': 29,
2644
- # 'Takt': 92,
2645
- # 'link': []},
2646
- # { 'Benamning': { 'en': '- No translation available -',
2647
- # 'sv': 'Nästan heltid'},
2648
- # 'Beskrivning': {},
2649
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2650
- # 'link': []},
2651
- # 'ID': '133353',
2652
- # 'Kod': '93',
2653
- # 'LarosateID': 29,
2654
- # 'Takt': 93,
2655
- # 'link': []},
2656
- # { 'Benamning': { 'en': '- No translation available -',
2657
- # 'sv': 'Nästan heltid'},
2658
- # 'Beskrivning': {},
2659
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2660
- # 'link': []},
2661
- # 'ID': '133354',
2662
- # 'Kod': '94',
2663
- # 'LarosateID': 29,
2664
- # 'Takt': 94,
2665
- # 'link': []},
2666
- # { 'Benamning': { 'en': '- No translation available -',
2667
- # 'sv': 'Nästan heltid'},
2668
- # 'Beskrivning': {},
2669
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2670
- # 'link': []},
2671
- # 'ID': '133351',
2672
- # 'Kod': '95',
2673
- # 'LarosateID': 29,
2674
- # 'Takt': 95,
2675
- # 'link': []},
2676
- # { 'Benamning': { 'en': '- No translation available -',
2677
- # 'sv': 'Nästan heltid'},
2678
- # 'Beskrivning': {},
2679
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2680
- # 'link': []},
2681
- # 'ID': '133355',
2682
- # 'Kod': '96',
2683
- # 'LarosateID': 29,
2684
- # 'Takt': 96,
2685
- # 'link': []},
2686
- # { 'Benamning': { 'en': '- No translation available -',
2687
- # 'sv': 'Nästan heltid'},
2688
- # 'Beskrivning': {},
2689
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2690
- # 'link': []},
2691
- # 'ID': '133357',
2692
- # 'Kod': '97',
2693
- # 'LarosateID': 29,
2694
- # 'Takt': 97,
2695
- # 'link': []},
2696
- # { 'Benamning': { 'en': '- No translation available -',
2697
- # 'sv': 'Nästan heltid'},
2698
- # 'Beskrivning': {},
2699
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2700
- # 'link': []},
2701
- # 'ID': '133356',
2702
- # 'Kod': '98',
2703
- # 'LarosateID': 29,
2704
- # 'Takt': 98,
2705
- # 'link': []},
2706
- # { 'Benamning': { 'en': '- No translation available -',
2707
- # 'sv': 'Nästan heltid'},
2708
- # 'Beskrivning': {},
2709
- # 'Giltighetsperiod': { 'Slutdatum': '2018-06-19',
2710
- # 'link': []},
2711
- # 'ID': '133359',
2712
- # 'Kod': '99',
2713
- # 'LarosateID': 29,
2714
- # 'Takt': 99,
2715
- # 'link': []}],
2716
- # 'link': []}
2717
- # added by GQMJr
2718
- #####################################################################
2719
- #
2720
- # finansieringsform_JSON
2721
- #
2722
- # RETURNERAR JSON forms of financing
2723
- def finansieringsform_JSON(self):
2724
- r = self.session.get(
2725
- url=self.base_gui_proxy_url
2726
- + "/kataloginformation/grunddata/finansieringsform",
2727
- headers=self.headers,
2728
- ).json()
2729
- return r
1292
+ if not person_nr:
1293
+ raise Exception("Invalid person nr " + person_nr_raw)
2730
1294
 
2731
- # returns:
2732
- # { 'Finansieringsform': [ { 'Benamning': { 'en': '- No translation '
2733
- # 'available -',
2734
- # 'sv': 'Alumn, med examen fr '
2735
- # 'KTH (ej HST-HPR)'},
2736
- # 'Beskrivning': {},
2737
- # 'Giltighetsperiod': {'link': []},
2738
- # 'ID': '131704',
2739
- # 'Kod': 'ALU',
2740
- # 'LarosateID': 29,
2741
- # 'link': []},
2742
- # { 'Benamning': { 'en': '- No translation '
2743
- # ...
2744
- # added by GQMJr
2745
- #####################################################################
2746
- #
2747
- # utbildningsomrade_JSON
2748
- #
2749
- # RETURNERAR JSON of subjects
2750
- def utbildningsomrade_JSON(self):
2751
- r = self.session.get(
2752
- url=self.base_gui_proxy_url
2753
- + "/kataloginformation/grunddata/utbildningsomrade",
2754
- headers=self.headers,
2755
- ).json()
2756
- return r
1295
+ student_data = self.__get_student_data(person_nr)
1296
+ return {
1297
+ "first_name": student_data["first_name"],
1298
+ "last_name": student_data["last_name"],
1299
+ }
2757
1300
 
2758
- # returns:
2759
- # { 'Utbildningsomrade': [ { 'Benamning': { 'en': 'Dance',
2760
- # 'sv': 'Dansområdet'},
2761
- # 'Beskrivning': { 'sv': 'Infördes från '
2762
- # 'budgetåret 1994/95. '
2763
- # 'Tidigare fanns bara '
2764
- # 'ett konstnärligt '
2765
- # 'utbildningsområde '
2766
- # '(vars '
2767
- # 'ersättningsbelopp '
2768
- # 'varierade mellan '
2769
- # 'lärosätena).'},
2770
- # 'Giltighetsperiod': { 'Startdatum': '1994-07-01',
2771
- # 'link': []},
2772
- # 'ID': '1',
2773
- # 'Kod': 'DA',
2774
- # 'LarosateID': -1,
2775
- # 'link': []},
2776
- # ...
2777
- # { 'Benamning': { 'en': 'Education',
2778
- # 'sv': 'Undervisningsområdet'},
2779
- # 'Beskrivning': { 'sv': 'Avser utbildning '
2780
- # 'inom det allmänna '
2781
- # 'utbildningsområdet '
2782
- # 'och den '
2783
- # 'utbildningsvetenskapliga '
2784
- # 'kärnan. T.o.m. '
2785
- # '2012-12-31 avsågs '
2786
- # 'även övrig '
2787
- # 'verksamhetsförlagd '
2788
- # 'utbildning (se '
2789
- # 'VU).'},
2790
- # 'Giltighetsperiod': { 'Startdatum': '1993-07-01',
2791
- # 'link': []},
2792
- # 'ID': '9',
2793
- # 'Kod': 'LU',
2794
- # 'LarosateID': -1,
2795
- # 'link': []},
2796
- # ...
2797
- # { 'Benamning': { 'en': 'Natural sciences',
2798
- # 'sv': 'Naturvetenskapliga '
2799
- # 'området'},
2800
- # 'Beskrivning': {},
2801
- # 'Giltighetsperiod': { 'Startdatum': '1993-07-01',
2802
- # 'link': []},
2803
- # 'ID': '13',
2804
- # 'Kod': 'NA',
2805
- # 'LarosateID': -1,
2806
- # 'link': []},
2807
- # ...
2808
- # { 'Benamning': { 'en': 'Technology',
2809
- # 'sv': 'Tekniska området'},
2810
- # 'Beskrivning': {},
2811
- # 'Giltighetsperiod': { 'Startdatum': '1993-07-01',
2812
- # 'link': []},
2813
- # 'ID': '19',
2814
- # 'Kod': 'TE',
2815
- # 'LarosateID': -1,
2816
- # 'link': []},
2817
- # ... ],
2818
- # 'link': []}
2819
1301
  # added by GQMJr
2820
1302
  #####################################################################
2821
1303
  #
2822
- # kravpatidigarestudier_JSON
2823
- #
2824
- # RETURNERAR JSON of krequirements for earlier studies
2825
- def kravpatidigarestudier_JSON(self):
2826
- r = self.session.get(
2827
- url=self.base_gui_proxy_url
2828
- + "/kataloginformation/grunddata/kravpatidigarestudier",
2829
- headers=self.headers,
2830
- ).json()
2831
- return r
2832
-
2833
- # returns
2834
- # { 'KravPaTidigareStudier': [ { 'Benamning': { 'en': 'University '
2835
- # 'studies required',
2836
- # 'sv': 'Tidigare '
2837
- # 'högskolestudier '
2838
- # 'krävs'},
2839
- # 'Beskrivning': {},
2840
- # 'Emilvarde': 'uh',
2841
- # 'Giltighetsperiod': {'link': []},
2842
- # 'ID': '1',
2843
- # 'Kod': 'UH',
2844
- # 'LarosateID': -1,
2845
- # 'link': []},
2846
- # { 'Benamning': { 'en': 'Upper secondary '
2847
- # 'or equivalent',
2848
- # 'sv': 'Inga tidigare '
2849
- # 'högskolestudier '
2850
- # 'krävs'},
2851
- # 'Beskrivning': {},
2852
- # 'Emilvarde': 'grundlaggande',
2853
- # 'Giltighetsperiod': {'link': []},
2854
- # 'ID': '2',
2855
- # 'Kod': 'GR',
2856
- # 'LarosateID': -1,
2857
- # 'link': []},
2858
- # { 'Benamning': { 'en': 'No general entry '
2859
- # 'requirements '
2860
- # 'needed',
2861
- # 'sv': 'Ingen '
2862
- # 'grundläggande '
2863
- # 'behörighet krävs'},
2864
- # 'Beskrivning': {},
2865
- # 'Emilvarde': 'inga',
2866
- # 'Giltighetsperiod': {'link': []},
2867
- # 'ID': '3',
2868
- # 'Kod': 'IN',
2869
- # 'LarosateID': -1,
2870
- # 'link': []}],
2871
- # 'link': []}
2872
- # added by GQMJr
2873
- #####################################################################
1304
+ # all_grading_scale
2874
1305
  #
2875
- # studieordning_JSON
2876
1306
  #
2877
- # RETURNERAR JSON of study regulation
2878
- def studieordning_JSON(self):
2879
- r = self.session.get(
2880
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/studieordning",
2881
- headers=self.headers,
2882
- ).json()
2883
- return r
1307
+ # RETURNERAR en dictionary of the grading scales
1308
+ def all_grading_scale(self):
1309
+ return self.get_grade_scales()
2884
1310
 
2885
- # returns:
2886
- # { 'Studieordning': [ { 'Benamning': { 'en': 'Higher education, study '
2887
- # 'regulation of 1993',
2888
- # 'sv': 'Högskoleutbildning, 1993 '
2889
- # 'års studieordning'},
2890
- # 'Beskrivning': { 'sv': 'Avser i Ladok 1993 års '
2891
- # 'studieordning inklusive '
2892
- # 'dess föregångare'},
2893
- # 'EnhetID': 9,
2894
- # 'Giltighetsperiod': {'link': []},
2895
- # 'ID': '2',
2896
- # 'Kod': 'HÖ93',
2897
- # 'LarosateID': -1,
2898
- # 'UtbildningsformID': 1,
2899
- # 'link': []},
2900
- # { 'Benamning': { 'en': 'Higher education, study '
2901
- # 'regulation of 2007',
2902
- # 'sv': 'Högskoleutbildning, 2007 '
2903
- # 'års studieordning'},
2904
- # 'Beskrivning': {},
2905
- # 'EnhetID': 2,
2906
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01',
2907
- # 'link': []},
2908
- # 'ID': '1',
2909
- # 'Kod': 'HÖ07',
2910
- # 'LarosateID': -1,
2911
- # 'UtbildningsformID': 1,
2912
- # 'link': []},
2913
- # { 'Benamning': { 'en': 'Access education (hours)',
2914
- # 'sv': 'Behörighetsgivande '
2915
- # 'förutbildning (timmar)'},
2916
- # 'Beskrivning': {},
2917
- # 'EnhetID': 5,
2918
- # 'Giltighetsperiod': {'link': []},
2919
- # 'ID': '12',
2920
- # 'Kod': 'ÖVBT',
2921
- # 'LarosateID': -1,
2922
- # 'UtbildningsformID': 100970,
2923
- # 'link': []},
2924
- # { 'Benamning': { 'en': 'Access education (fup)',
2925
- # 'sv': 'Behörighetsgivande '
2926
- # 'förutbildning (poäng)'},
2927
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
2928
- # 'förordning (2018:1519) '
2929
- # 'om behörighetsgivande '
2930
- # 'och '
2931
- # 'högskoleintroducerande '
2932
- # 'utbildning resp. '
2933
- # 'tidigare gällande '
2934
- # 'förordning (2007:432) '
2935
- # 'om behörighetsgivande '
2936
- # 'förutbildning vid '
2937
- # 'universitet och '
2938
- # 'högskolor'},
2939
- # 'EnhetID': 4,
2940
- # 'Giltighetsperiod': {'link': []},
2941
- # 'ID': '3',
2942
- # 'Kod': 'FÖPO',
2943
- # 'LarosateID': -1,
2944
- # 'UtbildningsformID': 2,
2945
- # 'link': []},
2946
- # { 'Benamning': { 'en': 'Access education (weeks)',
2947
- # 'sv': 'Behörighetsgivande '
2948
- # 'förutbildning (veckor)'},
2949
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
2950
- # 'förordning (2018:1519) '
2951
- # 'om behörighetsgivande '
2952
- # 'och '
2953
- # 'högskoleintroducerande '
2954
- # 'utbildning resp. '
2955
- # 'tidigare gällande '
2956
- # 'förordning (2007:432) '
2957
- # 'om behörighetsgivande '
2958
- # 'förutbildning vid '
2959
- # 'universitet och '
2960
- # 'högskolor'},
2961
- # 'EnhetID': 1,
2962
- # 'Giltighetsperiod': {'link': []},
2963
- # 'ID': '4',
2964
- # 'Kod': 'FÖVE',
2965
- # 'LarosateID': -1,
2966
- # 'UtbildningsformID': 2,
2967
- # 'link': []},
2968
- # { 'Benamning': { 'en': 'Internal education (ORU)',
2969
- # 'sv': 'Högskoleintern utbildning '
2970
- # '(ORU)'},
2971
- # 'Beskrivning': { 'sv': 'Intern utbildning vid '
2972
- # 'Örebro universitet'},
2973
- # 'EnhetID': 6,
2974
- # 'Giltighetsperiod': { 'Slutdatum': '2007-06-30',
2975
- # 'Startdatum': '2004-01-01',
2976
- # 'link': []},
2977
- # 'ID': '15',
2978
- # 'Kod': 'ÖVHI',
2979
- # 'LarosateID': -1,
2980
- # 'UtbildningsformID': 100970,
2981
- # 'link': []},
2982
- # { 'Benamning': { 'en': 'Older defence education',
2983
- # 'sv': 'Äldre utbildning vid '
2984
- # 'Försvarshögskolan'},
2985
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
2986
- # 'förordningen '
2987
- # '(1996:1476) med '
2988
- # 'instruktion för '
2989
- # 'Försvarshögskolan'},
2990
- # 'EnhetID': 10,
2991
- # 'Giltighetsperiod': { 'Slutdatum': '2007-12-31',
2992
- # 'link': []},
2993
- # 'ID': '16',
2994
- # 'Kod': 'ÖVFU',
2995
- # 'LarosateID': -1,
2996
- # 'UtbildningsformID': 100970,
2997
- # 'link': []},
2998
- # { 'Benamning': { 'en': 'Post-secondary vocational '
2999
- # 'education and training',
3000
- # 'sv': 'Kvalificerad '
3001
- # 'yrkesutbildning'},
3002
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
3003
- # 'förordningen '
3004
- # '(2001:1131) om '
3005
- # 'kvalificerad '
3006
- # 'yrkesutbildning '
3007
- # '(upphävd 2009-04-15)'},
3008
- # 'EnhetID': 7,
3009
- # 'Giltighetsperiod': { 'Slutdatum': '2013-12-31',
3010
- # 'link': []},
3011
- # 'ID': '13',
3012
- # 'Kod': 'KY02',
3013
- # 'LarosateID': -1,
3014
- # 'UtbildningsformID': 100968,
3015
- # 'link': []},
3016
- # { 'Benamning': { 'en': 'Preparatory education',
3017
- # 'sv': 'Preparandutbildning'},
3018
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
3019
- # 'förordningen (1985:681) '
3020
- # 'om preparandutbildning '
3021
- # 'i svenska (upphävd '
3022
- # '1993-07-01)'},
3023
- # 'EnhetID': 6,
3024
- # 'Giltighetsperiod': { 'Slutdatum': '1993-06-30',
3025
- # 'link': []},
3026
- # 'ID': '14',
3027
- # 'Kod': 'ÖVPR',
3028
- # 'LarosateID': -1,
3029
- # 'UtbildningsformID': 100970,
3030
- # 'link': []},
3031
- # { 'Benamning': { 'en': 'Contract education '
3032
- # '(hours)',
3033
- # 'sv': 'Uppdragsutbildning, Övrig '
3034
- # 'utbildning (timmar)'},
3035
- # 'Beskrivning': {},
3036
- # 'EnhetID': 5,
3037
- # 'Giltighetsperiod': { 'Slutdatum': '2018-12-31',
3038
- # 'link': []},
3039
- # 'ID': '9',
3040
- # 'Kod': 'ÖVUT',
3041
- # 'LarosateID': -1,
3042
- # 'UtbildningsformID': 100970,
3043
- # 'link': []},
3044
- # { 'Benamning': { 'en': 'Higher vocational '
3045
- # 'education',
3046
- # 'sv': 'Yrkeshögskoleutbildning'},
3047
- # 'Beskrivning': { 'sv': 'Utbildning enligt '
3048
- # 'förordning (2009:130) '
3049
- # 'om yrkeshögskolan'},
3050
- # 'EnhetID': 8,
3051
- # 'Giltighetsperiod': { 'Startdatum': '2009-07-01',
3052
- # 'link': []},
3053
- # 'ID': '5',
3054
- # 'Kod': 'YH09',
3055
- # 'LarosateID': -1,
3056
- # 'UtbildningsformID': 4,
3057
- # 'link': []},
3058
- # { 'Benamning': { 'en': 'Contract education '
3059
- # '(credits)',
3060
- # 'sv': 'Uppdragsutbildning '
3061
- # '(högskolepoäng)'},
3062
- # 'Beskrivning': {},
3063
- # 'EnhetID': 2,
3064
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01',
3065
- # 'link': []},
3066
- # 'ID': '17',
3067
- # 'Kod': 'UPHP',
3068
- # 'LarosateID': -1,
3069
- # 'UtbildningsformID': 100928,
3070
- # 'link': []},
3071
- # { 'Benamning': { 'en': 'Contract education '
3072
- # '(weeks)',
3073
- # 'sv': 'Uppdragsutbildning '
3074
- # '(veckor)'},
3075
- # 'Beskrivning': {},
3076
- # 'EnhetID': 1,
3077
- # 'Giltighetsperiod': {'link': []},
3078
- # 'ID': '18',
3079
- # 'Kod': 'UPVE',
3080
- # 'LarosateID': -1,
3081
- # 'UtbildningsformID': 100928,
3082
- # 'link': []},
3083
- # { 'Benamning': { 'en': 'Police education',
3084
- # 'sv': 'Polisutbildning'},
3085
- # 'Beskrivning': { 'sv': 'Polisutbildning som ej '
3086
- # 'uppfyller alla '
3087
- # 'kvalitetskrav för '
3088
- # 'högskoleutbildning.'},
3089
- # 'EnhetID': 2,
3090
- # 'Giltighetsperiod': {'link': []},
3091
- # 'ID': '109831',
3092
- # 'Kod': 'PU99',
3093
- # 'LarosateID': -1,
3094
- # 'UtbildningsformID': 100969,
3095
- # 'link': []},
3096
- # { 'Benamning': { 'en': 'Police education, equal '
3097
- # 'to Higher education',
3098
- # 'sv': 'Polisutbildning, '
3099
- # 'motsvarande '
3100
- # 'högskoleutbildning'},
3101
- # 'Beskrivning': { 'sv': 'Polisutbildning som '
3102
- # 'uppfyller '
3103
- # 'kvalitetskraven för '
3104
- # 'högskoleutbildning'},
3105
- # 'EnhetID': 2,
3106
- # 'Giltighetsperiod': { 'Startdatum': '2018-07-01',
3107
- # 'link': []},
3108
- # 'ID': '135370',
3109
- # 'Kod': 'PU18',
3110
- # 'LarosateID': -1,
3111
- # 'UtbildningsformID': 100969,
3112
- # 'link': []},
3113
- # { 'Benamning': {'en': 'Ö-Fel', 'sv': 'Ö-Fel'},
3114
- # 'Beskrivning': {},
3115
- # 'EnhetID': 1,
3116
- # 'Giltighetsperiod': { 'Slutdatum': '1900-01-01',
3117
- # 'link': []},
3118
- # 'ID': '138710',
3119
- # 'Kod': 'FEL',
3120
- # 'LarosateID': -1,
3121
- # 'UtbildningsformID': 100970,
3122
- # 'link': []},
3123
- # { 'Benamning': { 'en': 'Contract education '
3124
- # '(hours)',
3125
- # 'sv': 'Uppdragsutbildning '
3126
- # '(timmar)'},
3127
- # 'Beskrivning': {},
3128
- # 'EnhetID': 5,
3129
- # 'Giltighetsperiod': { 'Startdatum': '2019-01-01',
3130
- # 'link': []},
3131
- # 'ID': '147898',
3132
- # 'Kod': 'UPTI',
3133
- # 'LarosateID': -1,
3134
- # 'UtbildningsformID': 100928,
3135
- # 'link': []}],
3136
- # 'link': []}
3137
1311
  # added by GQMJr
3138
1312
  #####################################################################
3139
1313
  #
3140
- # enhet_JSON
3141
- #
3142
- # RETURNERAR JSON of units
3143
- def enhet_JSON(self):
3144
- r = self.session.get(
3145
- url=self.base_gui_proxy_url + "/kataloginformation/grunddata/enhet",
3146
- headers=self.headers,
3147
- ).json()
3148
- return r
3149
-
3150
- # returns:
3151
- # { 'Enhet': [ { 'Benamning': { 'en': 'Credit points',
3152
- # 'sv': 'Poäng (Övrig utbildning)'},
3153
- # 'Beskrivning': {},
3154
- # 'Giltighetsperiod': { 'Slutdatum': '2018-01-01',
3155
- # 'link': []},
3156
- # 'Helarsvarde': 40,
3157
- # 'ID': '6',
3158
- # 'Kod': 'AUP',
3159
- # 'LarosateID': -1,
3160
- # 'link': []},
3161
- # { 'Benamning': { 'en': 'Pre-education credits',
3162
- # 'sv': 'Förutbildningspoäng'},
3163
- # 'Beskrivning': {},
3164
- # 'Giltighetsperiod': {'link': []},
3165
- # 'Helarsvarde': 60,
3166
- # 'ID': '4',
3167
- # 'Kod': 'FUP',
3168
- # 'LarosateID': -1,
3169
- # 'link': []},
3170
- # { 'Benamning': {'en': 'Credits', 'sv': 'Högskolepoäng'},
3171
- # 'Beskrivning': { 'sv': 'Översattes 2007-2010 med Higher '
3172
- # 'education credits'},
3173
- # 'Giltighetsperiod': { 'Startdatum': '2007-07-01',
3174
- # 'link': []},
3175
- # 'Helarsvarde': 60,
3176
- # 'ID': '2',
3177
- # 'Kod': 'HP',
3178
- # 'LarosateID': -1,
3179
- # 'link': []},
3180
- # { 'Benamning': { 'en': 'Converted credits',
3181
- # 'sv': 'Konverterade högskolepoäng'},
3182
- # 'Beskrivning': { 'sv': 'Enheten poäng konverterades '
3183
- # 'till högskolepoäng i Ladok för '
3184
- # '1993 års studieordning i '
3185
- # 'samband med övergången till '
3186
- # '2007 års studieordning'},
3187
- # 'Giltighetsperiod': { 'Slutdatum': '2007-06-30',
3188
- # 'link': []},
3189
- # 'Helarsvarde': 60,
3190
- # 'ID': '9',
3191
- # 'Kod': 'HP-K',
3192
- # 'LarosateID': -1,
3193
- # 'link': []},
3194
- # { 'Benamning': { 'en': 'Internal credits',
3195
- # 'sv': 'Interna poäng'},
3196
- # 'Beskrivning': { 'sv': 'Har enbart använts av '
3197
- # 'Försvarshögskolan'},
3198
- # 'Giltighetsperiod': { 'Slutdatum': '2016-07-01',
3199
- # 'link': []},
3200
- # 'Helarsvarde': 60,
3201
- # 'ID': '10',
3202
- # 'Kod': 'IP',
3203
- # 'LarosateID': -1,
3204
- # 'link': []},
3205
- # { 'Benamning': {'en': 'KY credits', 'sv': 'KY-poäng'},
3206
- # 'Beskrivning': {},
3207
- # 'Giltighetsperiod': { 'Slutdatum': '2013-12-31',
3208
- # 'Startdatum': '2002-01-01',
3209
- # 'link': []},
3210
- # 'Helarsvarde': 40,
3211
- # 'ID': '7',
3212
- # 'Kod': 'KYP',
3213
- # 'LarosateID': -1,
3214
- # 'link': []},
3215
- # { 'Benamning': {'en': 'Hours', 'sv': 'Timmar'},
3216
- # 'Beskrivning': {},
3217
- # 'Giltighetsperiod': {'link': []},
3218
- # 'Helarsvarde': 1600,
3219
- # 'ID': '5',
3220
- # 'Kod': 'T',
3221
- # 'LarosateID': -1,
3222
- # 'link': []},
3223
- # { 'Benamning': {'en': 'Weeks', 'sv': 'Veckor'},
3224
- # 'Beskrivning': {},
3225
- # 'Giltighetsperiod': {'link': []},
3226
- # 'Helarsvarde': 40,
3227
- # 'ID': '1',
3228
- # 'Kod': 'V',
3229
- # 'LarosateID': -1,
3230
- # 'link': []},
3231
- # { 'Benamning': { 'en': 'HVE credits',
3232
- # 'sv': 'Yrkeshögskolepoäng'},
3233
- # 'Beskrivning': {},
3234
- # 'Giltighetsperiod': { 'Startdatum': '2009-07-01',
3235
- # 'link': []},
3236
- # 'Helarsvarde': 200,
3237
- # 'ID': '8',
3238
- # 'Kod': 'YHP',
3239
- # 'LarosateID': -1,
3240
- # 'link': []}],
3241
- # 'link': []}
3242
- # added by GQMJr
3243
- #####################################################################
1314
+ # change_locale
3244
1315
  #
3245
- # studielokalisering_JSON
1316
+ # lang - language code 'en' or 'sv', defaults to 'sv'
3246
1317
  #
3247
- # RETURNERAR JSON of study location
3248
- def studielokalisering_JSON(self):
1318
+ # RETURNERAR reponse to the request
1319
+ def change_locale(self, lang="sv"):
3249
1320
  r = self.session.get(
3250
- url=self.base_gui_proxy_url
3251
- + "/kataloginformation/grunddata/studielokalisering",
1321
+ url=self.base_gui_url + "/services/i18n/changeLocale?lang=" + lang,
3252
1322
  headers=self.headers,
3253
1323
  ).json()
3254
1324
  return r
3255
1325
 
3256
- # returns:
3257
- # { 'Studielokalisering': [ { 'Benamning': { 'en': 'Botkyrka',
3258
- # 'sv': 'Botkyrka'},
3259
- # 'Beskrivning': {},
3260
- # 'Giltighetsperiod': { 'Slutdatum': '1997-12-31',
3261
- # 'Startdatum': '1997-08-01',
3262
- # 'link': []},
3263
- # 'ID': '131772',
3264
- # 'Kod': '0127',
3265
- # 'LarosateID': 29,
3266
- # 'OrtID': 110990,
3267
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3268
- # 'method': 'GET',
3269
- # 'rel': 'svenskort',
3270
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/110990'}]},
3271
- # { 'Benamning': { 'en': 'Haninge',
3272
- # 'sv': 'Haninge'},
3273
- # 'Beskrivning': {},
3274
- # 'Giltighetsperiod': { 'Slutdatum': '2016-06-30',
3275
- # 'Startdatum': '1994-08-01',
3276
- # 'link': []},
3277
- # 'ID': '131773',
3278
- # 'Kod': '0136',
3279
- # 'LarosateID': 29,
3280
- # 'OrtID': 110991,
3281
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3282
- # 'method': 'GET',
3283
- # 'rel': 'svenskort',
3284
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/110991'}]},
3285
- # { 'Benamning': { 'en': 'Nyköping',
3286
- # 'sv': 'Nyköping'},
3287
- # 'Beskrivning': {},
3288
- # 'Giltighetsperiod': { 'Slutdatum': '2005-06-30',
3289
- # 'Startdatum': '2005-01-01',
3290
- # 'link': []},
3291
- # 'ID': '131777',
3292
- # 'Kod': '0480',
3293
- # 'LarosateID': 29,
3294
- # 'OrtID': 44,
3295
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3296
- # 'method': 'GET',
3297
- # 'rel': 'svenskort',
3298
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/44'}]},
3299
- # { 'Benamning': { 'en': 'Valdemarsvik',
3300
- # 'sv': 'Valdemarsvik'},
3301
- # 'Beskrivning': {},
3302
- # 'Giltighetsperiod': { 'Slutdatum': '1999-12-31',
3303
- # 'link': []},
3304
- # 'ID': '131780',
3305
- # 'Kod': '0563',
3306
- # 'LarosateID': 29,
3307
- # 'OrtID': 60,
3308
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3309
- # 'method': 'GET',
3310
- # 'rel': 'svenskort',
3311
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/60'}]},
3312
- # { 'Benamning': {'en': 'Visby', 'sv': 'Visby'},
3313
- # 'Beskrivning': {},
3314
- # 'Giltighetsperiod': { 'Slutdatum': '2000-12-31',
3315
- # 'Startdatum': '1991-08-01',
3316
- # 'link': []},
3317
- # 'ID': '131781',
3318
- # 'Kod': '0980',
3319
- # 'LarosateID': 29,
3320
- # 'OrtID': 108,
3321
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3322
- # 'method': 'GET',
3323
- # 'rel': 'svenskort',
3324
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/108'}]},
3325
- # { 'Benamning': { 'en': 'Ängelholm',
3326
- # 'sv': 'Ängelholm'},
3327
- # 'Beskrivning': {},
3328
- # 'Giltighetsperiod': { 'Slutdatum': '1997-12-31',
3329
- # 'Startdatum': '1997-12-31',
3330
- # 'link': []},
3331
- # 'ID': '131782',
3332
- # 'Kod': '1292',
3333
- # 'LarosateID': 29,
3334
- # 'OrtID': 154,
3335
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3336
- # 'method': 'GET',
3337
- # 'rel': 'svenskort',
3338
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/154'}]},
3339
- # { 'Benamning': {'en': 'Falun', 'sv': 'Falun'},
3340
- # 'Beskrivning': {},
3341
- # 'Giltighetsperiod': { 'Slutdatum': '1998-12-31',
3342
- # 'Startdatum': '1994-08-01',
3343
- # 'link': []},
3344
- # 'ID': '131787',
3345
- # 'Kod': '2080',
3346
- # 'LarosateID': 29,
3347
- # 'OrtID': 263,
3348
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3349
- # 'method': 'GET',
3350
- # 'rel': 'svenskort',
3351
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/263'}]},
3352
- # { 'Benamning': {'en': 'Gävle', 'sv': 'Gävle'},
3353
- # 'Beskrivning': {},
3354
- # 'Giltighetsperiod': { 'Slutdatum': '1998-12-31',
3355
- # 'Startdatum': '1997-08-01',
3356
- # 'link': []},
3357
- # 'ID': '131784',
3358
- # 'Kod': '2180',
3359
- # 'LarosateID': 29,
3360
- # 'OrtID': 273,
3361
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3362
- # 'method': 'GET',
3363
- # 'rel': 'svenskort',
3364
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/273'}]},
3365
- # { 'Benamning': { 'en': 'Stockholm School of '
3366
- # 'Economics',
3367
- # 'sv': 'Handelshögskolan'},
3368
- # 'Beskrivning': {},
3369
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3370
- # 'link': []},
3371
- # 'ID': '135191',
3372
- # 'Kod': 'HANDELS',
3373
- # 'LarosateID': 29,
3374
- # 'OrtID': 18,
3375
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3376
- # 'method': 'GET',
3377
- # 'rel': 'svenskort',
3378
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3379
- # { 'Benamning': { 'en': 'KI Flemingsberg',
3380
- # 'sv': 'KI Flemingsberg'},
3381
- # 'Beskrivning': {},
3382
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3383
- # 'link': []},
3384
- # 'ID': '135192',
3385
- # 'Kod': 'KI_FLEMINGS',
3386
- # 'LarosateID': 29,
3387
- # 'OrtID': 7,
3388
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3389
- # 'method': 'GET',
3390
- # 'rel': 'svenskort',
3391
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/7'}]},
3392
- # { 'Benamning': { 'en': 'University of Arts, '
3393
- # 'Crafts and Design',
3394
- # 'sv': 'Konstfack'},
3395
- # 'Beskrivning': {},
3396
- # 'Giltighetsperiod': { 'Startdatum': '2018-08-27',
3397
- # 'link': []},
3398
- # 'ID': '147750',
3399
- # 'Kod': 'KONSTFACK',
3400
- # 'LarosateID': 29,
3401
- # 'OrtID': 18,
3402
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3403
- # 'method': 'GET',
3404
- # 'rel': 'svenskort',
3405
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3406
- # { 'Benamning': { 'en': 'KTH Campus',
3407
- # 'sv': 'KTH Campus'},
3408
- # 'Beskrivning': { 'sv': '"Campus" '
3409
- # 'Valhallavägen'},
3410
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3411
- # 'link': []},
3412
- # 'ID': '135195',
3413
- # 'Kod': 'KTHCAMPUS',
3414
- # 'LarosateID': 29,
3415
- # 'OrtID': 18,
3416
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3417
- # 'method': 'GET',
3418
- # 'rel': 'svenskort',
3419
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3420
- # { 'Benamning': {'en': 'Täby', 'sv': 'Täby'},
3421
- # 'Beskrivning': {},
3422
- # 'Giltighetsperiod': { 'Slutdatum': '1999-12-31',
3423
- # 'link': []},
3424
- # 'ID': '131774',
3425
- # 'Kod': '0160',
3426
- # 'LarosateID': 29,
3427
- # 'OrtID': 14,
3428
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3429
- # 'method': 'GET',
3430
- # 'rel': 'svenskort',
3431
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/14'}]},
3432
- # { 'Benamning': { 'en': 'Stockholm',
3433
- # 'sv': 'Stockholm'},
3434
- # 'Beskrivning': {},
3435
- # 'Giltighetsperiod': { 'Slutdatum': '2019-01-14',
3436
- # 'Startdatum': '1917-10-19',
3437
- # 'link': []},
3438
- # 'ID': '131778',
3439
- # 'Kod': '0180',
3440
- # 'LarosateID': 29,
3441
- # 'OrtID': 18,
3442
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3443
- # 'method': 'GET',
3444
- # 'rel': 'svenskort',
3445
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3446
- # { 'Benamning': { 'en': 'Sundsvall',
3447
- # 'sv': 'Sundsvall'},
3448
- # 'Beskrivning': {},
3449
- # 'Giltighetsperiod': { 'Slutdatum': '1997-12-31',
3450
- # 'Startdatum': '1996-08-01',
3451
- # 'link': []},
3452
- # 'ID': '131785',
3453
- # 'Kod': '2281',
3454
- # 'LarosateID': 29,
3455
- # 'OrtID': 281,
3456
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3457
- # 'method': 'GET',
3458
- # 'rel': 'svenskort',
3459
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/281'}]},
3460
- # { 'Benamning': { 'en': 'Örnsköldsvik',
3461
- # 'sv': 'Örnsköldsvik'},
3462
- # 'Beskrivning': {},
3463
- # 'Giltighetsperiod': { 'Slutdatum': '1997-12-31',
3464
- # 'Startdatum': '1997-01-01',
3465
- # 'link': []},
3466
- # 'ID': '131788',
3467
- # 'Kod': '2284',
3468
- # 'LarosateID': 29,
3469
- # 'OrtID': 284,
3470
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3471
- # 'method': 'GET',
3472
- # 'rel': 'svenskort',
3473
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/284'}]},
3474
- # { 'Benamning': { 'en': 'KTH Solna',
3475
- # 'sv': 'KTH Solna'},
3476
- # 'Beskrivning': { 'en': 'SciLife Labs, '
3477
- # 'Solna',
3478
- # 'sv': 'SciLife Labs, '
3479
- # 'Solna'},
3480
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-18',
3481
- # 'link': []},
3482
- # 'ID': '135610',
3483
- # 'Kod': 'SCILIFELAB',
3484
- # 'LarosateID': 29,
3485
- # 'OrtID': 25,
3486
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3487
- # 'method': 'GET',
3488
- # 'rel': 'svenskort',
3489
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/25'}]},
3490
- # { 'Benamning': { 'en': 'KTH Södertälje',
3491
- # 'sv': 'KTH Södertälje'},
3492
- # 'Beskrivning': {'sv': '"Campus" Södertälje'},
3493
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3494
- # 'link': []},
3495
- # 'ID': '135196',
3496
- # 'Kod': 'SODERTALJE',
3497
- # 'LarosateID': 29,
3498
- # 'OrtID': 20,
3499
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3500
- # 'method': 'GET',
3501
- # 'rel': 'svenskort',
3502
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/20'}]},
3503
- # { 'Benamning': { 'en': 'Järfälla',
3504
- # 'sv': 'Järfälla'},
3505
- # 'Beskrivning': {},
3506
- # 'Giltighetsperiod': { 'Slutdatum': '1996-06-30',
3507
- # 'Startdatum': '1994-08-01',
3508
- # 'link': []},
3509
- # 'ID': '131775',
3510
- # 'Kod': '0123',
3511
- # 'LarosateID': 29,
3512
- # 'OrtID': 5,
3513
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3514
- # 'method': 'GET',
3515
- # 'rel': 'svenskort',
3516
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/5'}]},
3517
- # { 'Benamning': { 'en': 'Huddinge',
3518
- # 'sv': 'Huddinge'},
3519
- # 'Beskrivning': {},
3520
- # 'Giltighetsperiod': { 'Slutdatum': '2019-01-14',
3521
- # 'Startdatum': '2002-01-01',
3522
- # 'link': []},
3523
- # 'ID': '131779',
3524
- # 'Kod': '0126',
3525
- # 'LarosateID': 29,
3526
- # 'OrtID': 109830,
3527
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3528
- # 'method': 'GET',
3529
- # 'rel': 'svenskort',
3530
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/109830'}]},
3531
- # { 'Benamning': { 'en': 'Södertälje',
3532
- # 'sv': 'Södertälje'},
3533
- # 'Beskrivning': {},
3534
- # 'Giltighetsperiod': { 'Slutdatum': '2019-01-14',
3535
- # 'Startdatum': '1987-01-01',
3536
- # 'link': []},
3537
- # 'ID': '131771',
3538
- # 'Kod': '0181',
3539
- # 'LarosateID': 29,
3540
- # 'OrtID': 20,
3541
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3542
- # 'method': 'GET',
3543
- # 'rel': 'svenskort',
3544
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/20'}]},
3545
- # { 'Benamning': { 'en': 'Norrtälje',
3546
- # 'sv': 'Norrtälje'},
3547
- # 'Beskrivning': {},
3548
- # 'Giltighetsperiod': { 'Slutdatum': '2005-06-30',
3549
- # 'Startdatum': '1997-08-01',
3550
- # 'link': []},
3551
- # 'ID': '131776',
3552
- # 'Kod': '0188',
3553
- # 'LarosateID': 29,
3554
- # 'OrtID': 28,
3555
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3556
- # 'method': 'GET',
3557
- # 'rel': 'svenskort',
3558
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/28'}]},
3559
- # { 'Benamning': {'en': 'Örebro', 'sv': 'Örebro'},
3560
- # 'Beskrivning': {},
3561
- # 'Giltighetsperiod': { 'Slutdatum': '1998-06-30',
3562
- # 'Startdatum': '1996-08-01',
3563
- # 'link': []},
3564
- # 'ID': '131786',
3565
- # 'Kod': '1880',
3566
- # 'LarosateID': 29,
3567
- # 'OrtID': 237,
3568
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3569
- # 'method': 'GET',
3570
- # 'rel': 'svenskort',
3571
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/237'}]},
3572
- # { 'Benamning': { 'en': 'Västerås',
3573
- # 'sv': 'Västerås'},
3574
- # 'Beskrivning': {},
3575
- # 'Giltighetsperiod': { 'Slutdatum': '1999-12-31',
3576
- # 'Startdatum': '1994-08-01',
3577
- # 'link': []},
3578
- # 'ID': '131783',
3579
- # 'Kod': '1980',
3580
- # 'LarosateID': 29,
3581
- # 'OrtID': 248,
3582
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3583
- # 'method': 'GET',
3584
- # 'rel': 'svenskort',
3585
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/248'}]},
3586
- # { 'Benamning': { 'en': 'AlbaNova',
3587
- # 'sv': 'AlbaNova'},
3588
- # 'Beskrivning': {},
3589
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3590
- # 'link': []},
3591
- # 'ID': '135190',
3592
- # 'Kod': 'ALBANOVA',
3593
- # 'LarosateID': 29,
3594
- # 'OrtID': 18,
3595
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3596
- # 'method': 'GET',
3597
- # 'rel': 'svenskort',
3598
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3599
- # { 'Benamning': { 'en': 'KTH Flemingsberg',
3600
- # 'sv': 'KTH Flemingsberg'},
3601
- # 'Beskrivning': { 'sv': '"campus" '
3602
- # 'Flemingsberg'},
3603
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3604
- # 'link': []},
3605
- # 'ID': '135198',
3606
- # 'Kod': 'FLEMINGSB',
3607
- # 'LarosateID': 29,
3608
- # 'OrtID': 7,
3609
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3610
- # 'method': 'GET',
3611
- # 'rel': 'svenskort',
3612
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/7'}]},
3613
- # { 'Benamning': { 'en': 'KI Solna',
3614
- # 'sv': 'KI Solna'},
3615
- # 'Beskrivning': {},
3616
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3617
- # 'link': []},
3618
- # 'ID': '135193',
3619
- # 'Kod': 'KI_SOLNA',
3620
- # 'LarosateID': 29,
3621
- # 'OrtID': 25,
3622
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3623
- # 'method': 'GET',
3624
- # 'rel': 'svenskort',
3625
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/25'}]},
3626
- # { 'Benamning': { 'en': 'KTH Kista',
3627
- # 'sv': 'KTH Kista'},
3628
- # 'Beskrivning': {'sv': '"Campus" Kista'},
3629
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3630
- # 'link': []},
3631
- # 'ID': '135194',
3632
- # 'Kod': 'KISTA',
3633
- # 'LarosateID': 29,
3634
- # 'OrtID': 18,
3635
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3636
- # 'method': 'GET',
3637
- # 'rel': 'svenskort',
3638
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]},
3639
- # { 'Benamning': { 'en': 'Stockholm University',
3640
- # 'sv': 'Stockholms '
3641
- # 'universitet'},
3642
- # 'Beskrivning': {},
3643
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20',
3644
- # 'link': []},
3645
- # 'ID': '135197',
3646
- # 'Kod': 'SU',
3647
- # 'LarosateID': 29,
3648
- # 'OrtID': 18,
3649
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml',
3650
- # 'method': 'GET',
3651
- # 'rel': 'svenskort',
3652
- # 'uri': 'https://api.ladok.se:443/kataloginformation/svenskort/18'}]}],
3653
- # 'link': []}
3654
1326
  # added by GQMJr
3655
1327
  #####################################################################
3656
1328
  #
3657
- # antagningsomgang_JSON
1329
+ # period_info_JSON
3658
1330
  #
3659
- # RETURNERAR JSON of admission round
3660
- def antagningsomgang_JSON(self):
1331
+ # RETURNERAR JSON of /resultat/grunddata/period
1332
+ def period_info_JSON(self):
3661
1333
  r = self.session.get(
3662
- url=self.base_gui_proxy_url
3663
- + "/kataloginformation/grunddata/antagningsomgang",
1334
+ url=self.base_gui_proxy_url + "/resultat/internal/grunddata/period",
1335
+ # doesn't work, but also not after adding 'internal/' between 'resultat/'
1336
+ # and 'grunddata' /CO
3664
1337
  headers=self.headers,
3665
1338
  ).json()
3666
1339
  return r
3667
1340
 
3668
- # returns:
3669
- # { 'Antagningsomgang': [ { 'Benamning': { 'en': 'Application to courses '
3670
- # 'within programme at '
3671
- # 'KTH HT2020',
3672
- # 'sv': 'Anmälan till kurs inom '
3673
- # 'program på KTH HT2020'},
3674
- # 'Beskrivning': {},
3675
- # 'Giltighetsperiod': {'link': []},
3676
- # 'ID': '150233',
3677
- # 'Kod': '29AKPHT20',
3678
- # 'LarosateID': 29,
3679
- # 'SistaAnmalningsdag': '2020-05-15',
3680
- # 'SistaAnnonseringsdag': '2021-05-15',
3681
- # 'Studieavgiftsbelagd': True,
3682
- # 'link': []},
3683
- # { 'Benamning': { 'en': 'Application to courses '
3684
- # 'within programme at '
3685
- # 'KTH VT2019',
3686
- # 'sv': 'Antagning till kurs '
3687
- # 'inom program KTH '
3688
- # 'VT2019'},
3689
- # 'Beskrivning': {},
3690
- # 'Giltighetsperiod': {'link': []},
3691
- # 'ID': '142134',
3692
- # 'Kod': '29AKPVT19',
3693
- # 'LarosateID': 29,
3694
- # 'SistaAnmalningsdag': '2018-11-15',
3695
- # 'SistaAnnonseringsdag': '2019-02-28',
3696
- # 'Studieavgiftsbelagd': True,
3697
- # 'link': []},
3698
- # ... ],
3699
- # 'link': []}
3700
1341
  # added by GQMJr
3701
1342
  #####################################################################
3702
1343
  #
@@ -3725,233 +1366,42 @@ class LadokSession:
3725
1366
  # 'rel': 'self',
3726
1367
  # 'uri': 'https://api.ladok.se:443/kataloginformation/organisation/2474f616-dc41-11e8-8cc1-eaeeb71b497f'}]}
3727
1368
  # added by GQMJr
3728
- #####################################################################
3729
- #
3730
- # utbildningstyp_JSON
3731
- #
3732
- # RETURNERAR JSON of types of education
3733
- # for information about these see https://ladok.se/wp-content/uploads/2018/01/Funktionsbeskrivning_095.pdf
3734
- def utbildningstyp_JSON(self):
1369
+ def examen_student_uid_JSON(self, studentUID):
1370
+ """
1371
+ Returns the student's degree.
1372
+ """
3735
1373
  r = self.session.get(
3736
- url=self.base_gui_proxy_url
3737
- + "/kataloginformation/grunddata/utbildningstyp",
1374
+ url=self.base_gui_proxy_url + "examen/internal/student/+studentUID",
3738
1375
  headers=self.headers,
3739
1376
  ).json()
3740
1377
  return r
3741
1378
 
3742
- # returns:
3743
- # { 'Utbildningstyp': [ { 'AvserTillfalle': False,
3744
- # 'Benamning': { 'en': 'Module without scope',
3745
- # 'sv': 'Modul utan omfattning'},
3746
- # 'Beskrivning': {},
3747
- # 'Giltighetsperiod': {'link': []},
3748
- # 'Grundtyp': 'MODUL',
3749
- # 'ID': '3',
3750
- # 'Kod': '2007MUO',
3751
- # 'LarosateID': -1,
3752
- # 'Regelverk': { 'Regelvarden': [ { 'Regelnamn': 'commons.domain.regel.ingar.i.grupp.overfors.till.nya',
3753
- # 'Uid': 'd31a4080-e80a-11e8-b1f1-65de97d74aa5',
3754
- # 'Varde': 'true',
3755
- # 'link': [ ]},
3756
- # { 'Regelnamn': 'commons.domain.regel.informationsbehorighet.forskarutbildning',
3757
- # 'Uid': 'd31a4084-e80a-11e8-b1f1-65de97d74aa5',
3758
- # 'Varde': 'true',
3759
- # 'link': [ ]},
3760
- # { 'Regelnamn': 'commons.domain.regel.sjalvstandig',
3761
- # 'Uid': 'd31a4086-e80a-11e8-b1f1-65de97d74aa5',
3762
- # 'Varde': 'false',
3763
- # 'link': [ ]},
3764
- # { 'Regelnamn': 'commons.domain.regel.informationsbehorighet.grundavancerad',
3765
- # 'Uid': 'd31a4085-e80a-11e8-b1f1-65de97d74aa5',
3766
- # 'Varde': 'true',
3767
- # 'link': [ ]},
3768
- # { 'Regelnamn': 'commons.domain.regel.har.omfattning',
3769
- # 'Uid': 'd31a4082-e80a-11e8-b1f1-65de97d74aa5',
3770
- # 'Varde': 'false',
3771
- # 'link': [ ]},
3772
- # { 'Regelnamn': 'commons.domain.regel.grupp.for.utsokning',
3773
- # 'Uid': 'd31a196f-e80a-11e8-b1f1-65de97d74aa5',
3774
- # 'Varde': 'grupp.for.utsokning.forskarniva',
3775
- # 'link': [ ]},
3776
- # { 'Regelnamn': 'commons.domain.regel.grupp.for.utsokning',
3777
- # 'Uid': 'd31a4081-e80a-11e8-b1f1-65de97d74aa5',
3778
- # 'Varde': 'grupp.for.utsokning.grundavanceradniva',
3779
- # 'link': [ ]},
3780
- # { 'Regelnamn': 'commons.domain.regel.versionshanteras',
3781
- # 'Uid': 'd31a4083-e80a-11e8-b1f1-65de97d74aa5',
3782
- # 'Varde': 'false',
3783
- # 'link': [ ]}],
3784
- # 'Uid': '0441f5ba-1b3f-11e6-aff0-464044604cb6',
3785
- # 'link': []},
3786
- # 'Sorteringsordning': 50,
3787
- # 'StudieordningID': 1,
3788
- # 'TillfalleInomUtbildningstyper': [],
3789
- # 'UtbildningstyperInomUtbildningstyp': [],
3790
- # 'link': []},
3791
- # { 'AvserTillfalle': False,
3792
- # 'Benamning': {'en': 'Module', 'sv': 'Modul'},
3793
- # 'Beskrivning': {},
3794
- # 'Giltighetsperiod': {'link': []},
3795
- # 'Grundtyp': 'MODUL',
3796
- # 'ID': '4',
3797
- # 'Kod': '2007MOD',
3798
- # 'LarosateID': -1,
3799
- # 'Regelverk': { 'Regelvarden': [ { 'Regelnamn': 'commons.domain.regel.versionshanteras',
3800
- # 'Uid': 'b18301be-e80a-11e8-b1f1-65de97d74aa5',
3801
- # 'Varde': 'false',
3802
- # 'link': [ ]},
3803
- # { 'Regelnamn': 'commons.domain.regel.informationsbehorighet.forskarutbildning',
3804
- # 'Uid': 'b18301c1-e80a-11e8-b1f1-65de97d74aa5',
3805
- # 'Varde': 'true',
3806
- # 'link': [ ]},
3807
- # { 'Regelnamn': 'commons.domain.regel.ingar.i.grupp.overfors.till.nya',
3808
- # 'Uid': 'b18301bb-e80a-11e8-b1f1-65de97d74aa5',
3809
- # 'Varde': 'true',
3810
- # 'link': [ ]},
3811
- # { 'Regelnamn': 'commons.domain.regel.sjalvstandig',
3812
- # 'Uid': 'b18301bf-e80a-11e8-b1f1-65de97d74aa5',
3813
- # 'Varde': 'false',
3814
- # 'link': [ ]},
3815
- # { 'Regelnamn': 'commons.domain.regel.grupp.for.utsokning',
3816
- # 'Uid': 'b18301bd-e80a-11e8-b1f1-65de97d74aa5',
3817
- # 'Varde': 'grupp.for.utsokning.grundavanceradniva',
3818
- # 'link': [ ]},
3819
- # { 'Regelnamn': 'commons.domain.regel.informationsbehorighet.grundavancerad',
3820
- # 'Uid': 'b18301bc-e80a-11e8-b1f1-65de97d74aa5',
3821
- # 'Varde': 'true',
3822
- # 'link': [ ]},
3823
- # { 'Regelnamn': 'commons.domain.regel.grupp.for.utsokning',
3824
- # 'Uid': 'b18301c0-e80a-11e8-b1f1-65de97d74aa5',
3825
- # 'Varde': 'grupp.for.utsokning.forskarniva',
3826
- # 'link': [ ]}],
3827
- # 'Uid': '0461b2c4-1b3f-11e6-aff0-464044604cb6',
3828
- # 'link': []},
3829
- # 'Sorteringsordning': 50,
3830
- # 'StudieordningID': 1,
3831
- # 'TillfalleInomUtbildningstyper': [],
3832
- # 'UtbildningstyperInomUtbildningstyp': [],
3833
- # 'link': []},
3834
- # ...
3835
- # ],
3836
- # 'link': []}
3837
1379
  # added by GQMJr
3838
- #####################################################################
3839
- #
3840
- # aktivitetstillfallestyp_JSON
3841
- #
3842
- # RETURNERAR JSON of activities
3843
- def aktivitetstillfallestyp_JSON(self):
1380
+ def student_participation_JSON(self, studentUID):
1381
+ """
1382
+ Returns the student's participation in courses.
1383
+ """
1384
+ headers = self.headers.copy()
1385
+ headers["Content-Type"] = "application/vnd.ladok-studiedeltagande"
1386
+ headers["Accept"] += ", application/vnd.ladok-studiedeltagande"
3844
1387
  r = self.session.get(
3845
1388
  url=self.base_gui_proxy_url
3846
- + "/kataloginformation/grunddata/aktivitetstillfallestyp",
3847
- headers=self.headers,
3848
- ).json()
3849
- return r
3850
-
3851
- # returns:
3852
- # { 'Aktivitetstillfallestyp': [ { 'Benamning': { 'en': 'Partial Exam',
3853
- # 'sv': 'Kontrollskrivning'},
3854
- # 'Beskrivning': {},
3855
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20', 'link': []},
3856
- # 'ID': '135201',
3857
- # 'Kod': 'KS',
3858
- # 'LarosateID': 29, 'link': []},
3859
- # { 'Benamning': { 'en': 'Re-examination',
3860
- # 'sv': 'Omtentamen'},
3861
- # 'Beskrivning': {},
3862
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20', 'link': []},
3863
- # 'ID': '135200',
3864
- # 'Kod': 'OMTENTA',
3865
- # 'LarosateID': 29, 'link': []},
3866
- # { 'Benamning': { 'en': 'Examination',
3867
- # 'sv': 'Tentamen'},
3868
- # 'Beskrivning': {},
3869
- # 'Giltighetsperiod': { 'Startdatum': '2018-06-20', 'link': []},
3870
- # 'ID': '135199',
3871
- # 'Kod': 'TENTAMEN',
3872
- # 'LarosateID': 29, 'link': []},
3873
- # { 'Benamning': { 'en': 'Unspecified '
3874
- # 'activity',
3875
- # 'sv': 'Övrigt '
3876
- # 'aktivitetstillfälle'},
3877
- # 'Beskrivning': {},
3878
- # 'Giltighetsperiod': {'link': []},
3879
- # 'ID': '1',
3880
- # 'Kod': 'ÖV',
3881
- # 'LarosateID': -1, 'link': []}],
3882
- # 'link': []}
3883
- # added by GQMJr
3884
- #####################################################################
3885
- #
3886
- # catalog_service_index__JSON
3887
- #
3888
- # RETURNERAR JSON of admission round
3889
- def catalog_service_index__JSON(self):
3890
- r = self.session.get(
3891
- url=self.base_gui_proxy_url + "/kataloginformation/service/index",
1389
+ + "/studiedeltagande/internal/tillfallesdeltagande"
1390
+ + "/kurstillfallesdeltagande/"
1391
+ + studentUID,
3892
1392
  headers=self.headers,
3893
- ).json()
3894
- return r
1393
+ )
1394
+ return r.json()
3895
1395
 
3896
- # returns:
3897
- # { 'ServiceName': 'Ladok3 REST-tjänst för kataloginformation',
3898
- # 'link': [ { 'mediaType': 'application/vnd.ladok+xml,application/vnd.ladok-kataloginformation+xml,application/vnd.ladok-kataloginformation+json',
3899
- # 'method': 'GET',
3900
- # 'rel': 'http://relations.ladok.se/kataloginformation/utbildningstyp',
3901
- # 'uri': 'https://api.ladok.se:443/kataloginformation/grunddata/utbildningstyp'},
3902
- # { 'mediaType': 'application/vnd.ladok+xml,application/vnd.ladok-kataloginformation+xml,application/vnd.ladok-kataloginformation+json',
3903
- # 'method': 'GET',
3904
- # 'rel': 'http://relations.ladok.se/kataloginformation/betygsskala',
3905
- # 'uri': 'https://api.ladok.se:443/kataloginformation/grunddata/betygsskala'},
3906
- # ...
3907
- # { 'mediaType': 'application/vnd.ladok+xml,application/vnd.ladok-kataloginformation+xml,application/vnd.ladok-kataloginformation+json',
3908
- # 'method': 'GET',
3909
- # 'rel': 'http://relations.ladok.se/kataloginformation/anvandarbehorighetlista',
3910
- # 'uri': 'https://api.ladok.se:443/kataloginformation/behorigheter'}]}
3911
1396
  # added by GQMJr
3912
- #####################################################################
3913
- #
3914
- # omradesbehorighet_JSON
3915
- #
3916
- # RETURNERAR JSON of "omradesbehorighet"
3917
- # for information see https://antagning.se/globalassets/omradesbehorigheter-hogskolan.pdf
3918
- def omradesbehorighet_JSON(self):
1397
+ def hamtaStudieResultatForStudent_JSON(self, studentUID):
1398
+ """
1399
+ Returns the study results for a student.
1400
+ """
3919
1401
  r = self.session.get(
3920
1402
  url=self.base_gui_proxy_url
3921
- + "/kataloginformation/grunddata/omradesbehorighet",
3922
- headers=self.headers,
3923
- ).json()
3924
- return r
3925
-
3926
- # added by GQMJr
3927
- #####################################################################
3928
- #
3929
- # hamtaStudieResultatForStudent_JSON
3930
- #
3931
- # studentUID -- student's UID
3932
- # RETURNERAR JSON of results
3933
-
3934
- # NOTE: These are a work in progress and not ready yet
3935
- # def hamtaStudieResultatForStudent_JSON (self, studentUID):
3936
- # r = self.session.get(url = self.base_gui_proxy_url + '/resultat/studieresultat/resultat/student/'+studentUID, headers = self.headers).json()
3937
- # return r
3938
-
3939
- # def student_participation_JSON (self, studentUID):
3940
- # headers = self.headers.copy()
3941
- # headers['Content-Type'] = 'application/vnd.ladok-studiedeltagande'
3942
- # headers['Accept'] = headers['Accept']+', application/vnd.ladok-studiedeltagande'
3943
- # r = self.session.get(url = self.base_gui_proxy_url + '/studiedeltagande/tillfallesdeltagande/kurstillfallesdeltagande/'+studentUID, headers = self.headers)
3944
- # return {r.status_code, r.text}
3945
- # added by GQMJr
3946
- #####################################################################
3947
- #
3948
- # examen_student_uid_JSON
3949
- #
3950
- # studentUID -- student's UID
3951
- # RETURNERAR JSON of admission round
3952
- def examen_student_uid_JSON(self):
3953
- r = self.session.get(
3954
- url=self.base_gui_proxy_url + "examen/student/+studentUID",
1403
+ + "/resultat/internal/studieresultat/resultat/student/"
1404
+ + studentUID,
3955
1405
  headers=self.headers,
3956
1406
  ).json()
3957
1407
  return r
@@ -4443,7 +1893,46 @@ class Student(LadokRemoteData):
4443
1893
  """
4444
1894
  The list of the students' suspensions.
4445
1895
  """
4446
- return self.ladok.get_student_suspensions_JSON(self.ladok_id)["Avstangning"]
1896
+ suspensions = self.ladok.get_student_suspensions_JSON(self.ladok_id)[
1897
+ "Avstangning"
1898
+ ]
1899
+ return [Suspension(**suspension) for suspension in suspensions]
1900
+
1901
+
1902
+ class Suspension(LadokData):
1903
+ """A suspension"""
1904
+
1905
+ def __init__(self, /, **kwargs):
1906
+ super().__init__(**kwargs)
1907
+ self.__note = kwargs.pop("Anteckning")
1908
+ self.__validity = (
1909
+ datetime.date.fromisoformat(kwargs["Giltighetsperiod"]["Startdatum"]),
1910
+ datetime.date.fromisoformat(kwargs["Giltighetsperiod"]["Slutdatum"]),
1911
+ )
1912
+
1913
+ @property
1914
+ def note(self):
1915
+ """
1916
+ The note of the suspension. This is usually a case number.
1917
+ """
1918
+ return self.__note
1919
+
1920
+ @property
1921
+ def validity(self):
1922
+ """
1923
+ A tuple (start, end) of the validity period of the suspension.
1924
+ """
1925
+ return self.__validity
1926
+
1927
+ @property
1928
+ def is_current(self):
1929
+ """
1930
+ Is True if the suspension is currently valid.
1931
+ """
1932
+ return self.validity[0] <= datetime.date.today() <= self.validity[1]
1933
+
1934
+ def __str__(self):
1935
+ return f"{self.validity[0]}--{self.validity[1]}"
4447
1936
 
4448
1937
 
4449
1938
  class CourseInstance(LadokRemoteData):