Skip to content
This repository was archived by the owner on Oct 12, 2023. It is now read-only.

Commit e3af628

Browse files
PFWhiteDevMattM
authored andcommitted
Contacts for real (#326)
* Added Contact model for lookups * Changed custom command to work with contacts * Modified form to have the contacts table be the lookup * using guid for tags * I think its working, trying vagrant destroy * fixing the vagrant. closes #315 * Contacts without emails dont get in. Saving projects works and does what we want * about to refactor with q * its a lot faster now * about to refactor push_data * push queue working * fixed user person correlation and user updates * Revert "push queue working" This reverts commit 57ca9c4. * Fixing minor bug * fix unit test * Code review comments * Fixed some performance bugs * contacts made when people change their info * Address code review cleanup * Fixed regression that added everyone to your project * removed contact from registry models * associate isntantiated person with user * take to about you first time
1 parent 3107192 commit e3af628

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+418
-12578
lines changed

.gitignore

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,9 @@ ENV/
9494
.swp
9595

9696
# django fixture tests
97-
fixtures/test*
97+
fixtures/test*
98+
99+
# collectstatic
100+
qipr_approver/static/admin/*
101+
qipr_approver/static/debug_toolbar/*
102+
test_contact.csv

qipr_approver/approver/api/tags.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,6 @@ def get_data(display, model_props, model_name):
5454
for index, item in enumerate(display):
5555
data.append({
5656
'display': display[index],
57-
'tag_prop': model_props[index]['tag'],
5857
'model_name': model_name,
5958
'guid': model_props[index]['guid']
6059
})

qipr_approver/approver/bridge/push_data.py

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,32 @@
99
import approver.models
1010
from approver.constants import registry_endpoints, api_username, bridge_key
1111

12+
def load_api_user():
13+
API_user = None
14+
def get_api_user():
15+
nonlocal API_user
16+
if not API_user:
17+
API_user = User.objects.get(username=api_username)
18+
return API_user
19+
20+
return get_api_user
21+
22+
get_api_user = load_api_user()
23+
1224
def push_model(model):
13-
api_user = User.objects.get(username=api_username)
14-
json_data, req_hash = process_data(model)
15-
response = None
16-
url = '/'.join([registry_endpoints.get('add_model'), req_hash])
17-
try:
18-
response = requests.post(url, data=json_data)
19-
if response.status_code == 200 and not model.is_registered():
20-
model.register()
21-
model.save(api_user)
22-
except requests.exceptions.RequestException as e:
23-
print(e)
24-
return response
25+
if model.last_modified_by_id != 2:
26+
api_user = get_api_user()
27+
json_data, req_hash = process_data(model)
28+
response = None
29+
url = '/'.join([registry_endpoints.get('add_model'), req_hash])
30+
try:
31+
response = requests.post(url, data=json_data)
32+
if response.status_code == 200 and not model.is_registered():
33+
model.register()
34+
model.save(api_user)
35+
except requests.exceptions.RequestException as e:
36+
print(e)
37+
return response
2538

2639
def process_data(model):
2740
"""
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
from approver.custom_commands.load_ascii_mesh import load_ascii_mesh as loadmesh
2-
from approver.custom_commands.load_people import load_people as loadpeople
3-
from approver.custom_commands.load_projects import load_projects as loadprojects
2+
from approver.custom_commands.load_people import load_contacts as loadcontacts
3+
from approver.custom_commands.load_projects import load_projects as loadprojects

qipr_approver/approver/custom_commands/load_people.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import approver.parsers.people_ingest.actions as line_actions
22

3-
def load_people(argv):
3+
def load_contacts(argv):
44
filename = argv[2]
55
stream_parse(filename)
66

qipr_approver/approver/forms/project_form.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from django.utils import timezone
2-
from approver.models import Project, ClinicalArea, ClinicalSetting, Person, BigAim, Descriptor
2+
from approver.models import Project, ClinicalArea, ClinicalSetting, Person, BigAim, Descriptor, Contact
33
from django.contrib.auth.models import User
44
from approver import utils
55

@@ -19,20 +19,20 @@ def __init__(self, project=Project(),is_disabled=False):
1919
'value': project.title or ''}
2020

2121
self.collaborator = {'name': 'collaborator',
22-
'model': 'person',
22+
'model': 'contact',
2323
'placeholder': 'e.g. Alligator, Albert',
2424
'label': 'Type collaborator name, then press "enter" to save',
25-
'filter_field': ';'.join(['email_address','first_name', 'last_name']),
26-
'tag_prop': Person.tag_property_name,
27-
'selected': utils.get_related_property(project, "collaborator", 'email_address')}
25+
'filter_field': ';'.join(['business_email','first_name', 'last_name']),
26+
'tag_prop': Contact.tag_property_name,
27+
'selected': utils.get_related(project, "collaborator")}
2828

2929
self.advisor = {'name': 'advisor',
30-
'model': 'person',
30+
'model': 'contact',
3131
'placeholder': 'e.g. Alligator, Alberta',
3232
'label': 'Type advisor name, then press "enter" to save',
33-
'filter_field': ';'.join(['email_address','first_name', 'last_name']),
34-
'tag_prop': Person.tag_property_name,
35-
'selected': utils.get_related_property(project, "advisor", 'email_address')}
33+
'filter_field': ';'.join(['business_email','first_name', 'last_name']),
34+
'tag_prop': Contact.tag_property_name,
35+
'selected': utils.get_related(project, "advisor")}
3636

3737
self.mesh_keyword = {'name': 'mesh_keyword',
3838
'label': 'Please indicate 5 or more MeSH (Medical Subject Headings) keywords relating to your project. MeSH keywords are a comprehensive controlled vocabulary for the purpose of indexing journal articles and books. Type keyword, then press "enter" to save',

qipr_approver/approver/middleware/approver_shibboleth_middleware.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from approver.models import Person, Address
99
from approver import utils
10+
from approver.workflows.contact_person import add_contact_for_person
1011

1112

1213
class ApproverShibbolethMiddleware(object):
@@ -81,7 +82,7 @@ def update_or_create_person(self, request):
8182
based on the authenticated user. It will add or update values
8283
found in the request META data which are supplied from Shibboleth.
8384
"""
84-
created = False
85+
created = True
8586
defaults={
8687
'first_name':request.META['HTTP_GIVENNAME'],
8788
'last_name':request.META['HTTP_SN'],
@@ -91,15 +92,24 @@ def update_or_create_person(self, request):
9192
'account_expiration_time':utils.get_account_expiration_date(timezone.now()),
9293
}
9394

95+
request.user.first_name = defaults.get('first_name')
96+
request.user.last_name = defaults.get('last_name')
97+
request.user.email = defaults.get('email_address')
98+
9499
try:
95-
person = Person.objects.get(user=request.user)
100+
try:
101+
person = request.user.person
102+
created = False
103+
except:
104+
person = Person.objects.get(email_address=request.user.username)
105+
person.user = request.user
96106
person.account_expiration_time = utils.get_account_expiration_date(timezone.now())
97107
person.save(request.user)
98108
except Person.DoesNotExist:
99109
person = Person(**defaults)
100110
person.user = request.user
101111
person.save(request.user)
102-
created = True
112+
add_contact_for_person(person, request.user)
103113

104114
if not person.business_address.count():
105115
self._add_person_address(request, person)
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.5 on 2017-01-26 15:44
3+
from __future__ import unicode_literals
4+
5+
import approver.utils
6+
from django.conf import settings
7+
from django.db import migrations, models
8+
import django.db.models.deletion
9+
10+
11+
class Migration(migrations.Migration):
12+
13+
dependencies = [
14+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
15+
('approver', '0003_auto_20170124_1432'),
16+
]
17+
18+
operations = [
19+
migrations.CreateModel(
20+
name='Contact',
21+
fields=[
22+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
23+
('created', models.DateTimeField(auto_now_add=True)),
24+
('last_modified', models.DateTimeField(auto_now=True)),
25+
('guid', models.CharField(default=approver.utils.get_guid, editable=False, max_length=32)),
26+
('in_registry', models.BooleanField(default=False)),
27+
('business_email', models.CharField(max_length=100, null=True)),
28+
('business_fax', models.CharField(max_length=20, null=True)),
29+
('business_phone', models.CharField(max_length=50, null=True)),
30+
('display_name', models.CharField(max_length=70)),
31+
('first_name', models.CharField(max_length=30)),
32+
('gatorlink', models.CharField(max_length=50, null=True)),
33+
('last_name', models.CharField(max_length=30)),
34+
('middle_name', models.CharField(max_length=30)),
35+
('name_prefix', models.CharField(max_length=30)),
36+
('name_suffix', models.CharField(max_length=30)),
37+
('working_title', models.CharField(max_length=30)),
38+
('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
39+
('last_modified_by', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL)),
40+
('person', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='approver.Person')),
41+
],
42+
options={
43+
'abstract': False,
44+
},
45+
),
46+
]
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# -*- coding: utf-8 -*-
2+
# Generated by Django 1.10.5 on 2017-02-01 14:56
3+
from __future__ import unicode_literals
4+
5+
from django.db import migrations
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
dependencies = [
11+
('approver', '0004_contact'),
12+
('approver', '0004_project_sent_email_list'),
13+
]
14+
15+
operations = [
16+
]

qipr_approver/approver/models/__init__.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
1+
# Mixin models
2+
from approver.models.provenance import Provenance
3+
from approver.models.tag_models import Tag, TagPrint, TaggedWithName
4+
from approver.models.bridge_models import Registerable
5+
6+
# Main models file
17
from approver.models.models import *
8+
9+
from approver.models.access_log import AccessLog
210
from approver.models.approve_models import *
311
from approver.models.audit_trail_models import AuditTrail
4-
from approver.models.bridge_models import Registerable
5-
from approver.models.provenance import Provenance
12+
from approver.models.contact import Contact
613
from approver.models.mesh_models import *
7-
from approver.models.tag_models import Tag, TagPrint, TaggedWithName
8-
from approver.models.access_log import AccessLog

0 commit comments

Comments
 (0)