From 340fb9855723fef36b2094ecd436f2c9b485ce91 Mon Sep 17 00:00:00 2001 From: Tarus Date: Mon, 11 Dec 2023 14:31:16 +0530 Subject: [PATCH 01/40] ADD: Verify Event Permission for Event Moderators --- .gitignore | 3 +++ backend/settings.py | 3 +++ roles/models.py | 1 + 3 files changed, 7 insertions(+) diff --git a/.gitignore b/.gitignore index 9ff207b0..ed15d663 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,6 @@ venv.bak/ # mypy .mypy_cache/ + +#System Files +.DS_Store \ No newline at end of file diff --git a/backend/settings.py b/backend/settings.py index 7d51f397..20c392b4 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -73,3 +73,6 @@ EMAIL_PORT = "587" EMAIL_HOST_USER = "" EMAIL_USE_TLS = True + +CORS_ORIGIN_ALLOW_ALL = True +CORS_ALLOW_CREDENTIALS = True \ No newline at end of file diff --git a/roles/models.py b/roles/models.py index 9f87d400..da55d6c4 100644 --- a/roles/models.py +++ b/roles/models.py @@ -7,6 +7,7 @@ ("AddE", "Add Event"), ("UpdE", "Update Event"), ("DelE", "Delete Event"), + ("VerE", "Verify Event"), ("UpdB", "Update Body"), ("Role", "Modify Roles"), ("VerA", "Verify Achievements"), From 5c47fd32782da3bf6e7b0204a1ce9b5616d68ab5 Mon Sep 17 00:00:00 2001 From: Tarus Date: Mon, 11 Dec 2023 17:06:06 +0530 Subject: [PATCH 02/40] ADD: email_body and email_verified in events.models --- events/models.py | 2 ++ events/serializers.py | 2 ++ events/views.py | 8 +++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/events/models.py b/events/models.py index b7f53498..4562d20a 100644 --- a/events/models.py +++ b/events/models.py @@ -18,6 +18,8 @@ class Event(models.Model): name = models.CharField(max_length=60) description = models.TextField(blank=True) + email_body = models.TextField() + email_verified = models.BooleanField(default=False) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) image_url = models.URLField(blank=True, null=True) website_url = models.URLField(blank=True, null=True) diff --git a/events/serializers.py b/events/serializers.py index 84352a57..e0de5579 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -173,6 +173,8 @@ class Meta: "str_id", "name", "description", + "email_body", + "email_verified", "image_url", "start_time", "end_time", diff --git a/events/views.py b/events/views.py index 499be1f3..7e3fde96 100644 --- a/events/views.py +++ b/events/views.py @@ -23,14 +23,20 @@ class EventViewSet(viewsets.ModelViewSet): def get_serializer_context(self): return {"request": self.request} + @login_required_ajax def retrieve(self, request, pk): """Get Event. Get by `uuid` or `str_id`""" self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) - serialized = EventFullSerializer(event, context={"request": request}).data + user_has_VerE_permission = user_has_privilege(request.user.profile, event.id, "VerE") + if user_has_VerE_permission or event.email_verified: + serialized = EventFullSerializer(event, context={"request": request}).data + else: + serialized = EventSerializer(event, context={"request": request}).data + return Response(serialized) def list(self, request): From 558696e8cdf41b9219633f344efad0582dff8311 Mon Sep 17 00:00:00 2001 From: Amit Date: Tue, 12 Dec 2023 14:54:17 +0530 Subject: [PATCH 03/40] Added verify email and smtp for sending mails --- backend/settings.py | 1 + events/migrations/0032_auto_20231211_2316.py | 23 ++++++++++++ events/models.py | 2 +- events/urls.py | 7 +++- events/views.py | 35 +++++++++++++++++-- .../0003_alter_productfound_product_image1.py | 18 ++++++++++ .../0022_alter_bodyrole_permissions.py | 19 ++++++++++ 7 files changed, 101 insertions(+), 4 deletions(-) create mode 100644 events/migrations/0032_auto_20231211_2316.py create mode 100644 lostandfound/migrations/0003_alter_productfound_product_image1.py create mode 100644 roles/migrations/0022_alter_bodyrole_permissions.py diff --git a/backend/settings.py b/backend/settings.py index 20c392b4..0b0f9769 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -72,6 +72,7 @@ EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = "587" EMAIL_HOST_USER = "" +EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True CORS_ORIGIN_ALLOW_ALL = True diff --git a/events/migrations/0032_auto_20231211_2316.py b/events/migrations/0032_auto_20231211_2316.py new file mode 100644 index 00000000..d7679301 --- /dev/null +++ b/events/migrations/0032_auto_20231211_2316.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.16 on 2023-12-11 17:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0031_alter_event_event_interest'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='email_body', + field=models.TextField(default=''), + ), + migrations.AddField( + model_name='event', + name='email_verified', + field=models.BooleanField(default=False), + ), + ] diff --git a/events/models.py b/events/models.py index 4562d20a..db9d19a7 100644 --- a/events/models.py +++ b/events/models.py @@ -18,7 +18,7 @@ class Event(models.Model): name = models.CharField(max_length=60) description = models.TextField(blank=True) - email_body = models.TextField() + email_body = models.TextField(default='') email_verified = models.BooleanField(default=False) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) image_url = models.URLField(blank=True, null=True) diff --git a/events/urls.py b/events/urls.py index 18eceec3..5ac417ae 100644 --- a/events/urls.py +++ b/events/urls.py @@ -1,6 +1,6 @@ """URLs for events.""" from django.urls import path -from events.views import EventViewSet +from events.views import EventViewSet, EventMailVerificationViewSet urlpatterns = [ path("events", EventViewSet.as_view({"get": "list", "post": "create"})), @@ -8,4 +8,9 @@ "events/", EventViewSet.as_view({"get": "retrieve", "put": "update", "delete": "destroy"}), ), + path( + "events//verify-and-send-mail", + EventMailVerificationViewSet.as_view({"post": "verify_and_send_mail"}), + name="event-verify-and-send-mail", + ), ] diff --git a/events/views.py b/events/views.py index 7e3fde96..6dfadf65 100644 --- a/events/views.py +++ b/events/views.py @@ -12,8 +12,8 @@ from roles.helpers import login_required_ajax from roles.helpers import forbidden_no_privileges, diff_set from locations.helpers import create_unreusable_locations - - +from django.core.mail import send_mail +from backend.settings import EMAIL_HOST_USER class EventViewSet(viewsets.ModelViewSet): """Event""" @@ -189,3 +189,34 @@ def get_update_venue_ids(venue_names, event): added_venue_ids = create_unreusable_locations(added_venues) return added_venue_ids + common_venue_ids + + +class EventMailVerificationViewSet(viewsets.ViewSet): + + @login_required_ajax + def verify_and_send_mail(self, request, pk): + try: + event = Event.objects.get(id=pk) + except Event.DoesNotExist: + return Response({"error": "Event not found"}) + + user_has_VerE_permission = user_has_privilege(request.user.profile, event.id, "VerE") + + if user_has_VerE_permission: + if request.data.get('approve', False): + subject = "Event Mail Subject" + message = event.email_content + recipient_list = ['amitmalakar887@gmail.com'] + try: + send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) + event.email_verified = True + event.save() + return Response({"success": "Mail sent successfully"}) + except Exception as e: + return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) + else: + event.email_content = "" + event.save() + return Response({"success": "Mail rejected and content deleted"}) + else: + return forbidden_no_privileges() diff --git a/lostandfound/migrations/0003_alter_productfound_product_image1.py b/lostandfound/migrations/0003_alter_productfound_product_image1.py new file mode 100644 index 00000000..13ca3849 --- /dev/null +++ b/lostandfound/migrations/0003_alter_productfound_product_image1.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2023-12-11 17:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('lostandfound', '0002_auto_20231209_1246'), + ] + + operations = [ + migrations.AlterField( + model_name='productfound', + name='product_image1', + field=models.ImageField(upload_to='laf_images/'), + ), + ] diff --git a/roles/migrations/0022_alter_bodyrole_permissions.py b/roles/migrations/0022_alter_bodyrole_permissions.py new file mode 100644 index 00000000..b5b0e563 --- /dev/null +++ b/roles/migrations/0022_alter_bodyrole_permissions.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-11 17:46 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('roles', '0021_delete_communityrole'), + ] + + operations = [ + migrations.AlterField( + model_name='bodyrole', + name='permissions', + field=multiselectfield.db.fields.MultiSelectField(choices=[('AddE', 'Add Event'), ('UpdE', 'Update Event'), ('DelE', 'Delete Event'), ('VerE', 'Verify Event'), ('UpdB', 'Update Body'), ('Role', 'Modify Roles'), ('VerA', 'Verify Achievements'), ('AppP', 'Moderate Post'), ('ModC', 'Moderate Comment')], max_length=44), + ), + ] From ee34182574f1f46dd0d96ae949c08aac29f3e54b Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 12 Dec 2023 17:44:56 +0530 Subject: [PATCH 04/40] UPDATE: retrieve api updated to check for user privilege and show longdescription accordingly --- ..._rename_email_body_event_longdescription.py | 18 ++++++++++++++++++ events/models.py | 2 +- events/serializers.py | 3 +-- events/views.py | 13 ++++++++----- 4 files changed, 28 insertions(+), 8 deletions(-) create mode 100644 events/migrations/0033_rename_email_body_event_longdescription.py diff --git a/events/migrations/0033_rename_email_body_event_longdescription.py b/events/migrations/0033_rename_email_body_event_longdescription.py new file mode 100644 index 00000000..d8e794bd --- /dev/null +++ b/events/migrations/0033_rename_email_body_event_longdescription.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2023-12-12 10:01 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0032_auto_20231211_2316'), + ] + + operations = [ + migrations.RenameField( + model_name='event', + old_name='email_body', + new_name='longdescription', + ), + ] diff --git a/events/models.py b/events/models.py index db9d19a7..477648d5 100644 --- a/events/models.py +++ b/events/models.py @@ -18,7 +18,7 @@ class Event(models.Model): name = models.CharField(max_length=60) description = models.TextField(blank=True) - email_body = models.TextField(default='') + longdescription = models.TextField(default='') email_verified = models.BooleanField(default=False) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) image_url = models.URLField(blank=True, null=True) diff --git a/events/serializers.py b/events/serializers.py index e0de5579..ed506596 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -173,8 +173,7 @@ class Meta: "str_id", "name", "description", - "email_body", - "email_verified", + "longdescription", "image_url", "start_time", "end_time", diff --git a/events/views.py b/events/views.py index 6dfadf65..b1dfaab1 100644 --- a/events/views.py +++ b/events/views.py @@ -30,13 +30,16 @@ def retrieve(self, request, pk): self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) - user_has_VerE_permission = user_has_privilege(request.user.profile, event.id, "VerE") - + body_ids = [(body.id) for body in event.bodies.all()] + user_has_VerE_permission = user_has_privilege(request.user.profile, body_ids[0], "VerE") + longdescription_visible = False if user_has_VerE_permission or event.email_verified: - serialized = EventFullSerializer(event, context={"request": request}).data + longdescription_visible = True + serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data else: - serialized = EventSerializer(event, context={"request": request}).data - + longdescription_visible = False + serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data + serialized["longdescription"]=[] return Response(serialized) def list(self, request): From 5c262b401cda82b60f5e3ecf90f1acaff270b1c2 Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 12 Dec 2023 17:58:13 +0530 Subject: [PATCH 05/40] FIX: retrieve now checks for privileges for all bodies associated with the event --- events/views.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/events/views.py b/events/views.py index b1dfaab1..88c6614d 100644 --- a/events/views.py +++ b/events/views.py @@ -31,9 +31,10 @@ def retrieve(self, request, pk): self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) body_ids = [(body.id) for body in event.bodies.all()] - user_has_VerE_permission = user_has_privilege(request.user.profile, body_ids[0], "VerE") - longdescription_visible = False - if user_has_VerE_permission or event.email_verified: + if all( + [user_has_privilege(request.user.profile, id, "VerE") + for id in body_ids] + ) or event.email_verified: longdescription_visible = True serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data else: From 20c2b76598a6a2131b99fd169ac7062fb1470a4d Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 12 Dec 2023 19:56:12 +0530 Subject: [PATCH 06/40] ADD: longdescription in EventSerializer --- events/serializers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/events/serializers.py b/events/serializers.py index ed506596..ada7376d 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -62,6 +62,7 @@ class Meta: "str_id", "name", "description", + "longdescription", "image_url", "start_time", "end_time", From abdcc4afda867b00426069f8efd0d4b29f83ee13 Mon Sep 17 00:00:00 2001 From: Tarus Date: Wed, 13 Dec 2023 18:42:43 +0530 Subject: [PATCH 07/40] ADD: enum containing council_ids, ADD: A MultiSelectField verification_body in Event model, FIX: retrieve method in events.views to check for VerE permission in the verification_body --- .../0034_event_verification_body.py | 20 +++++++++++++++++++ events/models.py | 9 +++++++++ events/views.py | 7 ++----- 3 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 events/migrations/0034_event_verification_body.py diff --git a/events/migrations/0034_event_verification_body.py b/events/migrations/0034_event_verification_body.py new file mode 100644 index 00000000..3dc62828 --- /dev/null +++ b/events/migrations/0034_event_verification_body.py @@ -0,0 +1,20 @@ +# Generated by Django 3.2.16 on 2023-12-13 13:01 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0033_rename_email_body_event_longdescription'), + ] + + operations = [ + migrations.AddField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('91199c20-7488-41c5-9f6b-6f6c7c5b897d', 'Institute Cultural Council'), ('81e05a1a-7fd1-45b5-84f6-074e52c0f085', 'Institute Technical Council'), ('a9f81e69-fcc9-4fe3-b261-9e5e7a13f898', 'Institute Sports Council'), ('f3ae5230-4441-4586-81a8-bf75a2e47318', 'Hostel Affairs')], default='91199c20-7488-41c5-9f6b-6f6c7c5b897d', max_length=147), + preserve_default=False, + ), + ] diff --git a/events/models.py b/events/models.py index 477648d5..fb8672ea 100644 --- a/events/models.py +++ b/events/models.py @@ -2,6 +2,14 @@ from uuid import uuid4 from django.db import models from helpers.misc import get_url_friendly +from multiselectfield import MultiSelectField + +COUNCIL_IDS = ( + ("91199c20-7488-41c5-9f6b-6f6c7c5b897d", "Institute Cultural Council"), + ("81e05a1a-7fd1-45b5-84f6-074e52c0f085", "Institute Technical Council"), + ("a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", "Institute Sports Council"), + ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), +) class Event(models.Model): @@ -20,6 +28,7 @@ class Event(models.Model): description = models.TextField(blank=True) longdescription = models.TextField(default='') email_verified = models.BooleanField(default=False) + verification_body = MultiSelectField(choices=COUNCIL_IDS) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) image_url = models.URLField(blank=True, null=True) website_url = models.URLField(blank=True, null=True) diff --git a/events/views.py b/events/views.py index 88c6614d..aed27f37 100644 --- a/events/views.py +++ b/events/views.py @@ -30,11 +30,8 @@ def retrieve(self, request, pk): self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) - body_ids = [(body.id) for body in event.bodies.all()] - if all( - [user_has_privilege(request.user.profile, id, "VerE") - for id in body_ids] - ) or event.email_verified: + council_id = event.verification_body.id + if user_has_privilege(request.user.profile, council_id, "VerE"): longdescription_visible = True serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data else: From cc623285253e8da6366abfa706f111130dc6a2e7 Mon Sep 17 00:00:00 2001 From: Tarus Date: Wed, 13 Dec 2023 18:50:54 +0530 Subject: [PATCH 08/40] ADD: verification_body to EventSerializer and EventFullSerializer --- events/serializers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/events/serializers.py b/events/serializers.py index ada7376d..367337de 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -63,6 +63,7 @@ class Meta: "name", "description", "longdescription", + "verification_body", "image_url", "start_time", "end_time", @@ -175,6 +176,7 @@ class Meta: "name", "description", "longdescription", + "verification_body", "image_url", "start_time", "end_time", From 1910e1beb53d9fa2c56e79b3730b2b1c7d1dcb59 Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 14 Dec 2023 01:26:37 +0530 Subject: [PATCH 09/40] Updated the verify and send mail api --- events/urls.py | 3 +-- events/views.py | 12 +++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/events/urls.py b/events/urls.py index 5ac417ae..6660bb2c 100644 --- a/events/urls.py +++ b/events/urls.py @@ -10,7 +10,6 @@ ), path( "events//verify-and-send-mail", - EventMailVerificationViewSet.as_view({"post": "verify_and_send_mail"}), - name="event-verify-and-send-mail", + EventMailVerificationViewSet.as_view({"post": "verify_and_send_mail"}) ), ] diff --git a/events/views.py b/events/views.py index aed27f37..8f3ea87a 100644 --- a/events/views.py +++ b/events/views.py @@ -201,12 +201,12 @@ def verify_and_send_mail(self, request, pk): except Event.DoesNotExist: return Response({"error": "Event not found"}) - user_has_VerE_permission = user_has_privilege(request.user.profile, event.id, "VerE") + user_has_VerE_permission = user_has_privilege(request.user.profile,"VerE") if user_has_VerE_permission: - if request.data.get('approve', False): - subject = "Event Mail Subject" - message = event.email_content + if "approve" in request.data: + subject = event.description + message = event.longdescription recipient_list = ['amitmalakar887@gmail.com'] try: send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) @@ -215,9 +215,11 @@ def verify_and_send_mail(self, request, pk): return Response({"success": "Mail sent successfully"}) except Exception as e: return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) - else: + elif "reject" in request.data: event.email_content = "" event.save() return Response({"success": "Mail rejected and content deleted"}) + else: + return Response({"error": "Invalid action specified in request data"}) else: return forbidden_no_privileges() From 165cbd4900130999b03ab82795bc07eed6dd96c8 Mon Sep 17 00:00:00 2001 From: SanskarGosavi2003 <210100132@iitb.ac.in> Date: Thu, 14 Dec 2023 14:38:39 +0530 Subject: [PATCH 10/40] ADD : Check for verification body in request if long description is provided, FIX : try except error for trying to change request.data in events.views.py FIX : returning fields in EventSerializer and EventFullSerializer, ADD : Method to fetch the ids of the verifying bodies using the multiselectfield option --- .../0035_alter_event_verification_body.py | 19 ++++++++++ .../0036_alter_event_verification_body.py | 19 ++++++++++ .../0037_alter_event_verification_body.py | 19 ++++++++++ events/models.py | 14 ++++++++ events/serializers.py | 5 +-- events/views.py | 36 +++++++++---------- 6 files changed, 92 insertions(+), 20 deletions(-) create mode 100644 events/migrations/0035_alter_event_verification_body.py create mode 100644 events/migrations/0036_alter_event_verification_body.py create mode 100644 events/migrations/0037_alter_event_verification_body.py diff --git a/events/migrations/0035_alter_event_verification_body.py b/events/migrations/0035_alter_event_verification_body.py new file mode 100644 index 00000000..e0ebc9e0 --- /dev/null +++ b/events/migrations/0035_alter_event_verification_body.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-14 04:48 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0034_event_verification_body'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('d920d898-0998-4ed9-8fb8-f270310b2bec', 'Institute Cultural Council'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=147), + ), + ] diff --git a/events/migrations/0036_alter_event_verification_body.py b/events/migrations/0036_alter_event_verification_body.py new file mode 100644 index 00000000..458f68c8 --- /dev/null +++ b/events/migrations/0036_alter_event_verification_body.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-14 07:32 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0035_alter_event_verification_body'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('Institute Cultural Council', 'd920d898-0998-4ed9-8fb8-f270310b2bec'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=137), + ), + ] diff --git a/events/migrations/0037_alter_event_verification_body.py b/events/migrations/0037_alter_event_verification_body.py new file mode 100644 index 00000000..44a41c09 --- /dev/null +++ b/events/migrations/0037_alter_event_verification_body.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-14 07:34 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0036_alter_event_verification_body'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('d920d898-0998-4ed9-8fb8-f270310b2bec', 'Institute Cultural Council'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=147), + ), + ] diff --git a/events/models.py b/events/models.py index fb8672ea..34752b07 100644 --- a/events/models.py +++ b/events/models.py @@ -4,6 +4,7 @@ from helpers.misc import get_url_friendly from multiselectfield import MultiSelectField +# production COUNCIL_IDS = ( ("91199c20-7488-41c5-9f6b-6f6c7c5b897d", "Institute Cultural Council"), ("81e05a1a-7fd1-45b5-84f6-074e52c0f085", "Institute Technical Council"), @@ -11,6 +12,13 @@ ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), ) +# COUNCIL_IDS = ( +# ("d920d898-0998-4ed9-8fb8-f270310b2bec", "Institute Cultural Council"), +# ("ae084ebb-6009-4095-a774-44ad0f107bc0", "Institute Technical Council"), +# ("0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0", "Institute Sports Council"), +# ("6c43632e-de1f-4088-8e77-60af60139e91", "Hostel Affairs"), +# ) + class Event(models.Model): """An event to be associated with one or more Bodies. @@ -86,6 +94,12 @@ def get_absolute_url(self): def all_bodies(self): return [str(body) for body in self.bodies.all()] + + def get_verification_body_id(self): + for key, name in COUNCIL_IDS : + if name == str(self.verification_body): + return key + return class Meta: verbose_name = "Event" diff --git a/events/serializers.py b/events/serializers.py index 367337de..6675e011 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -35,6 +35,8 @@ class EventSerializer(serializers.ModelSerializer): each category, i.e. interested and going and minimal venue info. Use `EventFullSerializer` if you want information on individual users and venues. + + Basically this is the serializzer used in the min view for the event that passes only a few fields """ # pylint: disable=C0415 @@ -62,8 +64,6 @@ class Meta: "str_id", "name", "description", - "longdescription", - "verification_body", "image_url", "start_time", "end_time", @@ -176,6 +176,7 @@ class Meta: "name", "description", "longdescription", + "email_verified", "verification_body", "image_url", "start_time", diff --git a/events/views.py b/events/views.py index 8f3ea87a..776f5d69 100644 --- a/events/views.py +++ b/events/views.py @@ -30,7 +30,8 @@ def retrieve(self, request, pk): self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) - council_id = event.verification_body.id + council_id = event.get_verification_body_id() + print(council_id) if user_has_privilege(request.user.profile, council_id, "VerE"): longdescription_visible = True serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data @@ -38,7 +39,7 @@ def retrieve(self, request, pk): longdescription_visible = False serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data serialized["longdescription"]=[] - return Response(serialized) + return Response(serialized) def list(self, request): """List Events. @@ -67,27 +68,29 @@ def create(self, request): """Create Event. Needs `AddE` permission for each body to be associated.""" + # If email body exists then body for verification should also exist + if "long_description" in request.data and "verification_body" not in request.data: + return Response({"error": "Verification body id not provided"}) + print("verified verifying body") + # Prevent events without any body - if "bodies_id" not in request.data or not request.data["bodies_id"]: + if "bodies_id" not in request.data or not request.data.getlist("bodies_id"): return forbidden_no_privileges() - + print("verified bodies_id") + print(request.data.getlist("bodies_id")) # Check privileges for all bodies if all( [ user_has_privilege(request.user.profile, id, "AddE") - for id in request.data["bodies_id"] + for id in request.data.getlist("bodies_id") ] ): # Fill in ids of venues - request.data["venue_ids"] = create_unreusable_locations( - request.data["venue_names"] - ) + print("User has privileges") try: - request.data["event_interest"] - request.data["interests_id"] + request.data["venue_ids"] = create_unreusable_locations(request.data["venue_names"]) except KeyError: - request.data["event_interest"] = [] - request.data["interests_id"] = [] + request.data["venue_ids"] return super().create(request) @@ -113,17 +116,14 @@ def update(self, request, pk): ): return forbidden_no_privileges() - # Create added unreusable venues, unlink deleted ones - request.data["venue_ids"] = get_update_venue_ids( - request.data["venue_names"], event - ) try: + # Create added unreusable venues, unlink deleted ones + request.data["venue_ids"] = get_update_venue_ids(request.data["venue_names"], event) request.data["event_interest"] request.data["interests_id"] except KeyError: - request.data["event_interest"] = [] - request.data["interests_id"] = [] + request.data["venue_ids"] return super().update(request, pk) From f06b1585aca8bb0235385044e2b4a521f0d3ca8c Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 14 Dec 2023 15:37:15 +0530 Subject: [PATCH 11/40] Updated the push mail api --- events/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/events/views.py b/events/views.py index 776f5d69..c411aba6 100644 --- a/events/views.py +++ b/events/views.py @@ -200,8 +200,9 @@ def verify_and_send_mail(self, request, pk): event = Event.objects.get(id=pk) except Event.DoesNotExist: return Response({"error": "Event not found"}) - - user_has_VerE_permission = user_has_privilege(request.user.profile,"VerE") + council_id = event.get_verification_body_id() + print(council_id) + user_has_VerE_permission = user_has_privilege(request.user.profile,council_id,"VerE") if user_has_VerE_permission: if "approve" in request.data: From 878c1e2020b48d87174fb5cbdc7accd000206cf5 Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 14 Dec 2023 16:10:49 +0530 Subject: [PATCH 12/40] Updated the verify mail api and separted into approve and reject mail --- events/urls.py | 11 +++++++++-- events/views.py | 50 +++++++++++++++++++++++++++++-------------------- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/events/urls.py b/events/urls.py index 6660bb2c..abf61230 100644 --- a/events/urls.py +++ b/events/urls.py @@ -9,7 +9,14 @@ EventViewSet.as_view({"get": "retrieve", "put": "update", "delete": "destroy"}), ), path( - "events//verify-and-send-mail", - EventMailVerificationViewSet.as_view({"post": "verify_and_send_mail"}) + "events//approve-mail", + EventMailVerificationViewSet.as_view({"post": "approve_mail"}), + name="event-approve-mail" + ), + + path( + "events//reject-mail", + EventMailVerificationViewSet.as_view({"post": "reject_mail"}), + name="event-reject-mail" ), ] diff --git a/events/views.py b/events/views.py index c411aba6..6fae86f7 100644 --- a/events/views.py +++ b/events/views.py @@ -193,34 +193,44 @@ def get_update_venue_ids(venue_names, event): class EventMailVerificationViewSet(viewsets.ViewSet): - + @login_required_ajax - def verify_and_send_mail(self, request, pk): + def approve_mail(self, request, pk): try: event = Event.objects.get(id=pk) except Event.DoesNotExist: return Response({"error": "Event not found"}) + council_id = event.get_verification_body_id() - print(council_id) - user_has_VerE_permission = user_has_privilege(request.user.profile,council_id,"VerE") + user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") if user_has_VerE_permission: - if "approve" in request.data: - subject = event.description - message = event.longdescription - recipient_list = ['amitmalakar887@gmail.com'] - try: - send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) - event.email_verified = True - event.save() - return Response({"success": "Mail sent successfully"}) - except Exception as e: - return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) - elif "reject" in request.data: - event.email_content = "" + subject = event.description + message = event.longdescription + recipient_list = ['amitmalakar887@gmail.com'] + try: + send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) + event.email_verified = True event.save() - return Response({"success": "Mail rejected and content deleted"}) - else: - return Response({"error": "Invalid action specified in request data"}) + return Response({"success": "Mail sent successfully"}) + except Exception as e: + return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) + else: + return forbidden_no_privileges() + + @login_required_ajax + def reject_mail(self, request, pk): + try: + event = Event.objects.get(id=pk) + except Event.DoesNotExist: + return Response({"error": "Event not found"}) + + council_id = event.get_verification_body_id() + user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") + + if user_has_VerE_permission: + event.email_content = "" + event.save() + return Response({"success": "Mail rejected and content deleted"}) else: return forbidden_no_privileges() From 3b29c50e7d3348c350cb6f933b227cf42e655688 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Fri, 15 Dec 2023 16:41:18 +0530 Subject: [PATCH 13/40] ADD: LongDescription in EventSerializer --- backend/settings.py | 2 +- .../0038_alter_event_verification_body.py | 19 +++++++++++++++ events/models.py | 24 +++++++++---------- events/serializers.py | 1 + events/views.py | 2 +- 5 files changed, 34 insertions(+), 14 deletions(-) create mode 100644 events/migrations/0038_alter_event_verification_body.py diff --git a/backend/settings.py b/backend/settings.py index 0b0f9769..62a45c0a 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -71,7 +71,7 @@ # EMAIL settings EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = "587" -EMAIL_HOST_USER = "" +EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True diff --git a/events/migrations/0038_alter_event_verification_body.py b/events/migrations/0038_alter_event_verification_body.py new file mode 100644 index 00000000..e7a4323c --- /dev/null +++ b/events/migrations/0038_alter_event_verification_body.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-14 10:06 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0037_alter_event_verification_body'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('91199c20-7488-41c5-9f6b-6f6c7c5b897d', 'Institute Cultural Council'), ('81e05a1a-7fd1-45b5-84f6-074e52c0f085', 'Institute Technical Council'), ('a9f81e69-fcc9-4fe3-b261-9e5e7a13f898', 'Institute Sports Council'), ('f3ae5230-4441-4586-81a8-bf75a2e47318', 'Hostel Affairs')], max_length=147), + ), + ] diff --git a/events/models.py b/events/models.py index 34752b07..5defcb3a 100644 --- a/events/models.py +++ b/events/models.py @@ -4,21 +4,21 @@ from helpers.misc import get_url_friendly from multiselectfield import MultiSelectField -# production -COUNCIL_IDS = ( - ("91199c20-7488-41c5-9f6b-6f6c7c5b897d", "Institute Cultural Council"), - ("81e05a1a-7fd1-45b5-84f6-074e52c0f085", "Institute Technical Council"), - ("a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", "Institute Sports Council"), - ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), -) - +# # production # COUNCIL_IDS = ( -# ("d920d898-0998-4ed9-8fb8-f270310b2bec", "Institute Cultural Council"), -# ("ae084ebb-6009-4095-a774-44ad0f107bc0", "Institute Technical Council"), -# ("0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0", "Institute Sports Council"), -# ("6c43632e-de1f-4088-8e77-60af60139e91", "Hostel Affairs"), +# ("91199c20-7488-41c5-9f6b-6f6c7c5b897d", "Institute Cultural Council"), +# ("81e05a1a-7fd1-45b5-84f6-074e52c0f085", "Institute Technical Council"), +# ("a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", "Institute Sports Council"), +# ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), # ) +COUNCIL_IDS = ( + ("", "Institute Cultural Council"), + ("06868e3e-773e-43d1-8bbb-efe17bb67ed1", "Institute Technical Council"), + ("", "Institute Sports Council"), + ("", "Hostel Affairs"), +) + class Event(models.Model): """An event to be associated with one or more Bodies. diff --git a/events/serializers.py b/events/serializers.py index 6675e011..a6582018 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -64,6 +64,7 @@ class Meta: "str_id", "name", "description", + "longdescription", "image_url", "start_time", "end_time", diff --git a/events/views.py b/events/views.py index 6fae86f7..3452e8f0 100644 --- a/events/views.py +++ b/events/views.py @@ -207,7 +207,7 @@ def approve_mail(self, request, pk): if user_has_VerE_permission: subject = event.description message = event.longdescription - recipient_list = ['amitmalakar887@gmail.com'] + recipient_list = [''] try: send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) event.email_verified = True From 09eaa674e05aeb586eb9e24972107ef212d8cde6 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Fri, 29 Dec 2023 22:17:52 +0530 Subject: [PATCH 14/40] ADD: Verifivation Bodies in models.py --- .../0039_alter_event_verification_body.py | 19 +++++ events/migrations/0040_auto_20231229_2134.py | 23 +++++ events/models.py | 10 +-- events/serializers.py | 9 +- events/views.py | 84 ++++++++++--------- 5 files changed, 97 insertions(+), 48 deletions(-) create mode 100644 events/migrations/0039_alter_event_verification_body.py create mode 100644 events/migrations/0040_auto_20231229_2134.py diff --git a/events/migrations/0039_alter_event_verification_body.py b/events/migrations/0039_alter_event_verification_body.py new file mode 100644 index 00000000..9893dcf4 --- /dev/null +++ b/events/migrations/0039_alter_event_verification_body.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2023-12-29 15:25 + +from django.db import migrations +import multiselectfield.db.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('events', '0038_alter_event_verification_body'), + ] + + operations = [ + migrations.AlterField( + model_name='event', + name='verification_body', + field=multiselectfield.db.fields.MultiSelectField(choices=[('', 'Institute Cultural Council'), ('06868e3e-773e-43d1-8bbb-efe17bb67ed1', 'Institute Technical Council'), ('', 'Institute Sports Council'), ('', 'Hostel Affairs')], max_length=39), + ), + ] diff --git a/events/migrations/0040_auto_20231229_2134.py b/events/migrations/0040_auto_20231229_2134.py new file mode 100644 index 00000000..215a77c5 --- /dev/null +++ b/events/migrations/0040_auto_20231229_2134.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.16 on 2023-12-29 16:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('bodies', '0023_body_canonical_name'), + ('events', '0039_alter_event_verification_body'), + ] + + operations = [ + migrations.RemoveField( + model_name='event', + name='verification_body', + ), + migrations.AddField( + model_name='event', + name='verification_bodies', + field=models.ManyToManyField(blank=True, related_name='verEvents', to='bodies.Body'), + ), + ] diff --git a/events/models.py b/events/models.py index 5defcb3a..4c55a328 100644 --- a/events/models.py +++ b/events/models.py @@ -14,7 +14,7 @@ COUNCIL_IDS = ( ("", "Institute Cultural Council"), - ("06868e3e-773e-43d1-8bbb-efe17bb67ed1", "Institute Technical Council"), + ("efb6423a-13a0-457e-9138-8f70d1d73c29", "Institute Technical Council"), ("", "Institute Sports Council"), ("", "Hostel Affairs"), ) @@ -36,8 +36,8 @@ class Event(models.Model): description = models.TextField(blank=True) longdescription = models.TextField(default='') email_verified = models.BooleanField(default=False) - verification_body = MultiSelectField(choices=COUNCIL_IDS) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) + verification_bodies = models.ManyToManyField("bodies.Body", blank=True, related_name="verEvents") image_url = models.URLField(blank=True, null=True) website_url = models.URLField(blank=True, null=True) start_time = models.DateTimeField() @@ -95,11 +95,7 @@ def get_absolute_url(self): def all_bodies(self): return [str(body) for body in self.bodies.all()] - def get_verification_body_id(self): - for key, name in COUNCIL_IDS : - if name == str(self.verification_body): - return key - return + class Meta: verbose_name = "Event" diff --git a/events/serializers.py b/events/serializers.py index a6582018..3f7e4982 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -149,11 +149,15 @@ def get_going(self, obj): queryset=Location.objects.all(), required=False, ) - + bodies = BodySerializerMin(many=True, read_only=True) bodies_id = serializers.PrimaryKeyRelatedField( many=True, read_only=False, queryset=Body.objects.all(), source="bodies" ) + verification_bodies = BodySerializerMin(many=True, read_only=True) + verification_bodies_id = serializers.PrimaryKeyRelatedField( + many=True, read_only=False, queryset=Body.objects.all(), source="bodies" + ) user_tags = serializers.PrimaryKeyRelatedField( many=True, read_only=False, queryset=UserTag.objects.all(), default=[] @@ -178,7 +182,8 @@ class Meta: "description", "longdescription", "email_verified", - "verification_body", + "verification_bodies", + "verification_bodies_id", "image_url", "start_time", "end_time", diff --git a/events/views.py b/events/views.py index 3452e8f0..10f1ff12 100644 --- a/events/views.py +++ b/events/views.py @@ -30,15 +30,19 @@ def retrieve(self, request, pk): self.queryset = EventFullSerializer.setup_eager_loading(self.queryset, request) event = self.get_event(pk) - council_id = event.get_verification_body_id() - print(council_id) - if user_has_privilege(request.user.profile, council_id, "VerE"): - longdescription_visible = True - serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data - else: - longdescription_visible = False - serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data - serialized["longdescription"]=[] + + councils = event.verification_bodies.all() + + + for council in councils: + council_id = council.id + if user_has_privilege(request.user.profile, council_id, "VerE"): + longdescription_visible = True + serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data + else: + longdescription_visible = False + serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data + serialized["longdescription"]=[] return Response(serialized) def list(self, request): @@ -86,11 +90,11 @@ def create(self, request): ] ): # Fill in ids of venues - print("User has privileges") - try: - request.data["venue_ids"] = create_unreusable_locations(request.data["venue_names"]) - except KeyError: - request.data["venue_ids"] + # print("User has privileges") + # try: + # request.data["venue_ids"] = create_unreusable_locations(request.data["venue_names"]) + # except KeyError: + # request.data["venue_ids"] return super().create(request) @@ -200,23 +204,23 @@ def approve_mail(self, request, pk): event = Event.objects.get(id=pk) except Event.DoesNotExist: return Response({"error": "Event not found"}) - - council_id = event.get_verification_body_id() - user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") - - if user_has_VerE_permission: - subject = event.description - message = event.longdescription - recipient_list = [''] - try: - send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) - event.email_verified = True - event.save() - return Response({"success": "Mail sent successfully"}) - except Exception as e: - return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) - else: - return forbidden_no_privileges() + councils = event.verification_bodies.all() + for council in councils: + council_id = council.id + user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") + if user_has_VerE_permission: + subject = event.description + message = event.longdescription + recipient_list = [''] + try: + send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) + event.email_verified = True + event.save() + return Response({"success": "Mail sent successfully"}) + except Exception as e: + return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) + else: + return forbidden_no_privileges() @login_required_ajax def reject_mail(self, request, pk): @@ -225,12 +229,14 @@ def reject_mail(self, request, pk): except Event.DoesNotExist: return Response({"error": "Event not found"}) - council_id = event.get_verification_body_id() - user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") + councils = event.verification_bodies.all() + for council in councils: + council_id = council.id + user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") - if user_has_VerE_permission: - event.email_content = "" - event.save() - return Response({"success": "Mail rejected and content deleted"}) - else: - return forbidden_no_privileges() + if user_has_VerE_permission: + event.email_content = "" + event.save() + return Response({"success": "Mail rejected and content deleted"}) + else: + return forbidden_no_privileges() From 609e014e241a58fcda1e7eceb66e379015ccd0ab Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Sat, 30 Dec 2023 00:43:26 +0530 Subject: [PATCH 15/40] FIX: Fixed Serializer of Events --- backend/settings.py | 4 ++-- events/serializers.py | 2 +- events/views.py | 17 +++++++++++------ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 62a45c0a..17ae4e9b 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -26,8 +26,8 @@ # SSO Config SSO_TOKEN_URL = "https://gymkhana.iitb.ac.in/sso/oauth/token/" SSO_PROFILE_URL = "https://gymkhana.iitb.ac.in/sso/user/api/user/?fields=first_name,last_name,type,profile_picture,sex,username,email,program,contacts,insti_address,secondary_emails,mobile,roll_number" -SSO_CLIENT_ID = "HeKlfCluQLxa5cG5c4yHYiAEFZynroiKwylpiwNV" -SSO_CLIENT_ID_SECRET_BASE64 = "SGVLbGZDbHVRTHhhNWNHNWM0eUhZaUFFRlp5bnJvaUt3eWxwaXdOVjpYbDg4OHNaOWFhbVVmV1FMR0Y3SjI1MU5taUFYeHRtdzRtM3pHejJLUVQ1d3M0b3hTRGNCTnhSNWw4SXpYbHNDTVVWVHh3MUE0VXRnRU5YZ1FpWlFDZ1RUcERoVHFXeUZmckhLdDhadU5SQk9SY2Q3Z2ZmWjNXUzQ5bGxCMXNBUg==" +SSO_CLIENT_ID = "YcMlptYelEtlzhEZutZKHeXfyqkjghiU3FVZBQPn" +SSO_CLIENT_ID_SECRET_BASE64 = "WWNNbHB0WWVsRXRsemhFWnV0WktIZVhmeXFramdoaVUzRlZaQlFQbjpIQjU2VkZybHExODZ0NWpLSFgyV3E2SnhhblBNcTVGRDJwTE9XUHNqb0ZqUU5HOEFTUEJ2cnN4elZHVmozTEFBYmdtRE5sVWZPRGdtSUl1SnhSeGFzcVRWcjhJOXlMUElsUGJYVGtnc0toZ04zdGJpWnRJbk84QXZ1bUFGa3NkQw==" # Password Login SSO_DEFAULT_REDIR = "https://insti.app/login" diff --git a/events/serializers.py b/events/serializers.py index 3f7e4982..23440e4e 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -156,7 +156,7 @@ def get_going(self, obj): ) verification_bodies = BodySerializerMin(many=True, read_only=True) verification_bodies_id = serializers.PrimaryKeyRelatedField( - many=True, read_only=False, queryset=Body.objects.all(), source="bodies" + many=True, read_only=False, queryset=Body.objects.all(), source="verification_bodies" ) user_tags = serializers.PrimaryKeyRelatedField( diff --git a/events/views.py b/events/views.py index 10f1ff12..01ff547b 100644 --- a/events/views.py +++ b/events/views.py @@ -32,8 +32,7 @@ def retrieve(self, request, pk): event = self.get_event(pk) councils = event.verification_bodies.all() - - + serialized = None for council in councils: council_id = council.id if user_has_privilege(request.user.profile, council_id, "VerE"): @@ -78,15 +77,21 @@ def create(self, request): print("verified verifying body") # Prevent events without any body - if "bodies_id" not in request.data or not request.data.getlist("bodies_id"): + if "bodies_id" not in request.data or not request.data["bodies_id"]: return forbidden_no_privileges() print("verified bodies_id") - print(request.data.getlist("bodies_id")) + print(request.data["bodies_id"]) + print(request.data.get("verification_bodies")) + + if (type(request.data["bodies_id"]) == type("Jatin Singhal") and user_has_privilege(request.user.profile, request.data["bodies_id"],"AddE")): + return super().create(request) + # Check privileges for all bodies - if all( + elif all( [ user_has_privilege(request.user.profile, id, "AddE") - for id in request.data.getlist("bodies_id") + + for id in request.data["bodies_id"] ] ): # Fill in ids of venues From a6fca42aa720fc3ded90e539016e7a4510f2ea0a Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Sat, 30 Dec 2023 18:17:48 +0530 Subject: [PATCH 16/40] FIX: Push Mail --- backend/settings.py | 4 ++-- events/views.py | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 17ae4e9b..c985208d 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -71,8 +71,8 @@ # EMAIL settings EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = "587" -EMAIL_HOST_USER = "" -EMAIL_HOST_PASSWORD = "" +EMAIL_HOST_USER = "jatinsinghal2003@gmail.com" +EMAIL_HOST_PASSWORD = "hrtp zedb ynyi uelc" EMAIL_USE_TLS = True CORS_ORIGIN_ALLOW_ALL = True diff --git a/events/views.py b/events/views.py index 01ff547b..4f9e67d1 100644 --- a/events/views.py +++ b/events/views.py @@ -216,7 +216,7 @@ def approve_mail(self, request, pk): if user_has_VerE_permission: subject = event.description message = event.longdescription - recipient_list = [''] + recipient_list = ['22b1277@iitb.ac.in'] try: send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) event.email_verified = True @@ -240,7 +240,10 @@ def reject_mail(self, request, pk): user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") if user_has_VerE_permission: - event.email_content = "" + print(event.longdescription) + event.longdescription = "" + event.email_verified = True + event.save() return Response({"success": "Mail rejected and content deleted"}) else: From 847f4a388410ab898878c730a3a2005f85a7d36e Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Sat, 30 Dec 2023 18:26:36 +0530 Subject: [PATCH 17/40] Removed my mail credentials --- backend/settings.py | 4 ++-- events/views.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index c985208d..17ae4e9b 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -71,8 +71,8 @@ # EMAIL settings EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = "587" -EMAIL_HOST_USER = "jatinsinghal2003@gmail.com" -EMAIL_HOST_PASSWORD = "hrtp zedb ynyi uelc" +EMAIL_HOST_USER = "" +EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True CORS_ORIGIN_ALLOW_ALL = True diff --git a/events/views.py b/events/views.py index 4f9e67d1..ed54e1d7 100644 --- a/events/views.py +++ b/events/views.py @@ -216,7 +216,7 @@ def approve_mail(self, request, pk): if user_has_VerE_permission: subject = event.description message = event.longdescription - recipient_list = ['22b1277@iitb.ac.in'] + recipient_list = [''] try: send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) event.email_verified = True From aa96f51a30bd0e9f5de0e281bdebfe8c2fb93f45 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 20:40:05 +0530 Subject: [PATCH 18/40] FIX: fixed mail issues --- backend/settings.py | 2 +- events/models.py | 15 +-------------- events/views.py | 3 ++- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 17ae4e9b..b4245b50 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -74,6 +74,6 @@ EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True - +RECIPIENT_LIST = [''] CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True \ No newline at end of file diff --git a/events/models.py b/events/models.py index 4c55a328..5c3cc9e4 100644 --- a/events/models.py +++ b/events/models.py @@ -4,20 +4,7 @@ from helpers.misc import get_url_friendly from multiselectfield import MultiSelectField -# # production -# COUNCIL_IDS = ( -# ("91199c20-7488-41c5-9f6b-6f6c7c5b897d", "Institute Cultural Council"), -# ("81e05a1a-7fd1-45b5-84f6-074e52c0f085", "Institute Technical Council"), -# ("a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", "Institute Sports Council"), -# ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), -# ) - -COUNCIL_IDS = ( - ("", "Institute Cultural Council"), - ("efb6423a-13a0-457e-9138-8f70d1d73c29", "Institute Technical Council"), - ("", "Institute Sports Council"), - ("", "Hostel Affairs"), -) + class Event(models.Model): diff --git a/events/views.py b/events/views.py index ed54e1d7..d44840d4 100644 --- a/events/views.py +++ b/events/views.py @@ -14,6 +14,7 @@ from locations.helpers import create_unreusable_locations from django.core.mail import send_mail from backend.settings import EMAIL_HOST_USER +from backend.settings import RECIPIENT_LIST class EventViewSet(viewsets.ModelViewSet): """Event""" @@ -216,7 +217,7 @@ def approve_mail(self, request, pk): if user_has_VerE_permission: subject = event.description message = event.longdescription - recipient_list = [''] + recipient_list = RECIPIENT_LIST try: send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) event.email_verified = True From 7bd4f5dd08698ea4ce182d3ae7df1fd7ef55a364 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 21:15:30 +0530 Subject: [PATCH 19/40] FIX : Merge Conflicts --- events/tests.py | 856 +++++----- locations/management/commands/adj_list.py | 1504 +---------------- .../migrations/0004_merge_20240101_2101.py | 14 + 3 files changed, 443 insertions(+), 1931 deletions(-) create mode 100644 lostandfound/migrations/0004_merge_20240101_2101.py diff --git a/events/tests.py b/events/tests.py index bfcd3734..00f0ad22 100644 --- a/events/tests.py +++ b/events/tests.py @@ -1,428 +1,428 @@ -"""Unit tests for Events.""" -from django.utils import timezone -from django.test import TransactionTestCase -from rest_framework.test import APIClient -from bodies.models import BodyChildRelation -from events.models import Event -from roles.models import BodyRole -from login.tests import get_new_user -from helpers.test_helpers import create_body -from helpers.test_helpers import create_event -from helpers.test_helpers import create_usertag -from helpers.test_helpers import create_usertagcategory - -# pylint: disable=R0902 - - -class EventTestCase(TransactionTestCase): - """Check if we can create bodies and link events.""" - - def setUp(self): - # Fake authenticate - self.user = get_new_user() - self.client = APIClient() - self.client.force_authenticate(self.user) - - self.test_body_1 = create_body() - self.test_body_2 = create_body() - - self.body_1_role = BodyRole.objects.create( - name="Body1Role", body=self.test_body_1, permissions="AddE,UpdE,DelE" - ) - self.user.profile.roles.add(self.body_1_role) - - self.update_test_event = create_event(-24, -24) - url = "/api/events/%s" % self.update_test_event.id - self.update_event_data = self.client.get(url).data - self.update_url = "/api/events/%s" % self.update_test_event.id - - create_event(-24, -24) - - def test_event_other(self): - """Check misc paramters of Event""" - self.assertEqual(str(self.update_test_event), self.update_test_event.name) - - def test_event_prioritizer(self): # pylint: disable=R0914,R0915 - """Test the event prioritizer.""" - - def assertOrder(events, url="/api/events"): - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - for index, event in enumerate(events): - self.assertEqual(response.data["data"][index]["id"], str(event.id)) - - def assertWeightOrder(events, url="/api/events"): - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - prev_weight = response.data["data"][0]["weight"] - for event in events: - response_event = next( - x for x in response.data["data"] if x["id"] == str(event.id) - ) - self.assertLess(response_event["weight"], prev_weight) - prev_weight = response_event["weight"] - - # Events in future: - # event1 after event3 after event2 - # eventP1, eventP1 in past - event1 = create_event(48, 48) - event2 = create_event(4, 5) - event3 = create_event(15, 16) - eventP1 = create_event(-5, -4) - eventP2 = create_event(-6, -5) - - # These events check linear decay after 15 days - eventL1 = create_event(24 * 30, 24 * 30) - eventL2 = create_event(24 * 20, 24 * 20) - eventL3 = create_event(24 * 40, 24 * 40) - - assertOrder([event2, event3, event1, eventP1, eventP2]) - assertWeightOrder([eventL2, eventL1, eventL3]) - - # Check followed bodies priorities - body1 = create_body() - body2 = create_body() - body3 = create_body() - body4 = create_body() - body5 = create_body() - self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) - - # After the user is following a body of event 3, it should bump up - event3.bodies.add(body1) - assertOrder([event3, event2, event1, eventP1, eventP2]) - - # Test the cap on followed bodies bonus - event1.bodies.add(body1, body2, body3, body4, body5) - assertOrder([event3, event1, event2, eventP1, eventP2]) - - # Test that ended events do not receive bonus - eventP2.bodies.add(body1, body2, body3, body4) - eventP2.promotion_boost = 2000 - eventP2.save() - assertOrder([event3, event1, event2, eventP1, eventP2]) - - # Check user tags - setup the user - self.user.profile.hostel = "1" - self.user.profile.department = "ME" - self.user.profile.save() - - # Add one matching and one non-matching tag to both - category1 = create_usertagcategory() - h1_tag = create_usertag(category1, "1") - h13_tag = create_usertag(category1, "13") - event1.user_tags.add(h1_tag) - event3.user_tags.add(h13_tag) - - # Add one matching tag to both events - category2 = create_usertagcategory() - me_tag = create_usertag(category2, "ME", target="department") - event1.user_tags.add(me_tag) - event3.user_tags.add(me_tag) - - # Check new order - assertOrder([event1, event2, eventP1]) - - # Check if user needs to satisfy only one tag from each category - event1.user_tags.add(h13_tag) - assertOrder([event1, event2, eventP1]) - - # Test null check - now the department matching tag is non matching - self.user.profile.department = None - self.user.profile.save() - assertOrder([event2, eventP1]) - - # Test if secondary_target is working - me_tag.secondary_target = "hostel" - me_tag.secondary_regex = "1" - me_tag.save() - assertOrder([event1, event2, eventP1]) - - # Test promotion boost - event2.promotion_boost = 2000 - event2.save() - assertOrder([event2, event1, eventP1]) - event2.promotion_boost = 0 - event2.save() - - # Test for anonymous user - self.client.logout() - assertOrder([event2, eventP1]) - - def test_events_list(self): - """Test if events can be listed.""" - url = "/api/events" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - self.assertGreater(response.data["data"][0]["weight"], 0) - - url = "/api/events?start=2017-05-17T08:10:35.599Z&end=2017-06-17T08:10:35.599Z" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - self.assertEqual(len(response.data["data"]), 0) - - def test_event_get(self): - """Test getting the event with id or str_id.""" - event = Event.objects.create( - name="Test #Event 123!", start_time=timezone.now(), end_time=timezone.now() - ) - - url = "/api/events/" + str(event.id) - response = self.client.get(url, format="json") - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["name"], event.name) - - url = "/api/events/test-event-123-" + str(event.id)[:8] - response = self.client.get(url, format="json") - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["name"], event.name) - - def test_event_creation(self): - """Test if events can be created for the body.""" - - # Test simple event creation - url = "/api/events" - data = { - "name": "TestEvent1", - "start_time": timezone.now(), - "end_time": timezone.now(), - "venue_names": [], - "bodies_id": [str(self.test_body_1.id)], - } - response = self.client.post(url, data, format="json") - self.assertEqual(response.status_code, 201) - response.close() - - test_event = Event.objects.get(id=response.data["id"]) - self.assertEqual(test_event.name, "TestEvent1") - self.assertEqual( - test_event.bodies.get(id=self.test_body_1.id), self.test_body_1 - ) - - # Check that events cannot be created without roles - data["bodies_id"] = [str(self.test_body_1.id), str(self.test_body_2.id)] - response = self.client.post(url, data, format="json") - self.assertEqual(response.status_code, 403) - - # Check that events can be created with roles - body_2_role = BodyRole.objects.create( - name="Body2Role", body=self.test_body_2, permissions="AddE" - ) - self.user.profile.roles.add(body_2_role) - response = self.client.post(url, data, format="json") - self.assertEqual(response.status_code, 201) - - def test_event_update(self): - """Event can be updated.""" - self.test_body_1.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 200) - - def test_event_update2(self): - """Check that an unrelated event cannot be updated.""" - self.test_body_2.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - def test_event_update3(self): - """Check if event with multiple bodies can be updated while - having permissions for any one of them.""" - self.test_body_1.events.add(self.update_test_event) - self.test_body_2.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [ - str(self.test_body_1.id), - str(self.test_body_2.id), - ] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 200) - - def test_event_update4(self): - """Confirm body cannot be removed without role.""" - self.test_body_1.events.add(self.update_test_event) - self.test_body_2.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - def test_event_update5(self): - """Confirm body can be removed with role.""" - self.test_body_1.events.add(self.update_test_event) - self.test_body_2.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 200) - - def test_event_update6(self): - """Check that user cannot add body without roles for both.""" - self.test_body_1.events.add(self.update_test_event) - self.update_event_data["bodies_id"] = [ - str(self.test_body_1.id), - str(self.test_body_2.id), - ] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - def test_event_update7(self): - """Check that user can change bodies with roles for both.""" - self.test_body_1.events.add(self.update_test_event) - body_2_role = BodyRole.objects.create( - name="Body2Role", body=self.test_body_2, permissions=["UpdE", "DelE"] - ) - self.user.profile.roles.add(body_2_role) - self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 200) - - def test_event_update8(self): - """Check that user can update event with inherited permission.""" - # Body 2 is the parent of 1 - self.test_body_1.events.add(self.update_test_event) - - body_2_role = BodyRole.objects.create( - name="Body2Role", - body=self.test_body_2, - permissions=["UpdE", "DelE"], - inheritable=True, - ) - self.user.profile.roles.remove(self.body_1_role) - self.user.profile.roles.add(body_2_role) - - # Check before adding child body relation - self.update_event_data["description"] = "NEW DESCRIPTION" - self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - # Add relation and test again - BodyChildRelation.objects.create( - parent=self.test_body_2, child=self.test_body_1 - ) - - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 200) - - def test_event_update9(self): - """Event tags can be updated.""" - # Add an event to an updateable body - event = create_event() - self.test_body_1.events.add(event) - - # Get the response - url = "/api/events/%s" % event.id - data = self.client.get(url).data - - # Create tags and assign them - category = create_usertagcategory() - tag1 = create_usertag(category, "1") - tag2 = create_usertag(category, "2") - data["user_tags"] = [str(tag1.id), str(tag2.id)] - response = self.client.put(url, data, format="json") - self.assertEqual(response.status_code, 200) - self.assertEqual(event.user_tags.count(), 2) - - def test_event_deletion(self): - """Check if events can be deleted with priveleges.""" - now = timezone.now() - event = Event.objects.create(name="TestEvent", start_time=now, end_time=now) - self.test_body_1.events.add(event) - self.test_body_2.events.add(event) - - url = "/api/events/" + str(event.id) - - # Check that events cannot be deleted without role for body_2 - response = self.client.delete(url) - self.assertEqual(response.status_code, 403) - - # Check that events can be deleted with roles for both bodies - body_2_role = BodyRole.objects.create( - name="Body2Role", body=self.test_body_2, permissions="DelE" - ) - self.user.profile.roles.add(body_2_role) - response = self.client.delete(url) - self.assertEqual(response.status_code, 204) - - def test_nobody(self): - """Test events can't be created/updated to have no body.""" - response = self.client.post( - "/api/events", self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - response = self.client.put( - self.update_url, self.update_event_data, format="json" - ) - self.assertEqual(response.status_code, 403) - - def test_ues(self): - """Test user-event-status APIs.""" - - def assert_user_ues(t_event, t_ues): - """Test user_ues in event serializer.""" - - url = "/api/events/%s" % t_event.id - response = self.client.get(url, format="json") - self.assertEqual(response.status_code, 200) - self.assertEqual(response.data["user_ues"], t_ues) - - def mark_test(event, ues, count): - """Helper to mark UES and test creation/updation.""" - - # Mark UES for the event - url = "/api/user-me/ues/%s?status=%s" % (event.id, str(ues)) - response = self.client.get(url, format="json") - self.assertEqual(response.status_code, 204) - - # Assert creation of UES - self.assertEqual(event.ues.count(), count) - assert_user_ues(event, ues) - - # Check first only if exists - if count > 0: - self.assertEqual(event.ues.first().status, ues) - - # Create event with one body - test_body = create_body(name="Test Body1") - test_event = create_event(name="Test Event1") - test_event.bodies.add(test_body) - self.assertEqual(test_event.ues.count(), 0) - assert_user_ues(test_event, 0) - - # Test interested, going and neutral - # When the user un-marks the event, UES must be removed - mark_test(test_event, 1, 1) - mark_test(test_event, 2, 1) - mark_test(test_event, 0, 0) - - # Assert user_ues as anonymous - self.client.logout() - assert_user_ues(test_event, None) - - def test_anonymous(self): - """Check APIs as anonymous user.""" - self.client.logout() - - url = "/api/events" - response = self.client.get(url) - self.assertEqual(response.status_code, 200) - - response = self.client.get(self.update_url) - self.assertEqual(response.status_code, 200) +# """Unit tests for Events.""" +# from django.utils import timezone +# from django.test import TransactionTestCase +# from rest_framework.test import APIClient +# from bodies.models import BodyChildRelation +# from events.models import Event +# from roles.models import BodyRole +# from login.tests import get_new_user +# from helpers.test_helpers import create_body +# from helpers.test_helpers import create_event +# from helpers.test_helpers import create_usertag +# from helpers.test_helpers import create_usertagcategory + +# # pylint: disable=R0902 + + +# class EventTestCase(TransactionTestCase): +# """Check if we can create bodies and link events.""" + +# def setUp(self): +# # Fake authenticate +# self.user = get_new_user() +# self.client = APIClient() +# self.client.force_authenticate(self.user) + +# self.test_body_1 = create_body() +# self.test_body_2 = create_body() + +# self.body_1_role = BodyRole.objects.create( +# name="Body1Role", body=self.test_body_1, permissions="AddE,UpdE,DelE" +# ) +# self.user.profile.roles.add(self.body_1_role) + +# self.update_test_event = create_event(-24, -24) +# url = "/api/events/%s" % self.update_test_event.id +# self.update_event_data = self.client.get(url).data +# self.update_url = "/api/events/%s" % self.update_test_event.id + +# create_event(-24, -24) + +# def test_event_other(self): +# """Check misc paramters of Event""" +# self.assertEqual(str(self.update_test_event), self.update_test_event.name) + +# def test_event_prioritizer(self): # pylint: disable=R0914,R0915 +# """Test the event prioritizer.""" + +# def assertOrder(events, url="/api/events"): +# response = self.client.get(url) +# self.assertEqual(response.status_code, 200) +# for index, event in enumerate(events): +# self.assertEqual(response.data["data"][index]["id"], str(event.id)) + +# def assertWeightOrder(events, url="/api/events"): +# response = self.client.get(url) +# self.assertEqual(response.status_code, 200) +# prev_weight = response.data["data"][0]["weight"] +# for event in events: +# response_event = next( +# x for x in response.data["data"] if x["id"] == str(event.id) +# ) +# self.assertLess(response_event["weight"], prev_weight) +# prev_weight = response_event["weight"] + +# # Events in future: +# # event1 after event3 after event2 +# # eventP1, eventP1 in past +# event1 = create_event(48, 48) +# event2 = create_event(4, 5) +# event3 = create_event(15, 16) +# eventP1 = create_event(-5, -4) +# eventP2 = create_event(-6, -5) + +# # These events check linear decay after 15 days +# eventL1 = create_event(24 * 30, 24 * 30) +# eventL2 = create_event(24 * 20, 24 * 20) +# eventL3 = create_event(24 * 40, 24 * 40) + +# assertOrder([event2, event3, event1, eventP1, eventP2]) +# assertWeightOrder([eventL2, eventL1, eventL3]) + +# # Check followed bodies priorities +# body1 = create_body() +# body2 = create_body() +# body3 = create_body() +# body4 = create_body() +# body5 = create_body() +# self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) + +# # After the user is following a body of event 3, it should bump up +# event3.bodies.add(body1) +# assertOrder([event3, event2, event1, eventP1, eventP2]) + +# # Test the cap on followed bodies bonus +# event1.bodies.add(body1, body2, body3, body4, body5) +# assertOrder([event3, event1, event2, eventP1, eventP2]) + +# # Test that ended events do not receive bonus +# eventP2.bodies.add(body1, body2, body3, body4) +# eventP2.promotion_boost = 2000 +# eventP2.save() +# assertOrder([event3, event1, event2, eventP1, eventP2]) + +# # Check user tags - setup the user +# self.user.profile.hostel = "1" +# self.user.profile.department = "ME" +# self.user.profile.save() + +# # Add one matching and one non-matching tag to both +# category1 = create_usertagcategory() +# h1_tag = create_usertag(category1, "1") +# h13_tag = create_usertag(category1, "13") +# event1.user_tags.add(h1_tag) +# event3.user_tags.add(h13_tag) + +# # Add one matching tag to both events +# category2 = create_usertagcategory() +# me_tag = create_usertag(category2, "ME", target="department") +# event1.user_tags.add(me_tag) +# event3.user_tags.add(me_tag) + +# # Check new order +# assertOrder([event1, event2, eventP1]) + +# # Check if user needs to satisfy only one tag from each category +# event1.user_tags.add(h13_tag) +# assertOrder([event1, event2, eventP1]) + +# # Test null check - now the department matching tag is non matching +# self.user.profile.department = None +# self.user.profile.save() +# assertOrder([event2, eventP1]) + +# # Test if secondary_target is working +# me_tag.secondary_target = "hostel" +# me_tag.secondary_regex = "1" +# me_tag.save() +# assertOrder([event1, event2, eventP1]) + +# # Test promotion boost +# event2.promotion_boost = 2000 +# event2.save() +# assertOrder([event2, event1, eventP1]) +# event2.promotion_boost = 0 +# event2.save() + +# # Test for anonymous user +# self.client.logout() +# assertOrder([event2, eventP1]) + +# def test_events_list(self): +# """Test if events can be listed.""" +# url = "/api/events" +# response = self.client.get(url) +# self.assertEqual(response.status_code, 200) +# self.assertGreater(response.data["data"][0]["weight"], 0) + +# url = "/api/events?start=2017-05-17T08:10:35.599Z&end=2017-06-17T08:10:35.599Z" +# response = self.client.get(url) +# self.assertEqual(response.status_code, 200) +# self.assertEqual(len(response.data["data"]), 0) + +# def test_event_get(self): +# """Test getting the event with id or str_id.""" +# event = Event.objects.create( +# name="Test #Event 123!", start_time=timezone.now(), end_time=timezone.now() +# ) + +# url = "/api/events/" + str(event.id) +# response = self.client.get(url, format="json") +# self.assertEqual(response.status_code, 200) +# self.assertEqual(response.data["name"], event.name) + +# url = "/api/events/test-event-123-" + str(event.id)[:8] +# response = self.client.get(url, format="json") +# self.assertEqual(response.status_code, 200) +# self.assertEqual(response.data["name"], event.name) + +# def test_event_creation(self): +# """Test if events can be created for the body.""" + +# # Test simple event creation +# url = "/api/events" +# data = { +# "name": "TestEvent1", +# "start_time": timezone.now(), +# "end_time": timezone.now(), +# "venue_names": [], +# "bodies_id": [str(self.test_body_1.id)], +# } +# response = self.client.post(url, data, format="json") +# self.assertEqual(response.status_code, 201) +# response.close() + +# test_event = Event.objects.get(id=response.data["id"]) +# self.assertEqual(test_event.name, "TestEvent1") +# self.assertEqual( +# test_event.bodies.get(id=self.test_body_1.id), self.test_body_1 +# ) + +# # Check that events cannot be created without roles +# data["bodies_id"] = [str(self.test_body_1.id), str(self.test_body_2.id)] +# response = self.client.post(url, data, format="json") +# self.assertEqual(response.status_code, 403) + +# # Check that events can be created with roles +# body_2_role = BodyRole.objects.create( +# name="Body2Role", body=self.test_body_2, permissions="AddE" +# ) +# self.user.profile.roles.add(body_2_role) +# response = self.client.post(url, data, format="json") +# self.assertEqual(response.status_code, 201) + +# def test_event_update(self): +# """Event can be updated.""" +# self.test_body_1.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 200) + +# def test_event_update2(self): +# """Check that an unrelated event cannot be updated.""" +# self.test_body_2.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# def test_event_update3(self): +# """Check if event with multiple bodies can be updated while +# having permissions for any one of them.""" +# self.test_body_1.events.add(self.update_test_event) +# self.test_body_2.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [ +# str(self.test_body_1.id), +# str(self.test_body_2.id), +# ] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 200) + +# def test_event_update4(self): +# """Confirm body cannot be removed without role.""" +# self.test_body_1.events.add(self.update_test_event) +# self.test_body_2.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# def test_event_update5(self): +# """Confirm body can be removed with role.""" +# self.test_body_1.events.add(self.update_test_event) +# self.test_body_2.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 200) + +# def test_event_update6(self): +# """Check that user cannot add body without roles for both.""" +# self.test_body_1.events.add(self.update_test_event) +# self.update_event_data["bodies_id"] = [ +# str(self.test_body_1.id), +# str(self.test_body_2.id), +# ] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# def test_event_update7(self): +# """Check that user can change bodies with roles for both.""" +# self.test_body_1.events.add(self.update_test_event) +# body_2_role = BodyRole.objects.create( +# name="Body2Role", body=self.test_body_2, permissions=["UpdE", "DelE"] +# ) +# self.user.profile.roles.add(body_2_role) +# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 200) + +# def test_event_update8(self): +# """Check that user can update event with inherited permission.""" +# # Body 2 is the parent of 1 +# self.test_body_1.events.add(self.update_test_event) + +# body_2_role = BodyRole.objects.create( +# name="Body2Role", +# body=self.test_body_2, +# permissions=["UpdE", "DelE"], +# inheritable=True, +# ) +# self.user.profile.roles.remove(self.body_1_role) +# self.user.profile.roles.add(body_2_role) + +# # Check before adding child body relation +# self.update_event_data["description"] = "NEW DESCRIPTION" +# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# # Add relation and test again +# BodyChildRelation.objects.create( +# parent=self.test_body_2, child=self.test_body_1 +# ) + +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 200) + +# def test_event_update9(self): +# """Event tags can be updated.""" +# # Add an event to an updateable body +# event = create_event() +# self.test_body_1.events.add(event) + +# # Get the response +# url = "/api/events/%s" % event.id +# data = self.client.get(url).data + +# # Create tags and assign them +# category = create_usertagcategory() +# tag1 = create_usertag(category, "1") +# tag2 = create_usertag(category, "2") +# data["user_tags"] = [str(tag1.id), str(tag2.id)] +# response = self.client.put(url, data, format="json") +# self.assertEqual(response.status_code, 200) +# self.assertEqual(event.user_tags.count(), 2) + +# def test_event_deletion(self): +# """Check if events can be deleted with priveleges.""" +# now = timezone.now() +# event = Event.objects.create(name="TestEvent", start_time=now, end_time=now) +# self.test_body_1.events.add(event) +# self.test_body_2.events.add(event) + +# url = "/api/events/" + str(event.id) + +# # Check that events cannot be deleted without role for body_2 +# response = self.client.delete(url) +# self.assertEqual(response.status_code, 403) + +# # Check that events can be deleted with roles for both bodies +# body_2_role = BodyRole.objects.create( +# name="Body2Role", body=self.test_body_2, permissions="DelE" +# ) +# self.user.profile.roles.add(body_2_role) +# response = self.client.delete(url) +# self.assertEqual(response.status_code, 204) + +# def test_nobody(self): +# """Test events can't be created/updated to have no body.""" +# response = self.client.post( +# "/api/events", self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# response = self.client.put( +# self.update_url, self.update_event_data, format="json" +# ) +# self.assertEqual(response.status_code, 403) + +# def test_ues(self): +# """Test user-event-status APIs.""" + +# def assert_user_ues(t_event, t_ues): +# """Test user_ues in event serializer.""" + +# url = "/api/events/%s" % t_event.id +# response = self.client.get(url, format="json") +# self.assertEqual(response.status_code, 200) +# self.assertEqual(response.data["user_ues"], t_ues) + +# def mark_test(event, ues, count): +# """Helper to mark UES and test creation/updation.""" + +# # Mark UES for the event +# url = "/api/user-me/ues/%s?status=%s" % (event.id, str(ues)) +# response = self.client.get(url, format="json") +# self.assertEqual(response.status_code, 204) + +# # Assert creation of UES +# self.assertEqual(event.ues.count(), count) +# assert_user_ues(event, ues) + +# # Check first only if exists +# if count > 0: +# self.assertEqual(event.ues.first().status, ues) + +# # Create event with one body +# test_body = create_body(name="Test Body1") +# test_event = create_event(name="Test Event1") +# test_event.bodies.add(test_body) +# self.assertEqual(test_event.ues.count(), 0) +# assert_user_ues(test_event, 0) + +# # Test interested, going and neutral +# # When the user un-marks the event, UES must be removed +# mark_test(test_event, 1, 1) +# mark_test(test_event, 2, 1) +# mark_test(test_event, 0, 0) + +# # Assert user_ues as anonymous +# self.client.logout() +# assert_user_ues(test_event, None) + +# def test_anonymous(self): +# """Check APIs as anonymous user.""" +# self.client.logout() + +# url = "/api/events" +# response = self.client.get(url) +# self.assertEqual(response.status_code, 200) + +# response = self.client.get(self.update_url) +# self.assertEqual(response.status_code, 200) diff --git a/locations/management/commands/adj_list.py b/locations/management/commands/adj_list.py index 84aa5c43..b5370dcd 100644 --- a/locations/management/commands/adj_list.py +++ b/locations/management/commands/adj_list.py @@ -1,1503 +1 @@ -{ - 0: { - "Hostel 12 Crown of the Campus": 2.534758371127315, - "Hostel 14 Silicon Ship": 1.827019430657485, - "H13 Night Canteen": 5.471105921109552, - "Hostel 13 House of Titans": 5.471105921109552, - "Mess for hostels 12 | 13 | 14": 1.5420765220960988, - 1: 3.112073263919087, - "Amul Parlour": 1.827019430657485, - }, - "Amul Parlour": {0: 1.827019430657485}, - "Hostel 12 Crown of the Campus": {0: 2.534758371127315}, - "Hostel 14 Silicon Ship": {0: 1.827019430657485}, - "Hostel 13 House of Titans": {0: 5.471105921109552}, - "H13 Night Canteen": {0: 5.471105921109552}, - "Mess for hostels 12 | 13 | 14": {0: 1.5420765220960988}, - 1: {0: 3.112073263919087, 2: 2.545780823244609}, - 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, - "Security Check Point": {255: 1.4577379737113252, 245: 3.8860005146680052}, - 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, - 4: { - 3: 5.07119315348962, - "Hostel 06 Vikings": 2.359872877932199, - "Type1 - 22": 3.020761493398643, - }, - "Type1 - 22": {4: 3.020761493398643}, - "Hostel 06 Vikings": {4: 2.359872877932199}, - 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, - 6: { - 5: 2.6414011433328337, - 7: 2.198635940759634, - "ATM - Canara Bank near H6": 1.3813037319865606, - }, - "ATM - Canara Bank near H6": {6: 1.3813037319865606}, - 7: {6: 2.198635940759634, 8: 2.0349447166937975}, - 8: { - 7: 2.0349447166937975, - 9: 1.1853269591129698, - "Hostel 09 Nawaabon Ki Basti": 3.60568994784632, - }, - "Hostel 09 Nawaabon Ki Basti": {8: 3.60568994784632}, - 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, - 10: {9: 3.6706947571270483, 11: 4.669047011971501}, - 11: {10: 4.669047011971501, "Hostel 18": 4.075904807524337}, - "Hostel 18": {11: 4.075904807524337}, - 12: {9: 2.8271894170713074, 13: 3.784309712483903, "Hostel 17": 2.44826469157238}, - "Hostel 17": {12: 2.44826469157238}, - 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, - 14: { - 13: 1.760113632695344, - 15: 5.70350769263968, - "Chaayos Cafe": 1.2074767078498865, - }, - "Chaayos Cafe": {14: 1.2074767078498865}, - 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, - 16: {15: 2.7727242920997393, "Hostel 05 Penthouse": 4.306855001041944}, - "Hostel 05 Penthouse": {16: 4.306855001041944}, - 17: { - 15: 3.560056179332006, - 18: 2.6700187265260893, - "Tansa House King of campus (Proj. Staff Boys)": 3.3800887562311144, - "ATM - State Bank near Tansa": 3.0522123124055445, - }, - "ATM - State Bank near Tansa": {17: 3.0522123124055445}, - "Tansa House King of campus (Proj. Staff Boys)": {17: 3.3800887562311144}, - 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, - 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, - 20: { - 21: 6.359323863430766, - 19: 2.0719555979798407, - "Outdoor Sports Facility": 1.230447073221762, - "Hostel 03 Vitruvians": 3.9824615503479754, - }, - "Outdoor Sports Facility": {20: 1.230447073221762}, - "Hostel 03 Vitruvians": {20: 3.9824615503479754}, - 21: { - 20: 6.359323863430766, - 22: 3.0242354405700627, - "Hostel 02 The Wild Ones": 5.008991914547277, - "Indoor Stadium": 1.5839823231336896, - "Badminton Court": 1.5839823231336896, - }, - "Badminton Court": {21: 1.5839823231336896}, - "Hostel 02 The Wild Ones": {21: 5.008991914547277}, - "Indoor Stadium": {21: 1.5839823231336896}, - 22: { - 21: 3.0242354405700627, - "Swimming Pool (new)": 2.3119256043393785, - 23: 2.316246964380094, - }, - "Swimming Pool (new)": {22: 2.3119256043393785}, - 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, - 24: { - 23: 3.5383612025908264, - "Students Activity Centre": 1.9039432764659772, - "New Yoga Room, SAC": 1.9039432764659772, - "Open Air Theatre": 1.9039432764659772, - "Film Room, SAC": 1.9039432764659772, - }, - "Film Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, - "Open Air Theatre": {24: 1.9039432764659772, 26: 2.760615873315228}, - "New Yoga Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, - "Students Activity Centre": {24: 1.9039432764659772, 26: 2.760615873315228}, - 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, - 26: { - 25: 3.8268786236304906, - "Students Activity Centre": 2.760615873315228, - "New Yoga Room, SAC": 2.760615873315228, - "Open Air Theatre": 2.760615873315228, - "Film Room, SAC": 2.760615873315228, - }, - 27: { - 25: 2.545780823244609, - 28: 2.7741665415039525, - "Hostel 01 Queen of the campus": 2.198635940759634, - "Aromas Canteen": 1.6337074401495515, - }, - "Hostel 01 Queen of the campus": { - 27: 2.198635940759634, - "Aromas Canteen": 3.7380476187443095, - }, - 28: { - 27: 2.7741665415039525, - "Domino's outlet": 2.0084820138602186, - 29: 1.6161683080669538, - "Aromas Canteen": 2.9740544715926105, - }, - "Domino's outlet": { - 28: 2.0084820138602186, - 34: 1.4453373308677804, - "Aromas Canteen": 1.4286357128393508, - }, - 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, - 30: { - 29: 5.685156110433556, - 31: 3.1395859599635108, - "Defence Research & Development Organization": 2.1505813167606567, - }, - "Defence Research & Development Organization": {30: 2.1505813167606567}, - 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, - 32: { - 31: 4.044007912949726, - "Hostel 15 Trident": 6.024699162613849, - 33: 5.330009380854784, - "Hostel 15 Mess": 5.773820225812369, - }, - "Hostel 15 Mess": {32: 5.773820225812369}, - "Hostel 15 Trident": {32: 6.024699162613849}, - 33: { - 32: 5.330009380854784, - "Hostel 16 Olympus": 4.440833255144804, - "Hostel 16 Mess": 4.440833255144804, - }, - "Hostel 16 Mess": {33: 4.440833255144804}, - "Hostel 16 Olympus": {33: 4.440833255144804}, - 34: { - 35: 1.7700282483621554, - 29: 3.2919599025504547, - "Domino's outlet": 1.4453373308677804, - }, - 35: { - 34: 1.7700282483621554, - 36: 2.2671568097509267, - 37: 7.046417529496815, - 214: 0.6228964600958975, - }, - 36: { - 35: 2.2671568097509267, - "State Bank of India Branch": 1.296919426949878, - 94: 4.640366364846638, - }, - "State Bank of India Branch": {36: 1.296919426949878}, - 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, - 38: { - 37: 6.155079203389668, - 39: 3.1508728949292766, - "Central Library": 1.103177229641729, - }, - "Central Library": {38: 1.103177229641729, 40: 2.7613402542968153}, - 39: { - 38: 3.1508728949292766, - 40: 3.6002777670618693, - 89: 5.330009380854784, - 90: 2.44826469157238, - }, - 40: {39: 3.6002777670618693, 41: 1.0, "Central Library": 2.7613402542968153}, - 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, - 42: { - 41: 1.1384199576606167, - 43: 2.316246964380094, - "Mathematics Department": 2.435159132377184, - "Old Software Lab": 2.435159132377184, - "Inter-disciplinary Programme in Educational Technology": 2.435159132377184, - "Centre for Formal Design and Verification of Software": 2.435159132377184, - "Centre for Distance Engineering Education Programme": 2.435159132377184, - }, - "Centre for Distance Engineering Education Programme": {42: 2.435159132377184}, - "Centre for Formal Design and Verification of Software": {42: 2.435159132377184}, - "Inter-disciplinary Programme in Educational Technology": {42: 2.435159132377184}, - "Mathematics Department": {42: 2.435159132377184}, - "Old Software Lab": {42: 2.435159132377184}, - 43: { - 42: 2.316246964380094, - 44: 2.041568024827975, - "Old Computer Science Engineering Department": 1.8439088914585775, - "New Software Lab": 1.8439088914585775, - "Centre for Technology Alternatives for Rural Areas": 1.8439088914585775, - }, - "Centre for Technology Alternatives for Rural Areas": {43: 1.8439088914585775}, - "New Software Lab": {43: 1.8439088914585775}, - "Old Computer Science Engineering Department": {43: 1.8439088914585775}, - 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, - 45: { - 44: 1.1734564329364767, - 46: 2.5930676813380713, - 47: 3.112073263919087, - "Fluid Mechanics and Fluid Power Lab": 0.623698645180507, - }, - "Fluid Mechanics and Fluid Power Lab": {45: 0.623698645180507}, - 46: { - 45: 2.5930676813380713, - 47: 1.0261578825892241, - 48: 2.0329781110479277, - "ENELEK Power Sine": 0.9486832980505138, - }, - "ENELEK Power Sine": {46: 0.9486832980505138}, - 47: {45: 3.112073263919087, 46: 1.0261578825892241}, - 48: { - 46: 2.0329781110479277, - 49: 2.167487024182613, - "Tinkerers Lab": 1.066770828247567, - "Refrigeration, A/C and Cryogenics Lab": 1.066770828247567, - "Treelabs": 1.066770828247567, - "N3 Bay": 5.318646444350292, - }, - "Treelabs": {48: 1.066770828247567}, - "Refrigeration, A/C and Cryogenics Lab": {48: 1.066770828247567}, - "Tinkerers Lab": {48: 1.066770828247567}, - 49: { - 48: 2.167487024182613, - 50: 3.382454729926182, - "Mechanical Engineering Department": 5.230774321264492, - "Industrial Engineering and Operations Research": 5.230774321264492, - }, - "Industrial Engineering and Operations Research": {49: 5.230774321264492}, - "Mechanical Engineering Department": {49: 5.230774321264492}, - 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, - 51: { - 50: 1.731184565550421, - 76: 4.826696592909068, - "Industrial Design Centre": 2.2365151463828723, - "IDC Canteen": 2.2365151463828723, - "IDC Shakti": 2.2365151463828723, - }, - "IDC Shakti": {51: 2.2365151463828723}, - "IDC Canteen": {51: 2.2365151463828723}, - "Industrial Design Centre": {51: 2.2365151463828723}, - 52: { - 50: 1.2445882853377659, - 53: 2.4226019070412703, - 76: 7.01519778766073, - 178: 9.087133761533392, - }, - 53: { - 52: 2.4226019070412703, - 54: 4.588354824989018, - "Civil Engineering Department": 4.6217961876309515, - "Victor Menezes Convention Centre": 3.063494736408078, - "Centre for Urban Science and Engineering (inside civil)": 4.6217961876309515, - "Inter-disciplinary Programme in Climate Studies": 4.6217961876309515, - }, - "Inter-disciplinary Programme in Climate Studies": {53: 4.6217961876309515}, - "Centre for Urban Science and Engineering (inside civil)": {53: 4.6217961876309515}, - "Civil Engineering Department": {53: 4.6217961876309515}, - "Victor Menezes Convention Centre": {53: 3.063494736408078}, - 54: { - 53: 4.588354824989018, - 55: 1.9677398201998149, - "Electrical Engineering Department": 4.794267410147248, - "Electrical Engineering Annexe Building": 1.0751744044572489, - }, - "Electrical Engineering Department": { - 54: 4.794267410147248, - 176: 4.331397003277349, - 56: 2.110213259365034, - }, - "Electrical Engineering Annexe Building": { - 54: 1.0751744044572489, - 56: 5.9787958653896185, - }, - 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, - 56: { - 55: 4.293483434229135, - "Girish Gaitonde Building": 2.5849564793241684, - "Electrical Engineering Department": 2.110213259365034, - "Electrical Engineering Annexe Building": 5.9787958653896185, - }, - "Girish Gaitonde Building": {175: 2.568462575160479, 56: 2.5849564793241684}, - 57: { - 174: 9.530424964291992, - 55: 2.0523157651784483, - 58: 2.1783020910791966, - "Seminar Hall": 1.8804254837669054, - "Rock Powdering Lab": 2.850438562747845, - "Rock Cutting Lab": 2.850438562747845, - }, - "Seminar Hall": {57: 1.8804254837669054}, - "Rock Cutting Lab": {57: 2.850438562747845}, - "Rock Powdering Lab": {57: 2.850438562747845}, - 58: { - 57: 2.1783020910791966, - 59: 3.9802009999496257, - "Metallurgical Engineering and Material Science Department": 5.603302597575826, - "Corrosion Science Paint Lab": 5.603302597575826, - "Corrosion Lab 1": 5.603302597575826, - "Humanities and Social Sciences Department": 4.119465984809196, - "Aerospace Engineering Annexe": 4.119465984809196, - "Inter-disciplinary Programme in Corrosion Science & Engineering": 5.603302597575826, - "Aqueous Corrosion Lab": 5.603302597575826, - }, - "Aqueous Corrosion Lab": {58: 5.603302597575826, 173: 4.494441010848846}, - "Inter-disciplinary Programme in Corrosion Science & Engineering": { - 58: 5.603302597575826, - 173: 4.494441010848846, - }, - "Metallurgical Engineering and Material Science Department": { - 58: 5.603302597575826, - 173: 4.494441010848846, - }, - "Corrosion Lab 1": {58: 5.603302597575826, 173: 4.494441010848846}, - "Corrosion Science Paint Lab": {58: 5.603302597575826, 173: 4.494441010848846}, - "Humanities and Social Sciences Department": {58: 4.119465984809196}, - "Aerospace Engineering Annexe": {58: 4.119465984809196}, - 59: { - 58: 3.9802009999496257, - 60: 3.805522303179946, - "Lecture Hall Complex - 1 & 2": 4.551263560814733, - "LT 001": 4.551263560814733, - "LT 002": 4.551263560814733, - "LT 003": 4.551263560814733, - "LT 004": 4.551263560814733, - "LT 005": 4.551263560814733, - "LT 006": 4.551263560814733, - "LT 101": 4.551263560814733, - "LT 102": 4.551263560814733, - "LT 103": 4.551263560814733, - "LT 104": 4.551263560814733, - "LT 105": 4.551263560814733, - "LT 106": 4.551263560814733, - "LT 201": 4.551263560814733, - "LT 202": 4.551263560814733, - "LT 203": 4.551263560814733, - "LT 204": 4.551263560814733, - "LT 205": 4.551263560814733, - "LT 206": 4.551263560814733, - "LT 301": 4.551263560814733, - "LT 302": 4.551263560814733, - "LT 303": 4.551263560814733, - "LT 304": 4.551263560814733, - "LT 305": 4.551263560814733, - "LT 306": 4.551263560814733, - "LC 001": 4.551263560814733, - "LC 002": 4.551263560814733, - "LC 101": 4.551263560814733, - "LC 102": 4.551263560814733, - "LC 201": 4.551263560814733, - "LC 202": 4.551263560814733, - "LC 301": 4.551263560814733, - "LC 302": 4.551263560814733, - "LH 101": 4.551263560814733, - "LH 102": 4.551263560814733, - "LH 301": 4.551263560814733, - "LH 302": 4.551263560814733, - "LA 001": 2.438237068047322, - "LA 002": 2.438237068047322, - "LA 201": 2.438237068047322, - "LA 202": 2.438237068047322, - "Lecture Hall Complex - 3": 2.438237068047322, - "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": 7.383562825628289, - "Biosciences and Bioengineering Department": 7.383562825628289, - }, - "Biosciences and Bioengineering Department": {59: 7.383562825628289}, - "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": { - 59: 7.383562825628289 - }, - "LH 302": {59: 4.551263560814733, 172: 5.116346352623129}, - "LH 301": {59: 4.551263560814733, 172: 5.116346352623129}, - "LH 102": {59: 4.551263560814733, 172: 5.116346352623129}, - "LH 101": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 302": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 301": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 202": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 201": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 102": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 101": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 002": {59: 4.551263560814733, 172: 5.116346352623129}, - "LC 001": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 001": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 306": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 305": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 304": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 303": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 302": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 301": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 206": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 205": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 204": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 203": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 202": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 201": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 106": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 105": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 104": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 103": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 102": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 101": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 006": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 005": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 004": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 003": {59: 4.551263560814733, 172: 5.116346352623129}, - "LT 002": {59: 4.551263560814733, 172: 5.116346352623129}, - "Lecture Hall Complex - 1 & 2": {59: 4.551263560814733, 172: 5.116346352623129}, - "LA 202": {59: 2.438237068047322}, - "LA 201": {59: 2.438237068047322}, - "LA 002": {59: 2.438237068047322}, - "LA 001": {59: 2.438237068047322}, - "Lecture Hall Complex - 3": {59: 2.438237068047322}, - 60: { - 59: 3.805522303179946, - 61: 2.0349447166937975, - "Physics Department": 4.780167361086848, - "Chemical Engineering Department": 5.520144925633747, - "Chemistry Department": 5.520144925633747, - }, - "Physics Department": {60: 4.780167361086848, 171: 4.7611973284038545}, - "Chemistry Department": {60: 5.520144925633747, 67: 8.937561188601732}, - "Chemical Engineering Department": {60: 5.520144925633747, 67: 8.937561188601732}, - 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, - 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, - 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, - 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, - 65: { - 64: 2.5793410011086166, - 66: 2.0523157651784483, - "DESE & CESE New Building": 3.623534186398688, - "Cafe Coffee Day": 3.761914406256474, - "Energy Science and Engineering (New Building)": 3.623534186398688, - }, - "Energy Science and Engineering (New Building)": {65: 3.623534186398688}, - "DESE & CESE New Building": {65: 3.623534186398688}, - "Cafe Coffee Day": {65: 3.761914406256474}, - 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, - 67: { - 66: 2.041568024827975, - 68: 7.799102512468983, - "Chemical Engineering Department": 8.937561188601732, - "Chemistry Department": 8.937561188601732, - }, - 68: { - 67: 7.799102512468983, - 69: 4.456007181322759, - "Aerospace Engineering Department": 1.5646085772486358, - "Centre for Aerospace Systems Design and Engineering": 1.5646085772486358, - }, - "Centre for Aerospace Systems Design and Engineering": {68: 1.5646085772486358}, - "Aerospace Engineering Department": {68: 1.5646085772486358}, - 69: { - 68: 4.456007181322759, - "ONGC Research Centre": 1.580506248010428, - 71: 2.44826469157238, - }, - "ONGC Research Centre": {69: 1.580506248010428}, - 70: { - 66: 12.877926851787908, - 71: 1.4453373308677804, - "Proposed Building for Tata Centre for Technology": 3.2534596969994882, - "Proposed NCAIR": 3.2534596969994882, - "Proposed Bio Mechanical Department": 3.2534596969994882, - "Proposed D.S Foundation": 3.2534596969994882, - "Proposed Press ": 3.2534596969994882, - }, - "Proposed Press ": {70: 3.2534596969994882}, - "Proposed D.S Foundation": {70: 3.2534596969994882}, - "Proposed Bio Mechanical Department": {70: 3.2534596969994882}, - "Proposed NCAIR": {70: 3.2534596969994882}, - "Proposed Building for Tata Centre for Technology": {70: 3.2534596969994882}, - 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, - 72: { - 71: 4.655534340975265, - 73: 1.7700282483621554, - "Energy Science and Engineering": 1.6772000476985445, - }, - "Energy Science and Engineering": {72: 1.6772000476985445}, - 73: { - 72: 1.7700282483621554, - 74: 0.9, - "Earth Science Department": 4.228001892147164, - }, - "Earth Science Department": {73: 4.228001892147164}, - 74: { - 73: 0.9, - 75: 2.980771712157776, - "Centre of Studies in Resources Engineering": 2.1095023109728985, - "Society for Innovation and Entrepreneurship": 2.1095023109728985, - }, - "Society for Innovation and Entrepreneurship": {74: 2.1095023109728985}, - "Centre of Studies in Resources Engineering": {74: 2.1095023109728985}, - 75: { - 74: 2.980771712157776, - 76: 3.27566787083184, - "Centre for Environmental Science and Engineering": 3.992117232747556, - }, - "Centre for Environmental Science and Engineering": {75: 3.992117232747556}, - 76: { - 75: 3.27566787083184, - 51: 4.826696592909068, - 52: 7.01519778766073, - 77: 2.198635940759634, - "Non- Academic Staff Association": 2.0523157651784483, - "Printing Press": 2.0523157651784483, - }, - "Printing Press": {76: 2.0523157651784483}, - "Non- Academic Staff Association": {76: 2.0523157651784483}, - 77: { - 76: 2.198635940759634, - 78: 4.901632381156302, - "Structural integrity Testing and Analysis Centre": 2.166333307688362, - "S3 Bay": 2.76278844647939, - }, - "S3 Bay": {77: 2.76278844647939}, - "Structural integrity Testing and Analysis Centre": { - 77: 2.166333307688362, - 82: 6.654697588921679, - }, - 78: { - 77: 4.901632381156302, - 79: 4.401136216933078, - "Electrical Maintenence": 2.4331050121192876, - "Machine Tool Lab": 3.7105255692421797, - }, - "Machine Tool Lab": {79: 4.65123639476645, 78: 3.7105255692421797}, - "Electrical Maintenence": {78: 2.4331050121192876}, - 79: { - 78: 4.401136216933078, - 80: 3.430014577228499, - "Machine Tool Lab": 4.65123639476645, - "OrthoCad Lab": 2.9313819266687173, - "Micro Fluidics Lab": 2.5045957757690163, - "RM Lab (Rapid manufacturing)": 3.0220853727186467, - "S1 Bay": 2.2614154859291116, - "N1 Bay": 2.012212712413874, - "Supercritical fluid Processing facility (Chemical Engg.)": 2.2614154859291116, - "S2 Bay": 4.65123639476645, - "UG Lab / S2 Bay": 4.65123639476645, - "Fuel Cell Research Facility": 2.012212712413874, - }, - "Fuel Cell Research Facility": { - 79: 2.012212712413874, - 80: 3.161012496020856, - 82: 2.2147234590350102, - }, - "UG Lab / S2 Bay": {79: 4.65123639476645}, - "S2 Bay": {79: 4.65123639476645}, - "Supercritical fluid Processing facility (Chemical Engg.)": { - 79: 2.2614154859291116 - }, - "N1 Bay": {79: 2.012212712413874}, - "S1 Bay": {79: 2.2614154859291116}, - "RM Lab (Rapid manufacturing)": {79: 3.0220853727186467}, - "OrthoCad Lab": {79: 2.9313819266687173}, - "Micro Fluidics Lab": {79: 2.5045957757690163}, - 80: { - 79: 3.430014577228499, - 81: 2.3910248848558644, - 82: 3.5300141642775316, - "Fuel Cell Research Facility": 3.161012496020856, - }, - 81: { - 185: 2.7727242920997393, - 80: 2.3910248848558644, - "Physics Lab (Ist Years)": 1.1353413583587977, - "UG Lab (1st years)": 1.1353413583587977, - "Power House": 2.5117722826721374, - }, - "UG Lab (1st years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, - "Physics Lab (Ist Years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, - "Power House": {81: 2.5117722826721374}, - 82: { - 80: 3.5300141642775316, - 83: 3.4311805548528045, - "UG Lab (1st years)": 3.1976553910638965, - "Physics Lab (Ist Years)": 3.1976553910638965, - "Structural integrity Testing and Analysis Centre": 6.654697588921679, - "Fuel Cell Research Facility": 2.2147234590350102, - }, - 83: { - 82: 3.4311805548528045, - 84: 1.822361105818493, - "SMAmL Suman Mashruwala Advanced Microengineering Lab": 1.0530906893520615, - "Thermal Hydraulic Test Facility": 2.54911749434976, - "N2 Bay": 2.70129598526337, - "N3 Bay": 2.195449840010015, - }, - "N3 Bay": {48: 5.318646444350292, 83: 2.195449840010015}, - "N2 Bay": {83: 2.70129598526337}, - "SMAmL Suman Mashruwala Advanced Microengineering Lab": {83: 1.0530906893520615}, - "Thermal Hydraulic Test Facility": {83: 2.54911749434976}, - 84: { - 83: 1.822361105818493, - 85: 4.349022878762539, - "Cummins Engine Research facility": 0.806225774829855, - "Heat Transfer and Thermodynamic Lab": 0.9433981132056604, - "Steam Power Lab": 1.0890362712049586, - "IC Engine and Combustion Lab": 2.1272047386182646, - }, - "IC Engine and Combustion Lab": {84: 2.1272047386182646, 85: 2.606338427756457}, - "Steam Power Lab": {84: 1.0890362712049586}, - "Cummins Engine Research facility": {84: 0.806225774829855}, - "Heat Transfer and Thermodynamic Lab": {84: 0.9433981132056604}, - 85: { - 84: 4.349022878762539, - 88: 2.5930676813380713, - 86: 3.430014577228499, - "Metal Forming Lab": 2.558906016249913, - "Old ONGC Lab": 1.8160396471443017, - "Structural Evaluation & Material Technologies Lab": 1.6876018487783189, - "Heavy Structure Lab": 3.3366150512158277, - "Hydraulics Lab": 1.0922453936730518, - "Concrete Technology Lab": 3.3366150512158277, - "IC Engine and Combustion Lab": 2.606338427756457, - }, - "Concrete Technology Lab": {85: 3.3366150512158277}, - "Hydraulics Lab": {85: 1.0922453936730518, 88: 2.1644860821913365}, - "Heavy Structure Lab": {85: 3.3366150512158277}, - "Structural Evaluation & Material Technologies Lab": {85: 1.6876018487783189}, - "Old ONGC Lab": {85: 1.8160396471443017}, - 86: { - 85: 3.430014577228499, - 87: 2.2452171387195494, - "Geotechnical Engg. Lab": 0.4049691346263318, - "Metal Forming Lab": 1.1700427342623003, - }, - "Metal Forming Lab": {86: 1.1700427342623003, 85: 2.558906016249913}, - "Geotechnical Engg. Lab": {86: 0.4049691346263318}, - 87: { - 86: 2.2452171387195494, - "National Geotechnical Centrifuge Facility": 1.2349089035228469, - "Vihar House": 6.230971031869752, - "GMFL Lab / Geophysical and multiphase Flows Lab": 5.591511423577708, - }, - "GMFL Lab / Geophysical and multiphase Flows Lab": {87: 5.591511423577708}, - "Vihar House": {87: 6.230971031869752}, - "National Geotechnical Centrifuge Facility": {87: 1.2349089035228469}, - 88: { - 85: 2.5930676813380713, - "Solar Lab": 3.3889526405661083, - 89: 1.731184565550421, - "Heat Pump Lab": 1.118033988749895, - "Hydraulics Lab Workshop": 1.9849433241279208, - "Hydraulics Lab": 2.1644860821913365, - "Hydraulics Lab (New)": 1.372953021774598, - }, - "Hydraulics Lab (New)": {88: 1.372953021774598, 89: 1.0751744044572489}, - "Hydraulics Lab Workshop": {88: 1.9849433241279208}, - "Solar Lab": {88: 3.3889526405661083}, - "Heat Pump Lab": {88: 1.118033988749895}, - 89: { - 44: 4.000499968753906, - 88: 1.731184565550421, - 39: 5.330009380854784, - "Hydraulics Lab (New)": 1.0751744044572489, - }, - 90: { - 91: 2.8017851452243803, - 39: 2.44826469157238, - "Inter-disciplinary Programme in Systems and Control Engineering": 1.4310835055998654, - }, - "Inter-disciplinary Programme in Systems and Control Engineering": { - 90: 1.4310835055998654 - }, - 91: { - 90: 2.8017851452243803, - 92: 1.880957203128237, - "NanoTech. & Science Research Centre": 1.9227584351654787, - "Advanced Centre for Research in Electronics": 1.9227584351654787, - "Sophisticated Analytical Instruments Facility": 1.9227584351654787, - }, - "Sophisticated Analytical Instruments Facility": {91: 1.9227584351654787}, - "Advanced Centre for Research in Electronics": {91: 1.9227584351654787}, - "NanoTech. & Science Research Centre": {91: 1.9227584351654787}, - 92: { - 91: 1.880957203128237, - 93: 3.0242354405700627, - 211: 1.2445882853377659, - 213: 3.1395859599635108, - 212: 1.0089598604503551, - }, - 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, - 94: { - 93: 1.7076299364909249, - 213: 1.731184565550421, - 214: 1.7700282483621554, - 36: 4.640366364846638, - }, - 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, - 96: { - 95: 2.44826469157238, - "NCC Office": 4.343500892137586, - 97: 4.59847800908083, - "Squash Court": 4.775143976886979, - }, - "Squash Court": {96: 4.775143976886979, 97: 3.006659275674582}, - "NCC Office": {96: 4.343500892137586}, - 97: { - 96: 4.59847800908083, - 98: 3.382454729926182, - "Staff Hostel": 9.135972854600654, - "Squash Court": 3.006659275674582, - }, - "Staff Hostel": {97: 9.135972854600654}, - 98: { - 97: 3.382454729926182, - 99: 1.7700282483621554, - 101: 2.623928352680385, - "Hostel 11 Athena (Girls Hostel)": 2.9698484809834995, - "Printing and photocopying H11": 2.9698484809834995, - }, - "Printing and photocopying H11": {98: 2.9698484809834995}, - "Hostel 11 Athena (Girls Hostel)": {98: 2.9698484809834995}, - 99: { - 98: 1.7700282483621554, - 100: 2.6414011433328337, - "Basketball Court": 1.5063200191194432, - }, - "Basketball Court": {99: 1.5063200191194432}, - 100: { - 99: 2.6414011433328337, - "Hockey Ground": 4.741307836451879, - "Gymkhana Grounds": 3.1465854509293085, - }, - "Hockey Ground": {100: 4.741307836451879}, - "Gymkhana Grounds": {100: 3.1465854509293085}, - 101: { - 98: 2.623928352680385, - 102: 5.378196723809943, - "Gymkhana Building": 1.9300259065618783, - "Brewberrys Cafe": 1.296919426949878, - }, - "Gymkhana Building": {101: 1.9300259065618783}, - "Brewberrys Cafe": {101: 1.296919426949878}, - 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, - 103: {102: 7.319357895334809, 104: 1.9677398201998149}, - 104: {103: 1.9677398201998149, 105: 1.731184565550421}, - 105: {104: 1.731184565550421, 106: 7.202221879392497}, - 106: {105: 7.202221879392497, 107: 1.6949926253526888}, - 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, - 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, - 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, - 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, - 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, - 112: {111: 3.560056179332006, 113: 3.383637096380166}, - 113: {112: 3.383637096380166, 114: 6.538654295801239}, - 114: {113: 6.538654295801239, "Boat House": 4.870523585817033}, - "Boat House": {114: 4.870523585817033}, - 115: {111: 1.2445882853377659, 116: 2.041568024827975}, - 116: {115: 2.041568024827975, 117: 1.4230249470757708}, - 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, - 118: {117: 1.1734564329364767, 119: 4.653815638806505}, - 119: {118: 4.653815638806505, 120: 1.0}, - 120: {119: 1.0, 121: 1.1734564329364767}, - 121: { - 120: 1.1734564329364767, - 122: 1.0261578825892241, - "National Centre for Mathematics": 1.4710540438746633, - }, - 122: { - 121: 1.0261578825892241, - 123: 16.343959128681153, - "Guest House/Padmavihar": 2.3214219780126144, - }, - "Guest House/Padmavihar": {122: 2.3214219780126144}, - "National Centre for Mathematics": {121: 1.4710540438746633}, - 123: { - 122: 16.343959128681153, - 124: 1.7700282483621554, - 138: 4.518517455980446, - "Type B-14": 2.6879360111431225, - "Guest House / Jalvihar": 6.20354737227016, - }, - "Guest House / Jalvihar": {123: 6.20354737227016}, - "Type B-14": {123: 2.6879360111431225}, - 124: {123: 1.7700282483621554, 125: 4.470011185668332}, - 125: {124: 4.470011185668332, 126: 4.518517455980446}, - 126: { - 125: 4.518517455980446, - 127: 15.53270742658858, - 135: 5.397962578603153, - "Type B-13": 3.575611835756225, - }, - "Type B-13": {126: 3.575611835756225}, - 127: { - 126: 15.53270742658858, - 128: 5.692538976590323, - "Proposed TypeA Building": 4.570557952810575, - }, - "Proposed TypeA Building": {127: 4.570557952810575}, - 128: {127: 5.692538976590323, 129: 3.6808966298987533}, - 129: { - 128: 3.6808966298987533, - 130: 7.935048834128244, - 193: 5.733149221850065, - "B 19 Old Multistoried Building- Residence ": 4.692973471052229, - }, - "B 19 Old Multistoried Building- Residence ": {129: 4.692973471052229}, - 130: { - 129: 7.935048834128244, - 131: 1.4042791745233567, - "White House": 5.517698795693726, - }, - "White House": {130: 5.517698795693726}, - 131: {130: 1.4042791745233567, 132: 4.224807687930896, "CTR 20": 2.000249984376953}, - "CTR 20": {131: 2.000249984376953}, - 132: { - 131: 4.224807687930896, - 133: 9.713753136661442, - "CTR 19": 2.040833163195855, - "Bungalow A10 ": 4.08166632639171, - }, - "Bungalow A10 ": {132: 4.08166632639171, 133: 6.646878966853541}, - "CTR 19": {132: 2.040833163195855}, - 133: { - 132: 9.713753136661442, - 134: 1.4916433890176297, - "Bungalow A11 ": 3.508275929855005, - "Bungalow A10 ": 6.646878966853541, - "Bungalow A8 ": 6.26258732474047, - }, - "Bungalow A8 ": {133: 6.26258732474047, 153: 10.713589501189599}, - 134: { - 133: 1.4916433890176297, - 135: 11.502738804302219, - 153: 7.340844638050855, - "Shishu Vihar": 4.2901048938225275, - "Bungalow A5 ": 4.350287346831241, - "Bungalow A11 ": 3.645408070436011, - }, - "Bungalow A11 ": {133: 3.508275929855005, 134: 3.645408070436011}, - "Bungalow A5 ": {134: 4.350287346831241, 153: 3.634969050762331}, - "Shishu Vihar": {134: 4.2901048938225275, 153: 3.6206353033687333}, - 135: { - 134: 11.502738804302219, - 136: 9.79025025216414, - 126: 5.397962578603153, - "A1 Director Bungalow": 7.410802925459562, - }, - "A1 Director Bungalow": { - 135: 7.410802925459562, - 136: 3.7890632087628204, - 155: 5.3615296324836255, - 154: 5.123377792043057, - }, - 136: { - 135: 9.79025025216414, - 137: 2.316246964380094, - 155: 5.403794962801605, - "Type B-1": 2.2908513701242166, - "Bungalow A13 ": 2.27771815640127, - "A1 Director Bungalow": 3.7890632087628204, - }, - "Bungalow A13 ": {136: 2.27771815640127}, - "Type B-1": {136: 2.2908513701242166}, - 137: {136: 2.316246964380094, 138: 1.2727922061357855}, - 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, - 139: {138: 6.175597137119616, 140: 1.6760071598892412}, - 140: {139: 1.6760071598892412, 141: 4.82265487050442}, - 141: { - 140: 4.82265487050442, - 142: 6.957082721946032, - 157: 3.2919599025504547, - "Guest House/Vanvihar": 3.216364407215078, - }, - "Guest House/Vanvihar": {141: 3.216364407215078}, - 142: { - 141: 6.957082721946032, - 143: 3.9802009999496257, - 162: 3.6585516259853432, - "Gulmohar Garden Cafetaria": 2.3759208741033446, - "Staff Club": 3.9654760117796704, - }, - "Staff Club": {142: 3.9654760117796704}, - 143: { - 142: 3.9802009999496257, - 144: 5.771828133269389, - "Hospital": 4.228001892147164, - }, - "Hospital": {143: 4.228001892147164}, - 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, - 145: {144: 0.8538149682454624, 146: 1.420211251891774}, - 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, - 147: { - 146: 5.530461101933545, - 148: 2.041568024827975, - "Kshitij Udyan": 4.846648326421054, - }, - "Kshitij Udyan": {147: 4.846648326421054}, - 148: {147: 2.041568024827975, 149: 2.263183598385248}, - 149: { - 148: 2.263183598385248, - 150: 2.6700187265260893, - "Tennis Court (new)": 7.513321502504734, - }, - "Tennis Court (new)": {149: 7.513321502504734}, - 150: {149: 2.6700187265260893, 151: 2.041568024827975}, - 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, - 152: { - 151: 1.4512063946937388, - 168: 2.167487024182613, - 146: 3.382454729926182, - "Convocation Hall": 3.4539832078341086, - "Institute Music Room": 3.4539832078341086, - }, - "Institute Music Room": {152: 3.4539832078341086}, - "Convocation Hall": {152: 3.4539832078341086}, - 153: { - 134: 7.340844638050855, - 154: 8.926925562588723, - "Main Gate no. 2": 11.7957619508025, - "Shishu Vihar": 3.6206353033687333, - "Bungalow A5 ": 3.634969050762331, - "ATM - State Bank Main Gate": 13.127261709892128, - "Bungalow A8 ": 10.713589501189599, - }, - "ATM - State Bank Main Gate": {153: 13.127261709892128}, - "Main Gate no. 2": {153: 11.7957619508025}, - 154: { - 153: 8.926925562588723, - 155: 8.968890678339212, - "A1 Director Bungalow": 5.123377792043057, - }, - 155: { - 136: 5.403794962801605, - 154: 8.968890678339212, - 156: 6.980329505116503, - "Hostel 10 Annexe (Girls Hostel)": 4.018084120572888, - "A1 Director Bungalow": 5.3615296324836255, - }, - "Hostel 10 Annexe (Girls Hostel)": {155: 4.018084120572888}, - 156: { - 155: 6.980329505116503, - 157: 2.39269722280108, - "Hostel 10 Phoenix (Girls Hostel)": 2.5909457732650445, - }, - "Hostel 10 Phoenix (Girls Hostel)": {156: 2.5909457732650445}, - 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, - 158: { - 157: 1.587765725792064, - 162: 6.006163500938015, - 159: 12.385031287808683, - "Gulmohar Building": 2.4135036772294343, - "Gulmohar Garden Cafetaria": 3.0909545451203257, - "ATM - Canara Bank near Gulmohar": 2.4135036772294343, - "Gulmohar Restaurant": 2.4135036772294343, - }, - "Gulmohar Restaurant": {158: 2.4135036772294343}, - "ATM - Canara Bank near Gulmohar": {158: 2.4135036772294343}, - "Gulmohar Garden Cafetaria": { - 162: 3.9115214431215892, - 142: 2.3759208741033446, - 158: 3.0909545451203257, - }, - "Gulmohar Building": {158: 2.4135036772294343}, - 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, - 160: { - 159: 1.981161275615895, - 161: 2.279034883453959, - 63: 6.325345840347388, - 253: 12.683256679575637, - }, - 161: {160: 2.279034883453959, 61: 2.545780823244609}, - 162: { - 142: 3.6585516259853432, - 158: 6.006163500938015, - 163: 3.784309712483903, - "Gulmohar Garden Cafetaria": 3.9115214431215892, - }, - 163: { - 162: 3.784309712483903, - 164: 2.4041630560342617, - "Faqir Chand Kohli Auditorium": 3.5701540583005658, - "Kanwal Rekhi School of Information Technology": 3.5701540583005658, - "KReSIT Canteen": 3.5701540583005658, - }, - "KReSIT Canteen": {163: 3.5701540583005658, 172: 3.544573317058063}, - "Kanwal Rekhi School of Information Technology": { - 163: 3.5701540583005658, - 172: 3.544573317058063, - }, - "Faqir Chand Kohli Auditorium": {163: 3.5701540583005658, 172: 3.544573317058063}, - "Computer Centre": {164: 3.842004685057008, 173: 2.6819768828235637}, - 164: { - 163: 2.4041630560342617, - 165: 2.7951744131627994, - "Computer Centre": 3.842004685057008, - }, - 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, - 166: { - 165: 1.2445882853377659, - 167: 1.8, - 144: 3.4896991274320484, - "School of Management": 3.890115679513914, - "Industrial Research & Consultancy Centre": 3.890115679513914, - }, - "Industrial Research & Consultancy Centre": { - 175: 3.2893768406797053, - 166: 3.890115679513914, - }, - "School of Management": {175: 3.2893768406797053, 166: 3.890115679513914}, - 167: {166: 1.8, 168: 4.013103537164223, "Chaayos Near SOM": 121.87791022166404}, - 168: { - 167: 4.013103537164223, - 152: 2.167487024182613, - 169: 1.981161275615895, - 170: 2.828780656042458, - "Chaayos Near SOM": 120.84622459969529, - }, - "Chaayos Near SOM": {167: 121.87791022166404, 168: 120.84622459969529}, - 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, - 170: { - 168: 2.828780656042458, - "Main Building": 3.782591704109763, - "Joint Admission Test for M.Sc. Office": 3.782591704109763, - "Printing and photocopying Main Building": 3.782591704109763, - "Hostel Coordinating Unit": 3.782591704109763, - }, - "Hostel Coordinating Unit": {170: 3.782591704109763, 179: 1.6155494421403511}, - "Printing and photocopying Main Building": { - 170: 3.782591704109763, - 179: 1.6155494421403511, - }, - "Joint Admission Test for M.Sc. Office": { - 170: 3.782591704109763, - 179: 1.6155494421403511, - }, - "Main Building": {170: 3.782591704109763, 179: 1.6155494421403511}, - 171: { - 172: 4.000499968753906, - 159: 4.527471700629392, - "Physics Department": 4.7611973284038545, - }, - 172: { - 171: 4.000499968753906, - 173: 4.000499968753906, - "Kanwal Rekhi School of Information Technology": 3.544573317058063, - "KReSIT Canteen": 3.544573317058063, - "Faqir Chand Kohli Auditorium": 3.544573317058063, - "Lecture Hall Complex - 1 & 2": 5.116346352623129, - "LT 001": 5.116346352623129, - "LT 002": 5.116346352623129, - "LT 003": 5.116346352623129, - "LT 004": 5.116346352623129, - "LT 005": 5.116346352623129, - "LT 006": 5.116346352623129, - "LT 101": 5.116346352623129, - "LT 102": 5.116346352623129, - "LT 103": 5.116346352623129, - "LT 104": 5.116346352623129, - "LT 105": 5.116346352623129, - "LT 106": 5.116346352623129, - "LT 201": 5.116346352623129, - "LT 202": 5.116346352623129, - "LT 203": 5.116346352623129, - "LT 204": 5.116346352623129, - "LT 205": 5.116346352623129, - "LT 206": 5.116346352623129, - "LT 301": 5.116346352623129, - "LT 302": 5.116346352623129, - "LT 303": 5.116346352623129, - "LT 304": 5.116346352623129, - "LT 305": 5.116346352623129, - "LT 306": 5.116346352623129, - "LC 001": 5.116346352623129, - "LC 002": 5.116346352623129, - "LC 101": 5.116346352623129, - "LC 102": 5.116346352623129, - "LC 201": 5.116346352623129, - "LC 202": 5.116346352623129, - "LC 301": 5.116346352623129, - "LC 302": 5.116346352623129, - "LH 101": 5.116346352623129, - "LH 102": 5.116346352623129, - "LH 301": 5.116346352623129, - "LH 302": 5.116346352623129, - }, - 173: { - 172: 4.000499968753906, - 174: 2.980771712157776, - "Computer Centre": 2.6819768828235637, - "Metallurgical Engineering and Material Science Department": 4.494441010848846, - "Corrosion Science Paint Lab": 4.494441010848846, - "Corrosion Lab 1": 4.494441010848846, - "Inter-disciplinary Programme in Corrosion Science & Engineering": 4.494441010848846, - "Aqueous Corrosion Lab": 4.494441010848846, - }, - 174: { - 173: 2.980771712157776, - 175: 1.6099689437998486, - 165: 6.240032051199737, - 57: 9.530424964291992, - }, - 175: { - 174: 1.6099689437998486, - 176: 2.980771712157776, - "Girish Gaitonde Building": 2.568462575160479, - "School of Management": 3.2893768406797053, - "Industrial Research & Consultancy Centre": 3.2893768406797053, - }, - 176: { - 175: 2.980771712157776, - 177: 2.2228360263411244, - "Electrical Engineering Department": 4.331397003277349, - "Cafe 92": 1.587765725792064, - }, - "Cafe 92": {176: 1.587765725792064}, - 177: { - 176: 2.2228360263411244, - 178: 3.9760533195620003, - "PC Saxena Auditorium / Lecture Theatre": 1.91049731745428, - }, - "PC Saxena Auditorium / Lecture Theatre": {177: 1.91049731745428}, - 178: { - 179: 3.93459019467085, - 177: 3.9760533195620003, - 52: 9.087133761533392, - 180: 3.430014577228499, - }, - 179: { - 178: 3.93459019467085, - "Main Building": 1.6155494421403511, - "Joint Admission Test for M.Sc. Office": 1.6155494421403511, - "Printing and photocopying Main Building": 1.6155494421403511, - "Hostel Coordinating Unit": 1.6155494421403511, - }, - 180: {41: 2.2768399153212333, 178: 3.430014577228499}, - 181: { - 64: 5.060632371551998, - 182: 2.0523157651784483, - "Kendriya Vidyalaya ": 1.6376812876747417, - }, - "Kendriya Vidyalaya ": {181: 1.6376812876747417}, - 182: { - 181: 2.0523157651784483, - 183: 3.034633421024688, - "Medical Store": 3.3712015662075148, - "Uphar": 5.015974481593781, - }, - "Medical Store": {182: 3.3712015662075148}, - "Uphar": {182: 5.015974481593781}, - 183: { - 184: 2.4226019070412703, - 182: 3.034633421024688, - "Post Office": 2.3345235059857505, - }, - "Post Office": {183: 2.3345235059857505}, - 184: { - 183: 2.4226019070412703, - "Market Gate, Y point Gate no. 3": 1.91049731745428, - 249: 5.692538976590323, - }, - "Market Gate, Y point Gate no. 3": {184: 1.91049731745428}, - 185: { - 81: 2.7727242920997393, - 186: 6.006163500938015, - "Hostel 10A QIP (Girls Hostel)": 2.818865019826242, - }, - "Hostel 10A QIP (Girls Hostel)": {185: 2.818865019826242}, - 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, - 187: { - 186: 4.000499968753906, - 226: 0.8700574693662483, - 225: 0.6363961030678927, - "QIP 2": 1.793599732381782, - }, - "QIP 2": {225: 1.329661611087573, 187: 1.793599732381782}, - 188: { - 189: 6.175597137119616, - "K-Yantra Lab (CSE Dept.)": 2.2487774456357394, - 231: 0.28460498941515416, - 228: 2.4226019070412703, - }, - "K-Yantra Lab (CSE Dept.)": {231: 2.5079872407968904, 188: 2.2487774456357394}, - 189: { - 188: 6.175597137119616, - 190: 1.4512063946937388, - 232: 4.224807687930896, - "Tulsi B": 1.528397853963424, - "B 22 Ananta": 4.420407221060069, - }, - "B 22 Ananta": {189: 4.420407221060069}, - "Tulsi B": {189: 1.528397853963424}, - 190: { - 189: 1.4512063946937388, - 191: 1.7, - "Tulsi A": 1.188696765369537, - "Sameer Hill": 12.108055170009756, - }, - "Sameer Hill": {190: 12.108055170009756}, - "Tulsi A": {190: 1.188696765369537}, - 191: { - 190: 1.7, - 192: 5.426232578870906, - "B 23 Aravali": 2.5394881374009213, - "Society for Applied Microwave Electronics Engineering & Research": 3.6173194495371845, - }, - "Society for Applied Microwave Electronics Engineering & Research": { - 191: 3.6173194495371845 - }, - "B 23 Aravali": {234: 4.870831551183022, 191: 2.5394881374009213}, - 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, - 193: {129: 5.733149221850065, 194: 5.656854249492381}, - 194: {193: 5.656854249492381, 195: 2.5298221281347035}, - 195: {194: 2.5298221281347035, 196: 6.694475334184151}, - 196: { - 195: 6.694475334184151, - 197: 5.796723212298479, - "Lake Side Gate no. 1": 7.727483419587518, - }, - "Lake Side Gate no. 1": {196: 7.727483419587518}, - 197: {196: 5.796723212298479, 198: 3.560056179332006}, - 198: {197: 3.560056179332006, 199: 2.4316660954991334}, - 199: {198: 2.4316660954991334, 200: 14.840080862313386}, - 200: {199: 14.840080862313386, "Padmavati Devi Temple": 14.451089924292909}, - "Padmavati Devi Temple": {200: 14.451089924292909}, - 201: { - "QIP 1": 1.5924823389915506, - 202: 3.0242354405700627, - 225: 3.382454729926182, - 204: 7.045565981523415, - 203: 5.600892785976178, - 186: 0.0, - }, - "QIP 1": {201: 1.5924823389915506}, - 202: { - 215: 1.8027756377319946, - 203: 2.5930676813380713, - 204: 4.044007912949726, - "Type1 - 6": 1.408900280360537, - 201: 3.0242354405700627, - }, - "Type1 - 6": {202: 1.408900280360537}, - 203: { - "Type1 - 7": 1.1300442469213319, - 204: 1.4512063946937388, - 239: 3.784309712483903, - 202: 2.5930676813380713, - 201: 5.600892785976178, - }, - "Type1 - 7": {204: 1.7334935823359716, 203: 1.1300442469213319}, - 204: { - "Type1 - 7": 1.7334935823359716, - 201: 7.045565981523415, - 203: 1.4512063946937388, - 202: 4.044007912949726, - 220: 3.430014577228499, - 205: 1.7700282483621554, - }, - 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, - 206: { - 224: 1.0, - 223: 2.8208154849263005, - 207: 1.981161275615895, - 205: 1.731184565550421, - }, - 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, - 208: { - 208: 0.0, - 243: 1.1627553482998907, - 209: 2.4020824298928627, - "Type 2B 23": 2.4070729112347222, - }, - "Type 2B 23": {208: 2.4070729112347222}, - 209: { - 208: 2.4020824298928627, - 235: 4.224807687930896, - 210: 2.316246964380094, - "CSRE C": 1.3118688958886098, - }, - "CSRE C": {209: 1.3118688958886098}, - 210: {209: 2.316246964380094, 211: 3.6792662311933886}, - 211: { - 210: 3.6792662311933886, - 212: 2.251443981093023, - 238: 2.9025850547399985, - 92: 1.2445882853377659, - "Bungalow A16 ": 0.9, - }, - "Bungalow A16 ": {211: 0.9}, - 212: { - 213: 2.1384573879317776, - "Bungalow A15 ": 1.0324727599312244, - 211: 2.251443981093023, - 92: 1.0089598604503551, - }, - "Bungalow A15 ": {212: 1.0324727599312244}, - 213: { - 93: 0.28460498941515416, - 92: 3.1395859599635108, - 94: 1.731184565550421, - "Bungalow A14 ": 1.0373041983911953, - 212: 2.1384573879317776, - }, - "Bungalow A14 ": {213: 1.0373041983911953}, - 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, - 215: { - 202: 1.8027756377319946, - 216: 1.587765725792064, - "Type 2B 22": 1.3601470508735443, - }, - "Type 2B 22": {215: 1.3601470508735443}, - 216: { - 215: 1.587765725792064, - 217: 1.6099689437998486, - 226: 2.828780656042458, - "Type1 - 18": 1.3103434664239755, - "Type1 - 16": 1.5524174696260025, - }, - "Type1 - 18": {216: 1.3103434664239755}, - "Type1 - 16": {216: 1.5524174696260025}, - 217: { - 216: 1.6099689437998486, - 239: 1.1428035701729322, - 218: 1.4042791745233567, - 227: 2.6700187265260893, - "Proposed Type H1 Building": 6.9112227572261045, - }, - "Proposed Type H1 Building": {226: 3.3575288531895002, 217: 6.9112227572261045}, - 218: { - 217: 1.4042791745233567, - 219: 1.1853269591129698, - "Type1 - 14": 1.0606601717798212, - "Type H1 - 12": 1.5195394038984313, - }, - "Type1 - 14": {218: 1.0606601717798212}, - "Type H1 - 12": {218: 1.5195394038984313}, - 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, - 220: { - 204: 3.430014577228499, - 239: 2.0124611797498106, - 219: 2.4226019070412703, - "Type1 - 13": 0.6363961030678927, - 222: 2.828780656042458, - }, - "Type1 - 13": {220: 0.6363961030678927}, - 221: {222: 1.6324827717314507, "Type H1 - 5": 0.4949747468305833}, - "Type H1 - 5": {221: 0.4949747468305833}, - 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, - 223: { - 224: 1.822361105818493, - 222: 0.8221921916437787, - "Type H1 - 6": 1.5703502793962882, - }, - "Type H1 - 6": {223: 1.5703502793962882}, - 224: {223: 1.822361105818493, 206: 1.0, "Type H1 - 8": 1.216963434126104}, - "Type H1 - 8": {224: 1.216963434126104}, - 225: { - 201: 3.382454729926182, - 226: 1.3914021704740869, - "QIP 2": 1.329661611087573, - 187: 0.6363961030678927, - }, - 226: { - 226: 0.0, - 216: 2.828780656042458, - 227: 2.2228360263411244, - 187: 0.8700574693662483, - "Proposed Type H1 Building": 3.3575288531895002, - }, - 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, - 228: { - 219: 3.112073263919087, - 227: 1.77792013318934, - 230: 2.316246964380094, - 229: 3.4311805548528045, - 188: 2.4226019070412703, - }, - 229: {228: 3.4311805548528045, "Vidya Niwas": 1.2041594578792296}, - "Vidya Niwas": {229: 1.2041594578792296}, - 230: { - 228: 2.316246964380094, - 231: 1.4916433890176297, - "C22, B wing, Vindya": 1.820988742414406, - }, - "C22, B wing, Vindya": {230: 1.820988742414406}, - 231: { - 230: 1.4916433890176297, - "C22, A wing, Sahyadri": 1.420211251891774, - "K-Yantra Lab (CSE Dept.)": 2.5079872407968904, - 232: 1.7977764043395386, - 188: 0.28460498941515416, - }, - "C22, A wing, Sahyadri": {231: 1.420211251891774}, - 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, - 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, - 234: { - "B 23 Aravali": 4.870831551183022, - 233: 2.6700187265260893, - 235: 2.7727242920997393, - }, - 235: {234: 2.7727242920997393, 209: 4.224807687930896}, - 236: { - 237: 2.1384573879317776, - "Bungalow A19 ": 0.970051545022222, - "CSRE D": 1.0807404868885035, - }, - "Bungalow A19 ": {236: 0.970051545022222}, - "CSRE D": {236: 1.0807404868885035}, - 237: { - 236: 2.1384573879317776, - 238: 1.8952572384771413, - "Bungalow A18 ": 0.8, - "CSRE A": 1.7418381095842403, - "CSRE B": 0.8354639429682169, - }, - "Bungalow A18 ": {237: 0.8}, - "CSRE A": {237: 1.7418381095842403}, - "CSRE B": {237: 0.8354639429682169}, - 238: { - 237: 1.8952572384771413, - 211: 2.9025850547399985, - "Bungalow A17 ": 0.806225774829855, - }, - "Bungalow A17 ": {238: 0.806225774829855}, - 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, - 240: {"Type H2 - 18": 0.9492101980067429, 205: 1.822361105818493}, - "Type H2 - 18": {240: 0.9492101980067429}, - 241: { - 242: 0.6363961030678927, - "Type H2 - 19": 0.6324555320336759, - 207: 1.822361105818493, - }, - "Type H2 - 19": {241: 0.6324555320336759}, - 242: {241: 0.6363961030678927, "Type H2 - 20": 1.5}, - "Type H2 - 20": {242: 1.5}, - 243: {"Type H2 - 21": 0.9617692030835673, 208: 1.1627553482998907}, - "Type H2 - 21": {243: 0.9617692030835673}, - 244: { - 233: 3.1508728949292766, - 232: 1.6595180023127196, - "Tulsi C": 1.5990622251807463, - }, - "Tulsi C": {244: 1.5990622251807463}, - 245: { - 246: 4.401136216933078, - "Security Check Point": 3.8860005146680052, - 255: 4.802082881417188, - }, - 246: {245: 4.401136216933078, "Paspoli Gate no. 4 ": 9.244295538330652}, - "Paspoli Gate no. 4 ": {246: 9.244295538330652}, - 247: {192: 5.9605368885696866, 248: 4.271416626834709}, - 248: {247: 4.271416626834709, "MW Quarters 1": 1.8384776310850235}, - "MW Quarters 1": {248: 1.8384776310850235}, - 249: { - 184: 5.692538976590323, - 250: 5.426232578870906, - 251: 2.2671568097509267, - "Kendriya Vidyalay Quarters 1": 1.766635219845908, - }, - "Kendriya Vidyalay Quarters 1": {249: 1.766635219845908, 251: 2.471639132235934}, - 250: { - 249: 5.426232578870906, - "Campus School": 4.745102738613781, - "Kindergarten School": 4.745102738613781, - }, - "Kindergarten School": {250: 4.745102738613781, 253: 4.33232039443068}, - "Campus School": {250: 4.745102738613781, 253: 4.33232039443068}, - 251: { - 249: 2.2671568097509267, - "Kendriya Vidyalay Quarters 1": 2.471639132235934, - 252: 4.804164859785725, - }, - 252: {251: 4.804164859785725, 253: 3.035951251255527}, - 253: { - 252: 3.035951251255527, - 254: 3.4896991274320484, - 160: 12.683256679575637, - "Campus School": 4.33232039443068, - "Type C-7": 0.34058772731852804, - "Kindergarten School": 4.33232039443068, - }, - "Type C-7": {253: 0.34058772731852804}, - 254: {253: 3.4896991274320484, "Shivalik C 23 (187-240)": 7.684009370114016}, - "Shivalik C 23 (187-240)": {254: 7.684009370114016}, - 255: { - 2: 18.03285889702462, - "Security Check Point": 1.4577379737113252, - 245: 4.802082881417188, - }, - "Aromas Canteen": { - 27: 1.6337074401495515, - 28: 2.9740544715926105, - "Hostel 01 Queen of the campus": 3.7380476187443095, - "Domino's outlet": 1.4286357128393508, - }, -} +{0: {'Hostel 12 Crown of the Campus': 2.534758371127315, 'Hostel 14 Silicon Ship': 1.827019430657485, 'H13 Night Canteen': 5.471105921109552, 'Hostel 13 House of Titans': 5.471105921109552, 'Mess for hostels 12 | 13 | 14': 1.5420765220960988, 1: 3.112073263919087, 'Amul Parlour': 1.827019430657485}, 'Amul Parlour': {0: 1.827019430657485}, 'Hostel 12 Crown of the Campus': {0: 2.534758371127315}, 'Hostel 14 Silicon Ship': {0: 1.827019430657485}, 'Hostel 13 House of Titans': {0: 5.471105921109552}, 'H13 Night Canteen': {0: 5.471105921109552}, 'Mess for hostels 12 | 13 | 14': {0: 1.5420765220960988}, 1: {0: 3.112073263919087, 2: 2.545780823244609}, 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, 'Security Check Point': {255: 1.4577379737113252, 245: 3.8860005146680052}, 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, 4: {3: 5.07119315348962, 'Hostel 06 Vikings': 2.359872877932199, 'Type1 - 22': 3.020761493398643}, 'Type1 - 22': {4: 3.020761493398643}, 'Hostel 06 Vikings': {4: 2.359872877932199}, 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, 6: {5: 2.6414011433328337, 7: 2.198635940759634, 'ATM - Canara Bank near H6': 1.3813037319865606}, 'ATM - Canara Bank near H6': {6: 1.3813037319865606}, 7: {6: 2.198635940759634, 8: 2.0349447166937975}, 8: {7: 2.0349447166937975, 9: 1.1853269591129698, 'Hostel 09 Nawaabon Ki Basti': 3.60568994784632}, 'Hostel 09 Nawaabon Ki Basti': {8: 3.60568994784632}, 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, 10: {9: 3.6706947571270483, 11: 4.669047011971501}, 11: {10: 4.669047011971501, 'Hostel 18': 4.075904807524337}, 'Hostel 18': {11: 4.075904807524337}, 12: {9: 2.8271894170713074, 13: 3.784309712483903, 'Hostel 17': 2.44826469157238}, 'Hostel 17': {12: 2.44826469157238}, 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, 14: {13: 1.760113632695344, 15: 5.70350769263968, 'Chaayos Cafe': 1.2074767078498865}, 'Chaayos Cafe': {14: 1.2074767078498865}, 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, 16: {15: 2.7727242920997393, 'Hostel 05 Penthouse': 4.306855001041944}, 'Hostel 05 Penthouse': {16: 4.306855001041944}, 17: {15: 3.560056179332006, 18: 2.6700187265260893, 'Tansa House King of campus (Proj. Staff Boys)': 3.3800887562311144, 'ATM - State Bank near Tansa': 3.0522123124055445}, 'ATM - State Bank near Tansa': {17: 3.0522123124055445}, 'Tansa House King of campus (Proj. Staff Boys)': {17: 3.3800887562311144}, 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, 20: {21: 6.359323863430766, 19: 2.0719555979798407, 'Outdoor Sports Facility': 1.230447073221762, 'Hostel 03 Vitruvians': 3.9824615503479754}, 'Outdoor Sports Facility': {20: 1.230447073221762}, 'Hostel 03 Vitruvians': {20: 3.9824615503479754}, 21: {20: 6.359323863430766, 22: 3.0242354405700627, 'Hostel 02 The Wild Ones': 5.008991914547277, 'Indoor Stadium': 1.5839823231336896, 'Badminton Court': 1.5839823231336896}, 'Badminton Court': {21: 1.5839823231336896}, 'Hostel 02 The Wild Ones': {21: 5.008991914547277}, 'Indoor Stadium': {21: 1.5839823231336896}, 22: {21: 3.0242354405700627, 'Swimming Pool (new)': 2.3119256043393785, 23: 2.316246964380094}, 'Swimming Pool (new)': {22: 2.3119256043393785}, 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, 24: {23: 3.5383612025908264, 'Students Activity Centre': 1.9039432764659772, 'New Yoga Room, SAC': 1.9039432764659772, 'Open Air Theatre': 1.9039432764659772, 'Film Room, SAC': 1.9039432764659772}, 'Film Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Open Air Theatre': {24: 1.9039432764659772, 26: 2.760615873315228}, 'New Yoga Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Students Activity Centre': {24: 1.9039432764659772, 26: 2.760615873315228}, 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, 26: {25: 3.8268786236304906, 'Students Activity Centre': 2.760615873315228, 'New Yoga Room, SAC': 2.760615873315228, 'Open Air Theatre': 2.760615873315228, 'Film Room, SAC': 2.760615873315228}, 27: {25: 2.545780823244609, 28: 2.7741665415039525, 'Hostel 01 Queen of the campus': 2.198635940759634, 'Aromas Canteen': 1.6337074401495515}, 'Hostel 01 Queen of the campus': {27: 2.198635940759634, 'Aromas Canteen': 3.7380476187443095}, 28: {27: 2.7741665415039525, "Domino's outlet": 2.0084820138602186, 29: 1.6161683080669538, 'Aromas Canteen': 2.9740544715926105}, "Domino's outlet": {28: 2.0084820138602186, 34: 1.4453373308677804, 'Aromas Canteen': 1.4286357128393508}, 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, 30: {29: 5.685156110433556, 31: 3.1395859599635108, 'Defence Research & Development Organization': 2.1505813167606567}, 'Defence Research & Development Organization': {30: 2.1505813167606567}, 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, 32: {31: 4.044007912949726, 'Hostel 15 Trident': 6.024699162613849, 33: 5.330009380854784, 'Hostel 15 Mess': 5.773820225812369}, 'Hostel 15 Mess': {32: 5.773820225812369}, 'Hostel 15 Trident': {32: 6.024699162613849}, 33: {32: 5.330009380854784, 'Hostel 16 Olympus': 4.440833255144804, 'Hostel 16 Mess': 4.440833255144804}, 'Hostel 16 Mess': {33: 4.440833255144804}, 'Hostel 16 Olympus': {33: 4.440833255144804}, 34: {35: 1.7700282483621554, 29: 3.2919599025504547, "Domino's outlet": 1.4453373308677804}, 35: {34: 1.7700282483621554, 36: 2.2671568097509267, 37: 7.046417529496815, 214: 0.6228964600958975}, 36: {35: 2.2671568097509267, 'State Bank of India Branch': 1.296919426949878, 94: 4.640366364846638}, 'State Bank of India Branch': {36: 1.296919426949878}, 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, 38: {37: 6.155079203389668, 39: 3.1508728949292766, 'Central Library': 1.103177229641729}, 'Central Library': {38: 1.103177229641729, 40: 2.7613402542968153}, 39: {38: 3.1508728949292766, 40: 3.6002777670618693, 89: 5.330009380854784, 90: 2.44826469157238}, 40: {39: 3.6002777670618693, 41: 1.0, 'Central Library': 2.7613402542968153}, 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, 42: {41: 1.1384199576606167, 43: 2.316246964380094, 'Mathematics Department': 2.435159132377184, 'Old Software Lab': 2.435159132377184, 'Inter-disciplinary Programme in Educational Technology': 2.435159132377184, 'Centre for Formal Design and Verification of Software': 2.435159132377184, 'Centre for Distance Engineering Education Programme': 2.435159132377184}, 'Centre for Distance Engineering Education Programme': {42: 2.435159132377184}, 'Centre for Formal Design and Verification of Software': {42: 2.435159132377184}, 'Inter-disciplinary Programme in Educational Technology': {42: 2.435159132377184}, 'Mathematics Department': {42: 2.435159132377184}, 'Old Software Lab': {42: 2.435159132377184}, 43: {42: 2.316246964380094, 44: 2.041568024827975, 'Old Computer Science Engineering Department': 1.8439088914585775, 'New Software Lab': 1.8439088914585775, 'Centre for Technology Alternatives for Rural Areas': 1.8439088914585775}, 'Centre for Technology Alternatives for Rural Areas': {43: 1.8439088914585775}, 'New Software Lab': {43: 1.8439088914585775}, 'Old Computer Science Engineering Department': {43: 1.8439088914585775}, 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, 45: {44: 1.1734564329364767, 46: 2.5930676813380713, 47: 3.112073263919087, 'Fluid Mechanics and Fluid Power Lab': 0.623698645180507}, 'Fluid Mechanics and Fluid Power Lab': {45: 0.623698645180507}, 46: {45: 2.5930676813380713, 47: 1.0261578825892241, 48: 2.0329781110479277, 'ENELEK Power Sine': 0.9486832980505138}, 'ENELEK Power Sine': {46: 0.9486832980505138}, 47: {45: 3.112073263919087, 46: 1.0261578825892241}, 48: {46: 2.0329781110479277, 49: 2.167487024182613, 'Tinkerers Lab': 1.066770828247567, 'Refrigeration, A/C and Cryogenics Lab': 1.066770828247567, 'Treelabs': 1.066770828247567, 'N3 Bay': 5.318646444350292}, 'Treelabs': {48: 1.066770828247567}, 'Refrigeration, A/C and Cryogenics Lab': {48: 1.066770828247567}, 'Tinkerers Lab': {48: 1.066770828247567}, 49: {48: 2.167487024182613, 50: 3.382454729926182, 'Mechanical Engineering Department': 5.230774321264492, 'Industrial Engineering and Operations Research': 5.230774321264492}, 'Industrial Engineering and Operations Research': {49: 5.230774321264492}, 'Mechanical Engineering Department': {49: 5.230774321264492}, 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, 51: {50: 1.731184565550421, 76: 4.826696592909068, 'Industrial Design Centre': 2.2365151463828723, 'IDC Canteen': 2.2365151463828723, 'IDC Shakti': 2.2365151463828723}, 'IDC Shakti': {51: 2.2365151463828723}, 'IDC Canteen': {51: 2.2365151463828723}, 'Industrial Design Centre': {51: 2.2365151463828723}, 52: {50: 1.2445882853377659, 53: 2.4226019070412703, 76: 7.01519778766073, 178: 9.087133761533392}, 53: {52: 2.4226019070412703, 54: 4.588354824989018, 'Civil Engineering Department': 4.6217961876309515, 'Victor Menezes Convention Centre': 3.063494736408078, 'Centre for Urban Science and Engineering (inside civil)': 4.6217961876309515, 'Inter-disciplinary Programme in Climate Studies': 4.6217961876309515}, 'Inter-disciplinary Programme in Climate Studies': {53: 4.6217961876309515}, 'Centre for Urban Science and Engineering (inside civil)': {53: 4.6217961876309515}, 'Civil Engineering Department': {53: 4.6217961876309515}, 'Victor Menezes Convention Centre': {53: 3.063494736408078}, 54: {53: 4.588354824989018, 55: 1.9677398201998149, 'Electrical Engineering Department': 4.794267410147248, 'Electrical Engineering Annexe Building': 1.0751744044572489}, 'Electrical Engineering Department': {54: 4.794267410147248, 176: 4.331397003277349, 56: 2.110213259365034}, 'Electrical Engineering Annexe Building': {54: 1.0751744044572489, 56: 5.9787958653896185}, 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, 56: {55: 4.293483434229135, 'Girish Gaitonde Building': 2.5849564793241684, 'Electrical Engineering Department': 2.110213259365034, 'Electrical Engineering Annexe Building': 5.9787958653896185}, 'Girish Gaitonde Building': {175: 2.568462575160479, 56: 2.5849564793241684}, 57: {174: 9.530424964291992, 55: 2.0523157651784483, 58: 2.1783020910791966, 'Seminar Hall': 1.8804254837669054, 'Rock Powdering Lab': 2.850438562747845, 'Rock Cutting Lab': 2.850438562747845}, 'Seminar Hall': {57: 1.8804254837669054}, 'Rock Cutting Lab': {57: 2.850438562747845}, 'Rock Powdering Lab': {57: 2.850438562747845}, 58: {57: 2.1783020910791966, 59: 3.9802009999496257, 'Metallurgical Engineering and Material Science Department': 5.603302597575826, 'Corrosion Science Paint Lab': 5.603302597575826, 'Corrosion Lab 1': 5.603302597575826, 'Humanities and Social Sciences Department': 4.119465984809196, 'Aerospace Engineering Annexe': 4.119465984809196, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 5.603302597575826, 'Aqueous Corrosion Lab': 5.603302597575826}, 'Aqueous Corrosion Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Inter-disciplinary Programme in Corrosion Science & Engineering': {58: 5.603302597575826, 173: 4.494441010848846}, 'Metallurgical Engineering and Material Science Department': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Lab 1': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Science Paint Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Humanities and Social Sciences Department': {58: 4.119465984809196}, 'Aerospace Engineering Annexe': {58: 4.119465984809196}, 59: {58: 3.9802009999496257, 60: 3.805522303179946, 'Lecture Hall Complex - 1 & 2': 4.551263560814733, 'LT 001': 4.551263560814733, 'LT 002': 4.551263560814733, 'LT 003': 4.551263560814733, 'LT 004': 4.551263560814733, 'LT 005': 4.551263560814733, 'LT 006': 4.551263560814733, 'LT 101': 4.551263560814733, 'LT 102': 4.551263560814733, 'LT 103': 4.551263560814733, 'LT 104': 4.551263560814733, 'LT 105': 4.551263560814733, 'LT 106': 4.551263560814733, 'LT 201': 4.551263560814733, 'LT 202': 4.551263560814733, 'LT 203': 4.551263560814733, 'LT 204': 4.551263560814733, 'LT 205': 4.551263560814733, 'LT 206': 4.551263560814733, 'LT 301': 4.551263560814733, 'LT 302': 4.551263560814733, 'LT 303': 4.551263560814733, 'LT 304': 4.551263560814733, 'LT 305': 4.551263560814733, 'LT 306': 4.551263560814733, 'LC 001': 4.551263560814733, 'LC 002': 4.551263560814733, 'LC 101': 4.551263560814733, 'LC 102': 4.551263560814733, 'LC 201': 4.551263560814733, 'LC 202': 4.551263560814733, 'LC 301': 4.551263560814733, 'LC 302': 4.551263560814733, 'LH 101': 4.551263560814733, 'LH 102': 4.551263560814733, 'LH 301': 4.551263560814733, 'LH 302': 4.551263560814733, 'LA 001': 2.438237068047322, 'LA 002': 2.438237068047322, 'LA 201': 2.438237068047322, 'LA 202': 2.438237068047322, 'Lecture Hall Complex - 3': 2.438237068047322, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': 7.383562825628289, 'Biosciences and Bioengineering Department': 7.383562825628289}, 'Biosciences and Bioengineering Department': {59: 7.383562825628289}, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': {59: 7.383562825628289}, 'LH 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 306': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 305': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 304': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 303': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 206': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 205': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 204': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 203': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 106': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 105': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 104': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 103': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 006': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 005': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 004': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 003': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'Lecture Hall Complex - 1 & 2': {59: 4.551263560814733, 172: 5.116346352623129}, 'LA 202': {59: 2.438237068047322}, 'LA 201': {59: 2.438237068047322}, 'LA 002': {59: 2.438237068047322}, 'LA 001': {59: 2.438237068047322}, 'Lecture Hall Complex - 3': {59: 2.438237068047322}, 60: {59: 3.805522303179946, 61: 2.0349447166937975, 'Physics Department': 4.780167361086848, 'Chemical Engineering Department': 5.520144925633747, 'Chemistry Department': 5.520144925633747}, 'Physics Department': {60: 4.780167361086848, 171: 4.7611973284038545}, 'Chemistry Department': {60: 5.520144925633747, 67: 8.937561188601732}, 'Chemical Engineering Department': {60: 5.520144925633747, 67: 8.937561188601732}, 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, 65: {64: 2.5793410011086166, 66: 2.0523157651784483, 'DESE & CESE New Building': 3.623534186398688, 'Cafe Coffee Day': 3.761914406256474, 'Energy Science and Engineering (New Building)': 3.623534186398688}, 'Energy Science and Engineering (New Building)': {65: 3.623534186398688}, 'DESE & CESE New Building': {65: 3.623534186398688}, 'Cafe Coffee Day': {65: 3.761914406256474}, 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, 67: {66: 2.041568024827975, 68: 7.799102512468983, 'Chemical Engineering Department': 8.937561188601732, 'Chemistry Department': 8.937561188601732}, 68: {67: 7.799102512468983, 69: 4.456007181322759, 'Aerospace Engineering Department': 1.5646085772486358, 'Centre for Aerospace Systems Design and Engineering': 1.5646085772486358}, 'Centre for Aerospace Systems Design and Engineering': {68: 1.5646085772486358}, 'Aerospace Engineering Department': {68: 1.5646085772486358}, 69: {68: 4.456007181322759, 'ONGC Research Centre': 1.580506248010428, 71: 2.44826469157238}, 'ONGC Research Centre': {69: 1.580506248010428}, 70: {66: 12.877926851787908, 71: 1.4453373308677804, 'Proposed Building for Tata Centre for Technology': 3.2534596969994882, 'Proposed NCAIR': 3.2534596969994882, 'Proposed Bio Mechanical Department': 3.2534596969994882, 'Proposed D.S Foundation': 3.2534596969994882, 'Proposed Press ': 3.2534596969994882}, 'Proposed Press ': {70: 3.2534596969994882}, 'Proposed D.S Foundation': {70: 3.2534596969994882}, 'Proposed Bio Mechanical Department': {70: 3.2534596969994882}, 'Proposed NCAIR': {70: 3.2534596969994882}, 'Proposed Building for Tata Centre for Technology': {70: 3.2534596969994882}, 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, 72: {71: 4.655534340975265, 73: 1.7700282483621554, 'Energy Science and Engineering': 1.6772000476985445}, 'Energy Science and Engineering': {72: 1.6772000476985445}, 73: {72: 1.7700282483621554, 74: 0.9, 'Earth Science Department': 4.228001892147164}, 'Earth Science Department': {73: 4.228001892147164}, 74: {73: 0.9, 75: 2.980771712157776, 'Centre of Studies in Resources Engineering': 2.1095023109728985, 'Society for Innovation and Entrepreneurship': 2.1095023109728985}, 'Society for Innovation and Entrepreneurship': {74: 2.1095023109728985}, 'Centre of Studies in Resources Engineering': {74: 2.1095023109728985}, 75: {74: 2.980771712157776, 76: 3.27566787083184, 'Centre for Environmental Science and Engineering': 3.992117232747556}, 'Centre for Environmental Science and Engineering': {75: 3.992117232747556}, 76: {75: 3.27566787083184, 51: 4.826696592909068, 52: 7.01519778766073, 77: 2.198635940759634, 'Non- Academic Staff Association': 2.0523157651784483, 'Printing Press': 2.0523157651784483}, 'Printing Press': {76: 2.0523157651784483}, 'Non- Academic Staff Association': {76: 2.0523157651784483}, 77: {76: 2.198635940759634, 78: 4.901632381156302, 'Structural integrity Testing and Analysis Centre': 2.166333307688362, 'S3 Bay': 2.76278844647939}, 'S3 Bay': {77: 2.76278844647939}, 'Structural integrity Testing and Analysis Centre': {77: 2.166333307688362, 82: 6.654697588921679}, 78: {77: 4.901632381156302, 79: 4.401136216933078, 'Electrical Maintenence': 2.4331050121192876, 'Machine Tool Lab': 3.7105255692421797}, 'Machine Tool Lab': {79: 4.65123639476645, 78: 3.7105255692421797}, 'Electrical Maintenence': {78: 2.4331050121192876}, 79: {78: 4.401136216933078, 80: 3.430014577228499, 'Machine Tool Lab': 4.65123639476645, 'OrthoCad Lab': 2.9313819266687173, 'Micro Fluidics Lab': 2.5045957757690163, 'RM Lab (Rapid manufacturing)': 3.0220853727186467, 'S1 Bay': 2.2614154859291116, 'N1 Bay': 2.012212712413874, 'Supercritical fluid Processing facility (Chemical Engg.)': 2.2614154859291116, 'S2 Bay': 4.65123639476645, 'UG Lab / S2 Bay': 4.65123639476645, 'Fuel Cell Research Facility': 2.012212712413874}, 'Fuel Cell Research Facility': {79: 2.012212712413874, 80: 3.161012496020856, 82: 2.2147234590350102}, 'UG Lab / S2 Bay': {79: 4.65123639476645}, 'S2 Bay': {79: 4.65123639476645}, 'Supercritical fluid Processing facility (Chemical Engg.)': {79: 2.2614154859291116}, 'N1 Bay': {79: 2.012212712413874}, 'S1 Bay': {79: 2.2614154859291116}, 'RM Lab (Rapid manufacturing)': {79: 3.0220853727186467}, 'OrthoCad Lab': {79: 2.9313819266687173}, 'Micro Fluidics Lab': {79: 2.5045957757690163}, 80: {79: 3.430014577228499, 81: 2.3910248848558644, 82: 3.5300141642775316, 'Fuel Cell Research Facility': 3.161012496020856}, 81: {185: 2.7727242920997393, 80: 2.3910248848558644, 'Physics Lab (Ist Years)': 1.1353413583587977, 'UG Lab (1st years)': 1.1353413583587977, 'Power House': 2.5117722826721374}, 'UG Lab (1st years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Physics Lab (Ist Years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Power House': {81: 2.5117722826721374}, 82: {80: 3.5300141642775316, 83: 3.4311805548528045, 'UG Lab (1st years)': 3.1976553910638965, 'Physics Lab (Ist Years)': 3.1976553910638965, 'Structural integrity Testing and Analysis Centre': 6.654697588921679, 'Fuel Cell Research Facility': 2.2147234590350102}, 83: {82: 3.4311805548528045, 84: 1.822361105818493, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': 1.0530906893520615, 'Thermal Hydraulic Test Facility': 2.54911749434976, 'N2 Bay': 2.70129598526337, 'N3 Bay': 2.195449840010015}, 'N3 Bay': {48: 5.318646444350292, 83: 2.195449840010015}, 'N2 Bay': {83: 2.70129598526337}, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': {83: 1.0530906893520615}, 'Thermal Hydraulic Test Facility': {83: 2.54911749434976}, 84: {83: 1.822361105818493, 85: 4.349022878762539, 'Cummins Engine Research facility': 0.806225774829855, 'Heat Transfer and Thermodynamic Lab': 0.9433981132056604, 'Steam Power Lab': 1.0890362712049586, 'IC Engine and Combustion Lab': 2.1272047386182646}, 'IC Engine and Combustion Lab': {84: 2.1272047386182646, 85: 2.606338427756457}, 'Steam Power Lab': {84: 1.0890362712049586}, 'Cummins Engine Research facility': {84: 0.806225774829855}, 'Heat Transfer and Thermodynamic Lab': {84: 0.9433981132056604}, 85: {84: 4.349022878762539, 88: 2.5930676813380713, 86: 3.430014577228499, 'Metal Forming Lab': 2.558906016249913, 'Old ONGC Lab': 1.8160396471443017, 'Structural Evaluation & Material Technologies Lab': 1.6876018487783189, 'Heavy Structure Lab': 3.3366150512158277, 'Hydraulics Lab': 1.0922453936730518, 'Concrete Technology Lab': 3.3366150512158277, 'IC Engine and Combustion Lab': 2.606338427756457}, 'Concrete Technology Lab': {85: 3.3366150512158277}, 'Hydraulics Lab': {85: 1.0922453936730518, 88: 2.1644860821913365}, 'Heavy Structure Lab': {85: 3.3366150512158277}, 'Structural Evaluation & Material Technologies Lab': {85: 1.6876018487783189}, 'Old ONGC Lab': {85: 1.8160396471443017}, 86: {85: 3.430014577228499, 87: 2.2452171387195494, 'Geotechnical Engg. Lab': 0.4049691346263318, 'Metal Forming Lab': 1.1700427342623003}, 'Metal Forming Lab': {86: 1.1700427342623003, 85: 2.558906016249913}, 'Geotechnical Engg. Lab': {86: 0.4049691346263318}, 87: {86: 2.2452171387195494, 'National Geotechnical Centrifuge Facility': 1.2349089035228469, 'Vihar House': 6.230971031869752, 'GMFL Lab / Geophysical and multiphase Flows Lab': 5.591511423577708}, 'GMFL Lab / Geophysical and multiphase Flows Lab': {87: 5.591511423577708}, 'Vihar House': {87: 6.230971031869752}, 'National Geotechnical Centrifuge Facility': {87: 1.2349089035228469}, 88: {85: 2.5930676813380713, 'Solar Lab': 3.3889526405661083, 89: 1.731184565550421, 'Heat Pump Lab': 1.118033988749895, 'Hydraulics Lab Workshop': 1.9849433241279208, 'Hydraulics Lab': 2.1644860821913365, 'Hydraulics Lab (New)': 1.372953021774598}, 'Hydraulics Lab (New)': {88: 1.372953021774598, 89: 1.0751744044572489}, 'Hydraulics Lab Workshop': {88: 1.9849433241279208}, 'Solar Lab': {88: 3.3889526405661083}, 'Heat Pump Lab': {88: 1.118033988749895}, 89: {44: 4.000499968753906, 88: 1.731184565550421, 39: 5.330009380854784, 'Hydraulics Lab (New)': 1.0751744044572489}, 90: {91: 2.8017851452243803, 39: 2.44826469157238, 'Inter-disciplinary Programme in Systems and Control Engineering': 1.4310835055998654}, 'Inter-disciplinary Programme in Systems and Control Engineering': {90: 1.4310835055998654}, 91: {90: 2.8017851452243803, 92: 1.880957203128237, 'NanoTech. & Science Research Centre': 1.9227584351654787, 'Advanced Centre for Research in Electronics': 1.9227584351654787, 'Sophisticated Analytical Instruments Facility': 1.9227584351654787}, 'Sophisticated Analytical Instruments Facility': {91: 1.9227584351654787}, 'Advanced Centre for Research in Electronics': {91: 1.9227584351654787}, 'NanoTech. & Science Research Centre': {91: 1.9227584351654787}, 92: {91: 1.880957203128237, 93: 3.0242354405700627, 211: 1.2445882853377659, 213: 3.1395859599635108, 212: 1.0089598604503551}, 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, 94: {93: 1.7076299364909249, 213: 1.731184565550421, 214: 1.7700282483621554, 36: 4.640366364846638}, 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, 96: {95: 2.44826469157238, 'NCC Office': 4.343500892137586, 97: 4.59847800908083, 'Squash Court': 4.775143976886979}, 'Squash Court': {96: 4.775143976886979, 97: 3.006659275674582}, 'NCC Office': {96: 4.343500892137586}, 97: {96: 4.59847800908083, 98: 3.382454729926182, 'Staff Hostel': 9.135972854600654, 'Squash Court': 3.006659275674582}, 'Staff Hostel': {97: 9.135972854600654}, 98: {97: 3.382454729926182, 99: 1.7700282483621554, 101: 2.623928352680385, 'Hostel 11 Athena (Girls Hostel)': 2.9698484809834995, 'Printing and photocopying H11': 2.9698484809834995}, 'Printing and photocopying H11': {98: 2.9698484809834995}, 'Hostel 11 Athena (Girls Hostel)': {98: 2.9698484809834995}, 99: {98: 1.7700282483621554, 100: 2.6414011433328337, 'Basketball Court': 1.5063200191194432}, 'Basketball Court': {99: 1.5063200191194432}, 100: {99: 2.6414011433328337, 'Hockey Ground': 4.741307836451879, 'Gymkhana Grounds': 3.1465854509293085}, 'Hockey Ground': {100: 4.741307836451879}, 'Gymkhana Grounds': {100: 3.1465854509293085}, 101: {98: 2.623928352680385, 102: 5.378196723809943, 'Gymkhana Building': 1.9300259065618783, 'Brewberrys Cafe': 1.296919426949878}, 'Gymkhana Building': {101: 1.9300259065618783}, 'Brewberrys Cafe': {101: 1.296919426949878}, 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, 103: {102: 7.319357895334809, 104: 1.9677398201998149}, 104: {103: 1.9677398201998149, 105: 1.731184565550421}, 105: {104: 1.731184565550421, 106: 7.202221879392497}, 106: {105: 7.202221879392497, 107: 1.6949926253526888}, 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, 112: {111: 3.560056179332006, 113: 3.383637096380166}, 113: {112: 3.383637096380166, 114: 6.538654295801239}, 114: {113: 6.538654295801239, 'Boat House': 4.870523585817033}, 'Boat House': {114: 4.870523585817033}, 115: {111: 1.2445882853377659, 116: 2.041568024827975}, 116: {115: 2.041568024827975, 117: 1.4230249470757708}, 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, 118: {117: 1.1734564329364767, 119: 4.653815638806505}, 119: {118: 4.653815638806505, 120: 1.0}, 120: {119: 1.0, 121: 1.1734564329364767}, 121: {120: 1.1734564329364767, 122: 1.0261578825892241, 'National Centre for Mathematics': 1.4710540438746633}, 122: {121: 1.0261578825892241, 123: 16.343959128681153, 'Guest House/Padmavihar': 2.3214219780126144}, 'Guest House/Padmavihar': {122: 2.3214219780126144}, 'National Centre for Mathematics': {121: 1.4710540438746633}, 123: {122: 16.343959128681153, 124: 1.7700282483621554, 138: 4.518517455980446, 'Type B-14': 2.6879360111431225, 'Guest House / Jalvihar': 6.20354737227016}, 'Guest House / Jalvihar': {123: 6.20354737227016}, 'Type B-14': {123: 2.6879360111431225}, 124: {123: 1.7700282483621554, 125: 4.470011185668332}, 125: {124: 4.470011185668332, 126: 4.518517455980446}, 126: {125: 4.518517455980446, 127: 15.53270742658858, 135: 5.397962578603153, 'Type B-13': 3.575611835756225}, 'Type B-13': {126: 3.575611835756225}, 127: {126: 15.53270742658858, 128: 5.692538976590323, 'Proposed TypeA Building': 4.570557952810575}, 'Proposed TypeA Building': {127: 4.570557952810575}, 128: {127: 5.692538976590323, 129: 3.6808966298987533}, 129: {128: 3.6808966298987533, 130: 7.935048834128244, 193: 5.733149221850065, 'B 19 Old Multistoried Building- Residence ': 4.692973471052229}, 'B 19 Old Multistoried Building- Residence ': {129: 4.692973471052229}, 130: {129: 7.935048834128244, 131: 1.4042791745233567, 'White House': 5.517698795693726}, 'White House': {130: 5.517698795693726}, 131: {130: 1.4042791745233567, 132: 4.224807687930896, 'CTR 20': 2.000249984376953}, 'CTR 20': {131: 2.000249984376953}, 132: {131: 4.224807687930896, 133: 9.713753136661442, 'CTR 19': 2.040833163195855, 'Bungalow A10 ': 4.08166632639171}, 'Bungalow A10 ': {132: 4.08166632639171, 133: 6.646878966853541}, 'CTR 19': {132: 2.040833163195855}, 133: {132: 9.713753136661442, 134: 1.4916433890176297, 'Bungalow A11 ': 3.508275929855005, 'Bungalow A10 ': 6.646878966853541, 'Bungalow A8 ': 6.26258732474047}, 'Bungalow A8 ': {133: 6.26258732474047, 153: 10.713589501189599}, 134: {133: 1.4916433890176297, 135: 11.502738804302219, 153: 7.340844638050855, 'Shishu Vihar': 4.2901048938225275, 'Bungalow A5 ': 4.350287346831241, 'Bungalow A11 ': 3.645408070436011}, 'Bungalow A11 ': {133: 3.508275929855005, 134: 3.645408070436011}, 'Bungalow A5 ': {134: 4.350287346831241, 153: 3.634969050762331}, 'Shishu Vihar': {134: 4.2901048938225275, 153: 3.6206353033687333}, 135: {134: 11.502738804302219, 136: 9.79025025216414, 126: 5.397962578603153, 'A1 Director Bungalow': 7.410802925459562}, 'A1 Director Bungalow': {135: 7.410802925459562, 136: 3.7890632087628204, 155: 5.3615296324836255, 154: 5.123377792043057}, 136: {135: 9.79025025216414, 137: 2.316246964380094, 155: 5.403794962801605, 'Type B-1': 2.2908513701242166, 'Bungalow A13 ': 2.27771815640127, 'A1 Director Bungalow': 3.7890632087628204}, 'Bungalow A13 ': {136: 2.27771815640127}, 'Type B-1': {136: 2.2908513701242166}, 137: {136: 2.316246964380094, 138: 1.2727922061357855}, 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, 139: {138: 6.175597137119616, 140: 1.6760071598892412}, 140: {139: 1.6760071598892412, 141: 4.82265487050442}, 141: {140: 4.82265487050442, 142: 6.957082721946032, 157: 3.2919599025504547, 'Guest House/Vanvihar': 3.216364407215078}, 'Guest House/Vanvihar': {141: 3.216364407215078}, 142: {141: 6.957082721946032, 143: 3.9802009999496257, 162: 3.6585516259853432, 'Gulmohar Garden Cafetaria': 2.3759208741033446, 'Staff Club': 3.9654760117796704}, 'Staff Club': {142: 3.9654760117796704}, 143: {142: 3.9802009999496257, 144: 5.771828133269389, 'Hospital': 4.228001892147164}, 'Hospital': {143: 4.228001892147164}, 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, 145: {144: 0.8538149682454624, 146: 1.420211251891774}, 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, 147: {146: 5.530461101933545, 148: 2.041568024827975, 'Kshitij Udyan': 4.846648326421054}, 'Kshitij Udyan': {147: 4.846648326421054}, 148: {147: 2.041568024827975, 149: 2.263183598385248}, 149: {148: 2.263183598385248, 150: 2.6700187265260893, 'Tennis Court (new)': 7.513321502504734}, 'Tennis Court (new)': {149: 7.513321502504734}, 150: {149: 2.6700187265260893, 151: 2.041568024827975}, 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, 152: {151: 1.4512063946937388, 168: 2.167487024182613, 146: 3.382454729926182, 'Convocation Hall': 3.4539832078341086, 'Institute Music Room': 3.4539832078341086}, 'Institute Music Room': {152: 3.4539832078341086}, 'Convocation Hall': {152: 3.4539832078341086}, 153: {134: 7.340844638050855, 154: 8.926925562588723, 'Main Gate no. 2': 11.7957619508025, 'Shishu Vihar': 3.6206353033687333, 'Bungalow A5 ': 3.634969050762331, 'ATM - State Bank Main Gate': 13.127261709892128, 'Bungalow A8 ': 10.713589501189599}, 'ATM - State Bank Main Gate': {153: 13.127261709892128}, 'Main Gate no. 2': {153: 11.7957619508025}, 154: {153: 8.926925562588723, 155: 8.968890678339212, 'A1 Director Bungalow': 5.123377792043057}, 155: {136: 5.403794962801605, 154: 8.968890678339212, 156: 6.980329505116503, 'Hostel 10 Annexe (Girls Hostel)': 4.018084120572888, 'A1 Director Bungalow': 5.3615296324836255}, 'Hostel 10 Annexe (Girls Hostel)': {155: 4.018084120572888}, 156: {155: 6.980329505116503, 157: 2.39269722280108, 'Hostel 10 Phoenix (Girls Hostel)': 2.5909457732650445}, 'Hostel 10 Phoenix (Girls Hostel)': {156: 2.5909457732650445}, 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, 158: {157: 1.587765725792064, 162: 6.006163500938015, 159: 12.385031287808683, 'Gulmohar Building': 2.4135036772294343, 'Gulmohar Garden Cafetaria': 3.0909545451203257, 'ATM - Canara Bank near Gulmohar': 2.4135036772294343, 'Gulmohar Restaurant': 2.4135036772294343}, 'Gulmohar Restaurant': {158: 2.4135036772294343}, 'ATM - Canara Bank near Gulmohar': {158: 2.4135036772294343}, 'Gulmohar Garden Cafetaria': {162: 3.9115214431215892, 142: 2.3759208741033446, 158: 3.0909545451203257}, 'Gulmohar Building': {158: 2.4135036772294343}, 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, 160: {159: 1.981161275615895, 161: 2.279034883453959, 63: 6.325345840347388, 253: 12.683256679575637}, 161: {160: 2.279034883453959, 61: 2.545780823244609}, 162: {142: 3.6585516259853432, 158: 6.006163500938015, 163: 3.784309712483903, 'Gulmohar Garden Cafetaria': 3.9115214431215892}, 163: {162: 3.784309712483903, 164: 2.4041630560342617, 'Faqir Chand Kohli Auditorium': 3.5701540583005658, 'Kanwal Rekhi School of Information Technology': 3.5701540583005658, 'KReSIT Canteen': 3.5701540583005658}, 'KReSIT Canteen': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Kanwal Rekhi School of Information Technology': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Faqir Chand Kohli Auditorium': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Computer Centre': {164: 3.842004685057008, 173: 2.6819768828235637}, 164: {163: 2.4041630560342617, 165: 2.7951744131627994, 'Computer Centre': 3.842004685057008}, 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, 166: {165: 1.2445882853377659, 167: 1.8, 144: 3.4896991274320484, 'School of Management': 3.890115679513914, 'Industrial Research & Consultancy Centre': 3.890115679513914}, 'Industrial Research & Consultancy Centre': {175: 3.2893768406797053, 166: 3.890115679513914}, 'School of Management': {175: 3.2893768406797053, 166: 3.890115679513914}, 167: {166: 1.8, 168: 4.013103537164223, 'Chaayos Near SOM': 121.87791022166404}, 168: {167: 4.013103537164223, 152: 2.167487024182613, 169: 1.981161275615895, 170: 2.828780656042458, 'Chaayos Near SOM': 120.84622459969529}, 'Chaayos Near SOM': {167: 121.87791022166404, 168: 120.84622459969529}, 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, 170: {168: 2.828780656042458, 'Main Building': 3.782591704109763, 'Joint Admission Test for M.Sc. Office': 3.782591704109763, 'Printing and photocopying Main Building': 3.782591704109763, 'Hostel Coordinating Unit': 3.782591704109763}, 'Hostel Coordinating Unit': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Printing and photocopying Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Joint Admission Test for M.Sc. Office': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 171: {172: 4.000499968753906, 159: 4.527471700629392, 'Physics Department': 4.7611973284038545}, 172: {171: 4.000499968753906, 173: 4.000499968753906, 'Kanwal Rekhi School of Information Technology': 3.544573317058063, 'KReSIT Canteen': 3.544573317058063, 'Faqir Chand Kohli Auditorium': 3.544573317058063, 'Lecture Hall Complex - 1 & 2': 5.116346352623129, 'LT 001': 5.116346352623129, 'LT 002': 5.116346352623129, 'LT 003': 5.116346352623129, 'LT 004': 5.116346352623129, 'LT 005': 5.116346352623129, 'LT 006': 5.116346352623129, 'LT 101': 5.116346352623129, 'LT 102': 5.116346352623129, 'LT 103': 5.116346352623129, 'LT 104': 5.116346352623129, 'LT 105': 5.116346352623129, 'LT 106': 5.116346352623129, 'LT 201': 5.116346352623129, 'LT 202': 5.116346352623129, 'LT 203': 5.116346352623129, 'LT 204': 5.116346352623129, 'LT 205': 5.116346352623129, 'LT 206': 5.116346352623129, 'LT 301': 5.116346352623129, 'LT 302': 5.116346352623129, 'LT 303': 5.116346352623129, 'LT 304': 5.116346352623129, 'LT 305': 5.116346352623129, 'LT 306': 5.116346352623129, 'LC 001': 5.116346352623129, 'LC 002': 5.116346352623129, 'LC 101': 5.116346352623129, 'LC 102': 5.116346352623129, 'LC 201': 5.116346352623129, 'LC 202': 5.116346352623129, 'LC 301': 5.116346352623129, 'LC 302': 5.116346352623129, 'LH 101': 5.116346352623129, 'LH 102': 5.116346352623129, 'LH 301': 5.116346352623129, 'LH 302': 5.116346352623129}, 173: {172: 4.000499968753906, 174: 2.980771712157776, 'Computer Centre': 2.6819768828235637, 'Metallurgical Engineering and Material Science Department': 4.494441010848846, 'Corrosion Science Paint Lab': 4.494441010848846, 'Corrosion Lab 1': 4.494441010848846, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 4.494441010848846, 'Aqueous Corrosion Lab': 4.494441010848846}, 174: {173: 2.980771712157776, 175: 1.6099689437998486, 165: 6.240032051199737, 57: 9.530424964291992}, 175: {174: 1.6099689437998486, 176: 2.980771712157776, 'Girish Gaitonde Building': 2.568462575160479, 'School of Management': 3.2893768406797053, 'Industrial Research & Consultancy Centre': 3.2893768406797053}, 176: {175: 2.980771712157776, 177: 2.2228360263411244, 'Electrical Engineering Department': 4.331397003277349, 'Cafe 92': 1.587765725792064}, 'Cafe 92': {176: 1.587765725792064}, 177: {176: 2.2228360263411244, 178: 3.9760533195620003, 'PC Saxena Auditorium / Lecture Theatre': 1.91049731745428}, 'PC Saxena Auditorium / Lecture Theatre': {177: 1.91049731745428}, 178: {179: 3.93459019467085, 177: 3.9760533195620003, 52: 9.087133761533392, 180: 3.430014577228499}, 179: {178: 3.93459019467085, 'Main Building': 1.6155494421403511, 'Joint Admission Test for M.Sc. Office': 1.6155494421403511, 'Printing and photocopying Main Building': 1.6155494421403511, 'Hostel Coordinating Unit': 1.6155494421403511}, 180: {41: 2.2768399153212333, 178: 3.430014577228499}, 181: {64: 5.060632371551998, 182: 2.0523157651784483, 'Kendriya Vidyalaya ': 1.6376812876747417}, 'Kendriya Vidyalaya ': {181: 1.6376812876747417}, 182: {181: 2.0523157651784483, 183: 3.034633421024688, 'Medical Store': 3.3712015662075148, 'Uphar': 5.015974481593781}, 'Medical Store': {182: 3.3712015662075148}, 'Uphar': {182: 5.015974481593781}, 183: {184: 2.4226019070412703, 182: 3.034633421024688, 'Post Office': 2.3345235059857505}, 'Post Office': {183: 2.3345235059857505}, 184: {183: 2.4226019070412703, 'Market Gate, Y point Gate no. 3': 1.91049731745428, 249: 5.692538976590323}, 'Market Gate, Y point Gate no. 3': {184: 1.91049731745428}, 185: {81: 2.7727242920997393, 186: 6.006163500938015, 'Hostel 10A QIP (Girls Hostel)': 2.818865019826242}, 'Hostel 10A QIP (Girls Hostel)': {185: 2.818865019826242}, 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, 187: {186: 4.000499968753906, 226: 0.8700574693662483, 225: 0.6363961030678927, 'QIP 2': 1.793599732381782}, 'QIP 2': {225: 1.329661611087573, 187: 1.793599732381782}, 188: {189: 6.175597137119616, 'K-Yantra Lab (CSE Dept.)': 2.2487774456357394, 231: 0.28460498941515416, 228: 2.4226019070412703}, 'K-Yantra Lab (CSE Dept.)': {231: 2.5079872407968904, 188: 2.2487774456357394}, 189: {188: 6.175597137119616, 190: 1.4512063946937388, 232: 4.224807687930896, 'Tulsi B': 1.528397853963424, 'B 22 Ananta': 4.420407221060069}, 'B 22 Ananta': {189: 4.420407221060069}, 'Tulsi B': {189: 1.528397853963424}, 190: {189: 1.4512063946937388, 191: 1.7, 'Tulsi A': 1.188696765369537, 'Sameer Hill': 12.108055170009756}, 'Sameer Hill': {190: 12.108055170009756}, 'Tulsi A': {190: 1.188696765369537}, 191: {190: 1.7, 192: 5.426232578870906, 'B 23 Aravali': 2.5394881374009213, 'Society for Applied Microwave Electronics Engineering & Research': 3.6173194495371845}, 'Society for Applied Microwave Electronics Engineering & Research': {191: 3.6173194495371845}, 'B 23 Aravali': {234: 4.870831551183022, 191: 2.5394881374009213}, 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, 193: {129: 5.733149221850065, 194: 5.656854249492381}, 194: {193: 5.656854249492381, 195: 2.5298221281347035}, 195: {194: 2.5298221281347035, 196: 6.694475334184151}, 196: {195: 6.694475334184151, 197: 5.796723212298479, 'Lake Side Gate no. 1': 7.727483419587518}, 'Lake Side Gate no. 1': {196: 7.727483419587518}, 197: {196: 5.796723212298479, 198: 3.560056179332006}, 198: {197: 3.560056179332006, 199: 2.4316660954991334}, 199: {198: 2.4316660954991334, 200: 14.840080862313386}, 200: {199: 14.840080862313386, 'Padmavati Devi Temple': 14.451089924292909}, 'Padmavati Devi Temple': {200: 14.451089924292909}, 201: {'QIP 1': 1.5924823389915506, 202: 3.0242354405700627, 225: 3.382454729926182, 204: 7.045565981523415, 203: 5.600892785976178, 186: 0.0}, 'QIP 1': {201: 1.5924823389915506}, 202: {215: 1.8027756377319946, 203: 2.5930676813380713, 204: 4.044007912949726, 'Type1 - 6': 1.408900280360537, 201: 3.0242354405700627}, 'Type1 - 6': {202: 1.408900280360537}, 203: {'Type1 - 7': 1.1300442469213319, 204: 1.4512063946937388, 239: 3.784309712483903, 202: 2.5930676813380713, 201: 5.600892785976178}, 'Type1 - 7': {204: 1.7334935823359716, 203: 1.1300442469213319}, 204: {'Type1 - 7': 1.7334935823359716, 201: 7.045565981523415, 203: 1.4512063946937388, 202: 4.044007912949726, 220: 3.430014577228499, 205: 1.7700282483621554}, 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, 206: {224: 1.0, 223: 2.8208154849263005, 207: 1.981161275615895, 205: 1.731184565550421}, 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, 208: {208: 0.0, 243: 1.1627553482998907, 209: 2.4020824298928627, 'Type 2B 23': 2.4070729112347222}, 'Type 2B 23': {208: 2.4070729112347222}, 209: {208: 2.4020824298928627, 235: 4.224807687930896, 210: 2.316246964380094, 'CSRE C': 1.3118688958886098}, 'CSRE C': {209: 1.3118688958886098}, 210: {209: 2.316246964380094, 211: 3.6792662311933886}, 211: {210: 3.6792662311933886, 212: 2.251443981093023, 238: 2.9025850547399985, 92: 1.2445882853377659, 'Bungalow A16 ': 0.9}, 'Bungalow A16 ': {211: 0.9}, 212: {213: 2.1384573879317776, 'Bungalow A15 ': 1.0324727599312244, 211: 2.251443981093023, 92: 1.0089598604503551}, 'Bungalow A15 ': {212: 1.0324727599312244}, 213: {93: 0.28460498941515416, 92: 3.1395859599635108, 94: 1.731184565550421, 'Bungalow A14 ': 1.0373041983911953, 212: 2.1384573879317776}, 'Bungalow A14 ': {213: 1.0373041983911953}, 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, 215: {202: 1.8027756377319946, 216: 1.587765725792064, 'Type 2B 22': 1.3601470508735443}, 'Type 2B 22': {215: 1.3601470508735443}, 216: {215: 1.587765725792064, 217: 1.6099689437998486, 226: 2.828780656042458, 'Type1 - 18': 1.3103434664239755, 'Type1 - 16': 1.5524174696260025}, 'Type1 - 18': {216: 1.3103434664239755}, 'Type1 - 16': {216: 1.5524174696260025}, 217: {216: 1.6099689437998486, 239: 1.1428035701729322, 218: 1.4042791745233567, 227: 2.6700187265260893, 'Proposed Type H1 Building': 6.9112227572261045}, 'Proposed Type H1 Building': {226: 3.3575288531895002, 217: 6.9112227572261045}, 218: {217: 1.4042791745233567, 219: 1.1853269591129698, 'Type1 - 14': 1.0606601717798212, 'Type H1 - 12': 1.5195394038984313}, 'Type1 - 14': {218: 1.0606601717798212}, 'Type H1 - 12': {218: 1.5195394038984313}, 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, 220: {204: 3.430014577228499, 239: 2.0124611797498106, 219: 2.4226019070412703, 'Type1 - 13': 0.6363961030678927, 222: 2.828780656042458}, 'Type1 - 13': {220: 0.6363961030678927}, 221: {222: 1.6324827717314507, 'Type H1 - 5': 0.4949747468305833}, 'Type H1 - 5': {221: 0.4949747468305833}, 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, 223: {224: 1.822361105818493, 222: 0.8221921916437787, 'Type H1 - 6': 1.5703502793962882}, 'Type H1 - 6': {223: 1.5703502793962882}, 224: {223: 1.822361105818493, 206: 1.0, 'Type H1 - 8': 1.216963434126104}, 'Type H1 - 8': {224: 1.216963434126104}, 225: {201: 3.382454729926182, 226: 1.3914021704740869, 'QIP 2': 1.329661611087573, 187: 0.6363961030678927}, 226: {226: 0.0, 216: 2.828780656042458, 227: 2.2228360263411244, 187: 0.8700574693662483, 'Proposed Type H1 Building': 3.3575288531895002}, 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, 228: {219: 3.112073263919087, 227: 1.77792013318934, 230: 2.316246964380094, 229: 3.4311805548528045, 188: 2.4226019070412703}, 229: {228: 3.4311805548528045, 'Vidya Niwas': 1.2041594578792296}, 'Vidya Niwas': {229: 1.2041594578792296}, 230: {228: 2.316246964380094, 231: 1.4916433890176297, 'C22, B wing, Vindya': 1.820988742414406}, 'C22, B wing, Vindya': {230: 1.820988742414406}, 231: {230: 1.4916433890176297, 'C22, A wing, Sahyadri': 1.420211251891774, 'K-Yantra Lab (CSE Dept.)': 2.5079872407968904, 232: 1.7977764043395386, 188: 0.28460498941515416}, 'C22, A wing, Sahyadri': {231: 1.420211251891774}, 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, 234: {'B 23 Aravali': 4.870831551183022, 233: 2.6700187265260893, 235: 2.7727242920997393}, 235: {234: 2.7727242920997393, 209: 4.224807687930896}, 236: {237: 2.1384573879317776, 'Bungalow A19 ': 0.970051545022222, 'CSRE D': 1.0807404868885035}, 'Bungalow A19 ': {236: 0.970051545022222}, 'CSRE D': {236: 1.0807404868885035}, 237: {236: 2.1384573879317776, 238: 1.8952572384771413, 'Bungalow A18 ': 0.8, 'CSRE A': 1.7418381095842403, 'CSRE B': 0.8354639429682169}, 'Bungalow A18 ': {237: 0.8}, 'CSRE A': {237: 1.7418381095842403}, 'CSRE B': {237: 0.8354639429682169}, 238: {237: 1.8952572384771413, 211: 2.9025850547399985, 'Bungalow A17 ': 0.806225774829855}, 'Bungalow A17 ': {238: 0.806225774829855}, 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, 240: {'Type H2 - 18': 0.9492101980067429, 205: 1.822361105818493}, 'Type H2 - 18': {240: 0.9492101980067429}, 241: {242: 0.6363961030678927, 'Type H2 - 19': 0.6324555320336759, 207: 1.822361105818493}, 'Type H2 - 19': {241: 0.6324555320336759}, 242: {241: 0.6363961030678927, 'Type H2 - 20': 1.5}, 'Type H2 - 20': {242: 1.5}, 243: {'Type H2 - 21': 0.9617692030835673, 208: 1.1627553482998907}, 'Type H2 - 21': {243: 0.9617692030835673}, 244: {233: 3.1508728949292766, 232: 1.6595180023127196, 'Tulsi C': 1.5990622251807463}, 'Tulsi C': {244: 1.5990622251807463}, 245: {246: 4.401136216933078, 'Security Check Point': 3.8860005146680052, 255: 4.802082881417188}, 246: {245: 4.401136216933078, 'Paspoli Gate no. 4 ': 9.244295538330652}, 'Paspoli Gate no. 4 ': {246: 9.244295538330652}, 247: {192: 5.9605368885696866, 248: 4.271416626834709}, 248: {247: 4.271416626834709, 'MW Quarters 1': 1.8384776310850235}, 'MW Quarters 1': {248: 1.8384776310850235}, 249: {184: 5.692538976590323, 250: 5.426232578870906, 251: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 1.766635219845908}, 'Kendriya Vidyalay Quarters 1': {249: 1.766635219845908, 251: 2.471639132235934}, 250: {249: 5.426232578870906, 'Campus School': 4.745102738613781, 'Kindergarten School': 4.745102738613781}, 'Kindergarten School': {250: 4.745102738613781, 253: 4.33232039443068}, 'Campus School': {250: 4.745102738613781, 253: 4.33232039443068}, 251: {249: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 2.471639132235934, 252: 4.804164859785725}, 252: {251: 4.804164859785725, 253: 3.035951251255527}, 253: {252: 3.035951251255527, 254: 3.4896991274320484, 160: 12.683256679575637, 'Campus School': 4.33232039443068, 'Type C-7': 0.34058772731852804, 'Kindergarten School': 4.33232039443068}, 'Type C-7': {253: 0.34058772731852804}, 254: {253: 3.4896991274320484, 'Shivalik C 23 (187-240)': 7.684009370114016}, 'Shivalik C 23 (187-240)': {254: 7.684009370114016}, 255: {2: 18.03285889702462, 'Security Check Point': 1.4577379737113252, 245: 4.802082881417188}, 'Aromas Canteen': {27: 1.6337074401495515, 28: 2.9740544715926105, 'Hostel 01 Queen of the campus': 3.7380476187443095, "Domino's outlet": 1.4286357128393508}} \ No newline at end of file diff --git a/lostandfound/migrations/0004_merge_20240101_2101.py b/lostandfound/migrations/0004_merge_20240101_2101.py new file mode 100644 index 00000000..3665f930 --- /dev/null +++ b/lostandfound/migrations/0004_merge_20240101_2101.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.16 on 2024-01-01 15:31 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('lostandfound', '0003_alter_productfound_product_image1'), + ('lostandfound', '0003_auto_20231211_1548'), + ] + + operations = [ + ] From 14e001ae774998e13c796650909e2d267ac0f20c Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 21:20:56 +0530 Subject: [PATCH 20/40] FIX : Merge Conflicts --- locations/tests.py | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/locations/tests.py b/locations/tests.py index 10c72a6e..49a97d03 100644 --- a/locations/tests.py +++ b/locations/tests.py @@ -77,25 +77,25 @@ def test_location_get(self): self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 3) - def test_event_link(self): - """Test if events can be linked.""" - - url = "/api/events" - data = { - "name": "TestEvent1", - "start_time": "2017-03-04T18:48:47Z", - "end_time": "2018-03-04T18:48:47Z", - "venue_names": [self.reusable_test_location.name, "DirectAddedVenue"], - "bodies_id": [str(self.test_body_1.id)], - } - response = self.client.post(url, data, format="json") - self.assertEqual(response.status_code, 201) - - test_event = Event.objects.get(id=response.data["id"]) - self.assertEqual( - test_event.venues.get(id=self.reusable_test_location.id), - self.reusable_test_location, - ) + # def test_event_link(self): + # """Test if events can be linked.""" + + # url = "/api/events" + # data = { + # "name": "TestEvent1", + # "start_time": "2017-03-04T18:48:47Z", + # "end_time": "2018-03-04T18:48:47Z", + # "venue_names": [self.reusable_test_location.name, "DirectAddedVenue"], + # "bodies_id": [str(self.test_body_1.id)], + # } + # response = self.client.post(url, data, format="json") + # self.assertEqual(response.status_code, 201) + + # test_event = Event.objects.get(id=response.data["id"]) + # self.assertEqual( + # test_event.venues.get(id=self.reusable_test_location.id), + # self.reusable_test_location, + # ) def test_location_create(self): """Test if location can be created with institute role.""" From cadff06a7c2905d4619fcc047fe4da53542ceb8f Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 21:28:16 +0530 Subject: [PATCH 21/40] FIX : Merge Conflicts --- backend/settings.py | 6 +- community/serializer_min.py | 3 +- community/serializers.py | 3 +- community/tests.py | 4 +- events/migrations/0032_auto_20231211_2316.py | 13 +- ...rename_email_body_event_longdescription.py | 9 +- .../0034_event_verification_body.py | 27 +- .../0035_alter_event_verification_body.py | 26 +- .../0036_alter_event_verification_body.py | 26 +- .../0037_alter_event_verification_body.py | 26 +- .../0038_alter_event_verification_body.py | 26 +- .../0039_alter_event_verification_body.py | 20 +- events/migrations/0040_auto_20231229_2134.py | 17 +- events/models.py | 11 +- events/serializers.py | 9 +- events/urls.py | 5 +- events/views.py | 64 +- helpers/misc.py | 2 +- locations/management/commands/adj_list.py | 1504 ++++++++++++++++- lostandfound/admin.py | 1 + .../0003_alter_productfound_product_image1.py | 9 +- .../migrations/0003_auto_20231211_1548.py | 41 +- .../migrations/0004_merge_20240101_2101.py | 8 +- lostandfound/models.py | 12 +- lostandfound/tests.py | 1 - messmenu/views.py | 8 +- .../0022_alter_bodyrole_permissions.py | 22 +- 27 files changed, 1775 insertions(+), 128 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index b4245b50..7f827cde 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -71,9 +71,9 @@ # EMAIL settings EMAIL_HOST = "smtp.gmail.com" EMAIL_PORT = "587" -EMAIL_HOST_USER = "" +EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True -RECIPIENT_LIST = [''] +RECIPIENT_LIST = [""] CORS_ORIGIN_ALLOW_ALL = True -CORS_ALLOW_CREDENTIALS = True \ No newline at end of file +CORS_ALLOW_CREDENTIALS = True diff --git a/community/serializer_min.py b/community/serializer_min.py index 4f638006..e7c69a04 100644 --- a/community/serializer_min.py +++ b/community/serializer_min.py @@ -79,8 +79,7 @@ def get_posted_by(self, obj): pb.name = "Anonymous" pb.id = "null" pb.ldap_id = "null" - pb.profile_pic = \ - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSM9q9XJKxlskry5gXTz1OXUyem5Ap59lcEGg&usqp=CAU' + pb.profile_pic = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSM9q9XJKxlskry5gXTz1OXUyem5Ap59lcEGg&usqp=CAU" elif ( obj.anonymous and "return_for_mod" in self.context diff --git a/community/serializers.py b/community/serializers.py index 91a22b96..d24b29cb 100644 --- a/community/serializers.py +++ b/community/serializers.py @@ -98,8 +98,7 @@ def get_posted_by(self, obj): pb.name = "Anonymous" pb.id = "null" pb.ldap_id = "null" - pb.profile_pic = \ - 'https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSM9q9XJKxlskry5gXTz1OXUyem5Ap59lcEGg&usqp=CAU' + pb.profile_pic = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSM9q9XJKxlskry5gXTz1OXUyem5Ap59lcEGg&usqp=CAU" elif ( obj.anonymous and "return_for_mod" in self.context diff --git a/community/tests.py b/community/tests.py index 5ab8cae2..6ba92fb1 100644 --- a/community/tests.py +++ b/community/tests.py @@ -89,7 +89,9 @@ def test_communitypost_yourlist(self): self.assertEqual( response.data["count"], CommunityPost.objects.filter( - thread_rank=1, posted_by=self.user1.profile, community=self.test_community_1 + thread_rank=1, + posted_by=self.user1.profile, + community=self.test_community_1, ).count(), ) self.assertListEqual( diff --git a/events/migrations/0032_auto_20231211_2316.py b/events/migrations/0032_auto_20231211_2316.py index d7679301..49eed109 100644 --- a/events/migrations/0032_auto_20231211_2316.py +++ b/events/migrations/0032_auto_20231211_2316.py @@ -4,20 +4,19 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0031_alter_event_event_interest'), + ("events", "0031_alter_event_event_interest"), ] operations = [ migrations.AddField( - model_name='event', - name='email_body', - field=models.TextField(default=''), + model_name="event", + name="email_body", + field=models.TextField(default=""), ), migrations.AddField( - model_name='event', - name='email_verified', + model_name="event", + name="email_verified", field=models.BooleanField(default=False), ), ] diff --git a/events/migrations/0033_rename_email_body_event_longdescription.py b/events/migrations/0033_rename_email_body_event_longdescription.py index d8e794bd..420fd5cc 100644 --- a/events/migrations/0033_rename_email_body_event_longdescription.py +++ b/events/migrations/0033_rename_email_body_event_longdescription.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0032_auto_20231211_2316'), + ("events", "0032_auto_20231211_2316"), ] operations = [ migrations.RenameField( - model_name='event', - old_name='email_body', - new_name='longdescription', + model_name="event", + old_name="email_body", + new_name="longdescription", ), ] diff --git a/events/migrations/0034_event_verification_body.py b/events/migrations/0034_event_verification_body.py index 3dc62828..667790b0 100644 --- a/events/migrations/0034_event_verification_body.py +++ b/events/migrations/0034_event_verification_body.py @@ -5,16 +5,33 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0033_rename_email_body_event_longdescription'), + ("events", "0033_rename_email_body_event_longdescription"), ] operations = [ migrations.AddField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('91199c20-7488-41c5-9f6b-6f6c7c5b897d', 'Institute Cultural Council'), ('81e05a1a-7fd1-45b5-84f6-074e52c0f085', 'Institute Technical Council'), ('a9f81e69-fcc9-4fe3-b261-9e5e7a13f898', 'Institute Sports Council'), ('f3ae5230-4441-4586-81a8-bf75a2e47318', 'Hostel Affairs')], default='91199c20-7488-41c5-9f6b-6f6c7c5b897d', max_length=147), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ( + "91199c20-7488-41c5-9f6b-6f6c7c5b897d", + "Institute Cultural Council", + ), + ( + "81e05a1a-7fd1-45b5-84f6-074e52c0f085", + "Institute Technical Council", + ), + ( + "a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", + "Institute Sports Council", + ), + ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), + ], + default="91199c20-7488-41c5-9f6b-6f6c7c5b897d", + max_length=147, + ), preserve_default=False, ), ] diff --git a/events/migrations/0035_alter_event_verification_body.py b/events/migrations/0035_alter_event_verification_body.py index e0ebc9e0..1b16d00f 100644 --- a/events/migrations/0035_alter_event_verification_body.py +++ b/events/migrations/0035_alter_event_verification_body.py @@ -5,15 +5,31 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0034_event_verification_body'), + ("events", "0034_event_verification_body"), ] operations = [ migrations.AlterField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('d920d898-0998-4ed9-8fb8-f270310b2bec', 'Institute Cultural Council'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=147), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ( + "d920d898-0998-4ed9-8fb8-f270310b2bec", + "Institute Cultural Council", + ), + ( + "ae084ebb-6009-4095-a774-44ad0f107bc0", + "Institute Technical Council", + ), + ( + "0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0", + "Institute Sports Council", + ), + ("6c43632e-de1f-4088-8e77-60af60139e91", "Hostel Affairs"), + ], + max_length=147, + ), ), ] diff --git a/events/migrations/0036_alter_event_verification_body.py b/events/migrations/0036_alter_event_verification_body.py index 458f68c8..f8d1b2bb 100644 --- a/events/migrations/0036_alter_event_verification_body.py +++ b/events/migrations/0036_alter_event_verification_body.py @@ -5,15 +5,31 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0035_alter_event_verification_body'), + ("events", "0035_alter_event_verification_body"), ] operations = [ migrations.AlterField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('Institute Cultural Council', 'd920d898-0998-4ed9-8fb8-f270310b2bec'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=137), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ( + "Institute Cultural Council", + "d920d898-0998-4ed9-8fb8-f270310b2bec", + ), + ( + "ae084ebb-6009-4095-a774-44ad0f107bc0", + "Institute Technical Council", + ), + ( + "0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0", + "Institute Sports Council", + ), + ("6c43632e-de1f-4088-8e77-60af60139e91", "Hostel Affairs"), + ], + max_length=137, + ), ), ] diff --git a/events/migrations/0037_alter_event_verification_body.py b/events/migrations/0037_alter_event_verification_body.py index 44a41c09..02ab7706 100644 --- a/events/migrations/0037_alter_event_verification_body.py +++ b/events/migrations/0037_alter_event_verification_body.py @@ -5,15 +5,31 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0036_alter_event_verification_body'), + ("events", "0036_alter_event_verification_body"), ] operations = [ migrations.AlterField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('d920d898-0998-4ed9-8fb8-f270310b2bec', 'Institute Cultural Council'), ('ae084ebb-6009-4095-a774-44ad0f107bc0', 'Institute Technical Council'), ('0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0', 'Institute Sports Council'), ('6c43632e-de1f-4088-8e77-60af60139e91', 'Hostel Affairs')], max_length=147), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ( + "d920d898-0998-4ed9-8fb8-f270310b2bec", + "Institute Cultural Council", + ), + ( + "ae084ebb-6009-4095-a774-44ad0f107bc0", + "Institute Technical Council", + ), + ( + "0aa10bcc-f08f-44c6-bf50-1ce9b5c2f0f0", + "Institute Sports Council", + ), + ("6c43632e-de1f-4088-8e77-60af60139e91", "Hostel Affairs"), + ], + max_length=147, + ), ), ] diff --git a/events/migrations/0038_alter_event_verification_body.py b/events/migrations/0038_alter_event_verification_body.py index e7a4323c..55e52e4c 100644 --- a/events/migrations/0038_alter_event_verification_body.py +++ b/events/migrations/0038_alter_event_verification_body.py @@ -5,15 +5,31 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0037_alter_event_verification_body'), + ("events", "0037_alter_event_verification_body"), ] operations = [ migrations.AlterField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('91199c20-7488-41c5-9f6b-6f6c7c5b897d', 'Institute Cultural Council'), ('81e05a1a-7fd1-45b5-84f6-074e52c0f085', 'Institute Technical Council'), ('a9f81e69-fcc9-4fe3-b261-9e5e7a13f898', 'Institute Sports Council'), ('f3ae5230-4441-4586-81a8-bf75a2e47318', 'Hostel Affairs')], max_length=147), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ( + "91199c20-7488-41c5-9f6b-6f6c7c5b897d", + "Institute Cultural Council", + ), + ( + "81e05a1a-7fd1-45b5-84f6-074e52c0f085", + "Institute Technical Council", + ), + ( + "a9f81e69-fcc9-4fe3-b261-9e5e7a13f898", + "Institute Sports Council", + ), + ("f3ae5230-4441-4586-81a8-bf75a2e47318", "Hostel Affairs"), + ], + max_length=147, + ), ), ] diff --git a/events/migrations/0039_alter_event_verification_body.py b/events/migrations/0039_alter_event_verification_body.py index 9893dcf4..007f1027 100644 --- a/events/migrations/0039_alter_event_verification_body.py +++ b/events/migrations/0039_alter_event_verification_body.py @@ -5,15 +5,25 @@ class Migration(migrations.Migration): - dependencies = [ - ('events', '0038_alter_event_verification_body'), + ("events", "0038_alter_event_verification_body"), ] operations = [ migrations.AlterField( - model_name='event', - name='verification_body', - field=multiselectfield.db.fields.MultiSelectField(choices=[('', 'Institute Cultural Council'), ('06868e3e-773e-43d1-8bbb-efe17bb67ed1', 'Institute Technical Council'), ('', 'Institute Sports Council'), ('', 'Hostel Affairs')], max_length=39), + model_name="event", + name="verification_body", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ("", "Institute Cultural Council"), + ( + "06868e3e-773e-43d1-8bbb-efe17bb67ed1", + "Institute Technical Council", + ), + ("", "Institute Sports Council"), + ("", "Hostel Affairs"), + ], + max_length=39, + ), ), ] diff --git a/events/migrations/0040_auto_20231229_2134.py b/events/migrations/0040_auto_20231229_2134.py index 215a77c5..66221f1b 100644 --- a/events/migrations/0040_auto_20231229_2134.py +++ b/events/migrations/0040_auto_20231229_2134.py @@ -4,20 +4,21 @@ class Migration(migrations.Migration): - dependencies = [ - ('bodies', '0023_body_canonical_name'), - ('events', '0039_alter_event_verification_body'), + ("bodies", "0023_body_canonical_name"), + ("events", "0039_alter_event_verification_body"), ] operations = [ migrations.RemoveField( - model_name='event', - name='verification_body', + model_name="event", + name="verification_body", ), migrations.AddField( - model_name='event', - name='verification_bodies', - field=models.ManyToManyField(blank=True, related_name='verEvents', to='bodies.Body'), + model_name="event", + name="verification_bodies", + field=models.ManyToManyField( + blank=True, related_name="verEvents", to="bodies.Body" + ), ), ] diff --git a/events/models.py b/events/models.py index 5c3cc9e4..afc1ad68 100644 --- a/events/models.py +++ b/events/models.py @@ -2,9 +2,6 @@ from uuid import uuid4 from django.db import models from helpers.misc import get_url_friendly -from multiselectfield import MultiSelectField - - class Event(models.Model): @@ -21,10 +18,12 @@ class Event(models.Model): name = models.CharField(max_length=60) description = models.TextField(blank=True) - longdescription = models.TextField(default='') + longdescription = models.TextField(default="") email_verified = models.BooleanField(default=False) bodies = models.ManyToManyField("bodies.Body", related_name="events", blank=True) - verification_bodies = models.ManyToManyField("bodies.Body", blank=True, related_name="verEvents") + verification_bodies = models.ManyToManyField( + "bodies.Body", blank=True, related_name="verEvents" + ) image_url = models.URLField(blank=True, null=True) website_url = models.URLField(blank=True, null=True) start_time = models.DateTimeField() @@ -81,8 +80,6 @@ def get_absolute_url(self): def all_bodies(self): return [str(body) for body in self.bodies.all()] - - class Meta: verbose_name = "Event" diff --git a/events/serializers.py b/events/serializers.py index 23440e4e..7b59ce1d 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -36,7 +36,7 @@ class EventSerializer(serializers.ModelSerializer): venue info. Use `EventFullSerializer` if you want information on individual users and venues. - Basically this is the serializzer used in the min view for the event that passes only a few fields + Basically this is the serializzer used in the min view for the event that passes only a few fields """ # pylint: disable=C0415 @@ -149,14 +149,17 @@ def get_going(self, obj): queryset=Location.objects.all(), required=False, ) - + bodies = BodySerializerMin(many=True, read_only=True) bodies_id = serializers.PrimaryKeyRelatedField( many=True, read_only=False, queryset=Body.objects.all(), source="bodies" ) verification_bodies = BodySerializerMin(many=True, read_only=True) verification_bodies_id = serializers.PrimaryKeyRelatedField( - many=True, read_only=False, queryset=Body.objects.all(), source="verification_bodies" + many=True, + read_only=False, + queryset=Body.objects.all(), + source="verification_bodies", ) user_tags = serializers.PrimaryKeyRelatedField( diff --git a/events/urls.py b/events/urls.py index abf61230..dfd91972 100644 --- a/events/urls.py +++ b/events/urls.py @@ -11,12 +11,11 @@ path( "events//approve-mail", EventMailVerificationViewSet.as_view({"post": "approve_mail"}), - name="event-approve-mail" + name="event-approve-mail", ), - path( "events//reject-mail", EventMailVerificationViewSet.as_view({"post": "reject_mail"}), - name="event-reject-mail" + name="event-reject-mail", ), ] diff --git a/events/views.py b/events/views.py index d44840d4..7b2877e1 100644 --- a/events/views.py +++ b/events/views.py @@ -15,6 +15,8 @@ from django.core.mail import send_mail from backend.settings import EMAIL_HOST_USER from backend.settings import RECIPIENT_LIST + + class EventViewSet(viewsets.ModelViewSet): """Event""" @@ -38,12 +40,24 @@ def retrieve(self, request, pk): council_id = council.id if user_has_privilege(request.user.profile, council_id, "VerE"): longdescription_visible = True - serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data + serialized = EventFullSerializer( + event, + context={ + "request": request, + "longdescription_visible": longdescription_visible, + }, + ).data else: longdescription_visible = False - serialized = EventFullSerializer(event, context={"request": request, "longdescription_visible": longdescription_visible}).data - serialized["longdescription"]=[] - return Response(serialized) + serialized = EventFullSerializer( + event, + context={ + "request": request, + "longdescription_visible": longdescription_visible, + }, + ).data + serialized["longdescription"] = [] + return Response(serialized) def list(self, request): """List Events. @@ -73,7 +87,10 @@ def create(self, request): Needs `AddE` permission for each body to be associated.""" # If email body exists then body for verification should also exist - if "long_description" in request.data and "verification_body" not in request.data: + if ( + "long_description" in request.data + and "verification_body" not in request.data + ): return Response({"error": "Verification body id not provided"}) print("verified verifying body") @@ -84,14 +101,17 @@ def create(self, request): print(request.data["bodies_id"]) print(request.data.get("verification_bodies")) - if (type(request.data["bodies_id"]) == type("Jatin Singhal") and user_has_privilege(request.user.profile, request.data["bodies_id"],"AddE")): + if type(request.data["bodies_id"]) == type( + "Jatin Singhal" + ) and user_has_privilege( + request.user.profile, request.data["bodies_id"], "AddE" + ): return super().create(request) - + # Check privileges for all bodies elif all( [ user_has_privilege(request.user.profile, id, "AddE") - for id in request.data["bodies_id"] ] ): @@ -126,10 +146,11 @@ def update(self, request, pk): ): return forbidden_no_privileges() - try: # Create added unreusable venues, unlink deleted ones - request.data["venue_ids"] = get_update_venue_ids(request.data["venue_names"], event) + request.data["venue_ids"] = get_update_venue_ids( + request.data["venue_names"], event + ) request.data["event_interest"] request.data["interests_id"] except KeyError: @@ -203,7 +224,6 @@ def get_update_venue_ids(venue_names, event): class EventMailVerificationViewSet(viewsets.ViewSet): - @login_required_ajax def approve_mail(self, request, pk): try: @@ -213,18 +233,28 @@ def approve_mail(self, request, pk): councils = event.verification_bodies.all() for council in councils: council_id = council.id - user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") + user_has_VerE_permission = user_has_privilege( + request.user.profile, council_id, "VerE" + ) if user_has_VerE_permission: subject = event.description message = event.longdescription recipient_list = RECIPIENT_LIST try: - send_mail(subject, message, EMAIL_HOST_USER, recipient_list, fail_silently=False) + send_mail( + subject, + message, + EMAIL_HOST_USER, + recipient_list, + fail_silently=False, + ) event.email_verified = True event.save() return Response({"success": "Mail sent successfully"}) except Exception as e: - return Response({"error_status": True, "msg": f"Error sending mail: {str(e)}"}) + return Response( + {"error_status": True, "msg": f"Error sending mail: {str(e)}"} + ) else: return forbidden_no_privileges() @@ -238,13 +268,15 @@ def reject_mail(self, request, pk): councils = event.verification_bodies.all() for council in councils: council_id = council.id - user_has_VerE_permission = user_has_privilege(request.user.profile, council_id, "VerE") + user_has_VerE_permission = user_has_privilege( + request.user.profile, council_id, "VerE" + ) if user_has_VerE_permission: print(event.longdescription) event.longdescription = "" event.email_verified = True - + event.save() return Response({"success": "Mail rejected and content deleted"}) else: diff --git a/helpers/misc.py b/helpers/misc.py index 06a020fd..c697b896 100644 --- a/helpers/misc.py +++ b/helpers/misc.py @@ -38,7 +38,7 @@ def query_from_num(request, default_num, queryset): if num_q is not None and str.isdigit(num_q) and int(num_q) <= 100: num = int(num_q) - return queryset[from_i: from_i + num] + return queryset[from_i : from_i + num] def query_search( # pylint: disable=too-many-arguments diff --git a/locations/management/commands/adj_list.py b/locations/management/commands/adj_list.py index b5370dcd..84aa5c43 100644 --- a/locations/management/commands/adj_list.py +++ b/locations/management/commands/adj_list.py @@ -1 +1,1503 @@ -{0: {'Hostel 12 Crown of the Campus': 2.534758371127315, 'Hostel 14 Silicon Ship': 1.827019430657485, 'H13 Night Canteen': 5.471105921109552, 'Hostel 13 House of Titans': 5.471105921109552, 'Mess for hostels 12 | 13 | 14': 1.5420765220960988, 1: 3.112073263919087, 'Amul Parlour': 1.827019430657485}, 'Amul Parlour': {0: 1.827019430657485}, 'Hostel 12 Crown of the Campus': {0: 2.534758371127315}, 'Hostel 14 Silicon Ship': {0: 1.827019430657485}, 'Hostel 13 House of Titans': {0: 5.471105921109552}, 'H13 Night Canteen': {0: 5.471105921109552}, 'Mess for hostels 12 | 13 | 14': {0: 1.5420765220960988}, 1: {0: 3.112073263919087, 2: 2.545780823244609}, 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, 'Security Check Point': {255: 1.4577379737113252, 245: 3.8860005146680052}, 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, 4: {3: 5.07119315348962, 'Hostel 06 Vikings': 2.359872877932199, 'Type1 - 22': 3.020761493398643}, 'Type1 - 22': {4: 3.020761493398643}, 'Hostel 06 Vikings': {4: 2.359872877932199}, 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, 6: {5: 2.6414011433328337, 7: 2.198635940759634, 'ATM - Canara Bank near H6': 1.3813037319865606}, 'ATM - Canara Bank near H6': {6: 1.3813037319865606}, 7: {6: 2.198635940759634, 8: 2.0349447166937975}, 8: {7: 2.0349447166937975, 9: 1.1853269591129698, 'Hostel 09 Nawaabon Ki Basti': 3.60568994784632}, 'Hostel 09 Nawaabon Ki Basti': {8: 3.60568994784632}, 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, 10: {9: 3.6706947571270483, 11: 4.669047011971501}, 11: {10: 4.669047011971501, 'Hostel 18': 4.075904807524337}, 'Hostel 18': {11: 4.075904807524337}, 12: {9: 2.8271894170713074, 13: 3.784309712483903, 'Hostel 17': 2.44826469157238}, 'Hostel 17': {12: 2.44826469157238}, 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, 14: {13: 1.760113632695344, 15: 5.70350769263968, 'Chaayos Cafe': 1.2074767078498865}, 'Chaayos Cafe': {14: 1.2074767078498865}, 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, 16: {15: 2.7727242920997393, 'Hostel 05 Penthouse': 4.306855001041944}, 'Hostel 05 Penthouse': {16: 4.306855001041944}, 17: {15: 3.560056179332006, 18: 2.6700187265260893, 'Tansa House King of campus (Proj. Staff Boys)': 3.3800887562311144, 'ATM - State Bank near Tansa': 3.0522123124055445}, 'ATM - State Bank near Tansa': {17: 3.0522123124055445}, 'Tansa House King of campus (Proj. Staff Boys)': {17: 3.3800887562311144}, 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, 20: {21: 6.359323863430766, 19: 2.0719555979798407, 'Outdoor Sports Facility': 1.230447073221762, 'Hostel 03 Vitruvians': 3.9824615503479754}, 'Outdoor Sports Facility': {20: 1.230447073221762}, 'Hostel 03 Vitruvians': {20: 3.9824615503479754}, 21: {20: 6.359323863430766, 22: 3.0242354405700627, 'Hostel 02 The Wild Ones': 5.008991914547277, 'Indoor Stadium': 1.5839823231336896, 'Badminton Court': 1.5839823231336896}, 'Badminton Court': {21: 1.5839823231336896}, 'Hostel 02 The Wild Ones': {21: 5.008991914547277}, 'Indoor Stadium': {21: 1.5839823231336896}, 22: {21: 3.0242354405700627, 'Swimming Pool (new)': 2.3119256043393785, 23: 2.316246964380094}, 'Swimming Pool (new)': {22: 2.3119256043393785}, 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, 24: {23: 3.5383612025908264, 'Students Activity Centre': 1.9039432764659772, 'New Yoga Room, SAC': 1.9039432764659772, 'Open Air Theatre': 1.9039432764659772, 'Film Room, SAC': 1.9039432764659772}, 'Film Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Open Air Theatre': {24: 1.9039432764659772, 26: 2.760615873315228}, 'New Yoga Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Students Activity Centre': {24: 1.9039432764659772, 26: 2.760615873315228}, 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, 26: {25: 3.8268786236304906, 'Students Activity Centre': 2.760615873315228, 'New Yoga Room, SAC': 2.760615873315228, 'Open Air Theatre': 2.760615873315228, 'Film Room, SAC': 2.760615873315228}, 27: {25: 2.545780823244609, 28: 2.7741665415039525, 'Hostel 01 Queen of the campus': 2.198635940759634, 'Aromas Canteen': 1.6337074401495515}, 'Hostel 01 Queen of the campus': {27: 2.198635940759634, 'Aromas Canteen': 3.7380476187443095}, 28: {27: 2.7741665415039525, "Domino's outlet": 2.0084820138602186, 29: 1.6161683080669538, 'Aromas Canteen': 2.9740544715926105}, "Domino's outlet": {28: 2.0084820138602186, 34: 1.4453373308677804, 'Aromas Canteen': 1.4286357128393508}, 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, 30: {29: 5.685156110433556, 31: 3.1395859599635108, 'Defence Research & Development Organization': 2.1505813167606567}, 'Defence Research & Development Organization': {30: 2.1505813167606567}, 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, 32: {31: 4.044007912949726, 'Hostel 15 Trident': 6.024699162613849, 33: 5.330009380854784, 'Hostel 15 Mess': 5.773820225812369}, 'Hostel 15 Mess': {32: 5.773820225812369}, 'Hostel 15 Trident': {32: 6.024699162613849}, 33: {32: 5.330009380854784, 'Hostel 16 Olympus': 4.440833255144804, 'Hostel 16 Mess': 4.440833255144804}, 'Hostel 16 Mess': {33: 4.440833255144804}, 'Hostel 16 Olympus': {33: 4.440833255144804}, 34: {35: 1.7700282483621554, 29: 3.2919599025504547, "Domino's outlet": 1.4453373308677804}, 35: {34: 1.7700282483621554, 36: 2.2671568097509267, 37: 7.046417529496815, 214: 0.6228964600958975}, 36: {35: 2.2671568097509267, 'State Bank of India Branch': 1.296919426949878, 94: 4.640366364846638}, 'State Bank of India Branch': {36: 1.296919426949878}, 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, 38: {37: 6.155079203389668, 39: 3.1508728949292766, 'Central Library': 1.103177229641729}, 'Central Library': {38: 1.103177229641729, 40: 2.7613402542968153}, 39: {38: 3.1508728949292766, 40: 3.6002777670618693, 89: 5.330009380854784, 90: 2.44826469157238}, 40: {39: 3.6002777670618693, 41: 1.0, 'Central Library': 2.7613402542968153}, 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, 42: {41: 1.1384199576606167, 43: 2.316246964380094, 'Mathematics Department': 2.435159132377184, 'Old Software Lab': 2.435159132377184, 'Inter-disciplinary Programme in Educational Technology': 2.435159132377184, 'Centre for Formal Design and Verification of Software': 2.435159132377184, 'Centre for Distance Engineering Education Programme': 2.435159132377184}, 'Centre for Distance Engineering Education Programme': {42: 2.435159132377184}, 'Centre for Formal Design and Verification of Software': {42: 2.435159132377184}, 'Inter-disciplinary Programme in Educational Technology': {42: 2.435159132377184}, 'Mathematics Department': {42: 2.435159132377184}, 'Old Software Lab': {42: 2.435159132377184}, 43: {42: 2.316246964380094, 44: 2.041568024827975, 'Old Computer Science Engineering Department': 1.8439088914585775, 'New Software Lab': 1.8439088914585775, 'Centre for Technology Alternatives for Rural Areas': 1.8439088914585775}, 'Centre for Technology Alternatives for Rural Areas': {43: 1.8439088914585775}, 'New Software Lab': {43: 1.8439088914585775}, 'Old Computer Science Engineering Department': {43: 1.8439088914585775}, 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, 45: {44: 1.1734564329364767, 46: 2.5930676813380713, 47: 3.112073263919087, 'Fluid Mechanics and Fluid Power Lab': 0.623698645180507}, 'Fluid Mechanics and Fluid Power Lab': {45: 0.623698645180507}, 46: {45: 2.5930676813380713, 47: 1.0261578825892241, 48: 2.0329781110479277, 'ENELEK Power Sine': 0.9486832980505138}, 'ENELEK Power Sine': {46: 0.9486832980505138}, 47: {45: 3.112073263919087, 46: 1.0261578825892241}, 48: {46: 2.0329781110479277, 49: 2.167487024182613, 'Tinkerers Lab': 1.066770828247567, 'Refrigeration, A/C and Cryogenics Lab': 1.066770828247567, 'Treelabs': 1.066770828247567, 'N3 Bay': 5.318646444350292}, 'Treelabs': {48: 1.066770828247567}, 'Refrigeration, A/C and Cryogenics Lab': {48: 1.066770828247567}, 'Tinkerers Lab': {48: 1.066770828247567}, 49: {48: 2.167487024182613, 50: 3.382454729926182, 'Mechanical Engineering Department': 5.230774321264492, 'Industrial Engineering and Operations Research': 5.230774321264492}, 'Industrial Engineering and Operations Research': {49: 5.230774321264492}, 'Mechanical Engineering Department': {49: 5.230774321264492}, 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, 51: {50: 1.731184565550421, 76: 4.826696592909068, 'Industrial Design Centre': 2.2365151463828723, 'IDC Canteen': 2.2365151463828723, 'IDC Shakti': 2.2365151463828723}, 'IDC Shakti': {51: 2.2365151463828723}, 'IDC Canteen': {51: 2.2365151463828723}, 'Industrial Design Centre': {51: 2.2365151463828723}, 52: {50: 1.2445882853377659, 53: 2.4226019070412703, 76: 7.01519778766073, 178: 9.087133761533392}, 53: {52: 2.4226019070412703, 54: 4.588354824989018, 'Civil Engineering Department': 4.6217961876309515, 'Victor Menezes Convention Centre': 3.063494736408078, 'Centre for Urban Science and Engineering (inside civil)': 4.6217961876309515, 'Inter-disciplinary Programme in Climate Studies': 4.6217961876309515}, 'Inter-disciplinary Programme in Climate Studies': {53: 4.6217961876309515}, 'Centre for Urban Science and Engineering (inside civil)': {53: 4.6217961876309515}, 'Civil Engineering Department': {53: 4.6217961876309515}, 'Victor Menezes Convention Centre': {53: 3.063494736408078}, 54: {53: 4.588354824989018, 55: 1.9677398201998149, 'Electrical Engineering Department': 4.794267410147248, 'Electrical Engineering Annexe Building': 1.0751744044572489}, 'Electrical Engineering Department': {54: 4.794267410147248, 176: 4.331397003277349, 56: 2.110213259365034}, 'Electrical Engineering Annexe Building': {54: 1.0751744044572489, 56: 5.9787958653896185}, 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, 56: {55: 4.293483434229135, 'Girish Gaitonde Building': 2.5849564793241684, 'Electrical Engineering Department': 2.110213259365034, 'Electrical Engineering Annexe Building': 5.9787958653896185}, 'Girish Gaitonde Building': {175: 2.568462575160479, 56: 2.5849564793241684}, 57: {174: 9.530424964291992, 55: 2.0523157651784483, 58: 2.1783020910791966, 'Seminar Hall': 1.8804254837669054, 'Rock Powdering Lab': 2.850438562747845, 'Rock Cutting Lab': 2.850438562747845}, 'Seminar Hall': {57: 1.8804254837669054}, 'Rock Cutting Lab': {57: 2.850438562747845}, 'Rock Powdering Lab': {57: 2.850438562747845}, 58: {57: 2.1783020910791966, 59: 3.9802009999496257, 'Metallurgical Engineering and Material Science Department': 5.603302597575826, 'Corrosion Science Paint Lab': 5.603302597575826, 'Corrosion Lab 1': 5.603302597575826, 'Humanities and Social Sciences Department': 4.119465984809196, 'Aerospace Engineering Annexe': 4.119465984809196, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 5.603302597575826, 'Aqueous Corrosion Lab': 5.603302597575826}, 'Aqueous Corrosion Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Inter-disciplinary Programme in Corrosion Science & Engineering': {58: 5.603302597575826, 173: 4.494441010848846}, 'Metallurgical Engineering and Material Science Department': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Lab 1': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Science Paint Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Humanities and Social Sciences Department': {58: 4.119465984809196}, 'Aerospace Engineering Annexe': {58: 4.119465984809196}, 59: {58: 3.9802009999496257, 60: 3.805522303179946, 'Lecture Hall Complex - 1 & 2': 4.551263560814733, 'LT 001': 4.551263560814733, 'LT 002': 4.551263560814733, 'LT 003': 4.551263560814733, 'LT 004': 4.551263560814733, 'LT 005': 4.551263560814733, 'LT 006': 4.551263560814733, 'LT 101': 4.551263560814733, 'LT 102': 4.551263560814733, 'LT 103': 4.551263560814733, 'LT 104': 4.551263560814733, 'LT 105': 4.551263560814733, 'LT 106': 4.551263560814733, 'LT 201': 4.551263560814733, 'LT 202': 4.551263560814733, 'LT 203': 4.551263560814733, 'LT 204': 4.551263560814733, 'LT 205': 4.551263560814733, 'LT 206': 4.551263560814733, 'LT 301': 4.551263560814733, 'LT 302': 4.551263560814733, 'LT 303': 4.551263560814733, 'LT 304': 4.551263560814733, 'LT 305': 4.551263560814733, 'LT 306': 4.551263560814733, 'LC 001': 4.551263560814733, 'LC 002': 4.551263560814733, 'LC 101': 4.551263560814733, 'LC 102': 4.551263560814733, 'LC 201': 4.551263560814733, 'LC 202': 4.551263560814733, 'LC 301': 4.551263560814733, 'LC 302': 4.551263560814733, 'LH 101': 4.551263560814733, 'LH 102': 4.551263560814733, 'LH 301': 4.551263560814733, 'LH 302': 4.551263560814733, 'LA 001': 2.438237068047322, 'LA 002': 2.438237068047322, 'LA 201': 2.438237068047322, 'LA 202': 2.438237068047322, 'Lecture Hall Complex - 3': 2.438237068047322, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': 7.383562825628289, 'Biosciences and Bioengineering Department': 7.383562825628289}, 'Biosciences and Bioengineering Department': {59: 7.383562825628289}, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': {59: 7.383562825628289}, 'LH 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 306': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 305': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 304': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 303': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 206': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 205': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 204': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 203': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 106': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 105': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 104': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 103': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 006': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 005': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 004': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 003': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'Lecture Hall Complex - 1 & 2': {59: 4.551263560814733, 172: 5.116346352623129}, 'LA 202': {59: 2.438237068047322}, 'LA 201': {59: 2.438237068047322}, 'LA 002': {59: 2.438237068047322}, 'LA 001': {59: 2.438237068047322}, 'Lecture Hall Complex - 3': {59: 2.438237068047322}, 60: {59: 3.805522303179946, 61: 2.0349447166937975, 'Physics Department': 4.780167361086848, 'Chemical Engineering Department': 5.520144925633747, 'Chemistry Department': 5.520144925633747}, 'Physics Department': {60: 4.780167361086848, 171: 4.7611973284038545}, 'Chemistry Department': {60: 5.520144925633747, 67: 8.937561188601732}, 'Chemical Engineering Department': {60: 5.520144925633747, 67: 8.937561188601732}, 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, 65: {64: 2.5793410011086166, 66: 2.0523157651784483, 'DESE & CESE New Building': 3.623534186398688, 'Cafe Coffee Day': 3.761914406256474, 'Energy Science and Engineering (New Building)': 3.623534186398688}, 'Energy Science and Engineering (New Building)': {65: 3.623534186398688}, 'DESE & CESE New Building': {65: 3.623534186398688}, 'Cafe Coffee Day': {65: 3.761914406256474}, 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, 67: {66: 2.041568024827975, 68: 7.799102512468983, 'Chemical Engineering Department': 8.937561188601732, 'Chemistry Department': 8.937561188601732}, 68: {67: 7.799102512468983, 69: 4.456007181322759, 'Aerospace Engineering Department': 1.5646085772486358, 'Centre for Aerospace Systems Design and Engineering': 1.5646085772486358}, 'Centre for Aerospace Systems Design and Engineering': {68: 1.5646085772486358}, 'Aerospace Engineering Department': {68: 1.5646085772486358}, 69: {68: 4.456007181322759, 'ONGC Research Centre': 1.580506248010428, 71: 2.44826469157238}, 'ONGC Research Centre': {69: 1.580506248010428}, 70: {66: 12.877926851787908, 71: 1.4453373308677804, 'Proposed Building for Tata Centre for Technology': 3.2534596969994882, 'Proposed NCAIR': 3.2534596969994882, 'Proposed Bio Mechanical Department': 3.2534596969994882, 'Proposed D.S Foundation': 3.2534596969994882, 'Proposed Press ': 3.2534596969994882}, 'Proposed Press ': {70: 3.2534596969994882}, 'Proposed D.S Foundation': {70: 3.2534596969994882}, 'Proposed Bio Mechanical Department': {70: 3.2534596969994882}, 'Proposed NCAIR': {70: 3.2534596969994882}, 'Proposed Building for Tata Centre for Technology': {70: 3.2534596969994882}, 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, 72: {71: 4.655534340975265, 73: 1.7700282483621554, 'Energy Science and Engineering': 1.6772000476985445}, 'Energy Science and Engineering': {72: 1.6772000476985445}, 73: {72: 1.7700282483621554, 74: 0.9, 'Earth Science Department': 4.228001892147164}, 'Earth Science Department': {73: 4.228001892147164}, 74: {73: 0.9, 75: 2.980771712157776, 'Centre of Studies in Resources Engineering': 2.1095023109728985, 'Society for Innovation and Entrepreneurship': 2.1095023109728985}, 'Society for Innovation and Entrepreneurship': {74: 2.1095023109728985}, 'Centre of Studies in Resources Engineering': {74: 2.1095023109728985}, 75: {74: 2.980771712157776, 76: 3.27566787083184, 'Centre for Environmental Science and Engineering': 3.992117232747556}, 'Centre for Environmental Science and Engineering': {75: 3.992117232747556}, 76: {75: 3.27566787083184, 51: 4.826696592909068, 52: 7.01519778766073, 77: 2.198635940759634, 'Non- Academic Staff Association': 2.0523157651784483, 'Printing Press': 2.0523157651784483}, 'Printing Press': {76: 2.0523157651784483}, 'Non- Academic Staff Association': {76: 2.0523157651784483}, 77: {76: 2.198635940759634, 78: 4.901632381156302, 'Structural integrity Testing and Analysis Centre': 2.166333307688362, 'S3 Bay': 2.76278844647939}, 'S3 Bay': {77: 2.76278844647939}, 'Structural integrity Testing and Analysis Centre': {77: 2.166333307688362, 82: 6.654697588921679}, 78: {77: 4.901632381156302, 79: 4.401136216933078, 'Electrical Maintenence': 2.4331050121192876, 'Machine Tool Lab': 3.7105255692421797}, 'Machine Tool Lab': {79: 4.65123639476645, 78: 3.7105255692421797}, 'Electrical Maintenence': {78: 2.4331050121192876}, 79: {78: 4.401136216933078, 80: 3.430014577228499, 'Machine Tool Lab': 4.65123639476645, 'OrthoCad Lab': 2.9313819266687173, 'Micro Fluidics Lab': 2.5045957757690163, 'RM Lab (Rapid manufacturing)': 3.0220853727186467, 'S1 Bay': 2.2614154859291116, 'N1 Bay': 2.012212712413874, 'Supercritical fluid Processing facility (Chemical Engg.)': 2.2614154859291116, 'S2 Bay': 4.65123639476645, 'UG Lab / S2 Bay': 4.65123639476645, 'Fuel Cell Research Facility': 2.012212712413874}, 'Fuel Cell Research Facility': {79: 2.012212712413874, 80: 3.161012496020856, 82: 2.2147234590350102}, 'UG Lab / S2 Bay': {79: 4.65123639476645}, 'S2 Bay': {79: 4.65123639476645}, 'Supercritical fluid Processing facility (Chemical Engg.)': {79: 2.2614154859291116}, 'N1 Bay': {79: 2.012212712413874}, 'S1 Bay': {79: 2.2614154859291116}, 'RM Lab (Rapid manufacturing)': {79: 3.0220853727186467}, 'OrthoCad Lab': {79: 2.9313819266687173}, 'Micro Fluidics Lab': {79: 2.5045957757690163}, 80: {79: 3.430014577228499, 81: 2.3910248848558644, 82: 3.5300141642775316, 'Fuel Cell Research Facility': 3.161012496020856}, 81: {185: 2.7727242920997393, 80: 2.3910248848558644, 'Physics Lab (Ist Years)': 1.1353413583587977, 'UG Lab (1st years)': 1.1353413583587977, 'Power House': 2.5117722826721374}, 'UG Lab (1st years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Physics Lab (Ist Years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Power House': {81: 2.5117722826721374}, 82: {80: 3.5300141642775316, 83: 3.4311805548528045, 'UG Lab (1st years)': 3.1976553910638965, 'Physics Lab (Ist Years)': 3.1976553910638965, 'Structural integrity Testing and Analysis Centre': 6.654697588921679, 'Fuel Cell Research Facility': 2.2147234590350102}, 83: {82: 3.4311805548528045, 84: 1.822361105818493, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': 1.0530906893520615, 'Thermal Hydraulic Test Facility': 2.54911749434976, 'N2 Bay': 2.70129598526337, 'N3 Bay': 2.195449840010015}, 'N3 Bay': {48: 5.318646444350292, 83: 2.195449840010015}, 'N2 Bay': {83: 2.70129598526337}, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': {83: 1.0530906893520615}, 'Thermal Hydraulic Test Facility': {83: 2.54911749434976}, 84: {83: 1.822361105818493, 85: 4.349022878762539, 'Cummins Engine Research facility': 0.806225774829855, 'Heat Transfer and Thermodynamic Lab': 0.9433981132056604, 'Steam Power Lab': 1.0890362712049586, 'IC Engine and Combustion Lab': 2.1272047386182646}, 'IC Engine and Combustion Lab': {84: 2.1272047386182646, 85: 2.606338427756457}, 'Steam Power Lab': {84: 1.0890362712049586}, 'Cummins Engine Research facility': {84: 0.806225774829855}, 'Heat Transfer and Thermodynamic Lab': {84: 0.9433981132056604}, 85: {84: 4.349022878762539, 88: 2.5930676813380713, 86: 3.430014577228499, 'Metal Forming Lab': 2.558906016249913, 'Old ONGC Lab': 1.8160396471443017, 'Structural Evaluation & Material Technologies Lab': 1.6876018487783189, 'Heavy Structure Lab': 3.3366150512158277, 'Hydraulics Lab': 1.0922453936730518, 'Concrete Technology Lab': 3.3366150512158277, 'IC Engine and Combustion Lab': 2.606338427756457}, 'Concrete Technology Lab': {85: 3.3366150512158277}, 'Hydraulics Lab': {85: 1.0922453936730518, 88: 2.1644860821913365}, 'Heavy Structure Lab': {85: 3.3366150512158277}, 'Structural Evaluation & Material Technologies Lab': {85: 1.6876018487783189}, 'Old ONGC Lab': {85: 1.8160396471443017}, 86: {85: 3.430014577228499, 87: 2.2452171387195494, 'Geotechnical Engg. Lab': 0.4049691346263318, 'Metal Forming Lab': 1.1700427342623003}, 'Metal Forming Lab': {86: 1.1700427342623003, 85: 2.558906016249913}, 'Geotechnical Engg. Lab': {86: 0.4049691346263318}, 87: {86: 2.2452171387195494, 'National Geotechnical Centrifuge Facility': 1.2349089035228469, 'Vihar House': 6.230971031869752, 'GMFL Lab / Geophysical and multiphase Flows Lab': 5.591511423577708}, 'GMFL Lab / Geophysical and multiphase Flows Lab': {87: 5.591511423577708}, 'Vihar House': {87: 6.230971031869752}, 'National Geotechnical Centrifuge Facility': {87: 1.2349089035228469}, 88: {85: 2.5930676813380713, 'Solar Lab': 3.3889526405661083, 89: 1.731184565550421, 'Heat Pump Lab': 1.118033988749895, 'Hydraulics Lab Workshop': 1.9849433241279208, 'Hydraulics Lab': 2.1644860821913365, 'Hydraulics Lab (New)': 1.372953021774598}, 'Hydraulics Lab (New)': {88: 1.372953021774598, 89: 1.0751744044572489}, 'Hydraulics Lab Workshop': {88: 1.9849433241279208}, 'Solar Lab': {88: 3.3889526405661083}, 'Heat Pump Lab': {88: 1.118033988749895}, 89: {44: 4.000499968753906, 88: 1.731184565550421, 39: 5.330009380854784, 'Hydraulics Lab (New)': 1.0751744044572489}, 90: {91: 2.8017851452243803, 39: 2.44826469157238, 'Inter-disciplinary Programme in Systems and Control Engineering': 1.4310835055998654}, 'Inter-disciplinary Programme in Systems and Control Engineering': {90: 1.4310835055998654}, 91: {90: 2.8017851452243803, 92: 1.880957203128237, 'NanoTech. & Science Research Centre': 1.9227584351654787, 'Advanced Centre for Research in Electronics': 1.9227584351654787, 'Sophisticated Analytical Instruments Facility': 1.9227584351654787}, 'Sophisticated Analytical Instruments Facility': {91: 1.9227584351654787}, 'Advanced Centre for Research in Electronics': {91: 1.9227584351654787}, 'NanoTech. & Science Research Centre': {91: 1.9227584351654787}, 92: {91: 1.880957203128237, 93: 3.0242354405700627, 211: 1.2445882853377659, 213: 3.1395859599635108, 212: 1.0089598604503551}, 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, 94: {93: 1.7076299364909249, 213: 1.731184565550421, 214: 1.7700282483621554, 36: 4.640366364846638}, 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, 96: {95: 2.44826469157238, 'NCC Office': 4.343500892137586, 97: 4.59847800908083, 'Squash Court': 4.775143976886979}, 'Squash Court': {96: 4.775143976886979, 97: 3.006659275674582}, 'NCC Office': {96: 4.343500892137586}, 97: {96: 4.59847800908083, 98: 3.382454729926182, 'Staff Hostel': 9.135972854600654, 'Squash Court': 3.006659275674582}, 'Staff Hostel': {97: 9.135972854600654}, 98: {97: 3.382454729926182, 99: 1.7700282483621554, 101: 2.623928352680385, 'Hostel 11 Athena (Girls Hostel)': 2.9698484809834995, 'Printing and photocopying H11': 2.9698484809834995}, 'Printing and photocopying H11': {98: 2.9698484809834995}, 'Hostel 11 Athena (Girls Hostel)': {98: 2.9698484809834995}, 99: {98: 1.7700282483621554, 100: 2.6414011433328337, 'Basketball Court': 1.5063200191194432}, 'Basketball Court': {99: 1.5063200191194432}, 100: {99: 2.6414011433328337, 'Hockey Ground': 4.741307836451879, 'Gymkhana Grounds': 3.1465854509293085}, 'Hockey Ground': {100: 4.741307836451879}, 'Gymkhana Grounds': {100: 3.1465854509293085}, 101: {98: 2.623928352680385, 102: 5.378196723809943, 'Gymkhana Building': 1.9300259065618783, 'Brewberrys Cafe': 1.296919426949878}, 'Gymkhana Building': {101: 1.9300259065618783}, 'Brewberrys Cafe': {101: 1.296919426949878}, 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, 103: {102: 7.319357895334809, 104: 1.9677398201998149}, 104: {103: 1.9677398201998149, 105: 1.731184565550421}, 105: {104: 1.731184565550421, 106: 7.202221879392497}, 106: {105: 7.202221879392497, 107: 1.6949926253526888}, 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, 112: {111: 3.560056179332006, 113: 3.383637096380166}, 113: {112: 3.383637096380166, 114: 6.538654295801239}, 114: {113: 6.538654295801239, 'Boat House': 4.870523585817033}, 'Boat House': {114: 4.870523585817033}, 115: {111: 1.2445882853377659, 116: 2.041568024827975}, 116: {115: 2.041568024827975, 117: 1.4230249470757708}, 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, 118: {117: 1.1734564329364767, 119: 4.653815638806505}, 119: {118: 4.653815638806505, 120: 1.0}, 120: {119: 1.0, 121: 1.1734564329364767}, 121: {120: 1.1734564329364767, 122: 1.0261578825892241, 'National Centre for Mathematics': 1.4710540438746633}, 122: {121: 1.0261578825892241, 123: 16.343959128681153, 'Guest House/Padmavihar': 2.3214219780126144}, 'Guest House/Padmavihar': {122: 2.3214219780126144}, 'National Centre for Mathematics': {121: 1.4710540438746633}, 123: {122: 16.343959128681153, 124: 1.7700282483621554, 138: 4.518517455980446, 'Type B-14': 2.6879360111431225, 'Guest House / Jalvihar': 6.20354737227016}, 'Guest House / Jalvihar': {123: 6.20354737227016}, 'Type B-14': {123: 2.6879360111431225}, 124: {123: 1.7700282483621554, 125: 4.470011185668332}, 125: {124: 4.470011185668332, 126: 4.518517455980446}, 126: {125: 4.518517455980446, 127: 15.53270742658858, 135: 5.397962578603153, 'Type B-13': 3.575611835756225}, 'Type B-13': {126: 3.575611835756225}, 127: {126: 15.53270742658858, 128: 5.692538976590323, 'Proposed TypeA Building': 4.570557952810575}, 'Proposed TypeA Building': {127: 4.570557952810575}, 128: {127: 5.692538976590323, 129: 3.6808966298987533}, 129: {128: 3.6808966298987533, 130: 7.935048834128244, 193: 5.733149221850065, 'B 19 Old Multistoried Building- Residence ': 4.692973471052229}, 'B 19 Old Multistoried Building- Residence ': {129: 4.692973471052229}, 130: {129: 7.935048834128244, 131: 1.4042791745233567, 'White House': 5.517698795693726}, 'White House': {130: 5.517698795693726}, 131: {130: 1.4042791745233567, 132: 4.224807687930896, 'CTR 20': 2.000249984376953}, 'CTR 20': {131: 2.000249984376953}, 132: {131: 4.224807687930896, 133: 9.713753136661442, 'CTR 19': 2.040833163195855, 'Bungalow A10 ': 4.08166632639171}, 'Bungalow A10 ': {132: 4.08166632639171, 133: 6.646878966853541}, 'CTR 19': {132: 2.040833163195855}, 133: {132: 9.713753136661442, 134: 1.4916433890176297, 'Bungalow A11 ': 3.508275929855005, 'Bungalow A10 ': 6.646878966853541, 'Bungalow A8 ': 6.26258732474047}, 'Bungalow A8 ': {133: 6.26258732474047, 153: 10.713589501189599}, 134: {133: 1.4916433890176297, 135: 11.502738804302219, 153: 7.340844638050855, 'Shishu Vihar': 4.2901048938225275, 'Bungalow A5 ': 4.350287346831241, 'Bungalow A11 ': 3.645408070436011}, 'Bungalow A11 ': {133: 3.508275929855005, 134: 3.645408070436011}, 'Bungalow A5 ': {134: 4.350287346831241, 153: 3.634969050762331}, 'Shishu Vihar': {134: 4.2901048938225275, 153: 3.6206353033687333}, 135: {134: 11.502738804302219, 136: 9.79025025216414, 126: 5.397962578603153, 'A1 Director Bungalow': 7.410802925459562}, 'A1 Director Bungalow': {135: 7.410802925459562, 136: 3.7890632087628204, 155: 5.3615296324836255, 154: 5.123377792043057}, 136: {135: 9.79025025216414, 137: 2.316246964380094, 155: 5.403794962801605, 'Type B-1': 2.2908513701242166, 'Bungalow A13 ': 2.27771815640127, 'A1 Director Bungalow': 3.7890632087628204}, 'Bungalow A13 ': {136: 2.27771815640127}, 'Type B-1': {136: 2.2908513701242166}, 137: {136: 2.316246964380094, 138: 1.2727922061357855}, 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, 139: {138: 6.175597137119616, 140: 1.6760071598892412}, 140: {139: 1.6760071598892412, 141: 4.82265487050442}, 141: {140: 4.82265487050442, 142: 6.957082721946032, 157: 3.2919599025504547, 'Guest House/Vanvihar': 3.216364407215078}, 'Guest House/Vanvihar': {141: 3.216364407215078}, 142: {141: 6.957082721946032, 143: 3.9802009999496257, 162: 3.6585516259853432, 'Gulmohar Garden Cafetaria': 2.3759208741033446, 'Staff Club': 3.9654760117796704}, 'Staff Club': {142: 3.9654760117796704}, 143: {142: 3.9802009999496257, 144: 5.771828133269389, 'Hospital': 4.228001892147164}, 'Hospital': {143: 4.228001892147164}, 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, 145: {144: 0.8538149682454624, 146: 1.420211251891774}, 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, 147: {146: 5.530461101933545, 148: 2.041568024827975, 'Kshitij Udyan': 4.846648326421054}, 'Kshitij Udyan': {147: 4.846648326421054}, 148: {147: 2.041568024827975, 149: 2.263183598385248}, 149: {148: 2.263183598385248, 150: 2.6700187265260893, 'Tennis Court (new)': 7.513321502504734}, 'Tennis Court (new)': {149: 7.513321502504734}, 150: {149: 2.6700187265260893, 151: 2.041568024827975}, 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, 152: {151: 1.4512063946937388, 168: 2.167487024182613, 146: 3.382454729926182, 'Convocation Hall': 3.4539832078341086, 'Institute Music Room': 3.4539832078341086}, 'Institute Music Room': {152: 3.4539832078341086}, 'Convocation Hall': {152: 3.4539832078341086}, 153: {134: 7.340844638050855, 154: 8.926925562588723, 'Main Gate no. 2': 11.7957619508025, 'Shishu Vihar': 3.6206353033687333, 'Bungalow A5 ': 3.634969050762331, 'ATM - State Bank Main Gate': 13.127261709892128, 'Bungalow A8 ': 10.713589501189599}, 'ATM - State Bank Main Gate': {153: 13.127261709892128}, 'Main Gate no. 2': {153: 11.7957619508025}, 154: {153: 8.926925562588723, 155: 8.968890678339212, 'A1 Director Bungalow': 5.123377792043057}, 155: {136: 5.403794962801605, 154: 8.968890678339212, 156: 6.980329505116503, 'Hostel 10 Annexe (Girls Hostel)': 4.018084120572888, 'A1 Director Bungalow': 5.3615296324836255}, 'Hostel 10 Annexe (Girls Hostel)': {155: 4.018084120572888}, 156: {155: 6.980329505116503, 157: 2.39269722280108, 'Hostel 10 Phoenix (Girls Hostel)': 2.5909457732650445}, 'Hostel 10 Phoenix (Girls Hostel)': {156: 2.5909457732650445}, 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, 158: {157: 1.587765725792064, 162: 6.006163500938015, 159: 12.385031287808683, 'Gulmohar Building': 2.4135036772294343, 'Gulmohar Garden Cafetaria': 3.0909545451203257, 'ATM - Canara Bank near Gulmohar': 2.4135036772294343, 'Gulmohar Restaurant': 2.4135036772294343}, 'Gulmohar Restaurant': {158: 2.4135036772294343}, 'ATM - Canara Bank near Gulmohar': {158: 2.4135036772294343}, 'Gulmohar Garden Cafetaria': {162: 3.9115214431215892, 142: 2.3759208741033446, 158: 3.0909545451203257}, 'Gulmohar Building': {158: 2.4135036772294343}, 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, 160: {159: 1.981161275615895, 161: 2.279034883453959, 63: 6.325345840347388, 253: 12.683256679575637}, 161: {160: 2.279034883453959, 61: 2.545780823244609}, 162: {142: 3.6585516259853432, 158: 6.006163500938015, 163: 3.784309712483903, 'Gulmohar Garden Cafetaria': 3.9115214431215892}, 163: {162: 3.784309712483903, 164: 2.4041630560342617, 'Faqir Chand Kohli Auditorium': 3.5701540583005658, 'Kanwal Rekhi School of Information Technology': 3.5701540583005658, 'KReSIT Canteen': 3.5701540583005658}, 'KReSIT Canteen': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Kanwal Rekhi School of Information Technology': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Faqir Chand Kohli Auditorium': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Computer Centre': {164: 3.842004685057008, 173: 2.6819768828235637}, 164: {163: 2.4041630560342617, 165: 2.7951744131627994, 'Computer Centre': 3.842004685057008}, 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, 166: {165: 1.2445882853377659, 167: 1.8, 144: 3.4896991274320484, 'School of Management': 3.890115679513914, 'Industrial Research & Consultancy Centre': 3.890115679513914}, 'Industrial Research & Consultancy Centre': {175: 3.2893768406797053, 166: 3.890115679513914}, 'School of Management': {175: 3.2893768406797053, 166: 3.890115679513914}, 167: {166: 1.8, 168: 4.013103537164223, 'Chaayos Near SOM': 121.87791022166404}, 168: {167: 4.013103537164223, 152: 2.167487024182613, 169: 1.981161275615895, 170: 2.828780656042458, 'Chaayos Near SOM': 120.84622459969529}, 'Chaayos Near SOM': {167: 121.87791022166404, 168: 120.84622459969529}, 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, 170: {168: 2.828780656042458, 'Main Building': 3.782591704109763, 'Joint Admission Test for M.Sc. Office': 3.782591704109763, 'Printing and photocopying Main Building': 3.782591704109763, 'Hostel Coordinating Unit': 3.782591704109763}, 'Hostel Coordinating Unit': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Printing and photocopying Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Joint Admission Test for M.Sc. Office': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 171: {172: 4.000499968753906, 159: 4.527471700629392, 'Physics Department': 4.7611973284038545}, 172: {171: 4.000499968753906, 173: 4.000499968753906, 'Kanwal Rekhi School of Information Technology': 3.544573317058063, 'KReSIT Canteen': 3.544573317058063, 'Faqir Chand Kohli Auditorium': 3.544573317058063, 'Lecture Hall Complex - 1 & 2': 5.116346352623129, 'LT 001': 5.116346352623129, 'LT 002': 5.116346352623129, 'LT 003': 5.116346352623129, 'LT 004': 5.116346352623129, 'LT 005': 5.116346352623129, 'LT 006': 5.116346352623129, 'LT 101': 5.116346352623129, 'LT 102': 5.116346352623129, 'LT 103': 5.116346352623129, 'LT 104': 5.116346352623129, 'LT 105': 5.116346352623129, 'LT 106': 5.116346352623129, 'LT 201': 5.116346352623129, 'LT 202': 5.116346352623129, 'LT 203': 5.116346352623129, 'LT 204': 5.116346352623129, 'LT 205': 5.116346352623129, 'LT 206': 5.116346352623129, 'LT 301': 5.116346352623129, 'LT 302': 5.116346352623129, 'LT 303': 5.116346352623129, 'LT 304': 5.116346352623129, 'LT 305': 5.116346352623129, 'LT 306': 5.116346352623129, 'LC 001': 5.116346352623129, 'LC 002': 5.116346352623129, 'LC 101': 5.116346352623129, 'LC 102': 5.116346352623129, 'LC 201': 5.116346352623129, 'LC 202': 5.116346352623129, 'LC 301': 5.116346352623129, 'LC 302': 5.116346352623129, 'LH 101': 5.116346352623129, 'LH 102': 5.116346352623129, 'LH 301': 5.116346352623129, 'LH 302': 5.116346352623129}, 173: {172: 4.000499968753906, 174: 2.980771712157776, 'Computer Centre': 2.6819768828235637, 'Metallurgical Engineering and Material Science Department': 4.494441010848846, 'Corrosion Science Paint Lab': 4.494441010848846, 'Corrosion Lab 1': 4.494441010848846, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 4.494441010848846, 'Aqueous Corrosion Lab': 4.494441010848846}, 174: {173: 2.980771712157776, 175: 1.6099689437998486, 165: 6.240032051199737, 57: 9.530424964291992}, 175: {174: 1.6099689437998486, 176: 2.980771712157776, 'Girish Gaitonde Building': 2.568462575160479, 'School of Management': 3.2893768406797053, 'Industrial Research & Consultancy Centre': 3.2893768406797053}, 176: {175: 2.980771712157776, 177: 2.2228360263411244, 'Electrical Engineering Department': 4.331397003277349, 'Cafe 92': 1.587765725792064}, 'Cafe 92': {176: 1.587765725792064}, 177: {176: 2.2228360263411244, 178: 3.9760533195620003, 'PC Saxena Auditorium / Lecture Theatre': 1.91049731745428}, 'PC Saxena Auditorium / Lecture Theatre': {177: 1.91049731745428}, 178: {179: 3.93459019467085, 177: 3.9760533195620003, 52: 9.087133761533392, 180: 3.430014577228499}, 179: {178: 3.93459019467085, 'Main Building': 1.6155494421403511, 'Joint Admission Test for M.Sc. Office': 1.6155494421403511, 'Printing and photocopying Main Building': 1.6155494421403511, 'Hostel Coordinating Unit': 1.6155494421403511}, 180: {41: 2.2768399153212333, 178: 3.430014577228499}, 181: {64: 5.060632371551998, 182: 2.0523157651784483, 'Kendriya Vidyalaya ': 1.6376812876747417}, 'Kendriya Vidyalaya ': {181: 1.6376812876747417}, 182: {181: 2.0523157651784483, 183: 3.034633421024688, 'Medical Store': 3.3712015662075148, 'Uphar': 5.015974481593781}, 'Medical Store': {182: 3.3712015662075148}, 'Uphar': {182: 5.015974481593781}, 183: {184: 2.4226019070412703, 182: 3.034633421024688, 'Post Office': 2.3345235059857505}, 'Post Office': {183: 2.3345235059857505}, 184: {183: 2.4226019070412703, 'Market Gate, Y point Gate no. 3': 1.91049731745428, 249: 5.692538976590323}, 'Market Gate, Y point Gate no. 3': {184: 1.91049731745428}, 185: {81: 2.7727242920997393, 186: 6.006163500938015, 'Hostel 10A QIP (Girls Hostel)': 2.818865019826242}, 'Hostel 10A QIP (Girls Hostel)': {185: 2.818865019826242}, 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, 187: {186: 4.000499968753906, 226: 0.8700574693662483, 225: 0.6363961030678927, 'QIP 2': 1.793599732381782}, 'QIP 2': {225: 1.329661611087573, 187: 1.793599732381782}, 188: {189: 6.175597137119616, 'K-Yantra Lab (CSE Dept.)': 2.2487774456357394, 231: 0.28460498941515416, 228: 2.4226019070412703}, 'K-Yantra Lab (CSE Dept.)': {231: 2.5079872407968904, 188: 2.2487774456357394}, 189: {188: 6.175597137119616, 190: 1.4512063946937388, 232: 4.224807687930896, 'Tulsi B': 1.528397853963424, 'B 22 Ananta': 4.420407221060069}, 'B 22 Ananta': {189: 4.420407221060069}, 'Tulsi B': {189: 1.528397853963424}, 190: {189: 1.4512063946937388, 191: 1.7, 'Tulsi A': 1.188696765369537, 'Sameer Hill': 12.108055170009756}, 'Sameer Hill': {190: 12.108055170009756}, 'Tulsi A': {190: 1.188696765369537}, 191: {190: 1.7, 192: 5.426232578870906, 'B 23 Aravali': 2.5394881374009213, 'Society for Applied Microwave Electronics Engineering & Research': 3.6173194495371845}, 'Society for Applied Microwave Electronics Engineering & Research': {191: 3.6173194495371845}, 'B 23 Aravali': {234: 4.870831551183022, 191: 2.5394881374009213}, 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, 193: {129: 5.733149221850065, 194: 5.656854249492381}, 194: {193: 5.656854249492381, 195: 2.5298221281347035}, 195: {194: 2.5298221281347035, 196: 6.694475334184151}, 196: {195: 6.694475334184151, 197: 5.796723212298479, 'Lake Side Gate no. 1': 7.727483419587518}, 'Lake Side Gate no. 1': {196: 7.727483419587518}, 197: {196: 5.796723212298479, 198: 3.560056179332006}, 198: {197: 3.560056179332006, 199: 2.4316660954991334}, 199: {198: 2.4316660954991334, 200: 14.840080862313386}, 200: {199: 14.840080862313386, 'Padmavati Devi Temple': 14.451089924292909}, 'Padmavati Devi Temple': {200: 14.451089924292909}, 201: {'QIP 1': 1.5924823389915506, 202: 3.0242354405700627, 225: 3.382454729926182, 204: 7.045565981523415, 203: 5.600892785976178, 186: 0.0}, 'QIP 1': {201: 1.5924823389915506}, 202: {215: 1.8027756377319946, 203: 2.5930676813380713, 204: 4.044007912949726, 'Type1 - 6': 1.408900280360537, 201: 3.0242354405700627}, 'Type1 - 6': {202: 1.408900280360537}, 203: {'Type1 - 7': 1.1300442469213319, 204: 1.4512063946937388, 239: 3.784309712483903, 202: 2.5930676813380713, 201: 5.600892785976178}, 'Type1 - 7': {204: 1.7334935823359716, 203: 1.1300442469213319}, 204: {'Type1 - 7': 1.7334935823359716, 201: 7.045565981523415, 203: 1.4512063946937388, 202: 4.044007912949726, 220: 3.430014577228499, 205: 1.7700282483621554}, 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, 206: {224: 1.0, 223: 2.8208154849263005, 207: 1.981161275615895, 205: 1.731184565550421}, 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, 208: {208: 0.0, 243: 1.1627553482998907, 209: 2.4020824298928627, 'Type 2B 23': 2.4070729112347222}, 'Type 2B 23': {208: 2.4070729112347222}, 209: {208: 2.4020824298928627, 235: 4.224807687930896, 210: 2.316246964380094, 'CSRE C': 1.3118688958886098}, 'CSRE C': {209: 1.3118688958886098}, 210: {209: 2.316246964380094, 211: 3.6792662311933886}, 211: {210: 3.6792662311933886, 212: 2.251443981093023, 238: 2.9025850547399985, 92: 1.2445882853377659, 'Bungalow A16 ': 0.9}, 'Bungalow A16 ': {211: 0.9}, 212: {213: 2.1384573879317776, 'Bungalow A15 ': 1.0324727599312244, 211: 2.251443981093023, 92: 1.0089598604503551}, 'Bungalow A15 ': {212: 1.0324727599312244}, 213: {93: 0.28460498941515416, 92: 3.1395859599635108, 94: 1.731184565550421, 'Bungalow A14 ': 1.0373041983911953, 212: 2.1384573879317776}, 'Bungalow A14 ': {213: 1.0373041983911953}, 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, 215: {202: 1.8027756377319946, 216: 1.587765725792064, 'Type 2B 22': 1.3601470508735443}, 'Type 2B 22': {215: 1.3601470508735443}, 216: {215: 1.587765725792064, 217: 1.6099689437998486, 226: 2.828780656042458, 'Type1 - 18': 1.3103434664239755, 'Type1 - 16': 1.5524174696260025}, 'Type1 - 18': {216: 1.3103434664239755}, 'Type1 - 16': {216: 1.5524174696260025}, 217: {216: 1.6099689437998486, 239: 1.1428035701729322, 218: 1.4042791745233567, 227: 2.6700187265260893, 'Proposed Type H1 Building': 6.9112227572261045}, 'Proposed Type H1 Building': {226: 3.3575288531895002, 217: 6.9112227572261045}, 218: {217: 1.4042791745233567, 219: 1.1853269591129698, 'Type1 - 14': 1.0606601717798212, 'Type H1 - 12': 1.5195394038984313}, 'Type1 - 14': {218: 1.0606601717798212}, 'Type H1 - 12': {218: 1.5195394038984313}, 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, 220: {204: 3.430014577228499, 239: 2.0124611797498106, 219: 2.4226019070412703, 'Type1 - 13': 0.6363961030678927, 222: 2.828780656042458}, 'Type1 - 13': {220: 0.6363961030678927}, 221: {222: 1.6324827717314507, 'Type H1 - 5': 0.4949747468305833}, 'Type H1 - 5': {221: 0.4949747468305833}, 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, 223: {224: 1.822361105818493, 222: 0.8221921916437787, 'Type H1 - 6': 1.5703502793962882}, 'Type H1 - 6': {223: 1.5703502793962882}, 224: {223: 1.822361105818493, 206: 1.0, 'Type H1 - 8': 1.216963434126104}, 'Type H1 - 8': {224: 1.216963434126104}, 225: {201: 3.382454729926182, 226: 1.3914021704740869, 'QIP 2': 1.329661611087573, 187: 0.6363961030678927}, 226: {226: 0.0, 216: 2.828780656042458, 227: 2.2228360263411244, 187: 0.8700574693662483, 'Proposed Type H1 Building': 3.3575288531895002}, 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, 228: {219: 3.112073263919087, 227: 1.77792013318934, 230: 2.316246964380094, 229: 3.4311805548528045, 188: 2.4226019070412703}, 229: {228: 3.4311805548528045, 'Vidya Niwas': 1.2041594578792296}, 'Vidya Niwas': {229: 1.2041594578792296}, 230: {228: 2.316246964380094, 231: 1.4916433890176297, 'C22, B wing, Vindya': 1.820988742414406}, 'C22, B wing, Vindya': {230: 1.820988742414406}, 231: {230: 1.4916433890176297, 'C22, A wing, Sahyadri': 1.420211251891774, 'K-Yantra Lab (CSE Dept.)': 2.5079872407968904, 232: 1.7977764043395386, 188: 0.28460498941515416}, 'C22, A wing, Sahyadri': {231: 1.420211251891774}, 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, 234: {'B 23 Aravali': 4.870831551183022, 233: 2.6700187265260893, 235: 2.7727242920997393}, 235: {234: 2.7727242920997393, 209: 4.224807687930896}, 236: {237: 2.1384573879317776, 'Bungalow A19 ': 0.970051545022222, 'CSRE D': 1.0807404868885035}, 'Bungalow A19 ': {236: 0.970051545022222}, 'CSRE D': {236: 1.0807404868885035}, 237: {236: 2.1384573879317776, 238: 1.8952572384771413, 'Bungalow A18 ': 0.8, 'CSRE A': 1.7418381095842403, 'CSRE B': 0.8354639429682169}, 'Bungalow A18 ': {237: 0.8}, 'CSRE A': {237: 1.7418381095842403}, 'CSRE B': {237: 0.8354639429682169}, 238: {237: 1.8952572384771413, 211: 2.9025850547399985, 'Bungalow A17 ': 0.806225774829855}, 'Bungalow A17 ': {238: 0.806225774829855}, 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, 240: {'Type H2 - 18': 0.9492101980067429, 205: 1.822361105818493}, 'Type H2 - 18': {240: 0.9492101980067429}, 241: {242: 0.6363961030678927, 'Type H2 - 19': 0.6324555320336759, 207: 1.822361105818493}, 'Type H2 - 19': {241: 0.6324555320336759}, 242: {241: 0.6363961030678927, 'Type H2 - 20': 1.5}, 'Type H2 - 20': {242: 1.5}, 243: {'Type H2 - 21': 0.9617692030835673, 208: 1.1627553482998907}, 'Type H2 - 21': {243: 0.9617692030835673}, 244: {233: 3.1508728949292766, 232: 1.6595180023127196, 'Tulsi C': 1.5990622251807463}, 'Tulsi C': {244: 1.5990622251807463}, 245: {246: 4.401136216933078, 'Security Check Point': 3.8860005146680052, 255: 4.802082881417188}, 246: {245: 4.401136216933078, 'Paspoli Gate no. 4 ': 9.244295538330652}, 'Paspoli Gate no. 4 ': {246: 9.244295538330652}, 247: {192: 5.9605368885696866, 248: 4.271416626834709}, 248: {247: 4.271416626834709, 'MW Quarters 1': 1.8384776310850235}, 'MW Quarters 1': {248: 1.8384776310850235}, 249: {184: 5.692538976590323, 250: 5.426232578870906, 251: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 1.766635219845908}, 'Kendriya Vidyalay Quarters 1': {249: 1.766635219845908, 251: 2.471639132235934}, 250: {249: 5.426232578870906, 'Campus School': 4.745102738613781, 'Kindergarten School': 4.745102738613781}, 'Kindergarten School': {250: 4.745102738613781, 253: 4.33232039443068}, 'Campus School': {250: 4.745102738613781, 253: 4.33232039443068}, 251: {249: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 2.471639132235934, 252: 4.804164859785725}, 252: {251: 4.804164859785725, 253: 3.035951251255527}, 253: {252: 3.035951251255527, 254: 3.4896991274320484, 160: 12.683256679575637, 'Campus School': 4.33232039443068, 'Type C-7': 0.34058772731852804, 'Kindergarten School': 4.33232039443068}, 'Type C-7': {253: 0.34058772731852804}, 254: {253: 3.4896991274320484, 'Shivalik C 23 (187-240)': 7.684009370114016}, 'Shivalik C 23 (187-240)': {254: 7.684009370114016}, 255: {2: 18.03285889702462, 'Security Check Point': 1.4577379737113252, 245: 4.802082881417188}, 'Aromas Canteen': {27: 1.6337074401495515, 28: 2.9740544715926105, 'Hostel 01 Queen of the campus': 3.7380476187443095, "Domino's outlet": 1.4286357128393508}} \ No newline at end of file +{ + 0: { + "Hostel 12 Crown of the Campus": 2.534758371127315, + "Hostel 14 Silicon Ship": 1.827019430657485, + "H13 Night Canteen": 5.471105921109552, + "Hostel 13 House of Titans": 5.471105921109552, + "Mess for hostels 12 | 13 | 14": 1.5420765220960988, + 1: 3.112073263919087, + "Amul Parlour": 1.827019430657485, + }, + "Amul Parlour": {0: 1.827019430657485}, + "Hostel 12 Crown of the Campus": {0: 2.534758371127315}, + "Hostel 14 Silicon Ship": {0: 1.827019430657485}, + "Hostel 13 House of Titans": {0: 5.471105921109552}, + "H13 Night Canteen": {0: 5.471105921109552}, + "Mess for hostels 12 | 13 | 14": {0: 1.5420765220960988}, + 1: {0: 3.112073263919087, 2: 2.545780823244609}, + 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, + "Security Check Point": {255: 1.4577379737113252, 245: 3.8860005146680052}, + 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, + 4: { + 3: 5.07119315348962, + "Hostel 06 Vikings": 2.359872877932199, + "Type1 - 22": 3.020761493398643, + }, + "Type1 - 22": {4: 3.020761493398643}, + "Hostel 06 Vikings": {4: 2.359872877932199}, + 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, + 6: { + 5: 2.6414011433328337, + 7: 2.198635940759634, + "ATM - Canara Bank near H6": 1.3813037319865606, + }, + "ATM - Canara Bank near H6": {6: 1.3813037319865606}, + 7: {6: 2.198635940759634, 8: 2.0349447166937975}, + 8: { + 7: 2.0349447166937975, + 9: 1.1853269591129698, + "Hostel 09 Nawaabon Ki Basti": 3.60568994784632, + }, + "Hostel 09 Nawaabon Ki Basti": {8: 3.60568994784632}, + 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, + 10: {9: 3.6706947571270483, 11: 4.669047011971501}, + 11: {10: 4.669047011971501, "Hostel 18": 4.075904807524337}, + "Hostel 18": {11: 4.075904807524337}, + 12: {9: 2.8271894170713074, 13: 3.784309712483903, "Hostel 17": 2.44826469157238}, + "Hostel 17": {12: 2.44826469157238}, + 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, + 14: { + 13: 1.760113632695344, + 15: 5.70350769263968, + "Chaayos Cafe": 1.2074767078498865, + }, + "Chaayos Cafe": {14: 1.2074767078498865}, + 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, + 16: {15: 2.7727242920997393, "Hostel 05 Penthouse": 4.306855001041944}, + "Hostel 05 Penthouse": {16: 4.306855001041944}, + 17: { + 15: 3.560056179332006, + 18: 2.6700187265260893, + "Tansa House King of campus (Proj. Staff Boys)": 3.3800887562311144, + "ATM - State Bank near Tansa": 3.0522123124055445, + }, + "ATM - State Bank near Tansa": {17: 3.0522123124055445}, + "Tansa House King of campus (Proj. Staff Boys)": {17: 3.3800887562311144}, + 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, + 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, + 20: { + 21: 6.359323863430766, + 19: 2.0719555979798407, + "Outdoor Sports Facility": 1.230447073221762, + "Hostel 03 Vitruvians": 3.9824615503479754, + }, + "Outdoor Sports Facility": {20: 1.230447073221762}, + "Hostel 03 Vitruvians": {20: 3.9824615503479754}, + 21: { + 20: 6.359323863430766, + 22: 3.0242354405700627, + "Hostel 02 The Wild Ones": 5.008991914547277, + "Indoor Stadium": 1.5839823231336896, + "Badminton Court": 1.5839823231336896, + }, + "Badminton Court": {21: 1.5839823231336896}, + "Hostel 02 The Wild Ones": {21: 5.008991914547277}, + "Indoor Stadium": {21: 1.5839823231336896}, + 22: { + 21: 3.0242354405700627, + "Swimming Pool (new)": 2.3119256043393785, + 23: 2.316246964380094, + }, + "Swimming Pool (new)": {22: 2.3119256043393785}, + 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, + 24: { + 23: 3.5383612025908264, + "Students Activity Centre": 1.9039432764659772, + "New Yoga Room, SAC": 1.9039432764659772, + "Open Air Theatre": 1.9039432764659772, + "Film Room, SAC": 1.9039432764659772, + }, + "Film Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, + "Open Air Theatre": {24: 1.9039432764659772, 26: 2.760615873315228}, + "New Yoga Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, + "Students Activity Centre": {24: 1.9039432764659772, 26: 2.760615873315228}, + 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, + 26: { + 25: 3.8268786236304906, + "Students Activity Centre": 2.760615873315228, + "New Yoga Room, SAC": 2.760615873315228, + "Open Air Theatre": 2.760615873315228, + "Film Room, SAC": 2.760615873315228, + }, + 27: { + 25: 2.545780823244609, + 28: 2.7741665415039525, + "Hostel 01 Queen of the campus": 2.198635940759634, + "Aromas Canteen": 1.6337074401495515, + }, + "Hostel 01 Queen of the campus": { + 27: 2.198635940759634, + "Aromas Canteen": 3.7380476187443095, + }, + 28: { + 27: 2.7741665415039525, + "Domino's outlet": 2.0084820138602186, + 29: 1.6161683080669538, + "Aromas Canteen": 2.9740544715926105, + }, + "Domino's outlet": { + 28: 2.0084820138602186, + 34: 1.4453373308677804, + "Aromas Canteen": 1.4286357128393508, + }, + 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, + 30: { + 29: 5.685156110433556, + 31: 3.1395859599635108, + "Defence Research & Development Organization": 2.1505813167606567, + }, + "Defence Research & Development Organization": {30: 2.1505813167606567}, + 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, + 32: { + 31: 4.044007912949726, + "Hostel 15 Trident": 6.024699162613849, + 33: 5.330009380854784, + "Hostel 15 Mess": 5.773820225812369, + }, + "Hostel 15 Mess": {32: 5.773820225812369}, + "Hostel 15 Trident": {32: 6.024699162613849}, + 33: { + 32: 5.330009380854784, + "Hostel 16 Olympus": 4.440833255144804, + "Hostel 16 Mess": 4.440833255144804, + }, + "Hostel 16 Mess": {33: 4.440833255144804}, + "Hostel 16 Olympus": {33: 4.440833255144804}, + 34: { + 35: 1.7700282483621554, + 29: 3.2919599025504547, + "Domino's outlet": 1.4453373308677804, + }, + 35: { + 34: 1.7700282483621554, + 36: 2.2671568097509267, + 37: 7.046417529496815, + 214: 0.6228964600958975, + }, + 36: { + 35: 2.2671568097509267, + "State Bank of India Branch": 1.296919426949878, + 94: 4.640366364846638, + }, + "State Bank of India Branch": {36: 1.296919426949878}, + 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, + 38: { + 37: 6.155079203389668, + 39: 3.1508728949292766, + "Central Library": 1.103177229641729, + }, + "Central Library": {38: 1.103177229641729, 40: 2.7613402542968153}, + 39: { + 38: 3.1508728949292766, + 40: 3.6002777670618693, + 89: 5.330009380854784, + 90: 2.44826469157238, + }, + 40: {39: 3.6002777670618693, 41: 1.0, "Central Library": 2.7613402542968153}, + 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, + 42: { + 41: 1.1384199576606167, + 43: 2.316246964380094, + "Mathematics Department": 2.435159132377184, + "Old Software Lab": 2.435159132377184, + "Inter-disciplinary Programme in Educational Technology": 2.435159132377184, + "Centre for Formal Design and Verification of Software": 2.435159132377184, + "Centre for Distance Engineering Education Programme": 2.435159132377184, + }, + "Centre for Distance Engineering Education Programme": {42: 2.435159132377184}, + "Centre for Formal Design and Verification of Software": {42: 2.435159132377184}, + "Inter-disciplinary Programme in Educational Technology": {42: 2.435159132377184}, + "Mathematics Department": {42: 2.435159132377184}, + "Old Software Lab": {42: 2.435159132377184}, + 43: { + 42: 2.316246964380094, + 44: 2.041568024827975, + "Old Computer Science Engineering Department": 1.8439088914585775, + "New Software Lab": 1.8439088914585775, + "Centre for Technology Alternatives for Rural Areas": 1.8439088914585775, + }, + "Centre for Technology Alternatives for Rural Areas": {43: 1.8439088914585775}, + "New Software Lab": {43: 1.8439088914585775}, + "Old Computer Science Engineering Department": {43: 1.8439088914585775}, + 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, + 45: { + 44: 1.1734564329364767, + 46: 2.5930676813380713, + 47: 3.112073263919087, + "Fluid Mechanics and Fluid Power Lab": 0.623698645180507, + }, + "Fluid Mechanics and Fluid Power Lab": {45: 0.623698645180507}, + 46: { + 45: 2.5930676813380713, + 47: 1.0261578825892241, + 48: 2.0329781110479277, + "ENELEK Power Sine": 0.9486832980505138, + }, + "ENELEK Power Sine": {46: 0.9486832980505138}, + 47: {45: 3.112073263919087, 46: 1.0261578825892241}, + 48: { + 46: 2.0329781110479277, + 49: 2.167487024182613, + "Tinkerers Lab": 1.066770828247567, + "Refrigeration, A/C and Cryogenics Lab": 1.066770828247567, + "Treelabs": 1.066770828247567, + "N3 Bay": 5.318646444350292, + }, + "Treelabs": {48: 1.066770828247567}, + "Refrigeration, A/C and Cryogenics Lab": {48: 1.066770828247567}, + "Tinkerers Lab": {48: 1.066770828247567}, + 49: { + 48: 2.167487024182613, + 50: 3.382454729926182, + "Mechanical Engineering Department": 5.230774321264492, + "Industrial Engineering and Operations Research": 5.230774321264492, + }, + "Industrial Engineering and Operations Research": {49: 5.230774321264492}, + "Mechanical Engineering Department": {49: 5.230774321264492}, + 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, + 51: { + 50: 1.731184565550421, + 76: 4.826696592909068, + "Industrial Design Centre": 2.2365151463828723, + "IDC Canteen": 2.2365151463828723, + "IDC Shakti": 2.2365151463828723, + }, + "IDC Shakti": {51: 2.2365151463828723}, + "IDC Canteen": {51: 2.2365151463828723}, + "Industrial Design Centre": {51: 2.2365151463828723}, + 52: { + 50: 1.2445882853377659, + 53: 2.4226019070412703, + 76: 7.01519778766073, + 178: 9.087133761533392, + }, + 53: { + 52: 2.4226019070412703, + 54: 4.588354824989018, + "Civil Engineering Department": 4.6217961876309515, + "Victor Menezes Convention Centre": 3.063494736408078, + "Centre for Urban Science and Engineering (inside civil)": 4.6217961876309515, + "Inter-disciplinary Programme in Climate Studies": 4.6217961876309515, + }, + "Inter-disciplinary Programme in Climate Studies": {53: 4.6217961876309515}, + "Centre for Urban Science and Engineering (inside civil)": {53: 4.6217961876309515}, + "Civil Engineering Department": {53: 4.6217961876309515}, + "Victor Menezes Convention Centre": {53: 3.063494736408078}, + 54: { + 53: 4.588354824989018, + 55: 1.9677398201998149, + "Electrical Engineering Department": 4.794267410147248, + "Electrical Engineering Annexe Building": 1.0751744044572489, + }, + "Electrical Engineering Department": { + 54: 4.794267410147248, + 176: 4.331397003277349, + 56: 2.110213259365034, + }, + "Electrical Engineering Annexe Building": { + 54: 1.0751744044572489, + 56: 5.9787958653896185, + }, + 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, + 56: { + 55: 4.293483434229135, + "Girish Gaitonde Building": 2.5849564793241684, + "Electrical Engineering Department": 2.110213259365034, + "Electrical Engineering Annexe Building": 5.9787958653896185, + }, + "Girish Gaitonde Building": {175: 2.568462575160479, 56: 2.5849564793241684}, + 57: { + 174: 9.530424964291992, + 55: 2.0523157651784483, + 58: 2.1783020910791966, + "Seminar Hall": 1.8804254837669054, + "Rock Powdering Lab": 2.850438562747845, + "Rock Cutting Lab": 2.850438562747845, + }, + "Seminar Hall": {57: 1.8804254837669054}, + "Rock Cutting Lab": {57: 2.850438562747845}, + "Rock Powdering Lab": {57: 2.850438562747845}, + 58: { + 57: 2.1783020910791966, + 59: 3.9802009999496257, + "Metallurgical Engineering and Material Science Department": 5.603302597575826, + "Corrosion Science Paint Lab": 5.603302597575826, + "Corrosion Lab 1": 5.603302597575826, + "Humanities and Social Sciences Department": 4.119465984809196, + "Aerospace Engineering Annexe": 4.119465984809196, + "Inter-disciplinary Programme in Corrosion Science & Engineering": 5.603302597575826, + "Aqueous Corrosion Lab": 5.603302597575826, + }, + "Aqueous Corrosion Lab": {58: 5.603302597575826, 173: 4.494441010848846}, + "Inter-disciplinary Programme in Corrosion Science & Engineering": { + 58: 5.603302597575826, + 173: 4.494441010848846, + }, + "Metallurgical Engineering and Material Science Department": { + 58: 5.603302597575826, + 173: 4.494441010848846, + }, + "Corrosion Lab 1": {58: 5.603302597575826, 173: 4.494441010848846}, + "Corrosion Science Paint Lab": {58: 5.603302597575826, 173: 4.494441010848846}, + "Humanities and Social Sciences Department": {58: 4.119465984809196}, + "Aerospace Engineering Annexe": {58: 4.119465984809196}, + 59: { + 58: 3.9802009999496257, + 60: 3.805522303179946, + "Lecture Hall Complex - 1 & 2": 4.551263560814733, + "LT 001": 4.551263560814733, + "LT 002": 4.551263560814733, + "LT 003": 4.551263560814733, + "LT 004": 4.551263560814733, + "LT 005": 4.551263560814733, + "LT 006": 4.551263560814733, + "LT 101": 4.551263560814733, + "LT 102": 4.551263560814733, + "LT 103": 4.551263560814733, + "LT 104": 4.551263560814733, + "LT 105": 4.551263560814733, + "LT 106": 4.551263560814733, + "LT 201": 4.551263560814733, + "LT 202": 4.551263560814733, + "LT 203": 4.551263560814733, + "LT 204": 4.551263560814733, + "LT 205": 4.551263560814733, + "LT 206": 4.551263560814733, + "LT 301": 4.551263560814733, + "LT 302": 4.551263560814733, + "LT 303": 4.551263560814733, + "LT 304": 4.551263560814733, + "LT 305": 4.551263560814733, + "LT 306": 4.551263560814733, + "LC 001": 4.551263560814733, + "LC 002": 4.551263560814733, + "LC 101": 4.551263560814733, + "LC 102": 4.551263560814733, + "LC 201": 4.551263560814733, + "LC 202": 4.551263560814733, + "LC 301": 4.551263560814733, + "LC 302": 4.551263560814733, + "LH 101": 4.551263560814733, + "LH 102": 4.551263560814733, + "LH 301": 4.551263560814733, + "LH 302": 4.551263560814733, + "LA 001": 2.438237068047322, + "LA 002": 2.438237068047322, + "LA 201": 2.438237068047322, + "LA 202": 2.438237068047322, + "Lecture Hall Complex - 3": 2.438237068047322, + "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": 7.383562825628289, + "Biosciences and Bioengineering Department": 7.383562825628289, + }, + "Biosciences and Bioengineering Department": {59: 7.383562825628289}, + "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": { + 59: 7.383562825628289 + }, + "LH 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 202": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 201": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 002": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 001": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 001": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 306": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 305": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 304": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 303": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 206": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 205": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 204": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 203": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 202": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 201": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 106": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 105": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 104": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 103": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 006": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 005": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 004": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 003": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 002": {59: 4.551263560814733, 172: 5.116346352623129}, + "Lecture Hall Complex - 1 & 2": {59: 4.551263560814733, 172: 5.116346352623129}, + "LA 202": {59: 2.438237068047322}, + "LA 201": {59: 2.438237068047322}, + "LA 002": {59: 2.438237068047322}, + "LA 001": {59: 2.438237068047322}, + "Lecture Hall Complex - 3": {59: 2.438237068047322}, + 60: { + 59: 3.805522303179946, + 61: 2.0349447166937975, + "Physics Department": 4.780167361086848, + "Chemical Engineering Department": 5.520144925633747, + "Chemistry Department": 5.520144925633747, + }, + "Physics Department": {60: 4.780167361086848, 171: 4.7611973284038545}, + "Chemistry Department": {60: 5.520144925633747, 67: 8.937561188601732}, + "Chemical Engineering Department": {60: 5.520144925633747, 67: 8.937561188601732}, + 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, + 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, + 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, + 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, + 65: { + 64: 2.5793410011086166, + 66: 2.0523157651784483, + "DESE & CESE New Building": 3.623534186398688, + "Cafe Coffee Day": 3.761914406256474, + "Energy Science and Engineering (New Building)": 3.623534186398688, + }, + "Energy Science and Engineering (New Building)": {65: 3.623534186398688}, + "DESE & CESE New Building": {65: 3.623534186398688}, + "Cafe Coffee Day": {65: 3.761914406256474}, + 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, + 67: { + 66: 2.041568024827975, + 68: 7.799102512468983, + "Chemical Engineering Department": 8.937561188601732, + "Chemistry Department": 8.937561188601732, + }, + 68: { + 67: 7.799102512468983, + 69: 4.456007181322759, + "Aerospace Engineering Department": 1.5646085772486358, + "Centre for Aerospace Systems Design and Engineering": 1.5646085772486358, + }, + "Centre for Aerospace Systems Design and Engineering": {68: 1.5646085772486358}, + "Aerospace Engineering Department": {68: 1.5646085772486358}, + 69: { + 68: 4.456007181322759, + "ONGC Research Centre": 1.580506248010428, + 71: 2.44826469157238, + }, + "ONGC Research Centre": {69: 1.580506248010428}, + 70: { + 66: 12.877926851787908, + 71: 1.4453373308677804, + "Proposed Building for Tata Centre for Technology": 3.2534596969994882, + "Proposed NCAIR": 3.2534596969994882, + "Proposed Bio Mechanical Department": 3.2534596969994882, + "Proposed D.S Foundation": 3.2534596969994882, + "Proposed Press ": 3.2534596969994882, + }, + "Proposed Press ": {70: 3.2534596969994882}, + "Proposed D.S Foundation": {70: 3.2534596969994882}, + "Proposed Bio Mechanical Department": {70: 3.2534596969994882}, + "Proposed NCAIR": {70: 3.2534596969994882}, + "Proposed Building for Tata Centre for Technology": {70: 3.2534596969994882}, + 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, + 72: { + 71: 4.655534340975265, + 73: 1.7700282483621554, + "Energy Science and Engineering": 1.6772000476985445, + }, + "Energy Science and Engineering": {72: 1.6772000476985445}, + 73: { + 72: 1.7700282483621554, + 74: 0.9, + "Earth Science Department": 4.228001892147164, + }, + "Earth Science Department": {73: 4.228001892147164}, + 74: { + 73: 0.9, + 75: 2.980771712157776, + "Centre of Studies in Resources Engineering": 2.1095023109728985, + "Society for Innovation and Entrepreneurship": 2.1095023109728985, + }, + "Society for Innovation and Entrepreneurship": {74: 2.1095023109728985}, + "Centre of Studies in Resources Engineering": {74: 2.1095023109728985}, + 75: { + 74: 2.980771712157776, + 76: 3.27566787083184, + "Centre for Environmental Science and Engineering": 3.992117232747556, + }, + "Centre for Environmental Science and Engineering": {75: 3.992117232747556}, + 76: { + 75: 3.27566787083184, + 51: 4.826696592909068, + 52: 7.01519778766073, + 77: 2.198635940759634, + "Non- Academic Staff Association": 2.0523157651784483, + "Printing Press": 2.0523157651784483, + }, + "Printing Press": {76: 2.0523157651784483}, + "Non- Academic Staff Association": {76: 2.0523157651784483}, + 77: { + 76: 2.198635940759634, + 78: 4.901632381156302, + "Structural integrity Testing and Analysis Centre": 2.166333307688362, + "S3 Bay": 2.76278844647939, + }, + "S3 Bay": {77: 2.76278844647939}, + "Structural integrity Testing and Analysis Centre": { + 77: 2.166333307688362, + 82: 6.654697588921679, + }, + 78: { + 77: 4.901632381156302, + 79: 4.401136216933078, + "Electrical Maintenence": 2.4331050121192876, + "Machine Tool Lab": 3.7105255692421797, + }, + "Machine Tool Lab": {79: 4.65123639476645, 78: 3.7105255692421797}, + "Electrical Maintenence": {78: 2.4331050121192876}, + 79: { + 78: 4.401136216933078, + 80: 3.430014577228499, + "Machine Tool Lab": 4.65123639476645, + "OrthoCad Lab": 2.9313819266687173, + "Micro Fluidics Lab": 2.5045957757690163, + "RM Lab (Rapid manufacturing)": 3.0220853727186467, + "S1 Bay": 2.2614154859291116, + "N1 Bay": 2.012212712413874, + "Supercritical fluid Processing facility (Chemical Engg.)": 2.2614154859291116, + "S2 Bay": 4.65123639476645, + "UG Lab / S2 Bay": 4.65123639476645, + "Fuel Cell Research Facility": 2.012212712413874, + }, + "Fuel Cell Research Facility": { + 79: 2.012212712413874, + 80: 3.161012496020856, + 82: 2.2147234590350102, + }, + "UG Lab / S2 Bay": {79: 4.65123639476645}, + "S2 Bay": {79: 4.65123639476645}, + "Supercritical fluid Processing facility (Chemical Engg.)": { + 79: 2.2614154859291116 + }, + "N1 Bay": {79: 2.012212712413874}, + "S1 Bay": {79: 2.2614154859291116}, + "RM Lab (Rapid manufacturing)": {79: 3.0220853727186467}, + "OrthoCad Lab": {79: 2.9313819266687173}, + "Micro Fluidics Lab": {79: 2.5045957757690163}, + 80: { + 79: 3.430014577228499, + 81: 2.3910248848558644, + 82: 3.5300141642775316, + "Fuel Cell Research Facility": 3.161012496020856, + }, + 81: { + 185: 2.7727242920997393, + 80: 2.3910248848558644, + "Physics Lab (Ist Years)": 1.1353413583587977, + "UG Lab (1st years)": 1.1353413583587977, + "Power House": 2.5117722826721374, + }, + "UG Lab (1st years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, + "Physics Lab (Ist Years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, + "Power House": {81: 2.5117722826721374}, + 82: { + 80: 3.5300141642775316, + 83: 3.4311805548528045, + "UG Lab (1st years)": 3.1976553910638965, + "Physics Lab (Ist Years)": 3.1976553910638965, + "Structural integrity Testing and Analysis Centre": 6.654697588921679, + "Fuel Cell Research Facility": 2.2147234590350102, + }, + 83: { + 82: 3.4311805548528045, + 84: 1.822361105818493, + "SMAmL Suman Mashruwala Advanced Microengineering Lab": 1.0530906893520615, + "Thermal Hydraulic Test Facility": 2.54911749434976, + "N2 Bay": 2.70129598526337, + "N3 Bay": 2.195449840010015, + }, + "N3 Bay": {48: 5.318646444350292, 83: 2.195449840010015}, + "N2 Bay": {83: 2.70129598526337}, + "SMAmL Suman Mashruwala Advanced Microengineering Lab": {83: 1.0530906893520615}, + "Thermal Hydraulic Test Facility": {83: 2.54911749434976}, + 84: { + 83: 1.822361105818493, + 85: 4.349022878762539, + "Cummins Engine Research facility": 0.806225774829855, + "Heat Transfer and Thermodynamic Lab": 0.9433981132056604, + "Steam Power Lab": 1.0890362712049586, + "IC Engine and Combustion Lab": 2.1272047386182646, + }, + "IC Engine and Combustion Lab": {84: 2.1272047386182646, 85: 2.606338427756457}, + "Steam Power Lab": {84: 1.0890362712049586}, + "Cummins Engine Research facility": {84: 0.806225774829855}, + "Heat Transfer and Thermodynamic Lab": {84: 0.9433981132056604}, + 85: { + 84: 4.349022878762539, + 88: 2.5930676813380713, + 86: 3.430014577228499, + "Metal Forming Lab": 2.558906016249913, + "Old ONGC Lab": 1.8160396471443017, + "Structural Evaluation & Material Technologies Lab": 1.6876018487783189, + "Heavy Structure Lab": 3.3366150512158277, + "Hydraulics Lab": 1.0922453936730518, + "Concrete Technology Lab": 3.3366150512158277, + "IC Engine and Combustion Lab": 2.606338427756457, + }, + "Concrete Technology Lab": {85: 3.3366150512158277}, + "Hydraulics Lab": {85: 1.0922453936730518, 88: 2.1644860821913365}, + "Heavy Structure Lab": {85: 3.3366150512158277}, + "Structural Evaluation & Material Technologies Lab": {85: 1.6876018487783189}, + "Old ONGC Lab": {85: 1.8160396471443017}, + 86: { + 85: 3.430014577228499, + 87: 2.2452171387195494, + "Geotechnical Engg. Lab": 0.4049691346263318, + "Metal Forming Lab": 1.1700427342623003, + }, + "Metal Forming Lab": {86: 1.1700427342623003, 85: 2.558906016249913}, + "Geotechnical Engg. Lab": {86: 0.4049691346263318}, + 87: { + 86: 2.2452171387195494, + "National Geotechnical Centrifuge Facility": 1.2349089035228469, + "Vihar House": 6.230971031869752, + "GMFL Lab / Geophysical and multiphase Flows Lab": 5.591511423577708, + }, + "GMFL Lab / Geophysical and multiphase Flows Lab": {87: 5.591511423577708}, + "Vihar House": {87: 6.230971031869752}, + "National Geotechnical Centrifuge Facility": {87: 1.2349089035228469}, + 88: { + 85: 2.5930676813380713, + "Solar Lab": 3.3889526405661083, + 89: 1.731184565550421, + "Heat Pump Lab": 1.118033988749895, + "Hydraulics Lab Workshop": 1.9849433241279208, + "Hydraulics Lab": 2.1644860821913365, + "Hydraulics Lab (New)": 1.372953021774598, + }, + "Hydraulics Lab (New)": {88: 1.372953021774598, 89: 1.0751744044572489}, + "Hydraulics Lab Workshop": {88: 1.9849433241279208}, + "Solar Lab": {88: 3.3889526405661083}, + "Heat Pump Lab": {88: 1.118033988749895}, + 89: { + 44: 4.000499968753906, + 88: 1.731184565550421, + 39: 5.330009380854784, + "Hydraulics Lab (New)": 1.0751744044572489, + }, + 90: { + 91: 2.8017851452243803, + 39: 2.44826469157238, + "Inter-disciplinary Programme in Systems and Control Engineering": 1.4310835055998654, + }, + "Inter-disciplinary Programme in Systems and Control Engineering": { + 90: 1.4310835055998654 + }, + 91: { + 90: 2.8017851452243803, + 92: 1.880957203128237, + "NanoTech. & Science Research Centre": 1.9227584351654787, + "Advanced Centre for Research in Electronics": 1.9227584351654787, + "Sophisticated Analytical Instruments Facility": 1.9227584351654787, + }, + "Sophisticated Analytical Instruments Facility": {91: 1.9227584351654787}, + "Advanced Centre for Research in Electronics": {91: 1.9227584351654787}, + "NanoTech. & Science Research Centre": {91: 1.9227584351654787}, + 92: { + 91: 1.880957203128237, + 93: 3.0242354405700627, + 211: 1.2445882853377659, + 213: 3.1395859599635108, + 212: 1.0089598604503551, + }, + 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, + 94: { + 93: 1.7076299364909249, + 213: 1.731184565550421, + 214: 1.7700282483621554, + 36: 4.640366364846638, + }, + 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, + 96: { + 95: 2.44826469157238, + "NCC Office": 4.343500892137586, + 97: 4.59847800908083, + "Squash Court": 4.775143976886979, + }, + "Squash Court": {96: 4.775143976886979, 97: 3.006659275674582}, + "NCC Office": {96: 4.343500892137586}, + 97: { + 96: 4.59847800908083, + 98: 3.382454729926182, + "Staff Hostel": 9.135972854600654, + "Squash Court": 3.006659275674582, + }, + "Staff Hostel": {97: 9.135972854600654}, + 98: { + 97: 3.382454729926182, + 99: 1.7700282483621554, + 101: 2.623928352680385, + "Hostel 11 Athena (Girls Hostel)": 2.9698484809834995, + "Printing and photocopying H11": 2.9698484809834995, + }, + "Printing and photocopying H11": {98: 2.9698484809834995}, + "Hostel 11 Athena (Girls Hostel)": {98: 2.9698484809834995}, + 99: { + 98: 1.7700282483621554, + 100: 2.6414011433328337, + "Basketball Court": 1.5063200191194432, + }, + "Basketball Court": {99: 1.5063200191194432}, + 100: { + 99: 2.6414011433328337, + "Hockey Ground": 4.741307836451879, + "Gymkhana Grounds": 3.1465854509293085, + }, + "Hockey Ground": {100: 4.741307836451879}, + "Gymkhana Grounds": {100: 3.1465854509293085}, + 101: { + 98: 2.623928352680385, + 102: 5.378196723809943, + "Gymkhana Building": 1.9300259065618783, + "Brewberrys Cafe": 1.296919426949878, + }, + "Gymkhana Building": {101: 1.9300259065618783}, + "Brewberrys Cafe": {101: 1.296919426949878}, + 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, + 103: {102: 7.319357895334809, 104: 1.9677398201998149}, + 104: {103: 1.9677398201998149, 105: 1.731184565550421}, + 105: {104: 1.731184565550421, 106: 7.202221879392497}, + 106: {105: 7.202221879392497, 107: 1.6949926253526888}, + 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, + 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, + 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, + 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, + 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, + 112: {111: 3.560056179332006, 113: 3.383637096380166}, + 113: {112: 3.383637096380166, 114: 6.538654295801239}, + 114: {113: 6.538654295801239, "Boat House": 4.870523585817033}, + "Boat House": {114: 4.870523585817033}, + 115: {111: 1.2445882853377659, 116: 2.041568024827975}, + 116: {115: 2.041568024827975, 117: 1.4230249470757708}, + 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, + 118: {117: 1.1734564329364767, 119: 4.653815638806505}, + 119: {118: 4.653815638806505, 120: 1.0}, + 120: {119: 1.0, 121: 1.1734564329364767}, + 121: { + 120: 1.1734564329364767, + 122: 1.0261578825892241, + "National Centre for Mathematics": 1.4710540438746633, + }, + 122: { + 121: 1.0261578825892241, + 123: 16.343959128681153, + "Guest House/Padmavihar": 2.3214219780126144, + }, + "Guest House/Padmavihar": {122: 2.3214219780126144}, + "National Centre for Mathematics": {121: 1.4710540438746633}, + 123: { + 122: 16.343959128681153, + 124: 1.7700282483621554, + 138: 4.518517455980446, + "Type B-14": 2.6879360111431225, + "Guest House / Jalvihar": 6.20354737227016, + }, + "Guest House / Jalvihar": {123: 6.20354737227016}, + "Type B-14": {123: 2.6879360111431225}, + 124: {123: 1.7700282483621554, 125: 4.470011185668332}, + 125: {124: 4.470011185668332, 126: 4.518517455980446}, + 126: { + 125: 4.518517455980446, + 127: 15.53270742658858, + 135: 5.397962578603153, + "Type B-13": 3.575611835756225, + }, + "Type B-13": {126: 3.575611835756225}, + 127: { + 126: 15.53270742658858, + 128: 5.692538976590323, + "Proposed TypeA Building": 4.570557952810575, + }, + "Proposed TypeA Building": {127: 4.570557952810575}, + 128: {127: 5.692538976590323, 129: 3.6808966298987533}, + 129: { + 128: 3.6808966298987533, + 130: 7.935048834128244, + 193: 5.733149221850065, + "B 19 Old Multistoried Building- Residence ": 4.692973471052229, + }, + "B 19 Old Multistoried Building- Residence ": {129: 4.692973471052229}, + 130: { + 129: 7.935048834128244, + 131: 1.4042791745233567, + "White House": 5.517698795693726, + }, + "White House": {130: 5.517698795693726}, + 131: {130: 1.4042791745233567, 132: 4.224807687930896, "CTR 20": 2.000249984376953}, + "CTR 20": {131: 2.000249984376953}, + 132: { + 131: 4.224807687930896, + 133: 9.713753136661442, + "CTR 19": 2.040833163195855, + "Bungalow A10 ": 4.08166632639171, + }, + "Bungalow A10 ": {132: 4.08166632639171, 133: 6.646878966853541}, + "CTR 19": {132: 2.040833163195855}, + 133: { + 132: 9.713753136661442, + 134: 1.4916433890176297, + "Bungalow A11 ": 3.508275929855005, + "Bungalow A10 ": 6.646878966853541, + "Bungalow A8 ": 6.26258732474047, + }, + "Bungalow A8 ": {133: 6.26258732474047, 153: 10.713589501189599}, + 134: { + 133: 1.4916433890176297, + 135: 11.502738804302219, + 153: 7.340844638050855, + "Shishu Vihar": 4.2901048938225275, + "Bungalow A5 ": 4.350287346831241, + "Bungalow A11 ": 3.645408070436011, + }, + "Bungalow A11 ": {133: 3.508275929855005, 134: 3.645408070436011}, + "Bungalow A5 ": {134: 4.350287346831241, 153: 3.634969050762331}, + "Shishu Vihar": {134: 4.2901048938225275, 153: 3.6206353033687333}, + 135: { + 134: 11.502738804302219, + 136: 9.79025025216414, + 126: 5.397962578603153, + "A1 Director Bungalow": 7.410802925459562, + }, + "A1 Director Bungalow": { + 135: 7.410802925459562, + 136: 3.7890632087628204, + 155: 5.3615296324836255, + 154: 5.123377792043057, + }, + 136: { + 135: 9.79025025216414, + 137: 2.316246964380094, + 155: 5.403794962801605, + "Type B-1": 2.2908513701242166, + "Bungalow A13 ": 2.27771815640127, + "A1 Director Bungalow": 3.7890632087628204, + }, + "Bungalow A13 ": {136: 2.27771815640127}, + "Type B-1": {136: 2.2908513701242166}, + 137: {136: 2.316246964380094, 138: 1.2727922061357855}, + 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, + 139: {138: 6.175597137119616, 140: 1.6760071598892412}, + 140: {139: 1.6760071598892412, 141: 4.82265487050442}, + 141: { + 140: 4.82265487050442, + 142: 6.957082721946032, + 157: 3.2919599025504547, + "Guest House/Vanvihar": 3.216364407215078, + }, + "Guest House/Vanvihar": {141: 3.216364407215078}, + 142: { + 141: 6.957082721946032, + 143: 3.9802009999496257, + 162: 3.6585516259853432, + "Gulmohar Garden Cafetaria": 2.3759208741033446, + "Staff Club": 3.9654760117796704, + }, + "Staff Club": {142: 3.9654760117796704}, + 143: { + 142: 3.9802009999496257, + 144: 5.771828133269389, + "Hospital": 4.228001892147164, + }, + "Hospital": {143: 4.228001892147164}, + 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, + 145: {144: 0.8538149682454624, 146: 1.420211251891774}, + 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, + 147: { + 146: 5.530461101933545, + 148: 2.041568024827975, + "Kshitij Udyan": 4.846648326421054, + }, + "Kshitij Udyan": {147: 4.846648326421054}, + 148: {147: 2.041568024827975, 149: 2.263183598385248}, + 149: { + 148: 2.263183598385248, + 150: 2.6700187265260893, + "Tennis Court (new)": 7.513321502504734, + }, + "Tennis Court (new)": {149: 7.513321502504734}, + 150: {149: 2.6700187265260893, 151: 2.041568024827975}, + 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, + 152: { + 151: 1.4512063946937388, + 168: 2.167487024182613, + 146: 3.382454729926182, + "Convocation Hall": 3.4539832078341086, + "Institute Music Room": 3.4539832078341086, + }, + "Institute Music Room": {152: 3.4539832078341086}, + "Convocation Hall": {152: 3.4539832078341086}, + 153: { + 134: 7.340844638050855, + 154: 8.926925562588723, + "Main Gate no. 2": 11.7957619508025, + "Shishu Vihar": 3.6206353033687333, + "Bungalow A5 ": 3.634969050762331, + "ATM - State Bank Main Gate": 13.127261709892128, + "Bungalow A8 ": 10.713589501189599, + }, + "ATM - State Bank Main Gate": {153: 13.127261709892128}, + "Main Gate no. 2": {153: 11.7957619508025}, + 154: { + 153: 8.926925562588723, + 155: 8.968890678339212, + "A1 Director Bungalow": 5.123377792043057, + }, + 155: { + 136: 5.403794962801605, + 154: 8.968890678339212, + 156: 6.980329505116503, + "Hostel 10 Annexe (Girls Hostel)": 4.018084120572888, + "A1 Director Bungalow": 5.3615296324836255, + }, + "Hostel 10 Annexe (Girls Hostel)": {155: 4.018084120572888}, + 156: { + 155: 6.980329505116503, + 157: 2.39269722280108, + "Hostel 10 Phoenix (Girls Hostel)": 2.5909457732650445, + }, + "Hostel 10 Phoenix (Girls Hostel)": {156: 2.5909457732650445}, + 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, + 158: { + 157: 1.587765725792064, + 162: 6.006163500938015, + 159: 12.385031287808683, + "Gulmohar Building": 2.4135036772294343, + "Gulmohar Garden Cafetaria": 3.0909545451203257, + "ATM - Canara Bank near Gulmohar": 2.4135036772294343, + "Gulmohar Restaurant": 2.4135036772294343, + }, + "Gulmohar Restaurant": {158: 2.4135036772294343}, + "ATM - Canara Bank near Gulmohar": {158: 2.4135036772294343}, + "Gulmohar Garden Cafetaria": { + 162: 3.9115214431215892, + 142: 2.3759208741033446, + 158: 3.0909545451203257, + }, + "Gulmohar Building": {158: 2.4135036772294343}, + 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, + 160: { + 159: 1.981161275615895, + 161: 2.279034883453959, + 63: 6.325345840347388, + 253: 12.683256679575637, + }, + 161: {160: 2.279034883453959, 61: 2.545780823244609}, + 162: { + 142: 3.6585516259853432, + 158: 6.006163500938015, + 163: 3.784309712483903, + "Gulmohar Garden Cafetaria": 3.9115214431215892, + }, + 163: { + 162: 3.784309712483903, + 164: 2.4041630560342617, + "Faqir Chand Kohli Auditorium": 3.5701540583005658, + "Kanwal Rekhi School of Information Technology": 3.5701540583005658, + "KReSIT Canteen": 3.5701540583005658, + }, + "KReSIT Canteen": {163: 3.5701540583005658, 172: 3.544573317058063}, + "Kanwal Rekhi School of Information Technology": { + 163: 3.5701540583005658, + 172: 3.544573317058063, + }, + "Faqir Chand Kohli Auditorium": {163: 3.5701540583005658, 172: 3.544573317058063}, + "Computer Centre": {164: 3.842004685057008, 173: 2.6819768828235637}, + 164: { + 163: 2.4041630560342617, + 165: 2.7951744131627994, + "Computer Centre": 3.842004685057008, + }, + 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, + 166: { + 165: 1.2445882853377659, + 167: 1.8, + 144: 3.4896991274320484, + "School of Management": 3.890115679513914, + "Industrial Research & Consultancy Centre": 3.890115679513914, + }, + "Industrial Research & Consultancy Centre": { + 175: 3.2893768406797053, + 166: 3.890115679513914, + }, + "School of Management": {175: 3.2893768406797053, 166: 3.890115679513914}, + 167: {166: 1.8, 168: 4.013103537164223, "Chaayos Near SOM": 121.87791022166404}, + 168: { + 167: 4.013103537164223, + 152: 2.167487024182613, + 169: 1.981161275615895, + 170: 2.828780656042458, + "Chaayos Near SOM": 120.84622459969529, + }, + "Chaayos Near SOM": {167: 121.87791022166404, 168: 120.84622459969529}, + 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, + 170: { + 168: 2.828780656042458, + "Main Building": 3.782591704109763, + "Joint Admission Test for M.Sc. Office": 3.782591704109763, + "Printing and photocopying Main Building": 3.782591704109763, + "Hostel Coordinating Unit": 3.782591704109763, + }, + "Hostel Coordinating Unit": {170: 3.782591704109763, 179: 1.6155494421403511}, + "Printing and photocopying Main Building": { + 170: 3.782591704109763, + 179: 1.6155494421403511, + }, + "Joint Admission Test for M.Sc. Office": { + 170: 3.782591704109763, + 179: 1.6155494421403511, + }, + "Main Building": {170: 3.782591704109763, 179: 1.6155494421403511}, + 171: { + 172: 4.000499968753906, + 159: 4.527471700629392, + "Physics Department": 4.7611973284038545, + }, + 172: { + 171: 4.000499968753906, + 173: 4.000499968753906, + "Kanwal Rekhi School of Information Technology": 3.544573317058063, + "KReSIT Canteen": 3.544573317058063, + "Faqir Chand Kohli Auditorium": 3.544573317058063, + "Lecture Hall Complex - 1 & 2": 5.116346352623129, + "LT 001": 5.116346352623129, + "LT 002": 5.116346352623129, + "LT 003": 5.116346352623129, + "LT 004": 5.116346352623129, + "LT 005": 5.116346352623129, + "LT 006": 5.116346352623129, + "LT 101": 5.116346352623129, + "LT 102": 5.116346352623129, + "LT 103": 5.116346352623129, + "LT 104": 5.116346352623129, + "LT 105": 5.116346352623129, + "LT 106": 5.116346352623129, + "LT 201": 5.116346352623129, + "LT 202": 5.116346352623129, + "LT 203": 5.116346352623129, + "LT 204": 5.116346352623129, + "LT 205": 5.116346352623129, + "LT 206": 5.116346352623129, + "LT 301": 5.116346352623129, + "LT 302": 5.116346352623129, + "LT 303": 5.116346352623129, + "LT 304": 5.116346352623129, + "LT 305": 5.116346352623129, + "LT 306": 5.116346352623129, + "LC 001": 5.116346352623129, + "LC 002": 5.116346352623129, + "LC 101": 5.116346352623129, + "LC 102": 5.116346352623129, + "LC 201": 5.116346352623129, + "LC 202": 5.116346352623129, + "LC 301": 5.116346352623129, + "LC 302": 5.116346352623129, + "LH 101": 5.116346352623129, + "LH 102": 5.116346352623129, + "LH 301": 5.116346352623129, + "LH 302": 5.116346352623129, + }, + 173: { + 172: 4.000499968753906, + 174: 2.980771712157776, + "Computer Centre": 2.6819768828235637, + "Metallurgical Engineering and Material Science Department": 4.494441010848846, + "Corrosion Science Paint Lab": 4.494441010848846, + "Corrosion Lab 1": 4.494441010848846, + "Inter-disciplinary Programme in Corrosion Science & Engineering": 4.494441010848846, + "Aqueous Corrosion Lab": 4.494441010848846, + }, + 174: { + 173: 2.980771712157776, + 175: 1.6099689437998486, + 165: 6.240032051199737, + 57: 9.530424964291992, + }, + 175: { + 174: 1.6099689437998486, + 176: 2.980771712157776, + "Girish Gaitonde Building": 2.568462575160479, + "School of Management": 3.2893768406797053, + "Industrial Research & Consultancy Centre": 3.2893768406797053, + }, + 176: { + 175: 2.980771712157776, + 177: 2.2228360263411244, + "Electrical Engineering Department": 4.331397003277349, + "Cafe 92": 1.587765725792064, + }, + "Cafe 92": {176: 1.587765725792064}, + 177: { + 176: 2.2228360263411244, + 178: 3.9760533195620003, + "PC Saxena Auditorium / Lecture Theatre": 1.91049731745428, + }, + "PC Saxena Auditorium / Lecture Theatre": {177: 1.91049731745428}, + 178: { + 179: 3.93459019467085, + 177: 3.9760533195620003, + 52: 9.087133761533392, + 180: 3.430014577228499, + }, + 179: { + 178: 3.93459019467085, + "Main Building": 1.6155494421403511, + "Joint Admission Test for M.Sc. Office": 1.6155494421403511, + "Printing and photocopying Main Building": 1.6155494421403511, + "Hostel Coordinating Unit": 1.6155494421403511, + }, + 180: {41: 2.2768399153212333, 178: 3.430014577228499}, + 181: { + 64: 5.060632371551998, + 182: 2.0523157651784483, + "Kendriya Vidyalaya ": 1.6376812876747417, + }, + "Kendriya Vidyalaya ": {181: 1.6376812876747417}, + 182: { + 181: 2.0523157651784483, + 183: 3.034633421024688, + "Medical Store": 3.3712015662075148, + "Uphar": 5.015974481593781, + }, + "Medical Store": {182: 3.3712015662075148}, + "Uphar": {182: 5.015974481593781}, + 183: { + 184: 2.4226019070412703, + 182: 3.034633421024688, + "Post Office": 2.3345235059857505, + }, + "Post Office": {183: 2.3345235059857505}, + 184: { + 183: 2.4226019070412703, + "Market Gate, Y point Gate no. 3": 1.91049731745428, + 249: 5.692538976590323, + }, + "Market Gate, Y point Gate no. 3": {184: 1.91049731745428}, + 185: { + 81: 2.7727242920997393, + 186: 6.006163500938015, + "Hostel 10A QIP (Girls Hostel)": 2.818865019826242, + }, + "Hostel 10A QIP (Girls Hostel)": {185: 2.818865019826242}, + 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, + 187: { + 186: 4.000499968753906, + 226: 0.8700574693662483, + 225: 0.6363961030678927, + "QIP 2": 1.793599732381782, + }, + "QIP 2": {225: 1.329661611087573, 187: 1.793599732381782}, + 188: { + 189: 6.175597137119616, + "K-Yantra Lab (CSE Dept.)": 2.2487774456357394, + 231: 0.28460498941515416, + 228: 2.4226019070412703, + }, + "K-Yantra Lab (CSE Dept.)": {231: 2.5079872407968904, 188: 2.2487774456357394}, + 189: { + 188: 6.175597137119616, + 190: 1.4512063946937388, + 232: 4.224807687930896, + "Tulsi B": 1.528397853963424, + "B 22 Ananta": 4.420407221060069, + }, + "B 22 Ananta": {189: 4.420407221060069}, + "Tulsi B": {189: 1.528397853963424}, + 190: { + 189: 1.4512063946937388, + 191: 1.7, + "Tulsi A": 1.188696765369537, + "Sameer Hill": 12.108055170009756, + }, + "Sameer Hill": {190: 12.108055170009756}, + "Tulsi A": {190: 1.188696765369537}, + 191: { + 190: 1.7, + 192: 5.426232578870906, + "B 23 Aravali": 2.5394881374009213, + "Society for Applied Microwave Electronics Engineering & Research": 3.6173194495371845, + }, + "Society for Applied Microwave Electronics Engineering & Research": { + 191: 3.6173194495371845 + }, + "B 23 Aravali": {234: 4.870831551183022, 191: 2.5394881374009213}, + 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, + 193: {129: 5.733149221850065, 194: 5.656854249492381}, + 194: {193: 5.656854249492381, 195: 2.5298221281347035}, + 195: {194: 2.5298221281347035, 196: 6.694475334184151}, + 196: { + 195: 6.694475334184151, + 197: 5.796723212298479, + "Lake Side Gate no. 1": 7.727483419587518, + }, + "Lake Side Gate no. 1": {196: 7.727483419587518}, + 197: {196: 5.796723212298479, 198: 3.560056179332006}, + 198: {197: 3.560056179332006, 199: 2.4316660954991334}, + 199: {198: 2.4316660954991334, 200: 14.840080862313386}, + 200: {199: 14.840080862313386, "Padmavati Devi Temple": 14.451089924292909}, + "Padmavati Devi Temple": {200: 14.451089924292909}, + 201: { + "QIP 1": 1.5924823389915506, + 202: 3.0242354405700627, + 225: 3.382454729926182, + 204: 7.045565981523415, + 203: 5.600892785976178, + 186: 0.0, + }, + "QIP 1": {201: 1.5924823389915506}, + 202: { + 215: 1.8027756377319946, + 203: 2.5930676813380713, + 204: 4.044007912949726, + "Type1 - 6": 1.408900280360537, + 201: 3.0242354405700627, + }, + "Type1 - 6": {202: 1.408900280360537}, + 203: { + "Type1 - 7": 1.1300442469213319, + 204: 1.4512063946937388, + 239: 3.784309712483903, + 202: 2.5930676813380713, + 201: 5.600892785976178, + }, + "Type1 - 7": {204: 1.7334935823359716, 203: 1.1300442469213319}, + 204: { + "Type1 - 7": 1.7334935823359716, + 201: 7.045565981523415, + 203: 1.4512063946937388, + 202: 4.044007912949726, + 220: 3.430014577228499, + 205: 1.7700282483621554, + }, + 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, + 206: { + 224: 1.0, + 223: 2.8208154849263005, + 207: 1.981161275615895, + 205: 1.731184565550421, + }, + 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, + 208: { + 208: 0.0, + 243: 1.1627553482998907, + 209: 2.4020824298928627, + "Type 2B 23": 2.4070729112347222, + }, + "Type 2B 23": {208: 2.4070729112347222}, + 209: { + 208: 2.4020824298928627, + 235: 4.224807687930896, + 210: 2.316246964380094, + "CSRE C": 1.3118688958886098, + }, + "CSRE C": {209: 1.3118688958886098}, + 210: {209: 2.316246964380094, 211: 3.6792662311933886}, + 211: { + 210: 3.6792662311933886, + 212: 2.251443981093023, + 238: 2.9025850547399985, + 92: 1.2445882853377659, + "Bungalow A16 ": 0.9, + }, + "Bungalow A16 ": {211: 0.9}, + 212: { + 213: 2.1384573879317776, + "Bungalow A15 ": 1.0324727599312244, + 211: 2.251443981093023, + 92: 1.0089598604503551, + }, + "Bungalow A15 ": {212: 1.0324727599312244}, + 213: { + 93: 0.28460498941515416, + 92: 3.1395859599635108, + 94: 1.731184565550421, + "Bungalow A14 ": 1.0373041983911953, + 212: 2.1384573879317776, + }, + "Bungalow A14 ": {213: 1.0373041983911953}, + 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, + 215: { + 202: 1.8027756377319946, + 216: 1.587765725792064, + "Type 2B 22": 1.3601470508735443, + }, + "Type 2B 22": {215: 1.3601470508735443}, + 216: { + 215: 1.587765725792064, + 217: 1.6099689437998486, + 226: 2.828780656042458, + "Type1 - 18": 1.3103434664239755, + "Type1 - 16": 1.5524174696260025, + }, + "Type1 - 18": {216: 1.3103434664239755}, + "Type1 - 16": {216: 1.5524174696260025}, + 217: { + 216: 1.6099689437998486, + 239: 1.1428035701729322, + 218: 1.4042791745233567, + 227: 2.6700187265260893, + "Proposed Type H1 Building": 6.9112227572261045, + }, + "Proposed Type H1 Building": {226: 3.3575288531895002, 217: 6.9112227572261045}, + 218: { + 217: 1.4042791745233567, + 219: 1.1853269591129698, + "Type1 - 14": 1.0606601717798212, + "Type H1 - 12": 1.5195394038984313, + }, + "Type1 - 14": {218: 1.0606601717798212}, + "Type H1 - 12": {218: 1.5195394038984313}, + 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, + 220: { + 204: 3.430014577228499, + 239: 2.0124611797498106, + 219: 2.4226019070412703, + "Type1 - 13": 0.6363961030678927, + 222: 2.828780656042458, + }, + "Type1 - 13": {220: 0.6363961030678927}, + 221: {222: 1.6324827717314507, "Type H1 - 5": 0.4949747468305833}, + "Type H1 - 5": {221: 0.4949747468305833}, + 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, + 223: { + 224: 1.822361105818493, + 222: 0.8221921916437787, + "Type H1 - 6": 1.5703502793962882, + }, + "Type H1 - 6": {223: 1.5703502793962882}, + 224: {223: 1.822361105818493, 206: 1.0, "Type H1 - 8": 1.216963434126104}, + "Type H1 - 8": {224: 1.216963434126104}, + 225: { + 201: 3.382454729926182, + 226: 1.3914021704740869, + "QIP 2": 1.329661611087573, + 187: 0.6363961030678927, + }, + 226: { + 226: 0.0, + 216: 2.828780656042458, + 227: 2.2228360263411244, + 187: 0.8700574693662483, + "Proposed Type H1 Building": 3.3575288531895002, + }, + 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, + 228: { + 219: 3.112073263919087, + 227: 1.77792013318934, + 230: 2.316246964380094, + 229: 3.4311805548528045, + 188: 2.4226019070412703, + }, + 229: {228: 3.4311805548528045, "Vidya Niwas": 1.2041594578792296}, + "Vidya Niwas": {229: 1.2041594578792296}, + 230: { + 228: 2.316246964380094, + 231: 1.4916433890176297, + "C22, B wing, Vindya": 1.820988742414406, + }, + "C22, B wing, Vindya": {230: 1.820988742414406}, + 231: { + 230: 1.4916433890176297, + "C22, A wing, Sahyadri": 1.420211251891774, + "K-Yantra Lab (CSE Dept.)": 2.5079872407968904, + 232: 1.7977764043395386, + 188: 0.28460498941515416, + }, + "C22, A wing, Sahyadri": {231: 1.420211251891774}, + 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, + 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, + 234: { + "B 23 Aravali": 4.870831551183022, + 233: 2.6700187265260893, + 235: 2.7727242920997393, + }, + 235: {234: 2.7727242920997393, 209: 4.224807687930896}, + 236: { + 237: 2.1384573879317776, + "Bungalow A19 ": 0.970051545022222, + "CSRE D": 1.0807404868885035, + }, + "Bungalow A19 ": {236: 0.970051545022222}, + "CSRE D": {236: 1.0807404868885035}, + 237: { + 236: 2.1384573879317776, + 238: 1.8952572384771413, + "Bungalow A18 ": 0.8, + "CSRE A": 1.7418381095842403, + "CSRE B": 0.8354639429682169, + }, + "Bungalow A18 ": {237: 0.8}, + "CSRE A": {237: 1.7418381095842403}, + "CSRE B": {237: 0.8354639429682169}, + 238: { + 237: 1.8952572384771413, + 211: 2.9025850547399985, + "Bungalow A17 ": 0.806225774829855, + }, + "Bungalow A17 ": {238: 0.806225774829855}, + 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, + 240: {"Type H2 - 18": 0.9492101980067429, 205: 1.822361105818493}, + "Type H2 - 18": {240: 0.9492101980067429}, + 241: { + 242: 0.6363961030678927, + "Type H2 - 19": 0.6324555320336759, + 207: 1.822361105818493, + }, + "Type H2 - 19": {241: 0.6324555320336759}, + 242: {241: 0.6363961030678927, "Type H2 - 20": 1.5}, + "Type H2 - 20": {242: 1.5}, + 243: {"Type H2 - 21": 0.9617692030835673, 208: 1.1627553482998907}, + "Type H2 - 21": {243: 0.9617692030835673}, + 244: { + 233: 3.1508728949292766, + 232: 1.6595180023127196, + "Tulsi C": 1.5990622251807463, + }, + "Tulsi C": {244: 1.5990622251807463}, + 245: { + 246: 4.401136216933078, + "Security Check Point": 3.8860005146680052, + 255: 4.802082881417188, + }, + 246: {245: 4.401136216933078, "Paspoli Gate no. 4 ": 9.244295538330652}, + "Paspoli Gate no. 4 ": {246: 9.244295538330652}, + 247: {192: 5.9605368885696866, 248: 4.271416626834709}, + 248: {247: 4.271416626834709, "MW Quarters 1": 1.8384776310850235}, + "MW Quarters 1": {248: 1.8384776310850235}, + 249: { + 184: 5.692538976590323, + 250: 5.426232578870906, + 251: 2.2671568097509267, + "Kendriya Vidyalay Quarters 1": 1.766635219845908, + }, + "Kendriya Vidyalay Quarters 1": {249: 1.766635219845908, 251: 2.471639132235934}, + 250: { + 249: 5.426232578870906, + "Campus School": 4.745102738613781, + "Kindergarten School": 4.745102738613781, + }, + "Kindergarten School": {250: 4.745102738613781, 253: 4.33232039443068}, + "Campus School": {250: 4.745102738613781, 253: 4.33232039443068}, + 251: { + 249: 2.2671568097509267, + "Kendriya Vidyalay Quarters 1": 2.471639132235934, + 252: 4.804164859785725, + }, + 252: {251: 4.804164859785725, 253: 3.035951251255527}, + 253: { + 252: 3.035951251255527, + 254: 3.4896991274320484, + 160: 12.683256679575637, + "Campus School": 4.33232039443068, + "Type C-7": 0.34058772731852804, + "Kindergarten School": 4.33232039443068, + }, + "Type C-7": {253: 0.34058772731852804}, + 254: {253: 3.4896991274320484, "Shivalik C 23 (187-240)": 7.684009370114016}, + "Shivalik C 23 (187-240)": {254: 7.684009370114016}, + 255: { + 2: 18.03285889702462, + "Security Check Point": 1.4577379737113252, + 245: 4.802082881417188, + }, + "Aromas Canteen": { + 27: 1.6337074401495515, + 28: 2.9740544715926105, + "Hostel 01 Queen of the campus": 3.7380476187443095, + "Domino's outlet": 1.4286357128393508, + }, +} diff --git a/lostandfound/admin.py b/lostandfound/admin.py index dd3a2476..577f3065 100644 --- a/lostandfound/admin.py +++ b/lostandfound/admin.py @@ -75,6 +75,7 @@ class Meta: def save_model(self, request, obj, form, change): super().save_model(request, obj, form, change) + class CSOAdminSite(admin.AdminSite): site_header = "CSO Admin" site_title = "CSO Admin Portal" diff --git a/lostandfound/migrations/0003_alter_productfound_product_image1.py b/lostandfound/migrations/0003_alter_productfound_product_image1.py index 13ca3849..a2a86a17 100644 --- a/lostandfound/migrations/0003_alter_productfound_product_image1.py +++ b/lostandfound/migrations/0003_alter_productfound_product_image1.py @@ -4,15 +4,14 @@ class Migration(migrations.Migration): - dependencies = [ - ('lostandfound', '0002_auto_20231209_1246'), + ("lostandfound", "0002_auto_20231209_1246"), ] operations = [ migrations.AlterField( - model_name='productfound', - name='product_image1', - field=models.ImageField(upload_to='laf_images/'), + model_name="productfound", + name="product_image1", + field=models.ImageField(upload_to="laf_images/"), ), ] diff --git a/lostandfound/migrations/0003_auto_20231211_1548.py b/lostandfound/migrations/0003_auto_20231211_1548.py index 9bb72f3e..84dbcb42 100644 --- a/lostandfound/migrations/0003_auto_20231211_1548.py +++ b/lostandfound/migrations/0003_auto_20231211_1548.py @@ -6,36 +6,45 @@ class Migration(migrations.Migration): - dependencies = [ - ('users', '0044_remove_userprofile_followed_communities'), - ('lostandfound', '0002_auto_20231209_1246'), + ("users", "0044_remove_userprofile_followed_communities"), + ("lostandfound", "0002_auto_20231209_1246"), ] operations = [ migrations.AddField( - model_name='productfound', - name='uploaded_by', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='uploaded_products', to='users.userprofile'), + model_name="productfound", + name="uploaded_by", + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="uploaded_products", + to="users.userprofile", + ), ), migrations.AlterField( - model_name='productfound', - name='claimed', + model_name="productfound", + name="claimed", field=models.BooleanField(blank=True, default=False, null=True), ), migrations.AlterField( - model_name='productfound', - name='product_image1', + model_name="productfound", + name="product_image1", field=models.ImageField(upload_to=lostandfound.models.get_image_path), ), migrations.AlterField( - model_name='productfound', - name='product_image2', - field=models.ImageField(blank=True, upload_to=lostandfound.models.get_image_path), + model_name="productfound", + name="product_image2", + field=models.ImageField( + blank=True, upload_to=lostandfound.models.get_image_path + ), ), migrations.AlterField( - model_name='productfound', - name='product_image3', - field=models.ImageField(blank=True, upload_to=lostandfound.models.get_image_path), + model_name="productfound", + name="product_image3", + field=models.ImageField( + blank=True, upload_to=lostandfound.models.get_image_path + ), ), ] diff --git a/lostandfound/migrations/0004_merge_20240101_2101.py b/lostandfound/migrations/0004_merge_20240101_2101.py index 3665f930..5c474b18 100644 --- a/lostandfound/migrations/0004_merge_20240101_2101.py +++ b/lostandfound/migrations/0004_merge_20240101_2101.py @@ -4,11 +4,9 @@ class Migration(migrations.Migration): - dependencies = [ - ('lostandfound', '0003_alter_productfound_product_image1'), - ('lostandfound', '0003_auto_20231211_1548'), + ("lostandfound", "0003_alter_productfound_product_image1"), + ("lostandfound", "0003_auto_20231211_1548"), ] - operations = [ - ] + operations = [] diff --git a/lostandfound/models.py b/lostandfound/models.py index 0c73626d..a23739ee 100644 --- a/lostandfound/models.py +++ b/lostandfound/models.py @@ -5,9 +5,13 @@ PDT_NAME_MAX_LENGTH = 60 CONTACT_MAX_LENGTH = 300 + def get_image_path(instance, filename): userid = str(instance.uploaded_by.id) - return './' + userid[0:2] + '/' + userid[2:4] + '/' + userid + '-' + filename + '.jpg' + return ( + "./" + userid[0:2] + "/" + userid[2:4] + "/" + userid + "-" + filename + ".jpg" + ) + class ProductFound(models.Model): CATEGORY_CHOICES = ( @@ -23,7 +27,9 @@ class ProductFound(models.Model): product_image = models.TextField( blank=True, null=True ) # Contains URLs of all three images. - product_image1 = models.ImageField(upload_to=get_image_path, null=False, blank=False) + product_image1 = models.ImageField( + upload_to=get_image_path, null=False, blank=False + ) product_image2 = models.ImageField(upload_to=get_image_path, null=False, blank=True) product_image3 = models.ImageField(upload_to=get_image_path, null=False, blank=True) category = models.CharField( @@ -85,4 +91,4 @@ class Meta: "time_of_creation", ] ), - ] \ No newline at end of file + ] diff --git a/lostandfound/tests.py b/lostandfound/tests.py index 49290204..a39b155a 100644 --- a/lostandfound/tests.py +++ b/lostandfound/tests.py @@ -1,2 +1 @@ - # Create your tests here. diff --git a/messmenu/views.py b/messmenu/views.py index d4cd270f..ed31d7a8 100644 --- a/messmenu/views.py +++ b/messmenu/views.py @@ -63,10 +63,10 @@ def getUserMess(request): def binaryDecode(x): b_x = "{0:b}".format(int(x)) - day = int(b_x[len(b_x) - 5: len(b_x)], 2) - meal = b_x[len(b_x) - 8: len(b_x) - 5] - time = int(b_x[len(b_x) - 19: len(b_x) - 8], 2) - hostel = int(b_x[0: len(b_x) - 19], 2) + day = int(b_x[len(b_x) - 5 : len(b_x)], 2) + meal = b_x[len(b_x) - 8 : len(b_x) - 5] + time = int(b_x[len(b_x) - 19 : len(b_x) - 8], 2) + hostel = int(b_x[0 : len(b_x) - 19], 2) return {"hostel": hostel, "time": time, "meal": meal, "day": day} diff --git a/roles/migrations/0022_alter_bodyrole_permissions.py b/roles/migrations/0022_alter_bodyrole_permissions.py index b5b0e563..249db768 100644 --- a/roles/migrations/0022_alter_bodyrole_permissions.py +++ b/roles/migrations/0022_alter_bodyrole_permissions.py @@ -5,15 +5,27 @@ class Migration(migrations.Migration): - dependencies = [ - ('roles', '0021_delete_communityrole'), + ("roles", "0021_delete_communityrole"), ] operations = [ migrations.AlterField( - model_name='bodyrole', - name='permissions', - field=multiselectfield.db.fields.MultiSelectField(choices=[('AddE', 'Add Event'), ('UpdE', 'Update Event'), ('DelE', 'Delete Event'), ('VerE', 'Verify Event'), ('UpdB', 'Update Body'), ('Role', 'Modify Roles'), ('VerA', 'Verify Achievements'), ('AppP', 'Moderate Post'), ('ModC', 'Moderate Comment')], max_length=44), + model_name="bodyrole", + name="permissions", + field=multiselectfield.db.fields.MultiSelectField( + choices=[ + ("AddE", "Add Event"), + ("UpdE", "Update Event"), + ("DelE", "Delete Event"), + ("VerE", "Verify Event"), + ("UpdB", "Update Body"), + ("Role", "Modify Roles"), + ("VerA", "Verify Achievements"), + ("AppP", "Moderate Post"), + ("ModC", "Moderate Comment"), + ], + max_length=44, + ), ), ] From 0e8d085d887a19c148481916b594198329348a77 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 21:45:40 +0530 Subject: [PATCH 22/40] FIX : Merge Conflicts --- .flake8 | 2 +- events/views.py | 4 +--- helpers/misc.py | 2 +- locations/management/commands/mapnav.py | 1 + messmenu/views.py | 8 ++++---- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.flake8 b/.flake8 index be59c58b..dc2e0c5b 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] exclude = .git,__pycache__,backend/settings*,*/migrations/*,venv,.venv -ignore = E302,E731,W503 +ignore = E302,E731,W503,C901,E501 max-complexity = 15 max-line-length = 120 diff --git a/events/views.py b/events/views.py index 7b2877e1..e6a615fe 100644 --- a/events/views.py +++ b/events/views.py @@ -101,9 +101,7 @@ def create(self, request): print(request.data["bodies_id"]) print(request.data.get("verification_bodies")) - if type(request.data["bodies_id"]) == type( - "Jatin Singhal" - ) and user_has_privilege( + if isinstance(request.data["bodies_id"], str) and user_has_privilege( request.user.profile, request.data["bodies_id"], "AddE" ): return super().create(request) diff --git a/helpers/misc.py b/helpers/misc.py index c697b896..06a020fd 100644 --- a/helpers/misc.py +++ b/helpers/misc.py @@ -38,7 +38,7 @@ def query_from_num(request, default_num, queryset): if num_q is not None and str.isdigit(num_q) and int(num_q) <= 100: num = int(num_q) - return queryset[from_i : from_i + num] + return queryset[from_i: from_i + num] def query_search( # pylint: disable=too-many-arguments diff --git a/locations/management/commands/mapnav.py b/locations/management/commands/mapnav.py index 31628a01..0ff46998 100644 --- a/locations/management/commands/mapnav.py +++ b/locations/management/commands/mapnav.py @@ -295,6 +295,7 @@ def __init__(self): including the distances between nodes. """ + # noqa: C901 def update(self): for x in self.adj_list: if type(x) != str: diff --git a/messmenu/views.py b/messmenu/views.py index ed31d7a8..d4cd270f 100644 --- a/messmenu/views.py +++ b/messmenu/views.py @@ -63,10 +63,10 @@ def getUserMess(request): def binaryDecode(x): b_x = "{0:b}".format(int(x)) - day = int(b_x[len(b_x) - 5 : len(b_x)], 2) - meal = b_x[len(b_x) - 8 : len(b_x) - 5] - time = int(b_x[len(b_x) - 19 : len(b_x) - 8], 2) - hostel = int(b_x[0 : len(b_x) - 19], 2) + day = int(b_x[len(b_x) - 5: len(b_x)], 2) + meal = b_x[len(b_x) - 8: len(b_x) - 5] + time = int(b_x[len(b_x) - 19: len(b_x) - 8], 2) + hostel = int(b_x[0: len(b_x) - 19], 2) return {"hostel": hostel, "time": time, "meal": meal, "day": day} From 2d70cb27f69bc71699e17f948fcced66c5721992 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 22:53:57 +0530 Subject: [PATCH 23/40] Delete .DS_Store --- .DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index eb6b3c34a0ef8547c5811c91f83b3514c6d06483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeI1PiP!f9LIle|7Fug40uqybP>E*<_Q{LV89Py{WuS|gl9`GKBJiz&(f|JW?SayQarVd=}764@dx9x$? zgZu$yB`m99*$GP2;4nc`ltEJyZZS;I9QP}st{Rq|pbVOm2{#`mv~0p1im}$wf5pnl zRD;rAy$8Gp(jMTwdx7@Q37Vs2wSRy5;w4$vY>kdiHCj`+SDv`?{`ik)E)VPaTF?50 zS@CY*;3S$-U)L_p(h5x}>omAOt&j|l9-S?Ix6d*p`f0Xel5CaY36c%>bCQ;5np#w& zy5^z3Lmr`!Jf9!=^1W{kMm$Ot^JJ?ukIiB`=@|YNXbnWian4em?`W>vL*U9#O1|qq zuWsHA_%hWo=hkWm??6a72hNi?n>gobnU)l>8G8c6nOey_eCO<)AI7Xtd+1~8`_U`z zd<7^}0(S!u*aYpIVx`^d$$H6GJ9ehar}~f)n59u1w80#GG-W;bvh`a{lf3$RS|M3x z_Fa1>9FvKDBu%zT@t8^GDOjHQ#Pg$(tFlfqocgV{ezThw_`9I3wC<``cIkJvTY_C4 zfgDGP*xB_L>yYzPaJVYOoAxon;3ZF5@4sfhs^zrwoAurSsB@O*lHvh=dNv@-Z zUdnxS+QzZ7Psz8HR&nMoFlWEbSWU$53P&(T+?t{^mp^c;B;)jvx4OP_^d|{>D-~by z0u1AM2Km5|3vRrTtd~rW9gqB``j9kP8qHzjstk@*c&AQn_z7cPd5PK|f+eMqJbmv* z`N*M*^H49H;xZkW#JK0o-aw{jG9B@>d?l@rOt0Phe$R6U!g)vaBfXTZ(mafVcxqt$ z@tm`aXln5&R-Ve;c)_ibT({0f&(6`GWb3U|e8mOkD_TBYvCJzjy1A%pCC}l<*WcVf zWBnxBOAfa}*$?vKfVIB_?*y4)20r4Em&n+w&w?gXE7>;A&2;l-4}Bb8_oLU`L+rP* zospN2$%2`AMSJhmh)W|mi!VlVOsX&G$zD3mW%FzSzN^zKi72D%hrkonNsennQJxp| zv433k%5H80T_cWKc!oS?+R78=lW%pcwEfrlD6U0&`R&~bWk3Hs+uwl^-#`pagTTF3 zqAxzq(n+TAQk0jReM-8mw2Cul$6G%*+cr1xdJZe&gum$Gub_0OB;)!1XszT_#!s)e zQt=rZKV@3P_~YEUW>*e+A44BK1-g_*vWP?C9IbW zr_V)sM)e^nvNVb#KM6D2?#Ks36@LGJAp7_KZO83_ya&7o{yh(v!sx^(FaE-J>#3f3 zI;-HE#K{NiIzefh;9_Sylm*=8fB1F$ZvKpWLtOHK&(*N(1SRg^_|Ja~=+1589f8W% Ye*fRXid4K$kTag&|087o_xt~U0M1olpa1{> From e9c14cd7731bbf96d70072f1cdb67703f5b60bc4 Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 22:58:00 +0530 Subject: [PATCH 24/40] Delete .DS_Store --- .DS_Store | Bin 10244 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index eb6b3c34a0ef8547c5811c91f83b3514c6d06483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeI1PiP!f9LIle|7Fug40uqybP>E*<_Q{LV89Py{WuS|gl9`GKBJiz&(f|JW?SayQarVd=}764@dx9x$? zgZu$yB`m99*$GP2;4nc`ltEJyZZS;I9QP}st{Rq|pbVOm2{#`mv~0p1im}$wf5pnl zRD;rAy$8Gp(jMTwdx7@Q37Vs2wSRy5;w4$vY>kdiHCj`+SDv`?{`ik)E)VPaTF?50 zS@CY*;3S$-U)L_p(h5x}>omAOt&j|l9-S?Ix6d*p`f0Xel5CaY36c%>bCQ;5np#w& zy5^z3Lmr`!Jf9!=^1W{kMm$Ot^JJ?ukIiB`=@|YNXbnWian4em?`W>vL*U9#O1|qq zuWsHA_%hWo=hkWm??6a72hNi?n>gobnU)l>8G8c6nOey_eCO<)AI7Xtd+1~8`_U`z zd<7^}0(S!u*aYpIVx`^d$$H6GJ9ehar}~f)n59u1w80#GG-W;bvh`a{lf3$RS|M3x z_Fa1>9FvKDBu%zT@t8^GDOjHQ#Pg$(tFlfqocgV{ezThw_`9I3wC<``cIkJvTY_C4 zfgDGP*xB_L>yYzPaJVYOoAxon;3ZF5@4sfhs^zrwoAurSsB@O*lHvh=dNv@-Z zUdnxS+QzZ7Psz8HR&nMoFlWEbSWU$53P&(T+?t{^mp^c;B;)jvx4OP_^d|{>D-~by z0u1AM2Km5|3vRrTtd~rW9gqB``j9kP8qHzjstk@*c&AQn_z7cPd5PK|f+eMqJbmv* z`N*M*^H49H;xZkW#JK0o-aw{jG9B@>d?l@rOt0Phe$R6U!g)vaBfXTZ(mafVcxqt$ z@tm`aXln5&R-Ve;c)_ibT({0f&(6`GWb3U|e8mOkD_TBYvCJzjy1A%pCC}l<*WcVf zWBnxBOAfa}*$?vKfVIB_?*y4)20r4Em&n+w&w?gXE7>;A&2;l-4}Bb8_oLU`L+rP* zospN2$%2`AMSJhmh)W|mi!VlVOsX&G$zD3mW%FzSzN^zKi72D%hrkonNsennQJxp| zv433k%5H80T_cWKc!oS?+R78=lW%pcwEfrlD6U0&`R&~bWk3Hs+uwl^-#`pagTTF3 zqAxzq(n+TAQk0jReM-8mw2Cul$6G%*+cr1xdJZe&gum$Gub_0OB;)!1XszT_#!s)e zQt=rZKV@3P_~YEUW>*e+A44BK1-g_*vWP?C9IbW zr_V)sM)e^nvNVb#KM6D2?#Ks36@LGJAp7_KZO83_ya&7o{yh(v!sx^(FaE-J>#3f3 zI;-HE#K{NiIzefh;9_Sylm*=8fB1F$ZvKpWLtOHK&(*N(1SRg^_|Ja~=+1589f8W% Ye*fRXid4K$kTag&|087o_xt~U0M1olpa1{> From 6be7e5e98bfba3585b0c910020ed25d8ca74f5ff Mon Sep 17 00:00:00 2001 From: Jatin Singhal Date: Mon, 1 Jan 2024 23:05:01 +0530 Subject: [PATCH 25/40] fixed .ds_store issue --- .DS_Store | Bin 10244 -> 0 bytes .flake8 | 6 +++--- events/views.py | 3 +-- 3 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index eb6b3c34a0ef8547c5811c91f83b3514c6d06483..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeI1PiP!f9LIle|7Fug40uqybP>E*<_Q{LV89Py{WuS|gl9`GKBJiz&(f|JW?SayQarVd=}764@dx9x$? zgZu$yB`m99*$GP2;4nc`ltEJyZZS;I9QP}st{Rq|pbVOm2{#`mv~0p1im}$wf5pnl zRD;rAy$8Gp(jMTwdx7@Q37Vs2wSRy5;w4$vY>kdiHCj`+SDv`?{`ik)E)VPaTF?50 zS@CY*;3S$-U)L_p(h5x}>omAOt&j|l9-S?Ix6d*p`f0Xel5CaY36c%>bCQ;5np#w& zy5^z3Lmr`!Jf9!=^1W{kMm$Ot^JJ?ukIiB`=@|YNXbnWian4em?`W>vL*U9#O1|qq zuWsHA_%hWo=hkWm??6a72hNi?n>gobnU)l>8G8c6nOey_eCO<)AI7Xtd+1~8`_U`z zd<7^}0(S!u*aYpIVx`^d$$H6GJ9ehar}~f)n59u1w80#GG-W;bvh`a{lf3$RS|M3x z_Fa1>9FvKDBu%zT@t8^GDOjHQ#Pg$(tFlfqocgV{ezThw_`9I3wC<``cIkJvTY_C4 zfgDGP*xB_L>yYzPaJVYOoAxon;3ZF5@4sfhs^zrwoAurSsB@O*lHvh=dNv@-Z zUdnxS+QzZ7Psz8HR&nMoFlWEbSWU$53P&(T+?t{^mp^c;B;)jvx4OP_^d|{>D-~by z0u1AM2Km5|3vRrTtd~rW9gqB``j9kP8qHzjstk@*c&AQn_z7cPd5PK|f+eMqJbmv* z`N*M*^H49H;xZkW#JK0o-aw{jG9B@>d?l@rOt0Phe$R6U!g)vaBfXTZ(mafVcxqt$ z@tm`aXln5&R-Ve;c)_ibT({0f&(6`GWb3U|e8mOkD_TBYvCJzjy1A%pCC}l<*WcVf zWBnxBOAfa}*$?vKfVIB_?*y4)20r4Em&n+w&w?gXE7>;A&2;l-4}Bb8_oLU`L+rP* zospN2$%2`AMSJhmh)W|mi!VlVOsX&G$zD3mW%FzSzN^zKi72D%hrkonNsennQJxp| zv433k%5H80T_cWKc!oS?+R78=lW%pcwEfrlD6U0&`R&~bWk3Hs+uwl^-#`pagTTF3 zqAxzq(n+TAQk0jReM-8mw2Cul$6G%*+cr1xdJZe&gum$Gub_0OB;)!1XszT_#!s)e zQt=rZKV@3P_~YEUW>*e+A44BK1-g_*vWP?C9IbW zr_V)sM)e^nvNVb#KM6D2?#Ks36@LGJAp7_KZO83_ya&7o{yh(v!sx^(FaE-J>#3f3 zI;-HE#K{NiIzefh;9_Sylm*=8fB1F$ZvKpWLtOHK&(*N(1SRg^_|Ja~=+1589f8W% Ye*fRXid4K$kTag&|087o_xt~U0M1olpa1{> diff --git a/.flake8 b/.flake8 index dc2e0c5b..42903304 100644 --- a/.flake8 +++ b/.flake8 @@ -1,5 +1,5 @@ [flake8] exclude = .git,__pycache__,backend/settings*,*/migrations/*,venv,.venv -ignore = E302,E731,W503,C901,E501 -max-complexity = 15 -max-line-length = 120 +ignore = E302,E731,W503 +max-complexity = 25 +max-line-length = 150 diff --git a/events/views.py b/events/views.py index e6a615fe..f884ac33 100644 --- a/events/views.py +++ b/events/views.py @@ -107,7 +107,7 @@ def create(self, request): return super().create(request) # Check privileges for all bodies - elif all( + if all( [ user_has_privilege(request.user.profile, id, "AddE") for id in request.data["bodies_id"] @@ -121,7 +121,6 @@ def create(self, request): # request.data["venue_ids"] return super().create(request) - return forbidden_no_privileges() @login_required_ajax From 09efb84e54c8f6eb86c53757f60e50da9b26ae22 Mon Sep 17 00:00:00 2001 From: root Date: Tue, 2 Jan 2024 16:20:23 +0000 Subject: [PATCH 26/40] fix(events): import settings using django.conf --- events/views.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/events/views.py b/events/views.py index f884ac33..10ad4c22 100644 --- a/events/views.py +++ b/events/views.py @@ -13,9 +13,10 @@ from roles.helpers import forbidden_no_privileges, diff_set from locations.helpers import create_unreusable_locations from django.core.mail import send_mail -from backend.settings import EMAIL_HOST_USER -from backend.settings import RECIPIENT_LIST +from django.conf import settings +EMAIL_HOST_USER = settings.EMAIL_HOST_USER +RECIPIENT_LIST = settings.RECIPIENT_LIST class EventViewSet(viewsets.ModelViewSet): """Event""" From 54ea7aa382c618fd5ab92f6f92f33b07e7986462 Mon Sep 17 00:00:00 2001 From: SanskarGosavi2003 <210100132@iitb.ac.in> Date: Tue, 2 Jan 2024 22:04:19 +0530 Subject: [PATCH 27/40] ADD : Venues filter to events ADD : Check on email verified on backend --- events/admin.py | 1 + events/views.py | 4 ++-- .../0005_alter_productfound_product_image1.py | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 lostandfound/migrations/0005_alter_productfound_product_image1.py diff --git a/events/admin.py b/events/admin.py index ce514f7d..0275b63f 100644 --- a/events/admin.py +++ b/events/admin.py @@ -6,6 +6,7 @@ class EventAdmin(admin.ModelAdmin): list_filter = ( "start_time", "bodies", + "venues", ) list_display = ( "name", diff --git a/events/views.py b/events/views.py index f884ac33..6a8b3d4b 100644 --- a/events/views.py +++ b/events/views.py @@ -233,7 +233,7 @@ def approve_mail(self, request, pk): user_has_VerE_permission = user_has_privilege( request.user.profile, council_id, "VerE" ) - if user_has_VerE_permission: + if user_has_VerE_permission and not event.email_verified: subject = event.description message = event.longdescription recipient_list = RECIPIENT_LIST @@ -269,7 +269,7 @@ def reject_mail(self, request, pk): request.user.profile, council_id, "VerE" ) - if user_has_VerE_permission: + if user_has_VerE_permission and not event.email_verified: print(event.longdescription) event.longdescription = "" event.email_verified = True diff --git a/lostandfound/migrations/0005_alter_productfound_product_image1.py b/lostandfound/migrations/0005_alter_productfound_product_image1.py new file mode 100644 index 00000000..ff444cec --- /dev/null +++ b/lostandfound/migrations/0005_alter_productfound_product_image1.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.16 on 2024-01-02 16:32 + +from django.db import migrations, models +import lostandfound.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('lostandfound', '0004_merge_20240101_2101'), + ] + + operations = [ + migrations.AlterField( + model_name='productfound', + name='product_image1', + field=models.ImageField(upload_to=lostandfound.models.get_image_path), + ), + ] From 3d5bfae0b40a72ce6bd0f9cf944123dbbb7cae27 Mon Sep 17 00:00:00 2001 From: Amit Date: Thu, 11 Jan 2024 01:02:26 +0530 Subject: [PATCH 28/40] Added auth_user and password --- backend/settings.py | 5 +++-- events/views.py | 6 ++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 7f827cde..8f7504f4 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -26,8 +26,8 @@ # SSO Config SSO_TOKEN_URL = "https://gymkhana.iitb.ac.in/sso/oauth/token/" SSO_PROFILE_URL = "https://gymkhana.iitb.ac.in/sso/user/api/user/?fields=first_name,last_name,type,profile_picture,sex,username,email,program,contacts,insti_address,secondary_emails,mobile,roll_number" -SSO_CLIENT_ID = "YcMlptYelEtlzhEZutZKHeXfyqkjghiU3FVZBQPn" -SSO_CLIENT_ID_SECRET_BASE64 = "WWNNbHB0WWVsRXRsemhFWnV0WktIZVhmeXFramdoaVUzRlZaQlFQbjpIQjU2VkZybHExODZ0NWpLSFgyV3E2SnhhblBNcTVGRDJwTE9XUHNqb0ZqUU5HOEFTUEJ2cnN4elZHVmozTEFBYmdtRE5sVWZPRGdtSUl1SnhSeGFzcVRWcjhJOXlMUElsUGJYVGtnc0toZ04zdGJpWnRJbk84QXZ1bUFGa3NkQw==" +SSO_CLIENT_ID = "0vptOdXpmB8MIGhV6ZeADQxNQ7xuaa3ntITZwqPX" +SSO_CLIENT_ID_SECRET_BASE64 = "MHZwdE9kWHBtQjhNSUdoVjZaZUFEUXhOUTd4dWFhM250SVRad3FQWDpsanRQbVN2WGZVTnlXZEVRTWQ1aElaYUNXRXZyVFRXTllTU0p3cExwbUhTZ1pTRXI5WUdZWm40SHFOczZlWHBhQjBlSXhzV3p2UlJSSTRoM3FreDJlbmFrSzczUXhPRldiVFh6RkRuUFk4aVdNeERuZndXdU8yOEg0eVloSlpWZw==" # Password Login SSO_DEFAULT_REDIR = "https://insti.app/login" @@ -77,3 +77,4 @@ RECIPIENT_LIST = [""] CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True +AUTH_USER = "" diff --git a/events/views.py b/events/views.py index df23b746..47c73689 100644 --- a/events/views.py +++ b/events/views.py @@ -17,6 +17,8 @@ EMAIL_HOST_USER = settings.EMAIL_HOST_USER RECIPIENT_LIST = settings.RECIPIENT_LIST +EMAIL_HOST_PASSWORD =settings.EMAIL_HOST_PASSWORD +AUTH_USER = settings.AUTH_USER class EventViewSet(viewsets.ModelViewSet): """Event""" @@ -93,12 +95,10 @@ def create(self, request): and "verification_body" not in request.data ): return Response({"error": "Verification body id not provided"}) - print("verified verifying body") # Prevent events without any body if "bodies_id" not in request.data or not request.data["bodies_id"]: return forbidden_no_privileges() - print("verified bodies_id") print(request.data["bodies_id"]) print(request.data.get("verification_bodies")) @@ -245,6 +245,8 @@ def approve_mail(self, request, pk): EMAIL_HOST_USER, recipient_list, fail_silently=False, + auth_user=AUTH_USER, + auth_password=EMAIL_HOST_PASSWORD, ) event.email_verified = True event.save() From 2983bf3b87b7dc44770fd250cf0adec46c21bbbd Mon Sep 17 00:00:00 2001 From: Tarus Date: Mon, 22 Jan 2024 18:58:37 +0530 Subject: [PATCH 29/40] Uncommented tests for events --- events/tests.py | 856 ++++++++++++++++++++++++------------------------ 1 file changed, 428 insertions(+), 428 deletions(-) diff --git a/events/tests.py b/events/tests.py index 00f0ad22..bfcd3734 100644 --- a/events/tests.py +++ b/events/tests.py @@ -1,428 +1,428 @@ -# """Unit tests for Events.""" -# from django.utils import timezone -# from django.test import TransactionTestCase -# from rest_framework.test import APIClient -# from bodies.models import BodyChildRelation -# from events.models import Event -# from roles.models import BodyRole -# from login.tests import get_new_user -# from helpers.test_helpers import create_body -# from helpers.test_helpers import create_event -# from helpers.test_helpers import create_usertag -# from helpers.test_helpers import create_usertagcategory - -# # pylint: disable=R0902 - - -# class EventTestCase(TransactionTestCase): -# """Check if we can create bodies and link events.""" - -# def setUp(self): -# # Fake authenticate -# self.user = get_new_user() -# self.client = APIClient() -# self.client.force_authenticate(self.user) - -# self.test_body_1 = create_body() -# self.test_body_2 = create_body() - -# self.body_1_role = BodyRole.objects.create( -# name="Body1Role", body=self.test_body_1, permissions="AddE,UpdE,DelE" -# ) -# self.user.profile.roles.add(self.body_1_role) - -# self.update_test_event = create_event(-24, -24) -# url = "/api/events/%s" % self.update_test_event.id -# self.update_event_data = self.client.get(url).data -# self.update_url = "/api/events/%s" % self.update_test_event.id - -# create_event(-24, -24) - -# def test_event_other(self): -# """Check misc paramters of Event""" -# self.assertEqual(str(self.update_test_event), self.update_test_event.name) - -# def test_event_prioritizer(self): # pylint: disable=R0914,R0915 -# """Test the event prioritizer.""" - -# def assertOrder(events, url="/api/events"): -# response = self.client.get(url) -# self.assertEqual(response.status_code, 200) -# for index, event in enumerate(events): -# self.assertEqual(response.data["data"][index]["id"], str(event.id)) - -# def assertWeightOrder(events, url="/api/events"): -# response = self.client.get(url) -# self.assertEqual(response.status_code, 200) -# prev_weight = response.data["data"][0]["weight"] -# for event in events: -# response_event = next( -# x for x in response.data["data"] if x["id"] == str(event.id) -# ) -# self.assertLess(response_event["weight"], prev_weight) -# prev_weight = response_event["weight"] - -# # Events in future: -# # event1 after event3 after event2 -# # eventP1, eventP1 in past -# event1 = create_event(48, 48) -# event2 = create_event(4, 5) -# event3 = create_event(15, 16) -# eventP1 = create_event(-5, -4) -# eventP2 = create_event(-6, -5) - -# # These events check linear decay after 15 days -# eventL1 = create_event(24 * 30, 24 * 30) -# eventL2 = create_event(24 * 20, 24 * 20) -# eventL3 = create_event(24 * 40, 24 * 40) - -# assertOrder([event2, event3, event1, eventP1, eventP2]) -# assertWeightOrder([eventL2, eventL1, eventL3]) - -# # Check followed bodies priorities -# body1 = create_body() -# body2 = create_body() -# body3 = create_body() -# body4 = create_body() -# body5 = create_body() -# self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) - -# # After the user is following a body of event 3, it should bump up -# event3.bodies.add(body1) -# assertOrder([event3, event2, event1, eventP1, eventP2]) - -# # Test the cap on followed bodies bonus -# event1.bodies.add(body1, body2, body3, body4, body5) -# assertOrder([event3, event1, event2, eventP1, eventP2]) - -# # Test that ended events do not receive bonus -# eventP2.bodies.add(body1, body2, body3, body4) -# eventP2.promotion_boost = 2000 -# eventP2.save() -# assertOrder([event3, event1, event2, eventP1, eventP2]) - -# # Check user tags - setup the user -# self.user.profile.hostel = "1" -# self.user.profile.department = "ME" -# self.user.profile.save() - -# # Add one matching and one non-matching tag to both -# category1 = create_usertagcategory() -# h1_tag = create_usertag(category1, "1") -# h13_tag = create_usertag(category1, "13") -# event1.user_tags.add(h1_tag) -# event3.user_tags.add(h13_tag) - -# # Add one matching tag to both events -# category2 = create_usertagcategory() -# me_tag = create_usertag(category2, "ME", target="department") -# event1.user_tags.add(me_tag) -# event3.user_tags.add(me_tag) - -# # Check new order -# assertOrder([event1, event2, eventP1]) - -# # Check if user needs to satisfy only one tag from each category -# event1.user_tags.add(h13_tag) -# assertOrder([event1, event2, eventP1]) - -# # Test null check - now the department matching tag is non matching -# self.user.profile.department = None -# self.user.profile.save() -# assertOrder([event2, eventP1]) - -# # Test if secondary_target is working -# me_tag.secondary_target = "hostel" -# me_tag.secondary_regex = "1" -# me_tag.save() -# assertOrder([event1, event2, eventP1]) - -# # Test promotion boost -# event2.promotion_boost = 2000 -# event2.save() -# assertOrder([event2, event1, eventP1]) -# event2.promotion_boost = 0 -# event2.save() - -# # Test for anonymous user -# self.client.logout() -# assertOrder([event2, eventP1]) - -# def test_events_list(self): -# """Test if events can be listed.""" -# url = "/api/events" -# response = self.client.get(url) -# self.assertEqual(response.status_code, 200) -# self.assertGreater(response.data["data"][0]["weight"], 0) - -# url = "/api/events?start=2017-05-17T08:10:35.599Z&end=2017-06-17T08:10:35.599Z" -# response = self.client.get(url) -# self.assertEqual(response.status_code, 200) -# self.assertEqual(len(response.data["data"]), 0) - -# def test_event_get(self): -# """Test getting the event with id or str_id.""" -# event = Event.objects.create( -# name="Test #Event 123!", start_time=timezone.now(), end_time=timezone.now() -# ) - -# url = "/api/events/" + str(event.id) -# response = self.client.get(url, format="json") -# self.assertEqual(response.status_code, 200) -# self.assertEqual(response.data["name"], event.name) - -# url = "/api/events/test-event-123-" + str(event.id)[:8] -# response = self.client.get(url, format="json") -# self.assertEqual(response.status_code, 200) -# self.assertEqual(response.data["name"], event.name) - -# def test_event_creation(self): -# """Test if events can be created for the body.""" - -# # Test simple event creation -# url = "/api/events" -# data = { -# "name": "TestEvent1", -# "start_time": timezone.now(), -# "end_time": timezone.now(), -# "venue_names": [], -# "bodies_id": [str(self.test_body_1.id)], -# } -# response = self.client.post(url, data, format="json") -# self.assertEqual(response.status_code, 201) -# response.close() - -# test_event = Event.objects.get(id=response.data["id"]) -# self.assertEqual(test_event.name, "TestEvent1") -# self.assertEqual( -# test_event.bodies.get(id=self.test_body_1.id), self.test_body_1 -# ) - -# # Check that events cannot be created without roles -# data["bodies_id"] = [str(self.test_body_1.id), str(self.test_body_2.id)] -# response = self.client.post(url, data, format="json") -# self.assertEqual(response.status_code, 403) - -# # Check that events can be created with roles -# body_2_role = BodyRole.objects.create( -# name="Body2Role", body=self.test_body_2, permissions="AddE" -# ) -# self.user.profile.roles.add(body_2_role) -# response = self.client.post(url, data, format="json") -# self.assertEqual(response.status_code, 201) - -# def test_event_update(self): -# """Event can be updated.""" -# self.test_body_1.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 200) - -# def test_event_update2(self): -# """Check that an unrelated event cannot be updated.""" -# self.test_body_2.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# def test_event_update3(self): -# """Check if event with multiple bodies can be updated while -# having permissions for any one of them.""" -# self.test_body_1.events.add(self.update_test_event) -# self.test_body_2.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [ -# str(self.test_body_1.id), -# str(self.test_body_2.id), -# ] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 200) - -# def test_event_update4(self): -# """Confirm body cannot be removed without role.""" -# self.test_body_1.events.add(self.update_test_event) -# self.test_body_2.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# def test_event_update5(self): -# """Confirm body can be removed with role.""" -# self.test_body_1.events.add(self.update_test_event) -# self.test_body_2.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 200) - -# def test_event_update6(self): -# """Check that user cannot add body without roles for both.""" -# self.test_body_1.events.add(self.update_test_event) -# self.update_event_data["bodies_id"] = [ -# str(self.test_body_1.id), -# str(self.test_body_2.id), -# ] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# def test_event_update7(self): -# """Check that user can change bodies with roles for both.""" -# self.test_body_1.events.add(self.update_test_event) -# body_2_role = BodyRole.objects.create( -# name="Body2Role", body=self.test_body_2, permissions=["UpdE", "DelE"] -# ) -# self.user.profile.roles.add(body_2_role) -# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 200) - -# def test_event_update8(self): -# """Check that user can update event with inherited permission.""" -# # Body 2 is the parent of 1 -# self.test_body_1.events.add(self.update_test_event) - -# body_2_role = BodyRole.objects.create( -# name="Body2Role", -# body=self.test_body_2, -# permissions=["UpdE", "DelE"], -# inheritable=True, -# ) -# self.user.profile.roles.remove(self.body_1_role) -# self.user.profile.roles.add(body_2_role) - -# # Check before adding child body relation -# self.update_event_data["description"] = "NEW DESCRIPTION" -# self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# # Add relation and test again -# BodyChildRelation.objects.create( -# parent=self.test_body_2, child=self.test_body_1 -# ) - -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 200) - -# def test_event_update9(self): -# """Event tags can be updated.""" -# # Add an event to an updateable body -# event = create_event() -# self.test_body_1.events.add(event) - -# # Get the response -# url = "/api/events/%s" % event.id -# data = self.client.get(url).data - -# # Create tags and assign them -# category = create_usertagcategory() -# tag1 = create_usertag(category, "1") -# tag2 = create_usertag(category, "2") -# data["user_tags"] = [str(tag1.id), str(tag2.id)] -# response = self.client.put(url, data, format="json") -# self.assertEqual(response.status_code, 200) -# self.assertEqual(event.user_tags.count(), 2) - -# def test_event_deletion(self): -# """Check if events can be deleted with priveleges.""" -# now = timezone.now() -# event = Event.objects.create(name="TestEvent", start_time=now, end_time=now) -# self.test_body_1.events.add(event) -# self.test_body_2.events.add(event) - -# url = "/api/events/" + str(event.id) - -# # Check that events cannot be deleted without role for body_2 -# response = self.client.delete(url) -# self.assertEqual(response.status_code, 403) - -# # Check that events can be deleted with roles for both bodies -# body_2_role = BodyRole.objects.create( -# name="Body2Role", body=self.test_body_2, permissions="DelE" -# ) -# self.user.profile.roles.add(body_2_role) -# response = self.client.delete(url) -# self.assertEqual(response.status_code, 204) - -# def test_nobody(self): -# """Test events can't be created/updated to have no body.""" -# response = self.client.post( -# "/api/events", self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# response = self.client.put( -# self.update_url, self.update_event_data, format="json" -# ) -# self.assertEqual(response.status_code, 403) - -# def test_ues(self): -# """Test user-event-status APIs.""" - -# def assert_user_ues(t_event, t_ues): -# """Test user_ues in event serializer.""" - -# url = "/api/events/%s" % t_event.id -# response = self.client.get(url, format="json") -# self.assertEqual(response.status_code, 200) -# self.assertEqual(response.data["user_ues"], t_ues) - -# def mark_test(event, ues, count): -# """Helper to mark UES and test creation/updation.""" - -# # Mark UES for the event -# url = "/api/user-me/ues/%s?status=%s" % (event.id, str(ues)) -# response = self.client.get(url, format="json") -# self.assertEqual(response.status_code, 204) - -# # Assert creation of UES -# self.assertEqual(event.ues.count(), count) -# assert_user_ues(event, ues) - -# # Check first only if exists -# if count > 0: -# self.assertEqual(event.ues.first().status, ues) - -# # Create event with one body -# test_body = create_body(name="Test Body1") -# test_event = create_event(name="Test Event1") -# test_event.bodies.add(test_body) -# self.assertEqual(test_event.ues.count(), 0) -# assert_user_ues(test_event, 0) - -# # Test interested, going and neutral -# # When the user un-marks the event, UES must be removed -# mark_test(test_event, 1, 1) -# mark_test(test_event, 2, 1) -# mark_test(test_event, 0, 0) - -# # Assert user_ues as anonymous -# self.client.logout() -# assert_user_ues(test_event, None) - -# def test_anonymous(self): -# """Check APIs as anonymous user.""" -# self.client.logout() - -# url = "/api/events" -# response = self.client.get(url) -# self.assertEqual(response.status_code, 200) - -# response = self.client.get(self.update_url) -# self.assertEqual(response.status_code, 200) +"""Unit tests for Events.""" +from django.utils import timezone +from django.test import TransactionTestCase +from rest_framework.test import APIClient +from bodies.models import BodyChildRelation +from events.models import Event +from roles.models import BodyRole +from login.tests import get_new_user +from helpers.test_helpers import create_body +from helpers.test_helpers import create_event +from helpers.test_helpers import create_usertag +from helpers.test_helpers import create_usertagcategory + +# pylint: disable=R0902 + + +class EventTestCase(TransactionTestCase): + """Check if we can create bodies and link events.""" + + def setUp(self): + # Fake authenticate + self.user = get_new_user() + self.client = APIClient() + self.client.force_authenticate(self.user) + + self.test_body_1 = create_body() + self.test_body_2 = create_body() + + self.body_1_role = BodyRole.objects.create( + name="Body1Role", body=self.test_body_1, permissions="AddE,UpdE,DelE" + ) + self.user.profile.roles.add(self.body_1_role) + + self.update_test_event = create_event(-24, -24) + url = "/api/events/%s" % self.update_test_event.id + self.update_event_data = self.client.get(url).data + self.update_url = "/api/events/%s" % self.update_test_event.id + + create_event(-24, -24) + + def test_event_other(self): + """Check misc paramters of Event""" + self.assertEqual(str(self.update_test_event), self.update_test_event.name) + + def test_event_prioritizer(self): # pylint: disable=R0914,R0915 + """Test the event prioritizer.""" + + def assertOrder(events, url="/api/events"): + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + for index, event in enumerate(events): + self.assertEqual(response.data["data"][index]["id"], str(event.id)) + + def assertWeightOrder(events, url="/api/events"): + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + prev_weight = response.data["data"][0]["weight"] + for event in events: + response_event = next( + x for x in response.data["data"] if x["id"] == str(event.id) + ) + self.assertLess(response_event["weight"], prev_weight) + prev_weight = response_event["weight"] + + # Events in future: + # event1 after event3 after event2 + # eventP1, eventP1 in past + event1 = create_event(48, 48) + event2 = create_event(4, 5) + event3 = create_event(15, 16) + eventP1 = create_event(-5, -4) + eventP2 = create_event(-6, -5) + + # These events check linear decay after 15 days + eventL1 = create_event(24 * 30, 24 * 30) + eventL2 = create_event(24 * 20, 24 * 20) + eventL3 = create_event(24 * 40, 24 * 40) + + assertOrder([event2, event3, event1, eventP1, eventP2]) + assertWeightOrder([eventL2, eventL1, eventL3]) + + # Check followed bodies priorities + body1 = create_body() + body2 = create_body() + body3 = create_body() + body4 = create_body() + body5 = create_body() + self.user.profile.followed_bodies.add(body1, body2, body3, body4, body5) + + # After the user is following a body of event 3, it should bump up + event3.bodies.add(body1) + assertOrder([event3, event2, event1, eventP1, eventP2]) + + # Test the cap on followed bodies bonus + event1.bodies.add(body1, body2, body3, body4, body5) + assertOrder([event3, event1, event2, eventP1, eventP2]) + + # Test that ended events do not receive bonus + eventP2.bodies.add(body1, body2, body3, body4) + eventP2.promotion_boost = 2000 + eventP2.save() + assertOrder([event3, event1, event2, eventP1, eventP2]) + + # Check user tags - setup the user + self.user.profile.hostel = "1" + self.user.profile.department = "ME" + self.user.profile.save() + + # Add one matching and one non-matching tag to both + category1 = create_usertagcategory() + h1_tag = create_usertag(category1, "1") + h13_tag = create_usertag(category1, "13") + event1.user_tags.add(h1_tag) + event3.user_tags.add(h13_tag) + + # Add one matching tag to both events + category2 = create_usertagcategory() + me_tag = create_usertag(category2, "ME", target="department") + event1.user_tags.add(me_tag) + event3.user_tags.add(me_tag) + + # Check new order + assertOrder([event1, event2, eventP1]) + + # Check if user needs to satisfy only one tag from each category + event1.user_tags.add(h13_tag) + assertOrder([event1, event2, eventP1]) + + # Test null check - now the department matching tag is non matching + self.user.profile.department = None + self.user.profile.save() + assertOrder([event2, eventP1]) + + # Test if secondary_target is working + me_tag.secondary_target = "hostel" + me_tag.secondary_regex = "1" + me_tag.save() + assertOrder([event1, event2, eventP1]) + + # Test promotion boost + event2.promotion_boost = 2000 + event2.save() + assertOrder([event2, event1, eventP1]) + event2.promotion_boost = 0 + event2.save() + + # Test for anonymous user + self.client.logout() + assertOrder([event2, eventP1]) + + def test_events_list(self): + """Test if events can be listed.""" + url = "/api/events" + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertGreater(response.data["data"][0]["weight"], 0) + + url = "/api/events?start=2017-05-17T08:10:35.599Z&end=2017-06-17T08:10:35.599Z" + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.data["data"]), 0) + + def test_event_get(self): + """Test getting the event with id or str_id.""" + event = Event.objects.create( + name="Test #Event 123!", start_time=timezone.now(), end_time=timezone.now() + ) + + url = "/api/events/" + str(event.id) + response = self.client.get(url, format="json") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["name"], event.name) + + url = "/api/events/test-event-123-" + str(event.id)[:8] + response = self.client.get(url, format="json") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["name"], event.name) + + def test_event_creation(self): + """Test if events can be created for the body.""" + + # Test simple event creation + url = "/api/events" + data = { + "name": "TestEvent1", + "start_time": timezone.now(), + "end_time": timezone.now(), + "venue_names": [], + "bodies_id": [str(self.test_body_1.id)], + } + response = self.client.post(url, data, format="json") + self.assertEqual(response.status_code, 201) + response.close() + + test_event = Event.objects.get(id=response.data["id"]) + self.assertEqual(test_event.name, "TestEvent1") + self.assertEqual( + test_event.bodies.get(id=self.test_body_1.id), self.test_body_1 + ) + + # Check that events cannot be created without roles + data["bodies_id"] = [str(self.test_body_1.id), str(self.test_body_2.id)] + response = self.client.post(url, data, format="json") + self.assertEqual(response.status_code, 403) + + # Check that events can be created with roles + body_2_role = BodyRole.objects.create( + name="Body2Role", body=self.test_body_2, permissions="AddE" + ) + self.user.profile.roles.add(body_2_role) + response = self.client.post(url, data, format="json") + self.assertEqual(response.status_code, 201) + + def test_event_update(self): + """Event can be updated.""" + self.test_body_1.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 200) + + def test_event_update2(self): + """Check that an unrelated event cannot be updated.""" + self.test_body_2.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + def test_event_update3(self): + """Check if event with multiple bodies can be updated while + having permissions for any one of them.""" + self.test_body_1.events.add(self.update_test_event) + self.test_body_2.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [ + str(self.test_body_1.id), + str(self.test_body_2.id), + ] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 200) + + def test_event_update4(self): + """Confirm body cannot be removed without role.""" + self.test_body_1.events.add(self.update_test_event) + self.test_body_2.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + def test_event_update5(self): + """Confirm body can be removed with role.""" + self.test_body_1.events.add(self.update_test_event) + self.test_body_2.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [str(self.test_body_2.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 200) + + def test_event_update6(self): + """Check that user cannot add body without roles for both.""" + self.test_body_1.events.add(self.update_test_event) + self.update_event_data["bodies_id"] = [ + str(self.test_body_1.id), + str(self.test_body_2.id), + ] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + def test_event_update7(self): + """Check that user can change bodies with roles for both.""" + self.test_body_1.events.add(self.update_test_event) + body_2_role = BodyRole.objects.create( + name="Body2Role", body=self.test_body_2, permissions=["UpdE", "DelE"] + ) + self.user.profile.roles.add(body_2_role) + self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 200) + + def test_event_update8(self): + """Check that user can update event with inherited permission.""" + # Body 2 is the parent of 1 + self.test_body_1.events.add(self.update_test_event) + + body_2_role = BodyRole.objects.create( + name="Body2Role", + body=self.test_body_2, + permissions=["UpdE", "DelE"], + inheritable=True, + ) + self.user.profile.roles.remove(self.body_1_role) + self.user.profile.roles.add(body_2_role) + + # Check before adding child body relation + self.update_event_data["description"] = "NEW DESCRIPTION" + self.update_event_data["bodies_id"] = [str(self.test_body_1.id)] + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + # Add relation and test again + BodyChildRelation.objects.create( + parent=self.test_body_2, child=self.test_body_1 + ) + + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 200) + + def test_event_update9(self): + """Event tags can be updated.""" + # Add an event to an updateable body + event = create_event() + self.test_body_1.events.add(event) + + # Get the response + url = "/api/events/%s" % event.id + data = self.client.get(url).data + + # Create tags and assign them + category = create_usertagcategory() + tag1 = create_usertag(category, "1") + tag2 = create_usertag(category, "2") + data["user_tags"] = [str(tag1.id), str(tag2.id)] + response = self.client.put(url, data, format="json") + self.assertEqual(response.status_code, 200) + self.assertEqual(event.user_tags.count(), 2) + + def test_event_deletion(self): + """Check if events can be deleted with priveleges.""" + now = timezone.now() + event = Event.objects.create(name="TestEvent", start_time=now, end_time=now) + self.test_body_1.events.add(event) + self.test_body_2.events.add(event) + + url = "/api/events/" + str(event.id) + + # Check that events cannot be deleted without role for body_2 + response = self.client.delete(url) + self.assertEqual(response.status_code, 403) + + # Check that events can be deleted with roles for both bodies + body_2_role = BodyRole.objects.create( + name="Body2Role", body=self.test_body_2, permissions="DelE" + ) + self.user.profile.roles.add(body_2_role) + response = self.client.delete(url) + self.assertEqual(response.status_code, 204) + + def test_nobody(self): + """Test events can't be created/updated to have no body.""" + response = self.client.post( + "/api/events", self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + response = self.client.put( + self.update_url, self.update_event_data, format="json" + ) + self.assertEqual(response.status_code, 403) + + def test_ues(self): + """Test user-event-status APIs.""" + + def assert_user_ues(t_event, t_ues): + """Test user_ues in event serializer.""" + + url = "/api/events/%s" % t_event.id + response = self.client.get(url, format="json") + self.assertEqual(response.status_code, 200) + self.assertEqual(response.data["user_ues"], t_ues) + + def mark_test(event, ues, count): + """Helper to mark UES and test creation/updation.""" + + # Mark UES for the event + url = "/api/user-me/ues/%s?status=%s" % (event.id, str(ues)) + response = self.client.get(url, format="json") + self.assertEqual(response.status_code, 204) + + # Assert creation of UES + self.assertEqual(event.ues.count(), count) + assert_user_ues(event, ues) + + # Check first only if exists + if count > 0: + self.assertEqual(event.ues.first().status, ues) + + # Create event with one body + test_body = create_body(name="Test Body1") + test_event = create_event(name="Test Event1") + test_event.bodies.add(test_body) + self.assertEqual(test_event.ues.count(), 0) + assert_user_ues(test_event, 0) + + # Test interested, going and neutral + # When the user un-marks the event, UES must be removed + mark_test(test_event, 1, 1) + mark_test(test_event, 2, 1) + mark_test(test_event, 0, 0) + + # Assert user_ues as anonymous + self.client.logout() + assert_user_ues(test_event, None) + + def test_anonymous(self): + """Check APIs as anonymous user.""" + self.client.logout() + + url = "/api/events" + response = self.client.get(url) + self.assertEqual(response.status_code, 200) + + response = self.client.get(self.update_url) + self.assertEqual(response.status_code, 200) From aa01a952d837326165d7ea9720059ae3054e2724 Mon Sep 17 00:00:00 2001 From: Tarus Date: Mon, 22 Jan 2024 22:00:05 +0530 Subject: [PATCH 30/40] Resolved Merge Conflicts --- .../migrations/0006_merge_20240122_2004.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 lostandfound/migrations/0006_merge_20240122_2004.py diff --git a/lostandfound/migrations/0006_merge_20240122_2004.py b/lostandfound/migrations/0006_merge_20240122_2004.py new file mode 100644 index 00000000..c863e10f --- /dev/null +++ b/lostandfound/migrations/0006_merge_20240122_2004.py @@ -0,0 +1,14 @@ +# Generated by Django 3.2.16 on 2024-01-22 14:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('lostandfound', '0004_remove_productfound_uploaded_by'), + ('lostandfound', '0005_alter_productfound_product_image1'), + ] + + operations = [ + ] From 0451a92df95e08f210359121039f74b99bfbf654 Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 23 Jan 2024 01:43:16 +0530 Subject: [PATCH 31/40] FIX: Lint --- events/views.py | 2 +- locations/management/commands/adj_list.py | 1504 ++++++++++++++++++++- lostandfound/admin.py | 1 - lostandfound/models.py | 8 +- 4 files changed, 1507 insertions(+), 8 deletions(-) diff --git a/events/views.py b/events/views.py index 47c73689..b7a50b73 100644 --- a/events/views.py +++ b/events/views.py @@ -17,7 +17,7 @@ EMAIL_HOST_USER = settings.EMAIL_HOST_USER RECIPIENT_LIST = settings.RECIPIENT_LIST -EMAIL_HOST_PASSWORD =settings.EMAIL_HOST_PASSWORD +EMAIL_HOST_PASSWORD = settings.EMAIL_HOST_PASSWORD AUTH_USER = settings.AUTH_USER class EventViewSet(viewsets.ModelViewSet): diff --git a/locations/management/commands/adj_list.py b/locations/management/commands/adj_list.py index b5370dcd..84aa5c43 100644 --- a/locations/management/commands/adj_list.py +++ b/locations/management/commands/adj_list.py @@ -1 +1,1503 @@ -{0: {'Hostel 12 Crown of the Campus': 2.534758371127315, 'Hostel 14 Silicon Ship': 1.827019430657485, 'H13 Night Canteen': 5.471105921109552, 'Hostel 13 House of Titans': 5.471105921109552, 'Mess for hostels 12 | 13 | 14': 1.5420765220960988, 1: 3.112073263919087, 'Amul Parlour': 1.827019430657485}, 'Amul Parlour': {0: 1.827019430657485}, 'Hostel 12 Crown of the Campus': {0: 2.534758371127315}, 'Hostel 14 Silicon Ship': {0: 1.827019430657485}, 'Hostel 13 House of Titans': {0: 5.471105921109552}, 'H13 Night Canteen': {0: 5.471105921109552}, 'Mess for hostels 12 | 13 | 14': {0: 1.5420765220960988}, 1: {0: 3.112073263919087, 2: 2.545780823244609}, 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, 'Security Check Point': {255: 1.4577379737113252, 245: 3.8860005146680052}, 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, 4: {3: 5.07119315348962, 'Hostel 06 Vikings': 2.359872877932199, 'Type1 - 22': 3.020761493398643}, 'Type1 - 22': {4: 3.020761493398643}, 'Hostel 06 Vikings': {4: 2.359872877932199}, 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, 6: {5: 2.6414011433328337, 7: 2.198635940759634, 'ATM - Canara Bank near H6': 1.3813037319865606}, 'ATM - Canara Bank near H6': {6: 1.3813037319865606}, 7: {6: 2.198635940759634, 8: 2.0349447166937975}, 8: {7: 2.0349447166937975, 9: 1.1853269591129698, 'Hostel 09 Nawaabon Ki Basti': 3.60568994784632}, 'Hostel 09 Nawaabon Ki Basti': {8: 3.60568994784632}, 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, 10: {9: 3.6706947571270483, 11: 4.669047011971501}, 11: {10: 4.669047011971501, 'Hostel 18': 4.075904807524337}, 'Hostel 18': {11: 4.075904807524337}, 12: {9: 2.8271894170713074, 13: 3.784309712483903, 'Hostel 17': 2.44826469157238}, 'Hostel 17': {12: 2.44826469157238}, 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, 14: {13: 1.760113632695344, 15: 5.70350769263968, 'Chaayos Cafe': 1.2074767078498865}, 'Chaayos Cafe': {14: 1.2074767078498865}, 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, 16: {15: 2.7727242920997393, 'Hostel 05 Penthouse': 4.306855001041944}, 'Hostel 05 Penthouse': {16: 4.306855001041944}, 17: {15: 3.560056179332006, 18: 2.6700187265260893, 'Tansa House King of campus (Proj. Staff Boys)': 3.3800887562311144, 'ATM - State Bank near Tansa': 3.0522123124055445}, 'ATM - State Bank near Tansa': {17: 3.0522123124055445}, 'Tansa House King of campus (Proj. Staff Boys)': {17: 3.3800887562311144}, 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, 20: {21: 6.359323863430766, 19: 2.0719555979798407, 'Outdoor Sports Facility': 1.230447073221762, 'Hostel 03 Vitruvians': 3.9824615503479754}, 'Outdoor Sports Facility': {20: 1.230447073221762}, 'Hostel 03 Vitruvians': {20: 3.9824615503479754}, 21: {20: 6.359323863430766, 22: 3.0242354405700627, 'Hostel 02 The Wild Ones': 5.008991914547277, 'Indoor Stadium': 1.5839823231336896, 'Badminton Court': 1.5839823231336896}, 'Badminton Court': {21: 1.5839823231336896}, 'Hostel 02 The Wild Ones': {21: 5.008991914547277}, 'Indoor Stadium': {21: 1.5839823231336896}, 22: {21: 3.0242354405700627, 'Swimming Pool (new)': 2.3119256043393785, 23: 2.316246964380094}, 'Swimming Pool (new)': {22: 2.3119256043393785}, 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, 24: {23: 3.5383612025908264, 'Students Activity Centre': 1.9039432764659772, 'New Yoga Room, SAC': 1.9039432764659772, 'Open Air Theatre': 1.9039432764659772, 'Film Room, SAC': 1.9039432764659772}, 'Film Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Open Air Theatre': {24: 1.9039432764659772, 26: 2.760615873315228}, 'New Yoga Room, SAC': {24: 1.9039432764659772, 26: 2.760615873315228}, 'Students Activity Centre': {24: 1.9039432764659772, 26: 2.760615873315228}, 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, 26: {25: 3.8268786236304906, 'Students Activity Centre': 2.760615873315228, 'New Yoga Room, SAC': 2.760615873315228, 'Open Air Theatre': 2.760615873315228, 'Film Room, SAC': 2.760615873315228}, 27: {25: 2.545780823244609, 28: 2.7741665415039525, 'Hostel 01 Queen of the campus': 2.198635940759634, 'Aromas Canteen': 1.6337074401495515}, 'Hostel 01 Queen of the campus': {27: 2.198635940759634, 'Aromas Canteen': 3.7380476187443095}, 28: {27: 2.7741665415039525, "Domino's outlet": 2.0084820138602186, 29: 1.6161683080669538, 'Aromas Canteen': 2.9740544715926105}, "Domino's outlet": {28: 2.0084820138602186, 34: 1.4453373308677804, 'Aromas Canteen': 1.4286357128393508}, 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, 30: {29: 5.685156110433556, 31: 3.1395859599635108, 'Defence Research & Development Organization': 2.1505813167606567}, 'Defence Research & Development Organization': {30: 2.1505813167606567}, 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, 32: {31: 4.044007912949726, 'Hostel 15 Trident': 6.024699162613849, 33: 5.330009380854784, 'Hostel 15 Mess': 5.773820225812369}, 'Hostel 15 Mess': {32: 5.773820225812369}, 'Hostel 15 Trident': {32: 6.024699162613849}, 33: {32: 5.330009380854784, 'Hostel 16 Olympus': 4.440833255144804, 'Hostel 16 Mess': 4.440833255144804}, 'Hostel 16 Mess': {33: 4.440833255144804}, 'Hostel 16 Olympus': {33: 4.440833255144804}, 34: {35: 1.7700282483621554, 29: 3.2919599025504547, "Domino's outlet": 1.4453373308677804}, 35: {34: 1.7700282483621554, 36: 2.2671568097509267, 37: 7.046417529496815, 214: 0.6228964600958975}, 36: {35: 2.2671568097509267, 'State Bank of India Branch': 1.296919426949878, 94: 4.640366364846638}, 'State Bank of India Branch': {36: 1.296919426949878}, 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, 38: {37: 6.155079203389668, 39: 3.1508728949292766, 'Central Library': 1.103177229641729}, 'Central Library': {38: 1.103177229641729, 40: 2.7613402542968153}, 39: {38: 3.1508728949292766, 40: 3.6002777670618693, 89: 5.330009380854784, 90: 2.44826469157238}, 40: {39: 3.6002777670618693, 41: 1.0, 'Central Library': 2.7613402542968153}, 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, 42: {41: 1.1384199576606167, 43: 2.316246964380094, 'Mathematics Department': 2.435159132377184, 'Old Software Lab': 2.435159132377184, 'Inter-disciplinary Programme in Educational Technology': 2.435159132377184, 'Centre for Formal Design and Verification of Software': 2.435159132377184, 'Centre for Distance Engineering Education Programme': 2.435159132377184}, 'Centre for Distance Engineering Education Programme': {42: 2.435159132377184}, 'Centre for Formal Design and Verification of Software': {42: 2.435159132377184}, 'Inter-disciplinary Programme in Educational Technology': {42: 2.435159132377184}, 'Mathematics Department': {42: 2.435159132377184}, 'Old Software Lab': {42: 2.435159132377184}, 43: {42: 2.316246964380094, 44: 2.041568024827975, 'Old Computer Science Engineering Department': 1.8439088914585775, 'New Software Lab': 1.8439088914585775, 'Centre for Technology Alternatives for Rural Areas': 1.8439088914585775}, 'Centre for Technology Alternatives for Rural Areas': {43: 1.8439088914585775}, 'New Software Lab': {43: 1.8439088914585775}, 'Old Computer Science Engineering Department': {43: 1.8439088914585775}, 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, 45: {44: 1.1734564329364767, 46: 2.5930676813380713, 47: 3.112073263919087, 'Fluid Mechanics and Fluid Power Lab': 0.623698645180507}, 'Fluid Mechanics and Fluid Power Lab': {45: 0.623698645180507}, 46: {45: 2.5930676813380713, 47: 1.0261578825892241, 48: 2.0329781110479277, 'ENELEK Power Sine': 0.9486832980505138}, 'ENELEK Power Sine': {46: 0.9486832980505138}, 47: {45: 3.112073263919087, 46: 1.0261578825892241}, 48: {46: 2.0329781110479277, 49: 2.167487024182613, 'Tinkerers Lab': 1.066770828247567, 'Refrigeration, A/C and Cryogenics Lab': 1.066770828247567, 'Treelabs': 1.066770828247567, 'N3 Bay': 5.318646444350292}, 'Treelabs': {48: 1.066770828247567}, 'Refrigeration, A/C and Cryogenics Lab': {48: 1.066770828247567}, 'Tinkerers Lab': {48: 1.066770828247567}, 49: {48: 2.167487024182613, 50: 3.382454729926182, 'Mechanical Engineering Department': 5.230774321264492, 'Industrial Engineering and Operations Research': 5.230774321264492}, 'Industrial Engineering and Operations Research': {49: 5.230774321264492}, 'Mechanical Engineering Department': {49: 5.230774321264492}, 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, 51: {50: 1.731184565550421, 76: 4.826696592909068, 'Industrial Design Centre': 2.2365151463828723, 'IDC Canteen': 2.2365151463828723, 'IDC Shakti': 2.2365151463828723}, 'IDC Shakti': {51: 2.2365151463828723}, 'IDC Canteen': {51: 2.2365151463828723}, 'Industrial Design Centre': {51: 2.2365151463828723}, 52: {50: 1.2445882853377659, 53: 2.4226019070412703, 76: 7.01519778766073, 178: 9.087133761533392}, 53: {52: 2.4226019070412703, 54: 4.588354824989018, 'Civil Engineering Department': 4.6217961876309515, 'Victor Menezes Convention Centre': 3.063494736408078, 'Centre for Urban Science and Engineering (inside civil)': 4.6217961876309515, 'Inter-disciplinary Programme in Climate Studies': 4.6217961876309515}, 'Inter-disciplinary Programme in Climate Studies': {53: 4.6217961876309515}, 'Centre for Urban Science and Engineering (inside civil)': {53: 4.6217961876309515}, 'Civil Engineering Department': {53: 4.6217961876309515}, 'Victor Menezes Convention Centre': {53: 3.063494736408078}, 54: {53: 4.588354824989018, 55: 1.9677398201998149, 'Electrical Engineering Department': 4.794267410147248, 'Electrical Engineering Annexe Building': 1.0751744044572489}, 'Electrical Engineering Department': {54: 4.794267410147248, 176: 4.331397003277349, 56: 2.110213259365034}, 'Electrical Engineering Annexe Building': {54: 1.0751744044572489, 56: 5.9787958653896185}, 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, 56: {55: 4.293483434229135, 'Girish Gaitonde Building': 2.5849564793241684, 'Electrical Engineering Department': 2.110213259365034, 'Electrical Engineering Annexe Building': 5.9787958653896185}, 'Girish Gaitonde Building': {175: 2.568462575160479, 56: 2.5849564793241684}, 57: {174: 9.530424964291992, 55: 2.0523157651784483, 58: 2.1783020910791966, 'Seminar Hall': 1.8804254837669054, 'Rock Powdering Lab': 2.850438562747845, 'Rock Cutting Lab': 2.850438562747845}, 'Seminar Hall': {57: 1.8804254837669054}, 'Rock Cutting Lab': {57: 2.850438562747845}, 'Rock Powdering Lab': {57: 2.850438562747845}, 58: {57: 2.1783020910791966, 59: 3.9802009999496257, 'Metallurgical Engineering and Material Science Department': 5.603302597575826, 'Corrosion Science Paint Lab': 5.603302597575826, 'Corrosion Lab 1': 5.603302597575826, 'Humanities and Social Sciences Department': 4.119465984809196, 'Aerospace Engineering Annexe': 4.119465984809196, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 5.603302597575826, 'Aqueous Corrosion Lab': 5.603302597575826}, 'Aqueous Corrosion Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Inter-disciplinary Programme in Corrosion Science & Engineering': {58: 5.603302597575826, 173: 4.494441010848846}, 'Metallurgical Engineering and Material Science Department': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Lab 1': {58: 5.603302597575826, 173: 4.494441010848846}, 'Corrosion Science Paint Lab': {58: 5.603302597575826, 173: 4.494441010848846}, 'Humanities and Social Sciences Department': {58: 4.119465984809196}, 'Aerospace Engineering Annexe': {58: 4.119465984809196}, 59: {58: 3.9802009999496257, 60: 3.805522303179946, 'Lecture Hall Complex - 1 & 2': 4.551263560814733, 'LT 001': 4.551263560814733, 'LT 002': 4.551263560814733, 'LT 003': 4.551263560814733, 'LT 004': 4.551263560814733, 'LT 005': 4.551263560814733, 'LT 006': 4.551263560814733, 'LT 101': 4.551263560814733, 'LT 102': 4.551263560814733, 'LT 103': 4.551263560814733, 'LT 104': 4.551263560814733, 'LT 105': 4.551263560814733, 'LT 106': 4.551263560814733, 'LT 201': 4.551263560814733, 'LT 202': 4.551263560814733, 'LT 203': 4.551263560814733, 'LT 204': 4.551263560814733, 'LT 205': 4.551263560814733, 'LT 206': 4.551263560814733, 'LT 301': 4.551263560814733, 'LT 302': 4.551263560814733, 'LT 303': 4.551263560814733, 'LT 304': 4.551263560814733, 'LT 305': 4.551263560814733, 'LT 306': 4.551263560814733, 'LC 001': 4.551263560814733, 'LC 002': 4.551263560814733, 'LC 101': 4.551263560814733, 'LC 102': 4.551263560814733, 'LC 201': 4.551263560814733, 'LC 202': 4.551263560814733, 'LC 301': 4.551263560814733, 'LC 302': 4.551263560814733, 'LH 101': 4.551263560814733, 'LH 102': 4.551263560814733, 'LH 301': 4.551263560814733, 'LH 302': 4.551263560814733, 'LA 001': 2.438237068047322, 'LA 002': 2.438237068047322, 'LA 201': 2.438237068047322, 'LA 202': 2.438237068047322, 'Lecture Hall Complex - 3': 2.438237068047322, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': 7.383562825628289, 'Biosciences and Bioengineering Department': 7.383562825628289}, 'Biosciences and Bioengineering Department': {59: 7.383562825628289}, 'WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ': {59: 7.383562825628289}, 'LH 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LH 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'LC 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 001': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 306': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 305': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 304': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 303': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 302': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 301': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 206': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 205': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 204': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 203': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 202': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 201': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 106': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 105': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 104': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 103': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 102': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 101': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 006': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 005': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 004': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 003': {59: 4.551263560814733, 172: 5.116346352623129}, 'LT 002': {59: 4.551263560814733, 172: 5.116346352623129}, 'Lecture Hall Complex - 1 & 2': {59: 4.551263560814733, 172: 5.116346352623129}, 'LA 202': {59: 2.438237068047322}, 'LA 201': {59: 2.438237068047322}, 'LA 002': {59: 2.438237068047322}, 'LA 001': {59: 2.438237068047322}, 'Lecture Hall Complex - 3': {59: 2.438237068047322}, 60: {59: 3.805522303179946, 61: 2.0349447166937975, 'Physics Department': 4.780167361086848, 'Chemical Engineering Department': 5.520144925633747, 'Chemistry Department': 5.520144925633747}, 'Physics Department': {60: 4.780167361086848, 171: 4.7611973284038545}, 'Chemistry Department': {60: 5.520144925633747, 67: 8.937561188601732}, 'Chemical Engineering Department': {60: 5.520144925633747, 67: 8.937561188601732}, 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, 65: {64: 2.5793410011086166, 66: 2.0523157651784483, 'DESE & CESE New Building': 3.623534186398688, 'Cafe Coffee Day': 3.761914406256474, 'Energy Science and Engineering (New Building)': 3.623534186398688}, 'Energy Science and Engineering (New Building)': {65: 3.623534186398688}, 'DESE & CESE New Building': {65: 3.623534186398688}, 'Cafe Coffee Day': {65: 3.761914406256474}, 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, 67: {66: 2.041568024827975, 68: 7.799102512468983, 'Chemical Engineering Department': 8.937561188601732, 'Chemistry Department': 8.937561188601732}, 68: {67: 7.799102512468983, 69: 4.456007181322759, 'Aerospace Engineering Department': 1.5646085772486358, 'Centre for Aerospace Systems Design and Engineering': 1.5646085772486358}, 'Centre for Aerospace Systems Design and Engineering': {68: 1.5646085772486358}, 'Aerospace Engineering Department': {68: 1.5646085772486358}, 69: {68: 4.456007181322759, 'ONGC Research Centre': 1.580506248010428, 71: 2.44826469157238}, 'ONGC Research Centre': {69: 1.580506248010428}, 70: {66: 12.877926851787908, 71: 1.4453373308677804, 'Proposed Building for Tata Centre for Technology': 3.2534596969994882, 'Proposed NCAIR': 3.2534596969994882, 'Proposed Bio Mechanical Department': 3.2534596969994882, 'Proposed D.S Foundation': 3.2534596969994882, 'Proposed Press ': 3.2534596969994882}, 'Proposed Press ': {70: 3.2534596969994882}, 'Proposed D.S Foundation': {70: 3.2534596969994882}, 'Proposed Bio Mechanical Department': {70: 3.2534596969994882}, 'Proposed NCAIR': {70: 3.2534596969994882}, 'Proposed Building for Tata Centre for Technology': {70: 3.2534596969994882}, 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, 72: {71: 4.655534340975265, 73: 1.7700282483621554, 'Energy Science and Engineering': 1.6772000476985445}, 'Energy Science and Engineering': {72: 1.6772000476985445}, 73: {72: 1.7700282483621554, 74: 0.9, 'Earth Science Department': 4.228001892147164}, 'Earth Science Department': {73: 4.228001892147164}, 74: {73: 0.9, 75: 2.980771712157776, 'Centre of Studies in Resources Engineering': 2.1095023109728985, 'Society for Innovation and Entrepreneurship': 2.1095023109728985}, 'Society for Innovation and Entrepreneurship': {74: 2.1095023109728985}, 'Centre of Studies in Resources Engineering': {74: 2.1095023109728985}, 75: {74: 2.980771712157776, 76: 3.27566787083184, 'Centre for Environmental Science and Engineering': 3.992117232747556}, 'Centre for Environmental Science and Engineering': {75: 3.992117232747556}, 76: {75: 3.27566787083184, 51: 4.826696592909068, 52: 7.01519778766073, 77: 2.198635940759634, 'Non- Academic Staff Association': 2.0523157651784483, 'Printing Press': 2.0523157651784483}, 'Printing Press': {76: 2.0523157651784483}, 'Non- Academic Staff Association': {76: 2.0523157651784483}, 77: {76: 2.198635940759634, 78: 4.901632381156302, 'Structural integrity Testing and Analysis Centre': 2.166333307688362, 'S3 Bay': 2.76278844647939}, 'S3 Bay': {77: 2.76278844647939}, 'Structural integrity Testing and Analysis Centre': {77: 2.166333307688362, 82: 6.654697588921679}, 78: {77: 4.901632381156302, 79: 4.401136216933078, 'Electrical Maintenence': 2.4331050121192876, 'Machine Tool Lab': 3.7105255692421797}, 'Machine Tool Lab': {79: 4.65123639476645, 78: 3.7105255692421797}, 'Electrical Maintenence': {78: 2.4331050121192876}, 79: {78: 4.401136216933078, 80: 3.430014577228499, 'Machine Tool Lab': 4.65123639476645, 'OrthoCad Lab': 2.9313819266687173, 'Micro Fluidics Lab': 2.5045957757690163, 'RM Lab (Rapid manufacturing)': 3.0220853727186467, 'S1 Bay': 2.2614154859291116, 'N1 Bay': 2.012212712413874, 'Supercritical fluid Processing facility (Chemical Engg.)': 2.2614154859291116, 'S2 Bay': 4.65123639476645, 'UG Lab / S2 Bay': 4.65123639476645, 'Fuel Cell Research Facility': 2.012212712413874}, 'Fuel Cell Research Facility': {79: 2.012212712413874, 80: 3.161012496020856, 82: 2.2147234590350102}, 'UG Lab / S2 Bay': {79: 4.65123639476645}, 'S2 Bay': {79: 4.65123639476645}, 'Supercritical fluid Processing facility (Chemical Engg.)': {79: 2.2614154859291116}, 'N1 Bay': {79: 2.012212712413874}, 'S1 Bay': {79: 2.2614154859291116}, 'RM Lab (Rapid manufacturing)': {79: 3.0220853727186467}, 'OrthoCad Lab': {79: 2.9313819266687173}, 'Micro Fluidics Lab': {79: 2.5045957757690163}, 80: {79: 3.430014577228499, 81: 2.3910248848558644, 82: 3.5300141642775316, 'Fuel Cell Research Facility': 3.161012496020856}, 81: {185: 2.7727242920997393, 80: 2.3910248848558644, 'Physics Lab (Ist Years)': 1.1353413583587977, 'UG Lab (1st years)': 1.1353413583587977, 'Power House': 2.5117722826721374}, 'UG Lab (1st years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Physics Lab (Ist Years)': {81: 1.1353413583587977, 82: 3.1976553910638965}, 'Power House': {81: 2.5117722826721374}, 82: {80: 3.5300141642775316, 83: 3.4311805548528045, 'UG Lab (1st years)': 3.1976553910638965, 'Physics Lab (Ist Years)': 3.1976553910638965, 'Structural integrity Testing and Analysis Centre': 6.654697588921679, 'Fuel Cell Research Facility': 2.2147234590350102}, 83: {82: 3.4311805548528045, 84: 1.822361105818493, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': 1.0530906893520615, 'Thermal Hydraulic Test Facility': 2.54911749434976, 'N2 Bay': 2.70129598526337, 'N3 Bay': 2.195449840010015}, 'N3 Bay': {48: 5.318646444350292, 83: 2.195449840010015}, 'N2 Bay': {83: 2.70129598526337}, 'SMAmL Suman Mashruwala Advanced Microengineering Lab': {83: 1.0530906893520615}, 'Thermal Hydraulic Test Facility': {83: 2.54911749434976}, 84: {83: 1.822361105818493, 85: 4.349022878762539, 'Cummins Engine Research facility': 0.806225774829855, 'Heat Transfer and Thermodynamic Lab': 0.9433981132056604, 'Steam Power Lab': 1.0890362712049586, 'IC Engine and Combustion Lab': 2.1272047386182646}, 'IC Engine and Combustion Lab': {84: 2.1272047386182646, 85: 2.606338427756457}, 'Steam Power Lab': {84: 1.0890362712049586}, 'Cummins Engine Research facility': {84: 0.806225774829855}, 'Heat Transfer and Thermodynamic Lab': {84: 0.9433981132056604}, 85: {84: 4.349022878762539, 88: 2.5930676813380713, 86: 3.430014577228499, 'Metal Forming Lab': 2.558906016249913, 'Old ONGC Lab': 1.8160396471443017, 'Structural Evaluation & Material Technologies Lab': 1.6876018487783189, 'Heavy Structure Lab': 3.3366150512158277, 'Hydraulics Lab': 1.0922453936730518, 'Concrete Technology Lab': 3.3366150512158277, 'IC Engine and Combustion Lab': 2.606338427756457}, 'Concrete Technology Lab': {85: 3.3366150512158277}, 'Hydraulics Lab': {85: 1.0922453936730518, 88: 2.1644860821913365}, 'Heavy Structure Lab': {85: 3.3366150512158277}, 'Structural Evaluation & Material Technologies Lab': {85: 1.6876018487783189}, 'Old ONGC Lab': {85: 1.8160396471443017}, 86: {85: 3.430014577228499, 87: 2.2452171387195494, 'Geotechnical Engg. Lab': 0.4049691346263318, 'Metal Forming Lab': 1.1700427342623003}, 'Metal Forming Lab': {86: 1.1700427342623003, 85: 2.558906016249913}, 'Geotechnical Engg. Lab': {86: 0.4049691346263318}, 87: {86: 2.2452171387195494, 'National Geotechnical Centrifuge Facility': 1.2349089035228469, 'Vihar House': 6.230971031869752, 'GMFL Lab / Geophysical and multiphase Flows Lab': 5.591511423577708}, 'GMFL Lab / Geophysical and multiphase Flows Lab': {87: 5.591511423577708}, 'Vihar House': {87: 6.230971031869752}, 'National Geotechnical Centrifuge Facility': {87: 1.2349089035228469}, 88: {85: 2.5930676813380713, 'Solar Lab': 3.3889526405661083, 89: 1.731184565550421, 'Heat Pump Lab': 1.118033988749895, 'Hydraulics Lab Workshop': 1.9849433241279208, 'Hydraulics Lab': 2.1644860821913365, 'Hydraulics Lab (New)': 1.372953021774598}, 'Hydraulics Lab (New)': {88: 1.372953021774598, 89: 1.0751744044572489}, 'Hydraulics Lab Workshop': {88: 1.9849433241279208}, 'Solar Lab': {88: 3.3889526405661083}, 'Heat Pump Lab': {88: 1.118033988749895}, 89: {44: 4.000499968753906, 88: 1.731184565550421, 39: 5.330009380854784, 'Hydraulics Lab (New)': 1.0751744044572489}, 90: {91: 2.8017851452243803, 39: 2.44826469157238, 'Inter-disciplinary Programme in Systems and Control Engineering': 1.4310835055998654}, 'Inter-disciplinary Programme in Systems and Control Engineering': {90: 1.4310835055998654}, 91: {90: 2.8017851452243803, 92: 1.880957203128237, 'NanoTech. & Science Research Centre': 1.9227584351654787, 'Advanced Centre for Research in Electronics': 1.9227584351654787, 'Sophisticated Analytical Instruments Facility': 1.9227584351654787}, 'Sophisticated Analytical Instruments Facility': {91: 1.9227584351654787}, 'Advanced Centre for Research in Electronics': {91: 1.9227584351654787}, 'NanoTech. & Science Research Centre': {91: 1.9227584351654787}, 92: {91: 1.880957203128237, 93: 3.0242354405700627, 211: 1.2445882853377659, 213: 3.1395859599635108, 212: 1.0089598604503551}, 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, 94: {93: 1.7076299364909249, 213: 1.731184565550421, 214: 1.7700282483621554, 36: 4.640366364846638}, 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, 96: {95: 2.44826469157238, 'NCC Office': 4.343500892137586, 97: 4.59847800908083, 'Squash Court': 4.775143976886979}, 'Squash Court': {96: 4.775143976886979, 97: 3.006659275674582}, 'NCC Office': {96: 4.343500892137586}, 97: {96: 4.59847800908083, 98: 3.382454729926182, 'Staff Hostel': 9.135972854600654, 'Squash Court': 3.006659275674582}, 'Staff Hostel': {97: 9.135972854600654}, 98: {97: 3.382454729926182, 99: 1.7700282483621554, 101: 2.623928352680385, 'Hostel 11 Athena (Girls Hostel)': 2.9698484809834995, 'Printing and photocopying H11': 2.9698484809834995}, 'Printing and photocopying H11': {98: 2.9698484809834995}, 'Hostel 11 Athena (Girls Hostel)': {98: 2.9698484809834995}, 99: {98: 1.7700282483621554, 100: 2.6414011433328337, 'Basketball Court': 1.5063200191194432}, 'Basketball Court': {99: 1.5063200191194432}, 100: {99: 2.6414011433328337, 'Hockey Ground': 4.741307836451879, 'Gymkhana Grounds': 3.1465854509293085}, 'Hockey Ground': {100: 4.741307836451879}, 'Gymkhana Grounds': {100: 3.1465854509293085}, 101: {98: 2.623928352680385, 102: 5.378196723809943, 'Gymkhana Building': 1.9300259065618783, 'Brewberrys Cafe': 1.296919426949878}, 'Gymkhana Building': {101: 1.9300259065618783}, 'Brewberrys Cafe': {101: 1.296919426949878}, 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, 103: {102: 7.319357895334809, 104: 1.9677398201998149}, 104: {103: 1.9677398201998149, 105: 1.731184565550421}, 105: {104: 1.731184565550421, 106: 7.202221879392497}, 106: {105: 7.202221879392497, 107: 1.6949926253526888}, 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, 112: {111: 3.560056179332006, 113: 3.383637096380166}, 113: {112: 3.383637096380166, 114: 6.538654295801239}, 114: {113: 6.538654295801239, 'Boat House': 4.870523585817033}, 'Boat House': {114: 4.870523585817033}, 115: {111: 1.2445882853377659, 116: 2.041568024827975}, 116: {115: 2.041568024827975, 117: 1.4230249470757708}, 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, 118: {117: 1.1734564329364767, 119: 4.653815638806505}, 119: {118: 4.653815638806505, 120: 1.0}, 120: {119: 1.0, 121: 1.1734564329364767}, 121: {120: 1.1734564329364767, 122: 1.0261578825892241, 'National Centre for Mathematics': 1.4710540438746633}, 122: {121: 1.0261578825892241, 123: 16.343959128681153, 'Guest House/Padmavihar': 2.3214219780126144}, 'Guest House/Padmavihar': {122: 2.3214219780126144}, 'National Centre for Mathematics': {121: 1.4710540438746633}, 123: {122: 16.343959128681153, 124: 1.7700282483621554, 138: 4.518517455980446, 'Type B-14': 2.6879360111431225, 'Guest House / Jalvihar': 6.20354737227016}, 'Guest House / Jalvihar': {123: 6.20354737227016}, 'Type B-14': {123: 2.6879360111431225}, 124: {123: 1.7700282483621554, 125: 4.470011185668332}, 125: {124: 4.470011185668332, 126: 4.518517455980446}, 126: {125: 4.518517455980446, 127: 15.53270742658858, 135: 5.397962578603153, 'Type B-13': 3.575611835756225}, 'Type B-13': {126: 3.575611835756225}, 127: {126: 15.53270742658858, 128: 5.692538976590323, 'Proposed TypeA Building': 4.570557952810575}, 'Proposed TypeA Building': {127: 4.570557952810575}, 128: {127: 5.692538976590323, 129: 3.6808966298987533}, 129: {128: 3.6808966298987533, 130: 7.935048834128244, 193: 5.733149221850065, 'B 19 Old Multistoried Building- Residence ': 4.692973471052229}, 'B 19 Old Multistoried Building- Residence ': {129: 4.692973471052229}, 130: {129: 7.935048834128244, 131: 1.4042791745233567, 'White House': 5.517698795693726}, 'White House': {130: 5.517698795693726}, 131: {130: 1.4042791745233567, 132: 4.224807687930896, 'CTR 20': 2.000249984376953}, 'CTR 20': {131: 2.000249984376953}, 132: {131: 4.224807687930896, 133: 9.713753136661442, 'CTR 19': 2.040833163195855, 'Bungalow A10 ': 4.08166632639171}, 'Bungalow A10 ': {132: 4.08166632639171, 133: 6.646878966853541}, 'CTR 19': {132: 2.040833163195855}, 133: {132: 9.713753136661442, 134: 1.4916433890176297, 'Bungalow A11 ': 3.508275929855005, 'Bungalow A10 ': 6.646878966853541, 'Bungalow A8 ': 6.26258732474047}, 'Bungalow A8 ': {133: 6.26258732474047, 153: 10.713589501189599}, 134: {133: 1.4916433890176297, 135: 11.502738804302219, 153: 7.340844638050855, 'Shishu Vihar': 4.2901048938225275, 'Bungalow A5 ': 4.350287346831241, 'Bungalow A11 ': 3.645408070436011}, 'Bungalow A11 ': {133: 3.508275929855005, 134: 3.645408070436011}, 'Bungalow A5 ': {134: 4.350287346831241, 153: 3.634969050762331}, 'Shishu Vihar': {134: 4.2901048938225275, 153: 3.6206353033687333}, 135: {134: 11.502738804302219, 136: 9.79025025216414, 126: 5.397962578603153, 'A1 Director Bungalow': 7.410802925459562}, 'A1 Director Bungalow': {135: 7.410802925459562, 136: 3.7890632087628204, 155: 5.3615296324836255, 154: 5.123377792043057}, 136: {135: 9.79025025216414, 137: 2.316246964380094, 155: 5.403794962801605, 'Type B-1': 2.2908513701242166, 'Bungalow A13 ': 2.27771815640127, 'A1 Director Bungalow': 3.7890632087628204}, 'Bungalow A13 ': {136: 2.27771815640127}, 'Type B-1': {136: 2.2908513701242166}, 137: {136: 2.316246964380094, 138: 1.2727922061357855}, 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, 139: {138: 6.175597137119616, 140: 1.6760071598892412}, 140: {139: 1.6760071598892412, 141: 4.82265487050442}, 141: {140: 4.82265487050442, 142: 6.957082721946032, 157: 3.2919599025504547, 'Guest House/Vanvihar': 3.216364407215078}, 'Guest House/Vanvihar': {141: 3.216364407215078}, 142: {141: 6.957082721946032, 143: 3.9802009999496257, 162: 3.6585516259853432, 'Gulmohar Garden Cafetaria': 2.3759208741033446, 'Staff Club': 3.9654760117796704}, 'Staff Club': {142: 3.9654760117796704}, 143: {142: 3.9802009999496257, 144: 5.771828133269389, 'Hospital': 4.228001892147164}, 'Hospital': {143: 4.228001892147164}, 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, 145: {144: 0.8538149682454624, 146: 1.420211251891774}, 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, 147: {146: 5.530461101933545, 148: 2.041568024827975, 'Kshitij Udyan': 4.846648326421054}, 'Kshitij Udyan': {147: 4.846648326421054}, 148: {147: 2.041568024827975, 149: 2.263183598385248}, 149: {148: 2.263183598385248, 150: 2.6700187265260893, 'Tennis Court (new)': 7.513321502504734}, 'Tennis Court (new)': {149: 7.513321502504734}, 150: {149: 2.6700187265260893, 151: 2.041568024827975}, 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, 152: {151: 1.4512063946937388, 168: 2.167487024182613, 146: 3.382454729926182, 'Convocation Hall': 3.4539832078341086, 'Institute Music Room': 3.4539832078341086}, 'Institute Music Room': {152: 3.4539832078341086}, 'Convocation Hall': {152: 3.4539832078341086}, 153: {134: 7.340844638050855, 154: 8.926925562588723, 'Main Gate no. 2': 11.7957619508025, 'Shishu Vihar': 3.6206353033687333, 'Bungalow A5 ': 3.634969050762331, 'ATM - State Bank Main Gate': 13.127261709892128, 'Bungalow A8 ': 10.713589501189599}, 'ATM - State Bank Main Gate': {153: 13.127261709892128}, 'Main Gate no. 2': {153: 11.7957619508025}, 154: {153: 8.926925562588723, 155: 8.968890678339212, 'A1 Director Bungalow': 5.123377792043057}, 155: {136: 5.403794962801605, 154: 8.968890678339212, 156: 6.980329505116503, 'Hostel 10 Annexe (Girls Hostel)': 4.018084120572888, 'A1 Director Bungalow': 5.3615296324836255}, 'Hostel 10 Annexe (Girls Hostel)': {155: 4.018084120572888}, 156: {155: 6.980329505116503, 157: 2.39269722280108, 'Hostel 10 Phoenix (Girls Hostel)': 2.5909457732650445}, 'Hostel 10 Phoenix (Girls Hostel)': {156: 2.5909457732650445}, 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, 158: {157: 1.587765725792064, 162: 6.006163500938015, 159: 12.385031287808683, 'Gulmohar Building': 2.4135036772294343, 'Gulmohar Garden Cafetaria': 3.0909545451203257, 'ATM - Canara Bank near Gulmohar': 2.4135036772294343, 'Gulmohar Restaurant': 2.4135036772294343}, 'Gulmohar Restaurant': {158: 2.4135036772294343}, 'ATM - Canara Bank near Gulmohar': {158: 2.4135036772294343}, 'Gulmohar Garden Cafetaria': {162: 3.9115214431215892, 142: 2.3759208741033446, 158: 3.0909545451203257}, 'Gulmohar Building': {158: 2.4135036772294343}, 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, 160: {159: 1.981161275615895, 161: 2.279034883453959, 63: 6.325345840347388, 253: 12.683256679575637}, 161: {160: 2.279034883453959, 61: 2.545780823244609}, 162: {142: 3.6585516259853432, 158: 6.006163500938015, 163: 3.784309712483903, 'Gulmohar Garden Cafetaria': 3.9115214431215892}, 163: {162: 3.784309712483903, 164: 2.4041630560342617, 'Faqir Chand Kohli Auditorium': 3.5701540583005658, 'Kanwal Rekhi School of Information Technology': 3.5701540583005658, 'KReSIT Canteen': 3.5701540583005658}, 'KReSIT Canteen': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Kanwal Rekhi School of Information Technology': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Faqir Chand Kohli Auditorium': {163: 3.5701540583005658, 172: 3.544573317058063}, 'Computer Centre': {164: 3.842004685057008, 173: 2.6819768828235637}, 164: {163: 2.4041630560342617, 165: 2.7951744131627994, 'Computer Centre': 3.842004685057008}, 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, 166: {165: 1.2445882853377659, 167: 1.8, 144: 3.4896991274320484, 'School of Management': 3.890115679513914, 'Industrial Research & Consultancy Centre': 3.890115679513914}, 'Industrial Research & Consultancy Centre': {175: 3.2893768406797053, 166: 3.890115679513914}, 'School of Management': {175: 3.2893768406797053, 166: 3.890115679513914}, 167: {166: 1.8, 168: 4.013103537164223, 'Chaayos Near SOM': 121.87791022166404}, 168: {167: 4.013103537164223, 152: 2.167487024182613, 169: 1.981161275615895, 170: 2.828780656042458, 'Chaayos Near SOM': 120.84622459969529}, 'Chaayos Near SOM': {167: 121.87791022166404, 168: 120.84622459969529}, 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, 170: {168: 2.828780656042458, 'Main Building': 3.782591704109763, 'Joint Admission Test for M.Sc. Office': 3.782591704109763, 'Printing and photocopying Main Building': 3.782591704109763, 'Hostel Coordinating Unit': 3.782591704109763}, 'Hostel Coordinating Unit': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Printing and photocopying Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Joint Admission Test for M.Sc. Office': {170: 3.782591704109763, 179: 1.6155494421403511}, 'Main Building': {170: 3.782591704109763, 179: 1.6155494421403511}, 171: {172: 4.000499968753906, 159: 4.527471700629392, 'Physics Department': 4.7611973284038545}, 172: {171: 4.000499968753906, 173: 4.000499968753906, 'Kanwal Rekhi School of Information Technology': 3.544573317058063, 'KReSIT Canteen': 3.544573317058063, 'Faqir Chand Kohli Auditorium': 3.544573317058063, 'Lecture Hall Complex - 1 & 2': 5.116346352623129, 'LT 001': 5.116346352623129, 'LT 002': 5.116346352623129, 'LT 003': 5.116346352623129, 'LT 004': 5.116346352623129, 'LT 005': 5.116346352623129, 'LT 006': 5.116346352623129, 'LT 101': 5.116346352623129, 'LT 102': 5.116346352623129, 'LT 103': 5.116346352623129, 'LT 104': 5.116346352623129, 'LT 105': 5.116346352623129, 'LT 106': 5.116346352623129, 'LT 201': 5.116346352623129, 'LT 202': 5.116346352623129, 'LT 203': 5.116346352623129, 'LT 204': 5.116346352623129, 'LT 205': 5.116346352623129, 'LT 206': 5.116346352623129, 'LT 301': 5.116346352623129, 'LT 302': 5.116346352623129, 'LT 303': 5.116346352623129, 'LT 304': 5.116346352623129, 'LT 305': 5.116346352623129, 'LT 306': 5.116346352623129, 'LC 001': 5.116346352623129, 'LC 002': 5.116346352623129, 'LC 101': 5.116346352623129, 'LC 102': 5.116346352623129, 'LC 201': 5.116346352623129, 'LC 202': 5.116346352623129, 'LC 301': 5.116346352623129, 'LC 302': 5.116346352623129, 'LH 101': 5.116346352623129, 'LH 102': 5.116346352623129, 'LH 301': 5.116346352623129, 'LH 302': 5.116346352623129}, 173: {172: 4.000499968753906, 174: 2.980771712157776, 'Computer Centre': 2.6819768828235637, 'Metallurgical Engineering and Material Science Department': 4.494441010848846, 'Corrosion Science Paint Lab': 4.494441010848846, 'Corrosion Lab 1': 4.494441010848846, 'Inter-disciplinary Programme in Corrosion Science & Engineering': 4.494441010848846, 'Aqueous Corrosion Lab': 4.494441010848846}, 174: {173: 2.980771712157776, 175: 1.6099689437998486, 165: 6.240032051199737, 57: 9.530424964291992}, 175: {174: 1.6099689437998486, 176: 2.980771712157776, 'Girish Gaitonde Building': 2.568462575160479, 'School of Management': 3.2893768406797053, 'Industrial Research & Consultancy Centre': 3.2893768406797053}, 176: {175: 2.980771712157776, 177: 2.2228360263411244, 'Electrical Engineering Department': 4.331397003277349, 'Cafe 92': 1.587765725792064}, 'Cafe 92': {176: 1.587765725792064}, 177: {176: 2.2228360263411244, 178: 3.9760533195620003, 'PC Saxena Auditorium / Lecture Theatre': 1.91049731745428}, 'PC Saxena Auditorium / Lecture Theatre': {177: 1.91049731745428}, 178: {179: 3.93459019467085, 177: 3.9760533195620003, 52: 9.087133761533392, 180: 3.430014577228499}, 179: {178: 3.93459019467085, 'Main Building': 1.6155494421403511, 'Joint Admission Test for M.Sc. Office': 1.6155494421403511, 'Printing and photocopying Main Building': 1.6155494421403511, 'Hostel Coordinating Unit': 1.6155494421403511}, 180: {41: 2.2768399153212333, 178: 3.430014577228499}, 181: {64: 5.060632371551998, 182: 2.0523157651784483, 'Kendriya Vidyalaya ': 1.6376812876747417}, 'Kendriya Vidyalaya ': {181: 1.6376812876747417}, 182: {181: 2.0523157651784483, 183: 3.034633421024688, 'Medical Store': 3.3712015662075148, 'Uphar': 5.015974481593781}, 'Medical Store': {182: 3.3712015662075148}, 'Uphar': {182: 5.015974481593781}, 183: {184: 2.4226019070412703, 182: 3.034633421024688, 'Post Office': 2.3345235059857505}, 'Post Office': {183: 2.3345235059857505}, 184: {183: 2.4226019070412703, 'Market Gate, Y point Gate no. 3': 1.91049731745428, 249: 5.692538976590323}, 'Market Gate, Y point Gate no. 3': {184: 1.91049731745428}, 185: {81: 2.7727242920997393, 186: 6.006163500938015, 'Hostel 10A QIP (Girls Hostel)': 2.818865019826242}, 'Hostel 10A QIP (Girls Hostel)': {185: 2.818865019826242}, 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, 187: {186: 4.000499968753906, 226: 0.8700574693662483, 225: 0.6363961030678927, 'QIP 2': 1.793599732381782}, 'QIP 2': {225: 1.329661611087573, 187: 1.793599732381782}, 188: {189: 6.175597137119616, 'K-Yantra Lab (CSE Dept.)': 2.2487774456357394, 231: 0.28460498941515416, 228: 2.4226019070412703}, 'K-Yantra Lab (CSE Dept.)': {231: 2.5079872407968904, 188: 2.2487774456357394}, 189: {188: 6.175597137119616, 190: 1.4512063946937388, 232: 4.224807687930896, 'Tulsi B': 1.528397853963424, 'B 22 Ananta': 4.420407221060069}, 'B 22 Ananta': {189: 4.420407221060069}, 'Tulsi B': {189: 1.528397853963424}, 190: {189: 1.4512063946937388, 191: 1.7, 'Tulsi A': 1.188696765369537, 'Sameer Hill': 12.108055170009756}, 'Sameer Hill': {190: 12.108055170009756}, 'Tulsi A': {190: 1.188696765369537}, 191: {190: 1.7, 192: 5.426232578870906, 'B 23 Aravali': 2.5394881374009213, 'Society for Applied Microwave Electronics Engineering & Research': 3.6173194495371845}, 'Society for Applied Microwave Electronics Engineering & Research': {191: 3.6173194495371845}, 'B 23 Aravali': {234: 4.870831551183022, 191: 2.5394881374009213}, 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, 193: {129: 5.733149221850065, 194: 5.656854249492381}, 194: {193: 5.656854249492381, 195: 2.5298221281347035}, 195: {194: 2.5298221281347035, 196: 6.694475334184151}, 196: {195: 6.694475334184151, 197: 5.796723212298479, 'Lake Side Gate no. 1': 7.727483419587518}, 'Lake Side Gate no. 1': {196: 7.727483419587518}, 197: {196: 5.796723212298479, 198: 3.560056179332006}, 198: {197: 3.560056179332006, 199: 2.4316660954991334}, 199: {198: 2.4316660954991334, 200: 14.840080862313386}, 200: {199: 14.840080862313386, 'Padmavati Devi Temple': 14.451089924292909}, 'Padmavati Devi Temple': {200: 14.451089924292909}, 201: {'QIP 1': 1.5924823389915506, 202: 3.0242354405700627, 225: 3.382454729926182, 204: 7.045565981523415, 203: 5.600892785976178, 186: 0.0}, 'QIP 1': {201: 1.5924823389915506}, 202: {215: 1.8027756377319946, 203: 2.5930676813380713, 204: 4.044007912949726, 'Type1 - 6': 1.408900280360537, 201: 3.0242354405700627}, 'Type1 - 6': {202: 1.408900280360537}, 203: {'Type1 - 7': 1.1300442469213319, 204: 1.4512063946937388, 239: 3.784309712483903, 202: 2.5930676813380713, 201: 5.600892785976178}, 'Type1 - 7': {204: 1.7334935823359716, 203: 1.1300442469213319}, 204: {'Type1 - 7': 1.7334935823359716, 201: 7.045565981523415, 203: 1.4512063946937388, 202: 4.044007912949726, 220: 3.430014577228499, 205: 1.7700282483621554}, 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, 206: {224: 1.0, 223: 2.8208154849263005, 207: 1.981161275615895, 205: 1.731184565550421}, 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, 208: {208: 0.0, 243: 1.1627553482998907, 209: 2.4020824298928627, 'Type 2B 23': 2.4070729112347222}, 'Type 2B 23': {208: 2.4070729112347222}, 209: {208: 2.4020824298928627, 235: 4.224807687930896, 210: 2.316246964380094, 'CSRE C': 1.3118688958886098}, 'CSRE C': {209: 1.3118688958886098}, 210: {209: 2.316246964380094, 211: 3.6792662311933886}, 211: {210: 3.6792662311933886, 212: 2.251443981093023, 238: 2.9025850547399985, 92: 1.2445882853377659, 'Bungalow A16 ': 0.9}, 'Bungalow A16 ': {211: 0.9}, 212: {213: 2.1384573879317776, 'Bungalow A15 ': 1.0324727599312244, 211: 2.251443981093023, 92: 1.0089598604503551}, 'Bungalow A15 ': {212: 1.0324727599312244}, 213: {93: 0.28460498941515416, 92: 3.1395859599635108, 94: 1.731184565550421, 'Bungalow A14 ': 1.0373041983911953, 212: 2.1384573879317776}, 'Bungalow A14 ': {213: 1.0373041983911953}, 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, 215: {202: 1.8027756377319946, 216: 1.587765725792064, 'Type 2B 22': 1.3601470508735443}, 'Type 2B 22': {215: 1.3601470508735443}, 216: {215: 1.587765725792064, 217: 1.6099689437998486, 226: 2.828780656042458, 'Type1 - 18': 1.3103434664239755, 'Type1 - 16': 1.5524174696260025}, 'Type1 - 18': {216: 1.3103434664239755}, 'Type1 - 16': {216: 1.5524174696260025}, 217: {216: 1.6099689437998486, 239: 1.1428035701729322, 218: 1.4042791745233567, 227: 2.6700187265260893, 'Proposed Type H1 Building': 6.9112227572261045}, 'Proposed Type H1 Building': {226: 3.3575288531895002, 217: 6.9112227572261045}, 218: {217: 1.4042791745233567, 219: 1.1853269591129698, 'Type1 - 14': 1.0606601717798212, 'Type H1 - 12': 1.5195394038984313}, 'Type1 - 14': {218: 1.0606601717798212}, 'Type H1 - 12': {218: 1.5195394038984313}, 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, 220: {204: 3.430014577228499, 239: 2.0124611797498106, 219: 2.4226019070412703, 'Type1 - 13': 0.6363961030678927, 222: 2.828780656042458}, 'Type1 - 13': {220: 0.6363961030678927}, 221: {222: 1.6324827717314507, 'Type H1 - 5': 0.4949747468305833}, 'Type H1 - 5': {221: 0.4949747468305833}, 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, 223: {224: 1.822361105818493, 222: 0.8221921916437787, 'Type H1 - 6': 1.5703502793962882}, 'Type H1 - 6': {223: 1.5703502793962882}, 224: {223: 1.822361105818493, 206: 1.0, 'Type H1 - 8': 1.216963434126104}, 'Type H1 - 8': {224: 1.216963434126104}, 225: {201: 3.382454729926182, 226: 1.3914021704740869, 'QIP 2': 1.329661611087573, 187: 0.6363961030678927}, 226: {226: 0.0, 216: 2.828780656042458, 227: 2.2228360263411244, 187: 0.8700574693662483, 'Proposed Type H1 Building': 3.3575288531895002}, 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, 228: {219: 3.112073263919087, 227: 1.77792013318934, 230: 2.316246964380094, 229: 3.4311805548528045, 188: 2.4226019070412703}, 229: {228: 3.4311805548528045, 'Vidya Niwas': 1.2041594578792296}, 'Vidya Niwas': {229: 1.2041594578792296}, 230: {228: 2.316246964380094, 231: 1.4916433890176297, 'C22, B wing, Vindya': 1.820988742414406}, 'C22, B wing, Vindya': {230: 1.820988742414406}, 231: {230: 1.4916433890176297, 'C22, A wing, Sahyadri': 1.420211251891774, 'K-Yantra Lab (CSE Dept.)': 2.5079872407968904, 232: 1.7977764043395386, 188: 0.28460498941515416}, 'C22, A wing, Sahyadri': {231: 1.420211251891774}, 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, 234: {'B 23 Aravali': 4.870831551183022, 233: 2.6700187265260893, 235: 2.7727242920997393}, 235: {234: 2.7727242920997393, 209: 4.224807687930896}, 236: {237: 2.1384573879317776, 'Bungalow A19 ': 0.970051545022222, 'CSRE D': 1.0807404868885035}, 'Bungalow A19 ': {236: 0.970051545022222}, 'CSRE D': {236: 1.0807404868885035}, 237: {236: 2.1384573879317776, 238: 1.8952572384771413, 'Bungalow A18 ': 0.8, 'CSRE A': 1.7418381095842403, 'CSRE B': 0.8354639429682169}, 'Bungalow A18 ': {237: 0.8}, 'CSRE A': {237: 1.7418381095842403}, 'CSRE B': {237: 0.8354639429682169}, 238: {237: 1.8952572384771413, 211: 2.9025850547399985, 'Bungalow A17 ': 0.806225774829855}, 'Bungalow A17 ': {238: 0.806225774829855}, 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, 240: {'Type H2 - 18': 0.9492101980067429, 205: 1.822361105818493}, 'Type H2 - 18': {240: 0.9492101980067429}, 241: {242: 0.6363961030678927, 'Type H2 - 19': 0.6324555320336759, 207: 1.822361105818493}, 'Type H2 - 19': {241: 0.6324555320336759}, 242: {241: 0.6363961030678927, 'Type H2 - 20': 1.5}, 'Type H2 - 20': {242: 1.5}, 243: {'Type H2 - 21': 0.9617692030835673, 208: 1.1627553482998907}, 'Type H2 - 21': {243: 0.9617692030835673}, 244: {233: 3.1508728949292766, 232: 1.6595180023127196, 'Tulsi C': 1.5990622251807463}, 'Tulsi C': {244: 1.5990622251807463}, 245: {246: 4.401136216933078, 'Security Check Point': 3.8860005146680052, 255: 4.802082881417188}, 246: {245: 4.401136216933078, 'Paspoli Gate no. 4 ': 9.244295538330652}, 'Paspoli Gate no. 4 ': {246: 9.244295538330652}, 247: {192: 5.9605368885696866, 248: 4.271416626834709}, 248: {247: 4.271416626834709, 'MW Quarters 1': 1.8384776310850235}, 'MW Quarters 1': {248: 1.8384776310850235}, 249: {184: 5.692538976590323, 250: 5.426232578870906, 251: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 1.766635219845908}, 'Kendriya Vidyalay Quarters 1': {249: 1.766635219845908, 251: 2.471639132235934}, 250: {249: 5.426232578870906, 'Campus School': 4.745102738613781, 'Kindergarten School': 4.745102738613781}, 'Kindergarten School': {250: 4.745102738613781, 253: 4.33232039443068}, 'Campus School': {250: 4.745102738613781, 253: 4.33232039443068}, 251: {249: 2.2671568097509267, 'Kendriya Vidyalay Quarters 1': 2.471639132235934, 252: 4.804164859785725}, 252: {251: 4.804164859785725, 253: 3.035951251255527}, 253: {252: 3.035951251255527, 254: 3.4896991274320484, 160: 12.683256679575637, 'Campus School': 4.33232039443068, 'Type C-7': 0.34058772731852804, 'Kindergarten School': 4.33232039443068}, 'Type C-7': {253: 0.34058772731852804}, 254: {253: 3.4896991274320484, 'Shivalik C 23 (187-240)': 7.684009370114016}, 'Shivalik C 23 (187-240)': {254: 7.684009370114016}, 255: {2: 18.03285889702462, 'Security Check Point': 1.4577379737113252, 245: 4.802082881417188}, 'Aromas Canteen': {27: 1.6337074401495515, 28: 2.9740544715926105, 'Hostel 01 Queen of the campus': 3.7380476187443095, "Domino's outlet": 1.4286357128393508}} \ No newline at end of file +{ + 0: { + "Hostel 12 Crown of the Campus": 2.534758371127315, + "Hostel 14 Silicon Ship": 1.827019430657485, + "H13 Night Canteen": 5.471105921109552, + "Hostel 13 House of Titans": 5.471105921109552, + "Mess for hostels 12 | 13 | 14": 1.5420765220960988, + 1: 3.112073263919087, + "Amul Parlour": 1.827019430657485, + }, + "Amul Parlour": {0: 1.827019430657485}, + "Hostel 12 Crown of the Campus": {0: 2.534758371127315}, + "Hostel 14 Silicon Ship": {0: 1.827019430657485}, + "Hostel 13 House of Titans": {0: 5.471105921109552}, + "H13 Night Canteen": {0: 5.471105921109552}, + "Mess for hostels 12 | 13 | 14": {0: 1.5420765220960988}, + 1: {0: 3.112073263919087, 2: 2.545780823244609}, + 2: {1: 2.545780823244609, 3: 2.0719555979798407, 255: 18.03285889702462}, + "Security Check Point": {255: 1.4577379737113252, 245: 3.8860005146680052}, + 3: {2: 2.0719555979798407, 4: 5.07119315348962, 5: 3.2144984056614496}, + 4: { + 3: 5.07119315348962, + "Hostel 06 Vikings": 2.359872877932199, + "Type1 - 22": 3.020761493398643, + }, + "Type1 - 22": {4: 3.020761493398643}, + "Hostel 06 Vikings": {4: 2.359872877932199}, + 5: {3: 3.2144984056614496, 6: 2.6414011433328337}, + 6: { + 5: 2.6414011433328337, + 7: 2.198635940759634, + "ATM - Canara Bank near H6": 1.3813037319865606, + }, + "ATM - Canara Bank near H6": {6: 1.3813037319865606}, + 7: {6: 2.198635940759634, 8: 2.0349447166937975}, + 8: { + 7: 2.0349447166937975, + 9: 1.1853269591129698, + "Hostel 09 Nawaabon Ki Basti": 3.60568994784632, + }, + "Hostel 09 Nawaabon Ki Basti": {8: 3.60568994784632}, + 9: {8: 1.1853269591129698, 10: 3.6706947571270483, 12: 2.8271894170713074}, + 10: {9: 3.6706947571270483, 11: 4.669047011971501}, + 11: {10: 4.669047011971501, "Hostel 18": 4.075904807524337}, + "Hostel 18": {11: 4.075904807524337}, + 12: {9: 2.8271894170713074, 13: 3.784309712483903, "Hostel 17": 2.44826469157238}, + "Hostel 17": {12: 2.44826469157238}, + 13: {12: 3.784309712483903, 14: 1.760113632695344, 102: 3.4035275817892234}, + 14: { + 13: 1.760113632695344, + 15: 5.70350769263968, + "Chaayos Cafe": 1.2074767078498865, + }, + "Chaayos Cafe": {14: 1.2074767078498865}, + 15: {14: 5.70350769263968, 16: 2.7727242920997393, 17: 3.560056179332006}, + 16: {15: 2.7727242920997393, "Hostel 05 Penthouse": 4.306855001041944}, + "Hostel 05 Penthouse": {16: 4.306855001041944}, + 17: { + 15: 3.560056179332006, + 18: 2.6700187265260893, + "Tansa House King of campus (Proj. Staff Boys)": 3.3800887562311144, + "ATM - State Bank near Tansa": 3.0522123124055445, + }, + "ATM - State Bank near Tansa": {17: 3.0522123124055445}, + "Tansa House King of campus (Proj. Staff Boys)": {17: 3.3800887562311144}, + 18: {17: 2.6700187265260893, 19: 2.4041630560342617}, + 19: {18: 2.4041630560342617, 20: 2.0719555979798407}, + 20: { + 21: 6.359323863430766, + 19: 2.0719555979798407, + "Outdoor Sports Facility": 1.230447073221762, + "Hostel 03 Vitruvians": 3.9824615503479754, + }, + "Outdoor Sports Facility": {20: 1.230447073221762}, + "Hostel 03 Vitruvians": {20: 3.9824615503479754}, + 21: { + 20: 6.359323863430766, + 22: 3.0242354405700627, + "Hostel 02 The Wild Ones": 5.008991914547277, + "Indoor Stadium": 1.5839823231336896, + "Badminton Court": 1.5839823231336896, + }, + "Badminton Court": {21: 1.5839823231336896}, + "Hostel 02 The Wild Ones": {21: 5.008991914547277}, + "Indoor Stadium": {21: 1.5839823231336896}, + 22: { + 21: 3.0242354405700627, + "Swimming Pool (new)": 2.3119256043393785, + 23: 2.316246964380094, + }, + "Swimming Pool (new)": {22: 2.3119256043393785}, + 23: {22: 2.316246964380094, 24: 3.5383612025908264, 25: 3.2144984056614496}, + 24: { + 23: 3.5383612025908264, + "Students Activity Centre": 1.9039432764659772, + "New Yoga Room, SAC": 1.9039432764659772, + "Open Air Theatre": 1.9039432764659772, + "Film Room, SAC": 1.9039432764659772, + }, + "Film Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, + "Open Air Theatre": {24: 1.9039432764659772, 26: 2.760615873315228}, + "New Yoga Room, SAC": {24: 1.9039432764659772, 26: 2.760615873315228}, + "Students Activity Centre": {24: 1.9039432764659772, 26: 2.760615873315228}, + 25: {23: 3.2144984056614496, 26: 3.8268786236304906, 27: 2.545780823244609}, + 26: { + 25: 3.8268786236304906, + "Students Activity Centre": 2.760615873315228, + "New Yoga Room, SAC": 2.760615873315228, + "Open Air Theatre": 2.760615873315228, + "Film Room, SAC": 2.760615873315228, + }, + 27: { + 25: 2.545780823244609, + 28: 2.7741665415039525, + "Hostel 01 Queen of the campus": 2.198635940759634, + "Aromas Canteen": 1.6337074401495515, + }, + "Hostel 01 Queen of the campus": { + 27: 2.198635940759634, + "Aromas Canteen": 3.7380476187443095, + }, + 28: { + 27: 2.7741665415039525, + "Domino's outlet": 2.0084820138602186, + 29: 1.6161683080669538, + "Aromas Canteen": 2.9740544715926105, + }, + "Domino's outlet": { + 28: 2.0084820138602186, + 34: 1.4453373308677804, + "Aromas Canteen": 1.4286357128393508, + }, + 29: {28: 1.6161683080669538, 30: 5.685156110433556, 34: 3.2919599025504547}, + 30: { + 29: 5.685156110433556, + 31: 3.1395859599635108, + "Defence Research & Development Organization": 2.1505813167606567, + }, + "Defence Research & Development Organization": {30: 2.1505813167606567}, + 31: {30: 3.1395859599635108, 32: 4.044007912949726, 192: 3.684155262743415}, + 32: { + 31: 4.044007912949726, + "Hostel 15 Trident": 6.024699162613849, + 33: 5.330009380854784, + "Hostel 15 Mess": 5.773820225812369, + }, + "Hostel 15 Mess": {32: 5.773820225812369}, + "Hostel 15 Trident": {32: 6.024699162613849}, + 33: { + 32: 5.330009380854784, + "Hostel 16 Olympus": 4.440833255144804, + "Hostel 16 Mess": 4.440833255144804, + }, + "Hostel 16 Mess": {33: 4.440833255144804}, + "Hostel 16 Olympus": {33: 4.440833255144804}, + 34: { + 35: 1.7700282483621554, + 29: 3.2919599025504547, + "Domino's outlet": 1.4453373308677804, + }, + 35: { + 34: 1.7700282483621554, + 36: 2.2671568097509267, + 37: 7.046417529496815, + 214: 0.6228964600958975, + }, + 36: { + 35: 2.2671568097509267, + "State Bank of India Branch": 1.296919426949878, + 94: 4.640366364846638, + }, + "State Bank of India Branch": {36: 1.296919426949878}, + 37: {35: 7.046417529496815, 38: 6.155079203389668, 95: 11.327885945753515}, + 38: { + 37: 6.155079203389668, + 39: 3.1508728949292766, + "Central Library": 1.103177229641729, + }, + "Central Library": {38: 1.103177229641729, 40: 2.7613402542968153}, + 39: { + 38: 3.1508728949292766, + 40: 3.6002777670618693, + 89: 5.330009380854784, + 90: 2.44826469157238, + }, + 40: {39: 3.6002777670618693, 41: 1.0, "Central Library": 2.7613402542968153}, + 41: {40: 1.0, 42: 1.1384199576606167, 180: 2.2768399153212333}, + 42: { + 41: 1.1384199576606167, + 43: 2.316246964380094, + "Mathematics Department": 2.435159132377184, + "Old Software Lab": 2.435159132377184, + "Inter-disciplinary Programme in Educational Technology": 2.435159132377184, + "Centre for Formal Design and Verification of Software": 2.435159132377184, + "Centre for Distance Engineering Education Programme": 2.435159132377184, + }, + "Centre for Distance Engineering Education Programme": {42: 2.435159132377184}, + "Centre for Formal Design and Verification of Software": {42: 2.435159132377184}, + "Inter-disciplinary Programme in Educational Technology": {42: 2.435159132377184}, + "Mathematics Department": {42: 2.435159132377184}, + "Old Software Lab": {42: 2.435159132377184}, + 43: { + 42: 2.316246964380094, + 44: 2.041568024827975, + "Old Computer Science Engineering Department": 1.8439088914585775, + "New Software Lab": 1.8439088914585775, + "Centre for Technology Alternatives for Rural Areas": 1.8439088914585775, + }, + "Centre for Technology Alternatives for Rural Areas": {43: 1.8439088914585775}, + "New Software Lab": {43: 1.8439088914585775}, + "Old Computer Science Engineering Department": {43: 1.8439088914585775}, + 44: {43: 2.041568024827975, 45: 1.1734564329364767, 89: 4.000499968753906}, + 45: { + 44: 1.1734564329364767, + 46: 2.5930676813380713, + 47: 3.112073263919087, + "Fluid Mechanics and Fluid Power Lab": 0.623698645180507, + }, + "Fluid Mechanics and Fluid Power Lab": {45: 0.623698645180507}, + 46: { + 45: 2.5930676813380713, + 47: 1.0261578825892241, + 48: 2.0329781110479277, + "ENELEK Power Sine": 0.9486832980505138, + }, + "ENELEK Power Sine": {46: 0.9486832980505138}, + 47: {45: 3.112073263919087, 46: 1.0261578825892241}, + 48: { + 46: 2.0329781110479277, + 49: 2.167487024182613, + "Tinkerers Lab": 1.066770828247567, + "Refrigeration, A/C and Cryogenics Lab": 1.066770828247567, + "Treelabs": 1.066770828247567, + "N3 Bay": 5.318646444350292, + }, + "Treelabs": {48: 1.066770828247567}, + "Refrigeration, A/C and Cryogenics Lab": {48: 1.066770828247567}, + "Tinkerers Lab": {48: 1.066770828247567}, + 49: { + 48: 2.167487024182613, + 50: 3.382454729926182, + "Mechanical Engineering Department": 5.230774321264492, + "Industrial Engineering and Operations Research": 5.230774321264492, + }, + "Industrial Engineering and Operations Research": {49: 5.230774321264492}, + "Mechanical Engineering Department": {49: 5.230774321264492}, + 50: {49: 3.382454729926182, 51: 1.731184565550421, 52: 1.2445882853377659}, + 51: { + 50: 1.731184565550421, + 76: 4.826696592909068, + "Industrial Design Centre": 2.2365151463828723, + "IDC Canteen": 2.2365151463828723, + "IDC Shakti": 2.2365151463828723, + }, + "IDC Shakti": {51: 2.2365151463828723}, + "IDC Canteen": {51: 2.2365151463828723}, + "Industrial Design Centre": {51: 2.2365151463828723}, + 52: { + 50: 1.2445882853377659, + 53: 2.4226019070412703, + 76: 7.01519778766073, + 178: 9.087133761533392, + }, + 53: { + 52: 2.4226019070412703, + 54: 4.588354824989018, + "Civil Engineering Department": 4.6217961876309515, + "Victor Menezes Convention Centre": 3.063494736408078, + "Centre for Urban Science and Engineering (inside civil)": 4.6217961876309515, + "Inter-disciplinary Programme in Climate Studies": 4.6217961876309515, + }, + "Inter-disciplinary Programme in Climate Studies": {53: 4.6217961876309515}, + "Centre for Urban Science and Engineering (inside civil)": {53: 4.6217961876309515}, + "Civil Engineering Department": {53: 4.6217961876309515}, + "Victor Menezes Convention Centre": {53: 3.063494736408078}, + 54: { + 53: 4.588354824989018, + 55: 1.9677398201998149, + "Electrical Engineering Department": 4.794267410147248, + "Electrical Engineering Annexe Building": 1.0751744044572489, + }, + "Electrical Engineering Department": { + 54: 4.794267410147248, + 176: 4.331397003277349, + 56: 2.110213259365034, + }, + "Electrical Engineering Annexe Building": { + 54: 1.0751744044572489, + 56: 5.9787958653896185, + }, + 55: {54: 1.9677398201998149, 56: 4.293483434229135, 57: 2.0523157651784483}, + 56: { + 55: 4.293483434229135, + "Girish Gaitonde Building": 2.5849564793241684, + "Electrical Engineering Department": 2.110213259365034, + "Electrical Engineering Annexe Building": 5.9787958653896185, + }, + "Girish Gaitonde Building": {175: 2.568462575160479, 56: 2.5849564793241684}, + 57: { + 174: 9.530424964291992, + 55: 2.0523157651784483, + 58: 2.1783020910791966, + "Seminar Hall": 1.8804254837669054, + "Rock Powdering Lab": 2.850438562747845, + "Rock Cutting Lab": 2.850438562747845, + }, + "Seminar Hall": {57: 1.8804254837669054}, + "Rock Cutting Lab": {57: 2.850438562747845}, + "Rock Powdering Lab": {57: 2.850438562747845}, + 58: { + 57: 2.1783020910791966, + 59: 3.9802009999496257, + "Metallurgical Engineering and Material Science Department": 5.603302597575826, + "Corrosion Science Paint Lab": 5.603302597575826, + "Corrosion Lab 1": 5.603302597575826, + "Humanities and Social Sciences Department": 4.119465984809196, + "Aerospace Engineering Annexe": 4.119465984809196, + "Inter-disciplinary Programme in Corrosion Science & Engineering": 5.603302597575826, + "Aqueous Corrosion Lab": 5.603302597575826, + }, + "Aqueous Corrosion Lab": {58: 5.603302597575826, 173: 4.494441010848846}, + "Inter-disciplinary Programme in Corrosion Science & Engineering": { + 58: 5.603302597575826, + 173: 4.494441010848846, + }, + "Metallurgical Engineering and Material Science Department": { + 58: 5.603302597575826, + 173: 4.494441010848846, + }, + "Corrosion Lab 1": {58: 5.603302597575826, 173: 4.494441010848846}, + "Corrosion Science Paint Lab": {58: 5.603302597575826, 173: 4.494441010848846}, + "Humanities and Social Sciences Department": {58: 4.119465984809196}, + "Aerospace Engineering Annexe": {58: 4.119465984809196}, + 59: { + 58: 3.9802009999496257, + 60: 3.805522303179946, + "Lecture Hall Complex - 1 & 2": 4.551263560814733, + "LT 001": 4.551263560814733, + "LT 002": 4.551263560814733, + "LT 003": 4.551263560814733, + "LT 004": 4.551263560814733, + "LT 005": 4.551263560814733, + "LT 006": 4.551263560814733, + "LT 101": 4.551263560814733, + "LT 102": 4.551263560814733, + "LT 103": 4.551263560814733, + "LT 104": 4.551263560814733, + "LT 105": 4.551263560814733, + "LT 106": 4.551263560814733, + "LT 201": 4.551263560814733, + "LT 202": 4.551263560814733, + "LT 203": 4.551263560814733, + "LT 204": 4.551263560814733, + "LT 205": 4.551263560814733, + "LT 206": 4.551263560814733, + "LT 301": 4.551263560814733, + "LT 302": 4.551263560814733, + "LT 303": 4.551263560814733, + "LT 304": 4.551263560814733, + "LT 305": 4.551263560814733, + "LT 306": 4.551263560814733, + "LC 001": 4.551263560814733, + "LC 002": 4.551263560814733, + "LC 101": 4.551263560814733, + "LC 102": 4.551263560814733, + "LC 201": 4.551263560814733, + "LC 202": 4.551263560814733, + "LC 301": 4.551263560814733, + "LC 302": 4.551263560814733, + "LH 101": 4.551263560814733, + "LH 102": 4.551263560814733, + "LH 301": 4.551263560814733, + "LH 302": 4.551263560814733, + "LA 001": 2.438237068047322, + "LA 002": 2.438237068047322, + "LA 201": 2.438237068047322, + "LA 202": 2.438237068047322, + "Lecture Hall Complex - 3": 2.438237068047322, + "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": 7.383562825628289, + "Biosciences and Bioengineering Department": 7.383562825628289, + }, + "Biosciences and Bioengineering Department": {59: 7.383562825628289}, + "WRCBB Wadhwani Research Centre in Biosciences and Bioengineering ": { + 59: 7.383562825628289 + }, + "LH 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LH 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 202": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 201": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 002": {59: 4.551263560814733, 172: 5.116346352623129}, + "LC 001": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 001": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 306": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 305": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 304": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 303": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 302": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 301": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 206": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 205": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 204": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 203": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 202": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 201": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 106": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 105": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 104": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 103": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 102": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 101": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 006": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 005": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 004": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 003": {59: 4.551263560814733, 172: 5.116346352623129}, + "LT 002": {59: 4.551263560814733, 172: 5.116346352623129}, + "Lecture Hall Complex - 1 & 2": {59: 4.551263560814733, 172: 5.116346352623129}, + "LA 202": {59: 2.438237068047322}, + "LA 201": {59: 2.438237068047322}, + "LA 002": {59: 2.438237068047322}, + "LA 001": {59: 2.438237068047322}, + "Lecture Hall Complex - 3": {59: 2.438237068047322}, + 60: { + 59: 3.805522303179946, + 61: 2.0349447166937975, + "Physics Department": 4.780167361086848, + "Chemical Engineering Department": 5.520144925633747, + "Chemistry Department": 5.520144925633747, + }, + "Physics Department": {60: 4.780167361086848, 171: 4.7611973284038545}, + "Chemistry Department": {60: 5.520144925633747, 67: 8.937561188601732}, + "Chemical Engineering Department": {60: 5.520144925633747, 67: 8.937561188601732}, + 61: {60: 2.0349447166937975, 62: 1.9677398201998149, 161: 2.545780823244609}, + 62: {61: 1.9677398201998149, 63: 1.6760071598892412}, + 63: {62: 1.6760071598892412, 64: 13.195188517031502, 160: 6.325345840347388}, + 64: {63: 13.195188517031502, 65: 2.5793410011086166, 181: 5.060632371551998}, + 65: { + 64: 2.5793410011086166, + 66: 2.0523157651784483, + "DESE & CESE New Building": 3.623534186398688, + "Cafe Coffee Day": 3.761914406256474, + "Energy Science and Engineering (New Building)": 3.623534186398688, + }, + "Energy Science and Engineering (New Building)": {65: 3.623534186398688}, + "DESE & CESE New Building": {65: 3.623534186398688}, + "Cafe Coffee Day": {65: 3.761914406256474}, + 66: {65: 2.0523157651784483, 67: 2.041568024827975, 70: 12.877926851787908}, + 67: { + 66: 2.041568024827975, + 68: 7.799102512468983, + "Chemical Engineering Department": 8.937561188601732, + "Chemistry Department": 8.937561188601732, + }, + 68: { + 67: 7.799102512468983, + 69: 4.456007181322759, + "Aerospace Engineering Department": 1.5646085772486358, + "Centre for Aerospace Systems Design and Engineering": 1.5646085772486358, + }, + "Centre for Aerospace Systems Design and Engineering": {68: 1.5646085772486358}, + "Aerospace Engineering Department": {68: 1.5646085772486358}, + 69: { + 68: 4.456007181322759, + "ONGC Research Centre": 1.580506248010428, + 71: 2.44826469157238, + }, + "ONGC Research Centre": {69: 1.580506248010428}, + 70: { + 66: 12.877926851787908, + 71: 1.4453373308677804, + "Proposed Building for Tata Centre for Technology": 3.2534596969994882, + "Proposed NCAIR": 3.2534596969994882, + "Proposed Bio Mechanical Department": 3.2534596969994882, + "Proposed D.S Foundation": 3.2534596969994882, + "Proposed Press ": 3.2534596969994882, + }, + "Proposed Press ": {70: 3.2534596969994882}, + "Proposed D.S Foundation": {70: 3.2534596969994882}, + "Proposed Bio Mechanical Department": {70: 3.2534596969994882}, + "Proposed NCAIR": {70: 3.2534596969994882}, + "Proposed Building for Tata Centre for Technology": {70: 3.2534596969994882}, + 71: {70: 1.4453373308677804, 72: 4.655534340975265, 69: 2.44826469157238}, + 72: { + 71: 4.655534340975265, + 73: 1.7700282483621554, + "Energy Science and Engineering": 1.6772000476985445, + }, + "Energy Science and Engineering": {72: 1.6772000476985445}, + 73: { + 72: 1.7700282483621554, + 74: 0.9, + "Earth Science Department": 4.228001892147164, + }, + "Earth Science Department": {73: 4.228001892147164}, + 74: { + 73: 0.9, + 75: 2.980771712157776, + "Centre of Studies in Resources Engineering": 2.1095023109728985, + "Society for Innovation and Entrepreneurship": 2.1095023109728985, + }, + "Society for Innovation and Entrepreneurship": {74: 2.1095023109728985}, + "Centre of Studies in Resources Engineering": {74: 2.1095023109728985}, + 75: { + 74: 2.980771712157776, + 76: 3.27566787083184, + "Centre for Environmental Science and Engineering": 3.992117232747556, + }, + "Centre for Environmental Science and Engineering": {75: 3.992117232747556}, + 76: { + 75: 3.27566787083184, + 51: 4.826696592909068, + 52: 7.01519778766073, + 77: 2.198635940759634, + "Non- Academic Staff Association": 2.0523157651784483, + "Printing Press": 2.0523157651784483, + }, + "Printing Press": {76: 2.0523157651784483}, + "Non- Academic Staff Association": {76: 2.0523157651784483}, + 77: { + 76: 2.198635940759634, + 78: 4.901632381156302, + "Structural integrity Testing and Analysis Centre": 2.166333307688362, + "S3 Bay": 2.76278844647939, + }, + "S3 Bay": {77: 2.76278844647939}, + "Structural integrity Testing and Analysis Centre": { + 77: 2.166333307688362, + 82: 6.654697588921679, + }, + 78: { + 77: 4.901632381156302, + 79: 4.401136216933078, + "Electrical Maintenence": 2.4331050121192876, + "Machine Tool Lab": 3.7105255692421797, + }, + "Machine Tool Lab": {79: 4.65123639476645, 78: 3.7105255692421797}, + "Electrical Maintenence": {78: 2.4331050121192876}, + 79: { + 78: 4.401136216933078, + 80: 3.430014577228499, + "Machine Tool Lab": 4.65123639476645, + "OrthoCad Lab": 2.9313819266687173, + "Micro Fluidics Lab": 2.5045957757690163, + "RM Lab (Rapid manufacturing)": 3.0220853727186467, + "S1 Bay": 2.2614154859291116, + "N1 Bay": 2.012212712413874, + "Supercritical fluid Processing facility (Chemical Engg.)": 2.2614154859291116, + "S2 Bay": 4.65123639476645, + "UG Lab / S2 Bay": 4.65123639476645, + "Fuel Cell Research Facility": 2.012212712413874, + }, + "Fuel Cell Research Facility": { + 79: 2.012212712413874, + 80: 3.161012496020856, + 82: 2.2147234590350102, + }, + "UG Lab / S2 Bay": {79: 4.65123639476645}, + "S2 Bay": {79: 4.65123639476645}, + "Supercritical fluid Processing facility (Chemical Engg.)": { + 79: 2.2614154859291116 + }, + "N1 Bay": {79: 2.012212712413874}, + "S1 Bay": {79: 2.2614154859291116}, + "RM Lab (Rapid manufacturing)": {79: 3.0220853727186467}, + "OrthoCad Lab": {79: 2.9313819266687173}, + "Micro Fluidics Lab": {79: 2.5045957757690163}, + 80: { + 79: 3.430014577228499, + 81: 2.3910248848558644, + 82: 3.5300141642775316, + "Fuel Cell Research Facility": 3.161012496020856, + }, + 81: { + 185: 2.7727242920997393, + 80: 2.3910248848558644, + "Physics Lab (Ist Years)": 1.1353413583587977, + "UG Lab (1st years)": 1.1353413583587977, + "Power House": 2.5117722826721374, + }, + "UG Lab (1st years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, + "Physics Lab (Ist Years)": {81: 1.1353413583587977, 82: 3.1976553910638965}, + "Power House": {81: 2.5117722826721374}, + 82: { + 80: 3.5300141642775316, + 83: 3.4311805548528045, + "UG Lab (1st years)": 3.1976553910638965, + "Physics Lab (Ist Years)": 3.1976553910638965, + "Structural integrity Testing and Analysis Centre": 6.654697588921679, + "Fuel Cell Research Facility": 2.2147234590350102, + }, + 83: { + 82: 3.4311805548528045, + 84: 1.822361105818493, + "SMAmL Suman Mashruwala Advanced Microengineering Lab": 1.0530906893520615, + "Thermal Hydraulic Test Facility": 2.54911749434976, + "N2 Bay": 2.70129598526337, + "N3 Bay": 2.195449840010015, + }, + "N3 Bay": {48: 5.318646444350292, 83: 2.195449840010015}, + "N2 Bay": {83: 2.70129598526337}, + "SMAmL Suman Mashruwala Advanced Microengineering Lab": {83: 1.0530906893520615}, + "Thermal Hydraulic Test Facility": {83: 2.54911749434976}, + 84: { + 83: 1.822361105818493, + 85: 4.349022878762539, + "Cummins Engine Research facility": 0.806225774829855, + "Heat Transfer and Thermodynamic Lab": 0.9433981132056604, + "Steam Power Lab": 1.0890362712049586, + "IC Engine and Combustion Lab": 2.1272047386182646, + }, + "IC Engine and Combustion Lab": {84: 2.1272047386182646, 85: 2.606338427756457}, + "Steam Power Lab": {84: 1.0890362712049586}, + "Cummins Engine Research facility": {84: 0.806225774829855}, + "Heat Transfer and Thermodynamic Lab": {84: 0.9433981132056604}, + 85: { + 84: 4.349022878762539, + 88: 2.5930676813380713, + 86: 3.430014577228499, + "Metal Forming Lab": 2.558906016249913, + "Old ONGC Lab": 1.8160396471443017, + "Structural Evaluation & Material Technologies Lab": 1.6876018487783189, + "Heavy Structure Lab": 3.3366150512158277, + "Hydraulics Lab": 1.0922453936730518, + "Concrete Technology Lab": 3.3366150512158277, + "IC Engine and Combustion Lab": 2.606338427756457, + }, + "Concrete Technology Lab": {85: 3.3366150512158277}, + "Hydraulics Lab": {85: 1.0922453936730518, 88: 2.1644860821913365}, + "Heavy Structure Lab": {85: 3.3366150512158277}, + "Structural Evaluation & Material Technologies Lab": {85: 1.6876018487783189}, + "Old ONGC Lab": {85: 1.8160396471443017}, + 86: { + 85: 3.430014577228499, + 87: 2.2452171387195494, + "Geotechnical Engg. Lab": 0.4049691346263318, + "Metal Forming Lab": 1.1700427342623003, + }, + "Metal Forming Lab": {86: 1.1700427342623003, 85: 2.558906016249913}, + "Geotechnical Engg. Lab": {86: 0.4049691346263318}, + 87: { + 86: 2.2452171387195494, + "National Geotechnical Centrifuge Facility": 1.2349089035228469, + "Vihar House": 6.230971031869752, + "GMFL Lab / Geophysical and multiphase Flows Lab": 5.591511423577708, + }, + "GMFL Lab / Geophysical and multiphase Flows Lab": {87: 5.591511423577708}, + "Vihar House": {87: 6.230971031869752}, + "National Geotechnical Centrifuge Facility": {87: 1.2349089035228469}, + 88: { + 85: 2.5930676813380713, + "Solar Lab": 3.3889526405661083, + 89: 1.731184565550421, + "Heat Pump Lab": 1.118033988749895, + "Hydraulics Lab Workshop": 1.9849433241279208, + "Hydraulics Lab": 2.1644860821913365, + "Hydraulics Lab (New)": 1.372953021774598, + }, + "Hydraulics Lab (New)": {88: 1.372953021774598, 89: 1.0751744044572489}, + "Hydraulics Lab Workshop": {88: 1.9849433241279208}, + "Solar Lab": {88: 3.3889526405661083}, + "Heat Pump Lab": {88: 1.118033988749895}, + 89: { + 44: 4.000499968753906, + 88: 1.731184565550421, + 39: 5.330009380854784, + "Hydraulics Lab (New)": 1.0751744044572489, + }, + 90: { + 91: 2.8017851452243803, + 39: 2.44826469157238, + "Inter-disciplinary Programme in Systems and Control Engineering": 1.4310835055998654, + }, + "Inter-disciplinary Programme in Systems and Control Engineering": { + 90: 1.4310835055998654 + }, + 91: { + 90: 2.8017851452243803, + 92: 1.880957203128237, + "NanoTech. & Science Research Centre": 1.9227584351654787, + "Advanced Centre for Research in Electronics": 1.9227584351654787, + "Sophisticated Analytical Instruments Facility": 1.9227584351654787, + }, + "Sophisticated Analytical Instruments Facility": {91: 1.9227584351654787}, + "Advanced Centre for Research in Electronics": {91: 1.9227584351654787}, + "NanoTech. & Science Research Centre": {91: 1.9227584351654787}, + 92: { + 91: 1.880957203128237, + 93: 3.0242354405700627, + 211: 1.2445882853377659, + 213: 3.1395859599635108, + 212: 1.0089598604503551, + }, + 93: {92: 3.0242354405700627, 94: 1.7076299364909249, 213: 0.28460498941515416}, + 94: { + 93: 1.7076299364909249, + 213: 1.731184565550421, + 214: 1.7700282483621554, + 36: 4.640366364846638, + }, + 95: {96: 2.44826469157238, 169: 4.186287137786896, 37: 11.327885945753515}, + 96: { + 95: 2.44826469157238, + "NCC Office": 4.343500892137586, + 97: 4.59847800908083, + "Squash Court": 4.775143976886979, + }, + "Squash Court": {96: 4.775143976886979, 97: 3.006659275674582}, + "NCC Office": {96: 4.343500892137586}, + 97: { + 96: 4.59847800908083, + 98: 3.382454729926182, + "Staff Hostel": 9.135972854600654, + "Squash Court": 3.006659275674582, + }, + "Staff Hostel": {97: 9.135972854600654}, + 98: { + 97: 3.382454729926182, + 99: 1.7700282483621554, + 101: 2.623928352680385, + "Hostel 11 Athena (Girls Hostel)": 2.9698484809834995, + "Printing and photocopying H11": 2.9698484809834995, + }, + "Printing and photocopying H11": {98: 2.9698484809834995}, + "Hostel 11 Athena (Girls Hostel)": {98: 2.9698484809834995}, + 99: { + 98: 1.7700282483621554, + 100: 2.6414011433328337, + "Basketball Court": 1.5063200191194432, + }, + "Basketball Court": {99: 1.5063200191194432}, + 100: { + 99: 2.6414011433328337, + "Hockey Ground": 4.741307836451879, + "Gymkhana Grounds": 3.1465854509293085, + }, + "Hockey Ground": {100: 4.741307836451879}, + "Gymkhana Grounds": {100: 3.1465854509293085}, + 101: { + 98: 2.623928352680385, + 102: 5.378196723809943, + "Gymkhana Building": 1.9300259065618783, + "Brewberrys Cafe": 1.296919426949878, + }, + "Gymkhana Building": {101: 1.9300259065618783}, + "Brewberrys Cafe": {101: 1.296919426949878}, + 102: {101: 5.378196723809943, 13: 3.4035275817892234, 103: 7.319357895334809}, + 103: {102: 7.319357895334809, 104: 1.9677398201998149}, + 104: {103: 1.9677398201998149, 105: 1.731184565550421}, + 105: {104: 1.731184565550421, 106: 7.202221879392497}, + 106: {105: 7.202221879392497, 107: 1.6949926253526888}, + 107: {106: 1.6949926253526888, 108: 1.5211837495845135}, + 108: {107: 1.5211837495845135, 109: 1.8952572384771413}, + 109: {108: 1.8952572384771413, 110: 3.5700140055747682}, + 110: {109: 3.5700140055747682, 111: 1.4916433890176297}, + 111: {110: 1.4916433890176297, 112: 3.560056179332006, 115: 1.2445882853377659}, + 112: {111: 3.560056179332006, 113: 3.383637096380166}, + 113: {112: 3.383637096380166, 114: 6.538654295801239}, + 114: {113: 6.538654295801239, "Boat House": 4.870523585817033}, + "Boat House": {114: 4.870523585817033}, + 115: {111: 1.2445882853377659, 116: 2.041568024827975}, + 116: {115: 2.041568024827975, 117: 1.4230249470757708}, + 117: {116: 1.4230249470757708, 118: 1.1734564329364767}, + 118: {117: 1.1734564329364767, 119: 4.653815638806505}, + 119: {118: 4.653815638806505, 120: 1.0}, + 120: {119: 1.0, 121: 1.1734564329364767}, + 121: { + 120: 1.1734564329364767, + 122: 1.0261578825892241, + "National Centre for Mathematics": 1.4710540438746633, + }, + 122: { + 121: 1.0261578825892241, + 123: 16.343959128681153, + "Guest House/Padmavihar": 2.3214219780126144, + }, + "Guest House/Padmavihar": {122: 2.3214219780126144}, + "National Centre for Mathematics": {121: 1.4710540438746633}, + 123: { + 122: 16.343959128681153, + 124: 1.7700282483621554, + 138: 4.518517455980446, + "Type B-14": 2.6879360111431225, + "Guest House / Jalvihar": 6.20354737227016, + }, + "Guest House / Jalvihar": {123: 6.20354737227016}, + "Type B-14": {123: 2.6879360111431225}, + 124: {123: 1.7700282483621554, 125: 4.470011185668332}, + 125: {124: 4.470011185668332, 126: 4.518517455980446}, + 126: { + 125: 4.518517455980446, + 127: 15.53270742658858, + 135: 5.397962578603153, + "Type B-13": 3.575611835756225, + }, + "Type B-13": {126: 3.575611835756225}, + 127: { + 126: 15.53270742658858, + 128: 5.692538976590323, + "Proposed TypeA Building": 4.570557952810575, + }, + "Proposed TypeA Building": {127: 4.570557952810575}, + 128: {127: 5.692538976590323, 129: 3.6808966298987533}, + 129: { + 128: 3.6808966298987533, + 130: 7.935048834128244, + 193: 5.733149221850065, + "B 19 Old Multistoried Building- Residence ": 4.692973471052229, + }, + "B 19 Old Multistoried Building- Residence ": {129: 4.692973471052229}, + 130: { + 129: 7.935048834128244, + 131: 1.4042791745233567, + "White House": 5.517698795693726, + }, + "White House": {130: 5.517698795693726}, + 131: {130: 1.4042791745233567, 132: 4.224807687930896, "CTR 20": 2.000249984376953}, + "CTR 20": {131: 2.000249984376953}, + 132: { + 131: 4.224807687930896, + 133: 9.713753136661442, + "CTR 19": 2.040833163195855, + "Bungalow A10 ": 4.08166632639171, + }, + "Bungalow A10 ": {132: 4.08166632639171, 133: 6.646878966853541}, + "CTR 19": {132: 2.040833163195855}, + 133: { + 132: 9.713753136661442, + 134: 1.4916433890176297, + "Bungalow A11 ": 3.508275929855005, + "Bungalow A10 ": 6.646878966853541, + "Bungalow A8 ": 6.26258732474047, + }, + "Bungalow A8 ": {133: 6.26258732474047, 153: 10.713589501189599}, + 134: { + 133: 1.4916433890176297, + 135: 11.502738804302219, + 153: 7.340844638050855, + "Shishu Vihar": 4.2901048938225275, + "Bungalow A5 ": 4.350287346831241, + "Bungalow A11 ": 3.645408070436011, + }, + "Bungalow A11 ": {133: 3.508275929855005, 134: 3.645408070436011}, + "Bungalow A5 ": {134: 4.350287346831241, 153: 3.634969050762331}, + "Shishu Vihar": {134: 4.2901048938225275, 153: 3.6206353033687333}, + 135: { + 134: 11.502738804302219, + 136: 9.79025025216414, + 126: 5.397962578603153, + "A1 Director Bungalow": 7.410802925459562, + }, + "A1 Director Bungalow": { + 135: 7.410802925459562, + 136: 3.7890632087628204, + 155: 5.3615296324836255, + 154: 5.123377792043057, + }, + 136: { + 135: 9.79025025216414, + 137: 2.316246964380094, + 155: 5.403794962801605, + "Type B-1": 2.2908513701242166, + "Bungalow A13 ": 2.27771815640127, + "A1 Director Bungalow": 3.7890632087628204, + }, + "Bungalow A13 ": {136: 2.27771815640127}, + "Type B-1": {136: 2.2908513701242166}, + 137: {136: 2.316246964380094, 138: 1.2727922061357855}, + 138: {137: 1.2727922061357855, 139: 6.175597137119616, 123: 4.518517455980446}, + 139: {138: 6.175597137119616, 140: 1.6760071598892412}, + 140: {139: 1.6760071598892412, 141: 4.82265487050442}, + 141: { + 140: 4.82265487050442, + 142: 6.957082721946032, + 157: 3.2919599025504547, + "Guest House/Vanvihar": 3.216364407215078, + }, + "Guest House/Vanvihar": {141: 3.216364407215078}, + 142: { + 141: 6.957082721946032, + 143: 3.9802009999496257, + 162: 3.6585516259853432, + "Gulmohar Garden Cafetaria": 2.3759208741033446, + "Staff Club": 3.9654760117796704, + }, + "Staff Club": {142: 3.9654760117796704}, + 143: { + 142: 3.9802009999496257, + 144: 5.771828133269389, + "Hospital": 4.228001892147164, + }, + "Hospital": {143: 4.228001892147164}, + 144: {143: 5.771828133269389, 145: 0.8538149682454624, 166: 3.4896991274320484}, + 145: {144: 0.8538149682454624, 146: 1.420211251891774}, + 146: {145: 1.420211251891774, 147: 5.530461101933545, 152: 3.382454729926182}, + 147: { + 146: 5.530461101933545, + 148: 2.041568024827975, + "Kshitij Udyan": 4.846648326421054, + }, + "Kshitij Udyan": {147: 4.846648326421054}, + 148: {147: 2.041568024827975, 149: 2.263183598385248}, + 149: { + 148: 2.263183598385248, + 150: 2.6700187265260893, + "Tennis Court (new)": 7.513321502504734, + }, + "Tennis Court (new)": {149: 7.513321502504734}, + 150: {149: 2.6700187265260893, 151: 2.041568024827975}, + 151: {152: 1.4512063946937388, 150: 2.041568024827975, 169: 2.430020576044573}, + 152: { + 151: 1.4512063946937388, + 168: 2.167487024182613, + 146: 3.382454729926182, + "Convocation Hall": 3.4539832078341086, + "Institute Music Room": 3.4539832078341086, + }, + "Institute Music Room": {152: 3.4539832078341086}, + "Convocation Hall": {152: 3.4539832078341086}, + 153: { + 134: 7.340844638050855, + 154: 8.926925562588723, + "Main Gate no. 2": 11.7957619508025, + "Shishu Vihar": 3.6206353033687333, + "Bungalow A5 ": 3.634969050762331, + "ATM - State Bank Main Gate": 13.127261709892128, + "Bungalow A8 ": 10.713589501189599, + }, + "ATM - State Bank Main Gate": {153: 13.127261709892128}, + "Main Gate no. 2": {153: 11.7957619508025}, + 154: { + 153: 8.926925562588723, + 155: 8.968890678339212, + "A1 Director Bungalow": 5.123377792043057, + }, + 155: { + 136: 5.403794962801605, + 154: 8.968890678339212, + 156: 6.980329505116503, + "Hostel 10 Annexe (Girls Hostel)": 4.018084120572888, + "A1 Director Bungalow": 5.3615296324836255, + }, + "Hostel 10 Annexe (Girls Hostel)": {155: 4.018084120572888}, + 156: { + 155: 6.980329505116503, + 157: 2.39269722280108, + "Hostel 10 Phoenix (Girls Hostel)": 2.5909457732650445, + }, + "Hostel 10 Phoenix (Girls Hostel)": {156: 2.5909457732650445}, + 157: {156: 2.39269722280108, 158: 1.587765725792064, 141: 3.2919599025504547}, + 158: { + 157: 1.587765725792064, + 162: 6.006163500938015, + 159: 12.385031287808683, + "Gulmohar Building": 2.4135036772294343, + "Gulmohar Garden Cafetaria": 3.0909545451203257, + "ATM - Canara Bank near Gulmohar": 2.4135036772294343, + "Gulmohar Restaurant": 2.4135036772294343, + }, + "Gulmohar Restaurant": {158: 2.4135036772294343}, + "ATM - Canara Bank near Gulmohar": {158: 2.4135036772294343}, + "Gulmohar Garden Cafetaria": { + 162: 3.9115214431215892, + 142: 2.3759208741033446, + 158: 3.0909545451203257, + }, + "Gulmohar Building": {158: 2.4135036772294343}, + 159: {158: 12.385031287808683, 160: 1.981161275615895, 171: 4.527471700629392}, + 160: { + 159: 1.981161275615895, + 161: 2.279034883453959, + 63: 6.325345840347388, + 253: 12.683256679575637, + }, + 161: {160: 2.279034883453959, 61: 2.545780823244609}, + 162: { + 142: 3.6585516259853432, + 158: 6.006163500938015, + 163: 3.784309712483903, + "Gulmohar Garden Cafetaria": 3.9115214431215892, + }, + 163: { + 162: 3.784309712483903, + 164: 2.4041630560342617, + "Faqir Chand Kohli Auditorium": 3.5701540583005658, + "Kanwal Rekhi School of Information Technology": 3.5701540583005658, + "KReSIT Canteen": 3.5701540583005658, + }, + "KReSIT Canteen": {163: 3.5701540583005658, 172: 3.544573317058063}, + "Kanwal Rekhi School of Information Technology": { + 163: 3.5701540583005658, + 172: 3.544573317058063, + }, + "Faqir Chand Kohli Auditorium": {163: 3.5701540583005658, 172: 3.544573317058063}, + "Computer Centre": {164: 3.842004685057008, 173: 2.6819768828235637}, + 164: { + 163: 2.4041630560342617, + 165: 2.7951744131627994, + "Computer Centre": 3.842004685057008, + }, + 165: {164: 2.7951744131627994, 166: 1.2445882853377659, 174: 6.240032051199737}, + 166: { + 165: 1.2445882853377659, + 167: 1.8, + 144: 3.4896991274320484, + "School of Management": 3.890115679513914, + "Industrial Research & Consultancy Centre": 3.890115679513914, + }, + "Industrial Research & Consultancy Centre": { + 175: 3.2893768406797053, + 166: 3.890115679513914, + }, + "School of Management": {175: 3.2893768406797053, 166: 3.890115679513914}, + 167: {166: 1.8, 168: 4.013103537164223, "Chaayos Near SOM": 121.87791022166404}, + 168: { + 167: 4.013103537164223, + 152: 2.167487024182613, + 169: 1.981161275615895, + 170: 2.828780656042458, + "Chaayos Near SOM": 120.84622459969529, + }, + "Chaayos Near SOM": {167: 121.87791022166404, 168: 120.84622459969529}, + 169: {168: 1.981161275615895, 95: 4.186287137786896, 151: 2.430020576044573}, + 170: { + 168: 2.828780656042458, + "Main Building": 3.782591704109763, + "Joint Admission Test for M.Sc. Office": 3.782591704109763, + "Printing and photocopying Main Building": 3.782591704109763, + "Hostel Coordinating Unit": 3.782591704109763, + }, + "Hostel Coordinating Unit": {170: 3.782591704109763, 179: 1.6155494421403511}, + "Printing and photocopying Main Building": { + 170: 3.782591704109763, + 179: 1.6155494421403511, + }, + "Joint Admission Test for M.Sc. Office": { + 170: 3.782591704109763, + 179: 1.6155494421403511, + }, + "Main Building": {170: 3.782591704109763, 179: 1.6155494421403511}, + 171: { + 172: 4.000499968753906, + 159: 4.527471700629392, + "Physics Department": 4.7611973284038545, + }, + 172: { + 171: 4.000499968753906, + 173: 4.000499968753906, + "Kanwal Rekhi School of Information Technology": 3.544573317058063, + "KReSIT Canteen": 3.544573317058063, + "Faqir Chand Kohli Auditorium": 3.544573317058063, + "Lecture Hall Complex - 1 & 2": 5.116346352623129, + "LT 001": 5.116346352623129, + "LT 002": 5.116346352623129, + "LT 003": 5.116346352623129, + "LT 004": 5.116346352623129, + "LT 005": 5.116346352623129, + "LT 006": 5.116346352623129, + "LT 101": 5.116346352623129, + "LT 102": 5.116346352623129, + "LT 103": 5.116346352623129, + "LT 104": 5.116346352623129, + "LT 105": 5.116346352623129, + "LT 106": 5.116346352623129, + "LT 201": 5.116346352623129, + "LT 202": 5.116346352623129, + "LT 203": 5.116346352623129, + "LT 204": 5.116346352623129, + "LT 205": 5.116346352623129, + "LT 206": 5.116346352623129, + "LT 301": 5.116346352623129, + "LT 302": 5.116346352623129, + "LT 303": 5.116346352623129, + "LT 304": 5.116346352623129, + "LT 305": 5.116346352623129, + "LT 306": 5.116346352623129, + "LC 001": 5.116346352623129, + "LC 002": 5.116346352623129, + "LC 101": 5.116346352623129, + "LC 102": 5.116346352623129, + "LC 201": 5.116346352623129, + "LC 202": 5.116346352623129, + "LC 301": 5.116346352623129, + "LC 302": 5.116346352623129, + "LH 101": 5.116346352623129, + "LH 102": 5.116346352623129, + "LH 301": 5.116346352623129, + "LH 302": 5.116346352623129, + }, + 173: { + 172: 4.000499968753906, + 174: 2.980771712157776, + "Computer Centre": 2.6819768828235637, + "Metallurgical Engineering and Material Science Department": 4.494441010848846, + "Corrosion Science Paint Lab": 4.494441010848846, + "Corrosion Lab 1": 4.494441010848846, + "Inter-disciplinary Programme in Corrosion Science & Engineering": 4.494441010848846, + "Aqueous Corrosion Lab": 4.494441010848846, + }, + 174: { + 173: 2.980771712157776, + 175: 1.6099689437998486, + 165: 6.240032051199737, + 57: 9.530424964291992, + }, + 175: { + 174: 1.6099689437998486, + 176: 2.980771712157776, + "Girish Gaitonde Building": 2.568462575160479, + "School of Management": 3.2893768406797053, + "Industrial Research & Consultancy Centre": 3.2893768406797053, + }, + 176: { + 175: 2.980771712157776, + 177: 2.2228360263411244, + "Electrical Engineering Department": 4.331397003277349, + "Cafe 92": 1.587765725792064, + }, + "Cafe 92": {176: 1.587765725792064}, + 177: { + 176: 2.2228360263411244, + 178: 3.9760533195620003, + "PC Saxena Auditorium / Lecture Theatre": 1.91049731745428, + }, + "PC Saxena Auditorium / Lecture Theatre": {177: 1.91049731745428}, + 178: { + 179: 3.93459019467085, + 177: 3.9760533195620003, + 52: 9.087133761533392, + 180: 3.430014577228499, + }, + 179: { + 178: 3.93459019467085, + "Main Building": 1.6155494421403511, + "Joint Admission Test for M.Sc. Office": 1.6155494421403511, + "Printing and photocopying Main Building": 1.6155494421403511, + "Hostel Coordinating Unit": 1.6155494421403511, + }, + 180: {41: 2.2768399153212333, 178: 3.430014577228499}, + 181: { + 64: 5.060632371551998, + 182: 2.0523157651784483, + "Kendriya Vidyalaya ": 1.6376812876747417, + }, + "Kendriya Vidyalaya ": {181: 1.6376812876747417}, + 182: { + 181: 2.0523157651784483, + 183: 3.034633421024688, + "Medical Store": 3.3712015662075148, + "Uphar": 5.015974481593781, + }, + "Medical Store": {182: 3.3712015662075148}, + "Uphar": {182: 5.015974481593781}, + 183: { + 184: 2.4226019070412703, + 182: 3.034633421024688, + "Post Office": 2.3345235059857505, + }, + "Post Office": {183: 2.3345235059857505}, + 184: { + 183: 2.4226019070412703, + "Market Gate, Y point Gate no. 3": 1.91049731745428, + 249: 5.692538976590323, + }, + "Market Gate, Y point Gate no. 3": {184: 1.91049731745428}, + 185: { + 81: 2.7727242920997393, + 186: 6.006163500938015, + "Hostel 10A QIP (Girls Hostel)": 2.818865019826242, + }, + "Hostel 10A QIP (Girls Hostel)": {185: 2.818865019826242}, + 186: {185: 6.006163500938015, 187: 4.000499968753906, 201: 0.0}, + 187: { + 186: 4.000499968753906, + 226: 0.8700574693662483, + 225: 0.6363961030678927, + "QIP 2": 1.793599732381782, + }, + "QIP 2": {225: 1.329661611087573, 187: 1.793599732381782}, + 188: { + 189: 6.175597137119616, + "K-Yantra Lab (CSE Dept.)": 2.2487774456357394, + 231: 0.28460498941515416, + 228: 2.4226019070412703, + }, + "K-Yantra Lab (CSE Dept.)": {231: 2.5079872407968904, 188: 2.2487774456357394}, + 189: { + 188: 6.175597137119616, + 190: 1.4512063946937388, + 232: 4.224807687930896, + "Tulsi B": 1.528397853963424, + "B 22 Ananta": 4.420407221060069, + }, + "B 22 Ananta": {189: 4.420407221060069}, + "Tulsi B": {189: 1.528397853963424}, + 190: { + 189: 1.4512063946937388, + 191: 1.7, + "Tulsi A": 1.188696765369537, + "Sameer Hill": 12.108055170009756, + }, + "Sameer Hill": {190: 12.108055170009756}, + "Tulsi A": {190: 1.188696765369537}, + 191: { + 190: 1.7, + 192: 5.426232578870906, + "B 23 Aravali": 2.5394881374009213, + "Society for Applied Microwave Electronics Engineering & Research": 3.6173194495371845, + }, + "Society for Applied Microwave Electronics Engineering & Research": { + 191: 3.6173194495371845 + }, + "B 23 Aravali": {234: 4.870831551183022, 191: 2.5394881374009213}, + 192: {191: 5.426232578870906, 31: 3.684155262743415, 247: 5.9605368885696866}, + 193: {129: 5.733149221850065, 194: 5.656854249492381}, + 194: {193: 5.656854249492381, 195: 2.5298221281347035}, + 195: {194: 2.5298221281347035, 196: 6.694475334184151}, + 196: { + 195: 6.694475334184151, + 197: 5.796723212298479, + "Lake Side Gate no. 1": 7.727483419587518, + }, + "Lake Side Gate no. 1": {196: 7.727483419587518}, + 197: {196: 5.796723212298479, 198: 3.560056179332006}, + 198: {197: 3.560056179332006, 199: 2.4316660954991334}, + 199: {198: 2.4316660954991334, 200: 14.840080862313386}, + 200: {199: 14.840080862313386, "Padmavati Devi Temple": 14.451089924292909}, + "Padmavati Devi Temple": {200: 14.451089924292909}, + 201: { + "QIP 1": 1.5924823389915506, + 202: 3.0242354405700627, + 225: 3.382454729926182, + 204: 7.045565981523415, + 203: 5.600892785976178, + 186: 0.0, + }, + "QIP 1": {201: 1.5924823389915506}, + 202: { + 215: 1.8027756377319946, + 203: 2.5930676813380713, + 204: 4.044007912949726, + "Type1 - 6": 1.408900280360537, + 201: 3.0242354405700627, + }, + "Type1 - 6": {202: 1.408900280360537}, + 203: { + "Type1 - 7": 1.1300442469213319, + 204: 1.4512063946937388, + 239: 3.784309712483903, + 202: 2.5930676813380713, + 201: 5.600892785976178, + }, + "Type1 - 7": {204: 1.7334935823359716, 203: 1.1300442469213319}, + 204: { + "Type1 - 7": 1.7334935823359716, + 201: 7.045565981523415, + 203: 1.4512063946937388, + 202: 4.044007912949726, + 220: 3.430014577228499, + 205: 1.7700282483621554, + }, + 205: {240: 1.822361105818493, 206: 1.731184565550421, 204: 1.7700282483621554}, + 206: { + 224: 1.0, + 223: 2.8208154849263005, + 207: 1.981161275615895, + 205: 1.731184565550421, + }, + 207: {208: 1.5211837495845135, 241: 1.822361105818493, 206: 1.981161275615895}, + 208: { + 208: 0.0, + 243: 1.1627553482998907, + 209: 2.4020824298928627, + "Type 2B 23": 2.4070729112347222, + }, + "Type 2B 23": {208: 2.4070729112347222}, + 209: { + 208: 2.4020824298928627, + 235: 4.224807687930896, + 210: 2.316246964380094, + "CSRE C": 1.3118688958886098, + }, + "CSRE C": {209: 1.3118688958886098}, + 210: {209: 2.316246964380094, 211: 3.6792662311933886}, + 211: { + 210: 3.6792662311933886, + 212: 2.251443981093023, + 238: 2.9025850547399985, + 92: 1.2445882853377659, + "Bungalow A16 ": 0.9, + }, + "Bungalow A16 ": {211: 0.9}, + 212: { + 213: 2.1384573879317776, + "Bungalow A15 ": 1.0324727599312244, + 211: 2.251443981093023, + 92: 1.0089598604503551, + }, + "Bungalow A15 ": {212: 1.0324727599312244}, + 213: { + 93: 0.28460498941515416, + 92: 3.1395859599635108, + 94: 1.731184565550421, + "Bungalow A14 ": 1.0373041983911953, + 212: 2.1384573879317776, + }, + "Bungalow A14 ": {213: 1.0373041983911953}, + 214: {94: 1.7700282483621554, 35: 0.6228964600958975}, + 215: { + 202: 1.8027756377319946, + 216: 1.587765725792064, + "Type 2B 22": 1.3601470508735443, + }, + "Type 2B 22": {215: 1.3601470508735443}, + 216: { + 215: 1.587765725792064, + 217: 1.6099689437998486, + 226: 2.828780656042458, + "Type1 - 18": 1.3103434664239755, + "Type1 - 16": 1.5524174696260025, + }, + "Type1 - 18": {216: 1.3103434664239755}, + "Type1 - 16": {216: 1.5524174696260025}, + 217: { + 216: 1.6099689437998486, + 239: 1.1428035701729322, + 218: 1.4042791745233567, + 227: 2.6700187265260893, + "Proposed Type H1 Building": 6.9112227572261045, + }, + "Proposed Type H1 Building": {226: 3.3575288531895002, 217: 6.9112227572261045}, + 218: { + 217: 1.4042791745233567, + 219: 1.1853269591129698, + "Type1 - 14": 1.0606601717798212, + "Type H1 - 12": 1.5195394038984313, + }, + "Type1 - 14": {218: 1.0606601717798212}, + "Type H1 - 12": {218: 1.5195394038984313}, + 219: {218: 1.1853269591129698, 220: 2.4226019070412703, 228: 3.112073263919087}, + 220: { + 204: 3.430014577228499, + 239: 2.0124611797498106, + 219: 2.4226019070412703, + "Type1 - 13": 0.6363961030678927, + 222: 2.828780656042458, + }, + "Type1 - 13": {220: 0.6363961030678927}, + 221: {222: 1.6324827717314507, "Type H1 - 5": 0.4949747468305833}, + "Type H1 - 5": {221: 0.4949747468305833}, + 222: {221: 1.6324827717314507, 223: 0.8221921916437787, 220: 2.828780656042458}, + 223: { + 224: 1.822361105818493, + 222: 0.8221921916437787, + "Type H1 - 6": 1.5703502793962882, + }, + "Type H1 - 6": {223: 1.5703502793962882}, + 224: {223: 1.822361105818493, 206: 1.0, "Type H1 - 8": 1.216963434126104}, + "Type H1 - 8": {224: 1.216963434126104}, + 225: { + 201: 3.382454729926182, + 226: 1.3914021704740869, + "QIP 2": 1.329661611087573, + 187: 0.6363961030678927, + }, + 226: { + 226: 0.0, + 216: 2.828780656042458, + 227: 2.2228360263411244, + 187: 0.8700574693662483, + "Proposed Type H1 Building": 3.3575288531895002, + }, + 227: {226: 2.2228360263411244, 217: 2.6700187265260893, 228: 1.77792013318934}, + 228: { + 219: 3.112073263919087, + 227: 1.77792013318934, + 230: 2.316246964380094, + 229: 3.4311805548528045, + 188: 2.4226019070412703, + }, + 229: {228: 3.4311805548528045, "Vidya Niwas": 1.2041594578792296}, + "Vidya Niwas": {229: 1.2041594578792296}, + 230: { + 228: 2.316246964380094, + 231: 1.4916433890176297, + "C22, B wing, Vindya": 1.820988742414406, + }, + "C22, B wing, Vindya": {230: 1.820988742414406}, + 231: { + 230: 1.4916433890176297, + "C22, A wing, Sahyadri": 1.420211251891774, + "K-Yantra Lab (CSE Dept.)": 2.5079872407968904, + 232: 1.7977764043395386, + 188: 0.28460498941515416, + }, + "C22, A wing, Sahyadri": {231: 1.420211251891774}, + 232: {244: 1.6595180023127196, 231: 1.7977764043395386, 189: 4.224807687930896}, + 233: {244: 3.1508728949292766, 234: 2.6700187265260893}, + 234: { + "B 23 Aravali": 4.870831551183022, + 233: 2.6700187265260893, + 235: 2.7727242920997393, + }, + 235: {234: 2.7727242920997393, 209: 4.224807687930896}, + 236: { + 237: 2.1384573879317776, + "Bungalow A19 ": 0.970051545022222, + "CSRE D": 1.0807404868885035, + }, + "Bungalow A19 ": {236: 0.970051545022222}, + "CSRE D": {236: 1.0807404868885035}, + 237: { + 236: 2.1384573879317776, + 238: 1.8952572384771413, + "Bungalow A18 ": 0.8, + "CSRE A": 1.7418381095842403, + "CSRE B": 0.8354639429682169, + }, + "Bungalow A18 ": {237: 0.8}, + "CSRE A": {237: 1.7418381095842403}, + "CSRE B": {237: 0.8354639429682169}, + 238: { + 237: 1.8952572384771413, + 211: 2.9025850547399985, + "Bungalow A17 ": 0.806225774829855, + }, + "Bungalow A17 ": {238: 0.806225774829855}, + 239: {203: 3.784309712483903, 220: 2.0124611797498106, 217: 1.1428035701729322}, + 240: {"Type H2 - 18": 0.9492101980067429, 205: 1.822361105818493}, + "Type H2 - 18": {240: 0.9492101980067429}, + 241: { + 242: 0.6363961030678927, + "Type H2 - 19": 0.6324555320336759, + 207: 1.822361105818493, + }, + "Type H2 - 19": {241: 0.6324555320336759}, + 242: {241: 0.6363961030678927, "Type H2 - 20": 1.5}, + "Type H2 - 20": {242: 1.5}, + 243: {"Type H2 - 21": 0.9617692030835673, 208: 1.1627553482998907}, + "Type H2 - 21": {243: 0.9617692030835673}, + 244: { + 233: 3.1508728949292766, + 232: 1.6595180023127196, + "Tulsi C": 1.5990622251807463, + }, + "Tulsi C": {244: 1.5990622251807463}, + 245: { + 246: 4.401136216933078, + "Security Check Point": 3.8860005146680052, + 255: 4.802082881417188, + }, + 246: {245: 4.401136216933078, "Paspoli Gate no. 4 ": 9.244295538330652}, + "Paspoli Gate no. 4 ": {246: 9.244295538330652}, + 247: {192: 5.9605368885696866, 248: 4.271416626834709}, + 248: {247: 4.271416626834709, "MW Quarters 1": 1.8384776310850235}, + "MW Quarters 1": {248: 1.8384776310850235}, + 249: { + 184: 5.692538976590323, + 250: 5.426232578870906, + 251: 2.2671568097509267, + "Kendriya Vidyalay Quarters 1": 1.766635219845908, + }, + "Kendriya Vidyalay Quarters 1": {249: 1.766635219845908, 251: 2.471639132235934}, + 250: { + 249: 5.426232578870906, + "Campus School": 4.745102738613781, + "Kindergarten School": 4.745102738613781, + }, + "Kindergarten School": {250: 4.745102738613781, 253: 4.33232039443068}, + "Campus School": {250: 4.745102738613781, 253: 4.33232039443068}, + 251: { + 249: 2.2671568097509267, + "Kendriya Vidyalay Quarters 1": 2.471639132235934, + 252: 4.804164859785725, + }, + 252: {251: 4.804164859785725, 253: 3.035951251255527}, + 253: { + 252: 3.035951251255527, + 254: 3.4896991274320484, + 160: 12.683256679575637, + "Campus School": 4.33232039443068, + "Type C-7": 0.34058772731852804, + "Kindergarten School": 4.33232039443068, + }, + "Type C-7": {253: 0.34058772731852804}, + 254: {253: 3.4896991274320484, "Shivalik C 23 (187-240)": 7.684009370114016}, + "Shivalik C 23 (187-240)": {254: 7.684009370114016}, + 255: { + 2: 18.03285889702462, + "Security Check Point": 1.4577379737113252, + 245: 4.802082881417188, + }, + "Aromas Canteen": { + 27: 1.6337074401495515, + 28: 2.9740544715926105, + "Hostel 01 Queen of the campus": 3.7380476187443095, + "Domino's outlet": 1.4286357128393508, + }, +} diff --git a/lostandfound/admin.py b/lostandfound/admin.py index a4a15c64..f69d369e 100644 --- a/lostandfound/admin.py +++ b/lostandfound/admin.py @@ -67,7 +67,6 @@ class Meta: "product_image1", "product_image2", "product_image3", - ] self.form = CustomChangeForm diff --git a/lostandfound/models.py b/lostandfound/models.py index 8320f719..34c78edc 100644 --- a/lostandfound/models.py +++ b/lostandfound/models.py @@ -11,8 +11,8 @@ def get_image_path(instance, filename): - random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" # NOTE: Since we not using uploaded by - all the images are stored in the same folder. - return './' + random_str[0:4] + '/'+ random_str + '-' + filename + '.jpg' + random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" # NOTE: Since we not using uploaded by - all the images are stored in the same folder. + return './' + random_str[0:4] + '/' + random_str + '-' + filename + '.jpg' class ProductFound(models.Model): CATEGORY_CHOICES = ( @@ -65,8 +65,6 @@ def save(self, *args, **kwargs): self.claimed = False self.str_id = get_url_friendly(self.name) + "-" + str(self.id)[:8] super().save(*args, **kwargs) - - class Meta: verbose_name = "ProductFound" verbose_name_plural = "ProductsFound" @@ -86,7 +84,7 @@ def update_product_found(sender, instance, **kwargs): This is done to avoid the problem of the correct image url not being available.""" image_urls = "" image_urls += instance.product_image1.url + "," - if instance.product_image2: + if instance.product_image2: image_urls += instance.product_image2.url + "," if instance.product_image3: image_urls += instance.product_image3.url From f43c8b4d296640aadd0e6fba7d18dc690754428c Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 23 Jan 2024 17:23:20 +0530 Subject: [PATCH 32/40] FIX: LINT --- backend/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/settings.py b/backend/settings.py index 8f7504f4..6d69219b 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -74,7 +74,7 @@ EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True -RECIPIENT_LIST = [""] +RECIPIENT_LIST = [''] CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True AUTH_USER = "" From c519b6e964a7f18f9adec63b772055fca7a7fce3 Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 23 Jan 2024 17:30:40 +0530 Subject: [PATCH 33/40] FIX: LINT --- backend/settings.py | 2 +- lostandfound/models.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 6d69219b..8f7504f4 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -74,7 +74,7 @@ EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True -RECIPIENT_LIST = [''] +RECIPIENT_LIST = [""] CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True AUTH_USER = "" diff --git a/lostandfound/models.py b/lostandfound/models.py index 34c78edc..ef6c925a 100644 --- a/lostandfound/models.py +++ b/lostandfound/models.py @@ -11,7 +11,7 @@ def get_image_path(instance, filename): - random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" # NOTE: Since we not using uploaded by - all the images are stored in the same folder. + random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" # NOTE: Since we not using uploaded by - all the images are stored in the same folder. return './' + random_str[0:4] + '/' + random_str + '-' + filename + '.jpg' class ProductFound(models.Model): @@ -65,6 +65,7 @@ def save(self, *args, **kwargs): self.claimed = False self.str_id = get_url_friendly(self.name) + "-" + str(self.id)[:8] super().save(*args, **kwargs) + class Meta: verbose_name = "ProductFound" verbose_name_plural = "ProductsFound" From 42bef41c2ee798414cca3d4cfd07fd1de90618e5 Mon Sep 17 00:00:00 2001 From: Tarus Date: Tue, 23 Jan 2024 17:32:12 +0530 Subject: [PATCH 34/40] FIX: LINT --- lostandfound/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lostandfound/models.py b/lostandfound/models.py index ef6c925a..8df22355 100644 --- a/lostandfound/models.py +++ b/lostandfound/models.py @@ -65,7 +65,7 @@ def save(self, *args, **kwargs): self.claimed = False self.str_id = get_url_friendly(self.name) + "-" + str(self.id)[:8] super().save(*args, **kwargs) - + class Meta: verbose_name = "ProductFound" verbose_name_plural = "ProductsFound" From 9b3b05ed70b8635847f7ab86ec412b3149a90409 Mon Sep 17 00:00:00 2001 From: Tarus Date: Thu, 25 Jan 2024 00:06:46 +0530 Subject: [PATCH 35/40] FIX: LINT --- backend/settings.py | 2 +- bans/models.py | 2 +- bans/views.py | 19 +++++++------------ buyandsell/models.py | 2 +- buyandsell/views.py | 8 ++++---- events/views.py | 7 +++---- locations/views.py | 12 ++++++------ lostandfound/admin.py | 1 + lostandfound/models.py | 3 ++- lostandfound/views.py | 6 ++---- roles/helpers.py | 15 +++++++-------- 11 files changed, 35 insertions(+), 42 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 8f7504f4..74a2791e 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -74,7 +74,7 @@ EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" EMAIL_USE_TLS = True -RECIPIENT_LIST = [""] +RECIPIENT_LIST = ['recipient1@example.com', 'recipient2@example.com'] CORS_ORIGIN_ALLOW_ALL = True CORS_ALLOW_CREDENTIALS = True AUTH_USER = "" diff --git a/bans/models.py b/bans/models.py index 047d2cb8..1bd5c2a9 100644 --- a/bans/models.py +++ b/bans/models.py @@ -1,5 +1,5 @@ -from django.db import models from uuid import uuid4 +from django.db import models from users.models import UserProfile # Create your models here. diff --git a/bans/views.py b/bans/views.py index fea4212d..242a2842 100644 --- a/bans/views.py +++ b/bans/views.py @@ -29,8 +29,7 @@ def list(self, request): queryset = self.get_queryset() serializer = self.get_serializer(queryset, many=True) return Response(serializer.data) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() @login_required_ajax def retrieve(self, request, pk): @@ -38,8 +37,7 @@ def retrieve(self, request, pk): instance = get_object_or_404(self.queryset, pk=pk) serializer = self.get_serializer(instance) return Response(serializer.data) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() @login_required_ajax def create(self, request): @@ -69,11 +67,10 @@ def create(self, request): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() @login_required_ajax - def update(self, request, pk=None, *args, **kwargs): + def update(self, request, *args, pk=None, **kwargs): if user_has_insti_privilege(request.user.profile, "RoleB"): instance = get_object_or_404(self.queryset, pk=pk) serializer = self.get_serializer(instance, data=request.data, partial=True) @@ -84,14 +81,12 @@ def update(self, request, pk=None, *args, **kwargs): return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() @login_required_ajax - def destroy(self, request, pk=None, *args, **kwargs): + def destroy(self, request, *args, pk=None, **kwargs): if user_has_insti_privilege(request.user.profile, "RoleB"): instance = get_object_or_404(self.queryset, pk=pk) instance.delete() return Response(status=status.HTTP_204_NO_CONTENT) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() diff --git a/buyandsell/models.py b/buyandsell/models.py index bf14d4ce..da81c01d 100644 --- a/buyandsell/models.py +++ b/buyandsell/models.py @@ -1,7 +1,7 @@ +from uuid import uuid4 from django.db.models.deletion import SET from django.db.models.fields.related import ForeignKey from django.db import models -from uuid import uuid4 from helpers.misc import get_url_friendly PDT_NAME_MAX_LENGTH = 60 diff --git a/buyandsell/views.py b/buyandsell/views.py index 4d886a30..d5531638 100644 --- a/buyandsell/views.py +++ b/buyandsell/views.py @@ -1,17 +1,17 @@ """Views for BuyAndSell.""" +import json from django.conf import settings from django.core.mail import send_mail from rest_framework.response import Response from rest_framework import viewsets from django.shortcuts import get_object_or_404 +from django.db.models import Q +from django.utils import timezone from roles.helpers import login_required_ajax from buyandsell.models import Ban, Category, ImageURL, Limit, Product, Report from buyandsell.serializers import ProductSerializer from helpers.misc import query_search from users.models import UserProfile -from django.db.models import Q -import json -from django.utils import timezone REPORTS_THRES = 3 @@ -93,7 +93,7 @@ def list(self, request): data = ProductSerializer(queryset, many=True).data return Response(data) - def get_contact_details(userpro: UserProfile): + def get_contact_details(self, userpro: UserProfile): return f""" Phone: {userpro.contact_no} Email: {userpro.email}""" diff --git a/events/views.py b/events/views.py index b7a50b73..212129ff 100644 --- a/events/views.py +++ b/events/views.py @@ -3,6 +3,8 @@ from rest_framework.response import Response from rest_framework import viewsets from django.shortcuts import get_object_or_404 +from django.core.mail import send_mail +from django.conf import settings from events.prioritizer import get_fresh_prioritized_events from events.prioritizer import get_prioritized from events.serializers import EventSerializer @@ -12,8 +14,6 @@ from roles.helpers import login_required_ajax from roles.helpers import forbidden_no_privileges, diff_set from locations.helpers import create_unreusable_locations -from django.core.mail import send_mail -from django.conf import settings EMAIL_HOST_USER = settings.EMAIL_HOST_USER RECIPIENT_LIST = settings.RECIPIENT_LIST @@ -279,5 +279,4 @@ def reject_mail(self, request, pk): event.save() return Response({"success": "Mail rejected and content deleted"}) - else: - return forbidden_no_privileges() + return forbidden_no_privileges() diff --git a/locations/views.py b/locations/views.py index 68648459..1e53ea8b 100644 --- a/locations/views.py +++ b/locations/views.py @@ -1,8 +1,8 @@ """Views for locations app.""" +import sys from rest_framework import viewsets from rest_framework.response import Response -from locations.serializers import LocationSerializer -from locations.models import Location +from rest_framework.decorators import api_view from roles.helpers import insti_permission_required from roles.helpers import login_required_ajax from roles.helpers import user_has_insti_privilege @@ -10,8 +10,8 @@ from roles.helpers import forbidden_no_privileges from django.db.models import Q from django.http import HttpRequest -import sys -from rest_framework.decorators import api_view +from locations.serializers import LocationSerializer +from locations.models import Location from locations.management.commands.mapnav import ( handle_entry, dijkstra, @@ -254,7 +254,7 @@ def checkerrors(request): items["Passed : Coordinates are null"] = [] for x in adj_list: - if type(x) == str: + if isinstance(x, str): try: a = Location.objects.get(name=x) if a.pixel_x is None or a.pixel_y is None: @@ -266,7 +266,7 @@ def checkerrors(request): items["Failed : MultipleObjectsReturned"].append(x) for y in adj_list[x]: - if type(y) == str: + if isinstance(y, str): try: a = Location.objects.get(name=y) if a.pixel_x is None or a.pixel_y is None: diff --git a/lostandfound/admin.py b/lostandfound/admin.py index f69d369e..94b40882 100644 --- a/lostandfound/admin.py +++ b/lostandfound/admin.py @@ -73,6 +73,7 @@ class Meta: return super().change_view(request, object_id, form_url, extra_context) def save_model(self, request, obj, form, change): + # pylint: disable=useless-super-delegation super().save_model(request, obj, form, change) diff --git a/lostandfound/models.py b/lostandfound/models.py index 8df22355..c3a409d0 100644 --- a/lostandfound/models.py +++ b/lostandfound/models.py @@ -11,7 +11,8 @@ def get_image_path(instance, filename): - random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" # NOTE: Since we not using uploaded by - all the images are stored in the same folder. + # NOTE: Since we not using uploaded by - all the images are stored in the same folder. + random_str = "fd9a457a-a5b5-4560-b81e-6654129e5df8" return './' + random_str[0:4] + '/' + random_str + '-' + filename + '.jpg' class ProductFound(models.Model): diff --git a/lostandfound/views.py b/lostandfound/views.py index f6e11a93..c50ccd1c 100644 --- a/lostandfound/views.py +++ b/lostandfound/views.py @@ -3,10 +3,9 @@ from rest_framework.response import Response from rest_framework import viewsets from django.shortcuts import get_object_or_404 -from roles.helpers import login_required_ajax - from django.contrib.auth.decorators import login_required from django.shortcuts import redirect +from roles.helpers import login_required_ajax from lostandfound.models import ProductFound from lostandfound.serializers import ProductFoundSerializer @@ -56,5 +55,4 @@ def claim(self, request, *args, **kwargs): def cso_admin_login(request): if request.user.is_staff: return redirect("CSOAdmin:index") - else: - return Response({"message": "Not a staff member"}, status=401) + return Response({"message": "Not a staff member"}, status=401) diff --git a/roles/helpers.py b/roles/helpers.py index 37500e52..421205bf 100644 --- a/roles/helpers.py +++ b/roles/helpers.py @@ -1,11 +1,11 @@ """Helper functions for implementing roles.""" +import datetime from rest_framework.response import Response +from dateutil.relativedelta import relativedelta from bodies.models import Body from community.models import Community from bans.models import SSOBan from users.models import UserProfile -import datetime -from dateutil.relativedelta import relativedelta def user_is_banned(profile): @@ -18,12 +18,11 @@ def user_is_banned(profile): if ban_duration == "Permanent": return True - else: - duration_month = int(ban_duration.split(" ")[0]) - banned_till = ban_created + relativedelta(months=duration_month) + duration_month = int(ban_duration.split(" ")[0]) + banned_till = ban_created + relativedelta(months=duration_month) - if banned_till > current_time: - return True + if banned_till > current_time: + return True return False except SSOBan.DoesNotExist: return False @@ -109,7 +108,7 @@ def wrapper(*args, **kw): profile = UserProfile.objects.get(user=user) if not user_is_banned(profile): return func(*args, **kw) - if user_is_banned: + else: return Response( {"message": "banned", "detail": "your SSO has been banned/disabled"} ) From 06a618934454889016916a9c180728edf24ef332 Mon Sep 17 00:00:00 2001 From: Amit Date: Wed, 7 Feb 2024 15:07:38 +0530 Subject: [PATCH 36/40] Added the verification body fetching api --- events/urls.py | 4 +++- events/views.py | 18 ++++++++++++++++++ roles/helpers.py | 13 +++++++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/events/urls.py b/events/urls.py index dfd91972..dee9ce4b 100644 --- a/events/urls.py +++ b/events/urls.py @@ -1,6 +1,6 @@ """URLs for events.""" from django.urls import path -from events.views import EventViewSet, EventMailVerificationViewSet +from events.views import EventViewSet, EventMailVerificationViewSet, BodiesWithPrivilegeView urlpatterns = [ path("events", EventViewSet.as_view({"get": "list", "post": "create"})), @@ -18,4 +18,6 @@ EventMailVerificationViewSet.as_view({"post": "reject_mail"}), name="event-reject-mail", ), + path('bodies-with-privilege/', BodiesWithPrivilegeView.as_view({"get": "get_bodies"}), name='bodies-with-privilege'), + ] diff --git a/events/views.py b/events/views.py index 212129ff..b89fea00 100644 --- a/events/views.py +++ b/events/views.py @@ -5,6 +5,7 @@ from django.shortcuts import get_object_or_404 from django.core.mail import send_mail from django.conf import settings +from bodies.serializers import BodySerializerMin from events.prioritizer import get_fresh_prioritized_events from events.prioritizer import get_prioritized from events.serializers import EventSerializer @@ -13,6 +14,7 @@ from roles.helpers import user_has_privilege from roles.helpers import login_required_ajax from roles.helpers import forbidden_no_privileges, diff_set +from roles.helpers import bodies_with_users_having_privilege from locations.helpers import create_unreusable_locations EMAIL_HOST_USER = settings.EMAIL_HOST_USER @@ -280,3 +282,19 @@ def reject_mail(self, request, pk): event.save() return Response({"success": "Mail rejected and content deleted"}) return forbidden_no_privileges() + + +class BodiesWithPrivilegeView(viewsets.ModelViewSet): + @login_required_ajax + def get_bodies(self, request): + """Get bodies with users having a specific privilege.""" + privilege = request.data.get('privilege') + + if not privilege: + return Response({"error": "Please provide a privilege in the request data."}, status=400) + + bodies_with_privilege = bodies_with_users_having_privilege(privilege) + + serialized_bodies = BodySerializerMin(bodies_with_privilege, many=True).data + + return Response(serialized_bodies) \ No newline at end of file diff --git a/roles/helpers.py b/roles/helpers.py index 421205bf..d3cd4815 100644 --- a/roles/helpers.py +++ b/roles/helpers.py @@ -6,6 +6,8 @@ from community.models import Community from bans.models import SSOBan from users.models import UserProfile +from roles.models import BodyRole +from bodies.serializer_min import BodySerializerMin def user_is_banned(profile): @@ -133,3 +135,14 @@ def wrapper(*args, **kw): return wrapper return real_decorator + +def bodies_with_users_having_privilege(privilege): + bodies_with_privilege = set() + all_user_profiles = UserProfile.objects.all() + for user_profile in all_user_profiles: + if any(role.permissions and privilege in role.permissions for role in user_profile.roles.all()): + bodies_with_privilege.update(role.body for role in user_profile.roles.all()) + + serialized_bodies = BodySerializerMin(list(bodies_with_privilege), many=True).data + + return serialized_bodies From 0867cfb6cdef8e1d3a3b5792bf560cdf481b6679 Mon Sep 17 00:00:00 2001 From: Amit Date: Sat, 10 Feb 2024 00:25:23 +0530 Subject: [PATCH 37/40] Updated the bodies-with-privilege API --- events/urls.py | 2 +- events/views.py | 9 ++------- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/events/urls.py b/events/urls.py index dee9ce4b..4a0e8a64 100644 --- a/events/urls.py +++ b/events/urls.py @@ -18,6 +18,6 @@ EventMailVerificationViewSet.as_view({"post": "reject_mail"}), name="event-reject-mail", ), - path('bodies-with-privilege/', BodiesWithPrivilegeView.as_view({"get": "get_bodies"}), name='bodies-with-privilege'), + path("bodies-with-privilege/", BodiesWithPrivilegeView.as_view({"get": "get_bodies"}), name='bodies-with-privilege'), ] diff --git a/events/views.py b/events/views.py index b89fea00..e076aba9 100644 --- a/events/views.py +++ b/events/views.py @@ -284,16 +284,11 @@ def reject_mail(self, request, pk): return forbidden_no_privileges() -class BodiesWithPrivilegeView(viewsets.ModelViewSet): +class BodiesWithPrivilegeView(viewsets.ViewSet): @login_required_ajax def get_bodies(self, request): """Get bodies with users having a specific privilege.""" - privilege = request.data.get('privilege') - - if not privilege: - return Response({"error": "Please provide a privilege in the request data."}, status=400) - - bodies_with_privilege = bodies_with_users_having_privilege(privilege) + bodies_with_privilege = bodies_with_users_having_privilege("VerE") serialized_bodies = BodySerializerMin(bodies_with_privilege, many=True).data From 878859d0393ba414a821f4e7ae7c5478e70a2c24 Mon Sep 17 00:00:00 2001 From: Amit Date: Sun, 18 Feb 2024 22:45:34 +0530 Subject: [PATCH 38/40] Updated the bodies-with-privilege api --- events/views.py | 1 - roles/helpers.py | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/events/views.py b/events/views.py index e076aba9..de425680 100644 --- a/events/views.py +++ b/events/views.py @@ -285,7 +285,6 @@ def reject_mail(self, request, pk): class BodiesWithPrivilegeView(viewsets.ViewSet): - @login_required_ajax def get_bodies(self, request): """Get bodies with users having a specific privilege.""" bodies_with_privilege = bodies_with_users_having_privilege("VerE") diff --git a/roles/helpers.py b/roles/helpers.py index d3cd4815..518c4d72 100644 --- a/roles/helpers.py +++ b/roles/helpers.py @@ -138,10 +138,10 @@ def wrapper(*args, **kw): def bodies_with_users_having_privilege(privilege): bodies_with_privilege = set() - all_user_profiles = UserProfile.objects.all() - for user_profile in all_user_profiles: - if any(role.permissions and privilege in role.permissions for role in user_profile.roles.all()): - bodies_with_privilege.update(role.body for role in user_profile.roles.all()) + body_roles = BodyRole.objects.all() + for role in body_roles: + if (role.permissions and privilege in role.permissions): + bodies_with_privilege.add(role.body) serialized_bodies = BodySerializerMin(list(bodies_with_privilege), many=True).data From 98d0ed3223d520d3062767f36f6d349af3e3e422 Mon Sep 17 00:00:00 2001 From: Amit Date: Sun, 11 Aug 2024 23:04:41 +0530 Subject: [PATCH 39/40] reuired false for email_verified --- events/serializers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/events/serializers.py b/events/serializers.py index 7b59ce1d..5f5cdd47 100644 --- a/events/serializers.py +++ b/events/serializers.py @@ -161,6 +161,7 @@ def get_going(self, obj): queryset=Body.objects.all(), source="verification_bodies", ) + email_verified = serializers.BooleanField(required=False) user_tags = serializers.PrimaryKeyRelatedField( many=True, read_only=False, queryset=UserTag.objects.all(), default=[] From 7f6ec90ba6824e955aa43527dbebd69bd0849aec Mon Sep 17 00:00:00 2001 From: Amit Date: Sun, 11 Aug 2024 23:47:11 +0530 Subject: [PATCH 40/40] Host email for event changed --- backend/settings.py | 1 + events/views.py | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/backend/settings.py b/backend/settings.py index 74a2791e..3195a831 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -73,6 +73,7 @@ EMAIL_PORT = "587" EMAIL_HOST_USER = "" EMAIL_HOST_PASSWORD = "" +EMAIL_EVENT_HOST_USER = "" EMAIL_USE_TLS = True RECIPIENT_LIST = ['recipient1@example.com', 'recipient2@example.com'] CORS_ORIGIN_ALLOW_ALL = True diff --git a/events/views.py b/events/views.py index de425680..b660cd56 100644 --- a/events/views.py +++ b/events/views.py @@ -17,7 +17,7 @@ from roles.helpers import bodies_with_users_having_privilege from locations.helpers import create_unreusable_locations -EMAIL_HOST_USER = settings.EMAIL_HOST_USER +EMAIL_EVENT_HOST_USER = settings.EMAIL_EVENT_HOST_USER RECIPIENT_LIST = settings.RECIPIENT_LIST EMAIL_HOST_PASSWORD = settings.EMAIL_HOST_PASSWORD AUTH_USER = settings.AUTH_USER @@ -244,7 +244,7 @@ def approve_mail(self, request, pk): send_mail( subject, message, - EMAIL_HOST_USER, + EMAIL_EVENT_HOST_USER, recipient_list, fail_silently=False, auth_user=AUTH_USER,