Skip to content

Commit

Permalink
improve process and exceptions
Browse files Browse the repository at this point in the history
  • Loading branch information
claire-peters committed May 21, 2024
1 parent 9e5ef6d commit 203a0cd
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 12 deletions.
2 changes: 1 addition & 1 deletion coldfront/core/project/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ def get_by_natural_key(self, title, pi_username):
DEFAULT_DESCRIPTION = ("We do not have information about your research. "
"Please provide a detailed description of your work.")

title = models.CharField(max_length=255,)
title = models.CharField(max_length=255, unique=True)
pi = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE,)
description = models.TextField(
default=DEFAULT_DESCRIPTION,
Expand Down
19 changes: 15 additions & 4 deletions coldfront/core/project/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -395,22 +395,33 @@ def form_valid(self, form):
sender=self.__class__, project_title=project_obj.title,
)
except Exception as exception:
logger.exception(exception)
messages.error(self.request, str(exception))
return HttpResponseRedirect(reverse('project-create'))
form.instance.status = ProjectStatusChoice.objects.get(name='New')
form.instance.pi = self.request.user
project_obj.save()
try:
project_obj.save()
except Exception as exception:
logger.exception(exception)
messages.error(
self.request,
f"the project could not be created, an error was encountered: {exception}"
)
return HttpResponseRedirect(reverse('project-create'))
form_valid_status = super().form_valid(form)
try:
project_post_create.send(
sender=self.__class__, project_pk=project_obj.pk
sender=self.__class__, project_obj=project_obj
)
except Exception as exception:
logger.exception(exception)
messages.error(
self.request,
"the project was created but an error was encountered in post-creation processes - please contact a system administrator."
f"the project was created but an error was encountered in post-creation processes - please contact a system administrator: {exception}"
)
return HttpResponseRedirect(reverse('project-create'))
return super().form_valid(form)
return form_valid_status

def get_success_url(self):
return reverse('project-detail', kwargs={'pk': self.object.pk})
Expand Down
23 changes: 16 additions & 7 deletions coldfront/plugins/ldap/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -644,22 +644,25 @@ def identify_ad_group(sender, **kwargs):
project_title = kwargs['project_title']
try:
ad_conn = LDAPConn()
group_entry = ad_conn.return_group_by_name(project_title)
members, manager = ad_conn.return_group_members_manager(project_title)
except Exception as e:
raise ValueError(f"ldap connection error: {e}")
return group_entry
try:
ifx_pi = get_user_model().objects.get(username=manager['sAMAccountName'][0])
except Exception as e:
raise ValueError(f"issue retrieving pi's ifxuser entry: {e}")

return ifx_pi

@receiver(project_post_create)
def update_new_project(sender, **kwargs):
"""Update the new project using the AD group information"""
project_pk = kwargs['project_pk']
project = Project.objects.get(pk=project_pk)
project = kwargs['project_obj']
try:
ad_conn = LDAPConn()
members, manager = ad_conn.return_group_members_manager(project.title)
except Exception as e:
raise ValueError(f"ldap connection error: {e}")
project.pi = get_user_model().objects.get(username=manager['sAMAccountName'][0])
# locate field_of_science
if 'department' in manager.keys() and manager['department']:
field_of_science_name=manager['department'][0]
Expand All @@ -671,13 +674,19 @@ def update_new_project(sender, **kwargs):
logger.info('added new field_of_science: %s', field_of_science_name)
else:
raise ValueError(f'no department for AD group {project.title}, will not add unless fixed')

project.field_of_science = field_of_science_obj
project.pi = get_user_model().objects.get(username=manager['sAMAccountName'][0])
project.save()
for member in members:
role_name = "User" if member['sAMAccountName'][0] != manager['sAMAccountName'][0] else "Manager"
try:
user_obj = get_user_model().objects.get(username=member['sAMAccountName'][0])
except get_user_model().DoesNotExist:
continue
ProjectUser.objects.create(
project=project,
user=get_user_model().objects.get(username=member['sAMAccountName'][0]),
user=user_obj,
role=ProjectUserRoleChoice.objects.get(name=role_name),
field_of_science=field_of_science_obj.pk,
status=ProjectUserStatusChoice.objects.get(name='Active'),
)

0 comments on commit 203a0cd

Please sign in to comment.