Skip to content

Commit 016e2d8

Browse files
committed
bumps the mkdocs version
1 parent e19673b commit 016e2d8

File tree

833 files changed

+170495
-1
lines changed

Some content is hidden

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

833 files changed

+170495
-1
lines changed

build/lib/opal/__init__.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
"""
2+
Opal is a package
3+
"""
4+
from opal._version import __version__
5+
6+
__all__ = [
7+
'__version__'
8+
]

build/lib/opal/_version.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
"""
2+
Declare our current version string
3+
"""
4+
__version__ = '0.14.1'

build/lib/opal/admin.py

Lines changed: 194 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,194 @@
1+
"""
2+
Combined admin for Opal models
3+
"""
4+
from django.contrib import admin
5+
from django.contrib.contenttypes.admin import GenericTabularInline
6+
from django.contrib.auth.models import User
7+
from django.contrib.auth.admin import UserAdmin
8+
from django.core.exceptions import ValidationError
9+
from django.db.models import Q
10+
from django.utils.html import format_html
11+
from django import forms
12+
13+
from reversion.admin import VersionAdmin
14+
15+
from opal import models
16+
from opal.core.lookuplists import lookuplists, synonym_exists
17+
from opal.core.subrecords import episode_subrecords, patient_subrecords
18+
from opal.models import Synonym
19+
from opal.models import UserProfile
20+
from opal.utils import _itersubclasses
21+
22+
admin.site.unregister(User)
23+
24+
25+
class UserProfileInline(admin.StackedInline):
26+
model = UserProfile
27+
filter_horizontal = ('roles',)
28+
29+
30+
class FilterInline(admin.StackedInline):
31+
model = models.Filter
32+
33+
34+
class UserProfileAdmin(UserAdmin):
35+
add_fieldsets = (
36+
(None, {
37+
'classes': ('wide',),
38+
'fields': (
39+
'username', 'first_name',
40+
'last_name', 'email',
41+
'password1', 'password2'
42+
)
43+
}),
44+
)
45+
inlines = [UserProfileInline, FilterInline, ]
46+
47+
def get_actions(self, request):
48+
actions = super(UserProfileAdmin, self).get_actions(request)
49+
del actions['delete_selected']
50+
return actions
51+
52+
def has_delete_permission(self, request, obj=None):
53+
if obj is None:
54+
return True
55+
56+
for sub in _itersubclasses(models.TrackedModel):
57+
if not hasattr(sub, 'objects'):
58+
continue # It's another abstract model!
59+
instances = sub.objects.filter(
60+
Q(created_by=obj) | Q(updated_by=obj)
61+
).count()
62+
if instances > 0:
63+
return False
64+
return True
65+
66+
67+
class MyAdmin(VersionAdmin):
68+
pass
69+
70+
71+
class EpisodeAdmin(VersionAdmin):
72+
list_display = [
73+
'patient',
74+
'active',
75+
'start',
76+
'end',
77+
'episode_detail_link'
78+
]
79+
list_filter = ['active', ]
80+
search_fields = [
81+
'patient__demographics__first_name',
82+
'patient__demographics__surname',
83+
'patient__demographics__hospital_number'
84+
]
85+
86+
def episode_detail_url(self, obj):
87+
return "/#/patient/{0}/{1}".format(obj.patient_id, obj.id)
88+
89+
def episode_detail_link(self, obj):
90+
return format_html(
91+
"<a href='{url}'>{url}</a>", url=self.episode_detail_url(obj)
92+
)
93+
94+
def view_on_site(self, obj):
95+
return self.episode_detail_url(obj)
96+
97+
episode_detail_url.short_description = "Episode Detail URL"
98+
99+
100+
class PatientAdmin(VersionAdmin):
101+
list_display = ('__str__', 'patient_detail_link')
102+
103+
search_fields = [
104+
'demographics__first_name',
105+
'demographics__surname',
106+
'demographics__hospital_number'
107+
]
108+
109+
def patient_detail_url(self, obj):
110+
return "/#/patient/{0}".format(obj.id)
111+
112+
def patient_detail_link(self, obj):
113+
return format_html(
114+
"<a href='{url}'>{url}</a>", url=self.patient_detail_url(obj)
115+
)
116+
117+
def view_on_site(self, obj):
118+
return self.patient_detail_url(obj)
119+
120+
patient_detail_url.short_description = "Patient Detail Url"
121+
122+
123+
class EpisodeSubrecordAdmin(VersionAdmin):
124+
search_fields = [
125+
'episode__patient__demographics__first_name',
126+
'episode__patient__demographics__surname',
127+
'episode__patient__demographics__hospital_number',
128+
]
129+
130+
131+
class TaggingAdmin(VersionAdmin):
132+
search_fields = [
133+
'episode__patient__demographics__first_name',
134+
'episode__patient__demographics__surname',
135+
'episode__patient__demographics__hospital_number',
136+
'value'
137+
]
138+
list_display = ['value', 'episode']
139+
140+
141+
class PatientSubrecordAdmin(VersionAdmin):
142+
search_fields = [
143+
'patient__demographics__first_name',
144+
'patient__demographics__surname',
145+
'patient__demographics__hospital_number',
146+
]
147+
148+
149+
class SynonymInline(GenericTabularInline):
150+
model = Synonym
151+
152+
153+
class LookupListForm(forms.ModelForm):
154+
155+
def clean_name(self):
156+
object_class = self.instance.__class__
157+
name = self.cleaned_data["name"]
158+
if synonym_exists(object_class, name):
159+
raise ValidationError(
160+
"A synonym of that name already exists"
161+
)
162+
163+
return self.cleaned_data["name"]
164+
165+
166+
class OptionAdmin(admin.ModelAdmin):
167+
form = LookupListForm
168+
ordering = ['name']
169+
search_fields = ['name']
170+
inlines = [SynonymInline]
171+
172+
173+
for model in lookuplists():
174+
admin.site.register(model, OptionAdmin)
175+
176+
admin.site.register(User, UserProfileAdmin)
177+
admin.site.register(models.Patient, PatientAdmin)
178+
admin.site.register(models.Episode, EpisodeAdmin)
179+
admin.site.register(models.Tagging, TaggingAdmin)
180+
181+
182+
for subclass in patient_subrecords():
183+
if not subclass._meta.abstract and not getattr(
184+
subclass, "_no_admin", False):
185+
admin.site.register(subclass, PatientSubrecordAdmin)
186+
187+
for subclass in episode_subrecords():
188+
if not subclass._meta.abstract and not getattr(
189+
subclass, "_no_admin", False):
190+
admin.site.register(subclass, EpisodeSubrecordAdmin)
191+
192+
admin.site.register(models.ContactNumber, MyAdmin)
193+
admin.site.register(models.Role, MyAdmin)
194+
admin.site.register(models.Macro, MyAdmin)
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"""
2+
Context Processors for Opal
3+
"""
4+
from django.conf import settings as s
5+
from django.utils.functional import SimpleLazyObject
6+
7+
from opal.core.subrecords import subrecords as subrecords_iterator
8+
9+
10+
class ModelContextProcessor(object):
11+
def __init__(self):
12+
for i in subrecords_iterator():
13+
setattr(self, i.__name__, i)
14+
15+
16+
def settings(request):
17+
"""
18+
Put all settings in locals() for our templte context.
19+
"""
20+
return {x: getattr(s, x) for x in dir(s)}
21+
22+
23+
def models(request):
24+
return {
25+
"models": SimpleLazyObject(ModelContextProcessor)
26+
}

build/lib/opal/core/__init__.py

Whitespace-only changes.

0 commit comments

Comments
 (0)