django-restit 4.1.34__tar.gz → 4.1.40__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_restit-4.1.34 → django_restit-4.1.40}/PKG-INFO +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/group.py +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/member.py +13 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/membership.py +15 -2
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/plain/invite.html +4 -2
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/simple/invite.html +4 -3
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/models.py +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/models.py +11 -2
- {django_restit-4.1.34 → django_restit-4.1.40}/pyproject.toml +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/__init__.py +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/helpers.py +39 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/mail.py +1 -1
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/models/base.py +53 -29
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/csv.py +29 -25
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/legacy.py +1 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/LICENSE.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/fcm/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0003_member_phone_number.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0004_group_modified_alter_group_created.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0005_member_auth_code_expires.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0006_member_security_token.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0007_authtoken_signature_authsession.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0008_memberdevice_memberdevicemetadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0009_alter_member_phone_number.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0010_delete_authtoken.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0011_authtoken.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0012_settings_settingsmetadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0013_memberdevice_ip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/device.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/feeds.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/legacy.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/notify.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/session.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/models/settings.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/oauth/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/oauth/google.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/auth.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/device.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/group.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/member.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/notify.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/oauth.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/rpc/settings.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/settings.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/base.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/invite.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/plain/reset_code.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/reset_code.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/account/templates/email/simple/reset_code.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/README +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/decorators.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/middleware.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/models.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/auditlog/urls.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/handlers.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/migrations/0002_alter_message_cc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/migrations/0003_attachment_content_type.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/migrations/0004_mailtemplate.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/models/bounce.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/models/complaint.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/models/message.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/models/template.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/utils/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/utils/parsing.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/utils/render.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/inbox/utils/sending.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0002_event_component_event_component_id.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0003_rule_action.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0004_serverossecalert_ssh_sig_alter_rulecheck_parent.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0005_incident_component_alter_incident_state.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0006_delete_eventmetadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0007_event_metadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0008_incident_action_sent_incident_hostname_and_more.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/0009_incident_reporter_ip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/models/event.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/models/incident.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/models/ossec.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/models/rules.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/parsers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/parsers/ossec.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/templates/email/incident_change.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/templates/email/incident_new.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/templates/email/incident_plain.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/incident/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/geolocate.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/migrations/0002_geoip_subnet_alter_geoip_ip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/address.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/ip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/legacy.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/location.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/models/track.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/abstractapi.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/extremeip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/geoplugin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/ipapi.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/ipinfo.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/iplookup/restit.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/location/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/location/google.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/timezones/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/timezones/google.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/providers/zillow.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/rpc/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/rpc/ip.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/rpc/location.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/location/rpc/track.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/cvutil/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/cvutil/contours.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/cvutil/images.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/cvutil/misc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/cvutil/text.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/fixtures/initial_data.json +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/fixtures/medialib.json +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/fixtures/medialib_test_fixture.json +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/forms.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/ocr.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/pdf.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/qrcode.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/anigif.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/ffmpeg.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/gifsicle.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/hls.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/mp4box.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/rtmp/Makefile +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/rtmp/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/rtmp/rtmp.i +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/rtmpdump.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/rtmpsink.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/video_getinfo.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/engines/websnap.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/exceptions.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/akamai.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/animated_thumbnail.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/ffmpeg.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/flv.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/hls.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/image_transcode.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/image_validate.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/mp4.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/video_still.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/video_validate.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/websnap.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/presets/youtube.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/render_utils.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/render/schedule.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/rpc/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/rpc/legacy.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/rpc/media.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/rpc/tools.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/scripts/init_config +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/css/base_medialibui.css +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/css/base_widgets.css +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/css/jquery.jcrop.css +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/arrow-down-white.png +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/bg-body.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/cancel.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/icon-generic.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/icon-image.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/icon-media.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/icon-zip.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/loading.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/noimage.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/render_err.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/rendering.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/star_off.png +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/star_on.png +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/img/unknown.gif +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/caman.full.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/hammer.min.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/jquery.Jcrop.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/jquery.hammer.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/load-image.min.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/swiper.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/tinymce/plugins/medialib/editor_plugin.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/tinymce/plugins/medialib/editor_plugin_src.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/tinymce/plugins/medialib/js/dialog.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/static/lib/tinymce/plugins/medialib/medialib.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/channel.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/discovery.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/errors.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/http.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/mimeparse.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/model.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/sample_tools.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/apiclient/schema.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/filestore.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/httplib2/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/httplib2/cacerts.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/httplib2/iri2uri.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/httplib2/socks.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/httpstore.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/nullstore.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/anyjson.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/appengine.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/client.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/clientsecrets.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/crypt.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/django_orm.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/gce.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/keyring_storage.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/locked_file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/multistore_file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/old_run.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/tools.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/util.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/oauth2client/xsrfutil.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/rtmpstore.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/s3store.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/uritemplate/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/stores/youtubestore.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/base.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/instances.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/items.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/library.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_error.subject +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_error.to +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_error.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_ready.subject +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_ready.to +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_ready.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_render_error.subject +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_render_error.to +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_render_error.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_validate_error.subject +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_validate_error.to +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/notify_validate_error.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/smil +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/test.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/templates/medialib/testpicker.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/tests.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/urls.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/utils.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/views.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/channel.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/discovery.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/errors.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/http.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/mimeparse.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/model.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/sample_tools.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/apiclient/schema.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/httplib2/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/httplib2/cacerts.txt +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/httplib2/iri2uri.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/httplib2/socks.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/anyjson.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/appengine.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/client.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/clientsecrets.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/crypt.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/django_orm.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/gce.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/keyring_storage.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/locked_file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/multistore_file.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/old_run.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/tools.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/util.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/oauth2client/xsrfutil.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/upload.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/medialib/youtube/uritemplate/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/client.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/eod.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/examples/eod_example.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/delete_gauge.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/delete_metric.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/fix_redis_metrics_keys.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/generate_test_metrics.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/redis_metrics_send_mail.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/reset_weekly_metrics.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/management/commands/system_metric.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/0002_metrics_k11_metrics_k12_metrics_k13_metrics_k14_and_more.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/0003_metrics_expires.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/0004_eodmetrics.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/0005_alter_metrics_v1_alter_metrics_v10_alter_metrics_v11_and_more.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/providers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/providers/aws.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/settings.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/metrics/utils.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/models.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/rpc/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/rpc/githooks.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/rpc/legacy.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/rpc/products.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/static/js/models_pushit.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/pushit/utils.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/.gitignore +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/RemoteEvents.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/arc4.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/cache.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/crypto/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/crypto/aes.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/crypto/privpub.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/crypto/util.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/datem.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/decorators.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/encryption.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/errors.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/extra/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/extra/json_metadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/fields.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/forms.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/joke.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/jwtoken.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/log.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/mailman.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/management/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/management/commands/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/management/commands/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/cors.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/db_router.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/jwt.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/request.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/session.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/middleware/session_store.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/models/cacher.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/models/metadata.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/net.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/regexes.yaml +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/requestex.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/search.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/collection.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/excel.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/json.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/model.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/profiler.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/response.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/serializers/util.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/settings_helper.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/ssl_check.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/static/lib/jquery.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/static/rest/app.css +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/static/rest/app.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/static/rest/rest.js +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/static/rest/rest.scss +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/templates/email/error.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/templates/email/error.subject +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/templates/rest_docs.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/templates/rest_html.html +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/ua.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/uberdict.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/url_docs.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/urls.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/rest/views.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/.gitignore +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/models.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/tests.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/sessionlog/views.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/models.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/email.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/http.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/s3.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/sftp.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/transports/sms.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/taskqueue/worker.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/admin.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/decorators.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/models.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/phone_util.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/telephony/rpc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/migrations/0001_initial.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/migrations/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/models/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/models/faq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/models/page.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/models/revision.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/periodic.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/highlight.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/math.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/media.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/meta.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/task_list.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/renderers/mistune/toc.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/rpc/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/rpc/wiki.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/wiki/tq.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/README.md +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/client.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/connection.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/exceptions.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/redis.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/servers/__init__.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/servers/base.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/servers/django.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/servers/uwsgi.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/settings.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/utf8validator.py +0 -0
- {django_restit-4.1.34 → django_restit-4.1.40}/ws4redis/websocket.py +0 -0
@@ -136,7 +136,7 @@ class Group(models.Model, RestModel, MetaDataModel):
|
|
136
136
|
return self.restGet(request)
|
137
137
|
return restPermissionDenied(request)
|
138
138
|
|
139
|
-
def onRestCanSave(self, request):
|
139
|
+
def onRestCanSave(self, request=None, data=None, extended=None):
|
140
140
|
if request.member is None:
|
141
141
|
raise PermissionDeniedException("permission denied for save")
|
142
142
|
if request.member.hasPermission(["manage_groups", "create_groups"]):
|
@@ -505,22 +505,34 @@ class Member(User, RestModel, MetaDataModel):
|
|
505
505
|
return True
|
506
506
|
|
507
507
|
def sendEmail(self, subject, body, attachments=[], do_async=True, template=None, context=None):
|
508
|
+
default_domain = self.getProperty("default_domain", settings.EMAIL_DEFAULT_DOMAIN)
|
509
|
+
from_email = rh.getFromEmailForHost(default_domain)
|
508
510
|
NotificationRecord = RestModel.getModel("account", "NotificationRecord")
|
509
511
|
NotificationRecord.notify(
|
510
512
|
[self], subject=subject, message=body,
|
511
513
|
template=template, context=context,
|
514
|
+
from_email=from_email,
|
512
515
|
email_only=True, attachments=attachments)
|
513
516
|
|
514
517
|
def sendInvite(self, subject, group=None, url=None, msg=None, **kwargs):
|
518
|
+
if url is None:
|
519
|
+
url = settings.DEFAULT_LOGIN_URL
|
515
520
|
if url[:4] != "http":
|
516
521
|
url = f"https://{url}"
|
522
|
+
from_domain = rh.parseHostName(url, True)
|
523
|
+
from_email = rh.getFromEmailForHost(from_domain)
|
524
|
+
self.member.setProperty("default_domain", from_domain)
|
525
|
+
self.member.setProperty("default_from_email", from_email)
|
517
526
|
context = rh.getContext(
|
518
527
|
self.getActiveRequest(),
|
519
528
|
member=self,
|
520
529
|
group=group,
|
521
530
|
url=url,
|
522
531
|
msg=msg, **kwargs)
|
523
|
-
rest_mail.send(
|
532
|
+
rest_mail.send(
|
533
|
+
self.email, subject, from_email=from_email,
|
534
|
+
template=settings.get("EMAIL_TEMPLATE_INVITE", "email/invite.html"),
|
535
|
+
context=context)
|
524
536
|
|
525
537
|
def getActiveSessions(self):
|
526
538
|
return SessionLog.objects.filter(user__id=self.pk, is_closed=False)
|
@@ -81,10 +81,17 @@ class Membership(models.Model, RestModel, MetaDataModel):
|
|
81
81
|
if value == "resend_invite":
|
82
82
|
self.sendInvite(self.getActiveRequest())
|
83
83
|
|
84
|
-
def sendInvite(self, request=None, url=None, subject=None):
|
84
|
+
def sendInvite(self, request=None, url=None, subject=None, site_logo=None, company_name=None):
|
85
85
|
if request:
|
86
|
+
powered_by = request.DATA.get("powered_by", True)
|
86
87
|
subject = request.DATA.get("invite_subject")
|
87
88
|
url = request.DATA.get("invite_url")
|
89
|
+
site_logo = request.DATA.get("site_logo", settings.SITE_LOGO)
|
90
|
+
company_name = request.DATA.get("company_name", settings.COMPANY_NAME)
|
91
|
+
else:
|
92
|
+
powered_by = True
|
93
|
+
site_logo = settings.SITE_LOGO
|
94
|
+
company_name = settings.COMPANY_NAME
|
88
95
|
if url is None:
|
89
96
|
raise RestValidationError("requires url", -1)
|
90
97
|
if "?" not in url:
|
@@ -99,7 +106,13 @@ class Membership(models.Model, RestModel, MetaDataModel):
|
|
99
106
|
self.member.generateAuthCode(expires=expires)
|
100
107
|
auth_token = objict(username=self.member.username, auth_token=self.member.auth_code)
|
101
108
|
url = "{}&auth_code={}".format(url, auth_token.toBase64())
|
102
|
-
self.member.sendInvite(
|
109
|
+
self.member.sendInvite(
|
110
|
+
subject, self.group, url=url,
|
111
|
+
msg=request.DATA.get("invite_msg", None),
|
112
|
+
POWERED_BY=powered_by,
|
113
|
+
SITE_LOGO=site_logo,
|
114
|
+
COMPANY_NAME=company_name,
|
115
|
+
btn_label=btn_label)
|
103
116
|
|
104
117
|
def set_state(self, value):
|
105
118
|
if self.state != value:
|
@@ -186,7 +186,7 @@
|
|
186
186
|
<tr>
|
187
187
|
<td align="center" style="font-size:0px;padding:8px 0;word-break:break-word;">
|
188
188
|
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:30px;font-weight:300;line-height:30px;text-align:center;color:#000000;">
|
189
|
-
{{
|
189
|
+
{{COMPANY_NAME}}</div>
|
190
190
|
|
191
191
|
</td>
|
192
192
|
</tr>
|
@@ -209,7 +209,7 @@
|
|
209
209
|
</tr>
|
210
210
|
<tr>
|
211
211
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
212
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:20px;font-weight:300;line-height:30px;text-align:left;color:#000000;">You have been invited to join "<a href="{{url}}" style="color: #2e58ff; text-decoration: none; font-weight: 400;">{{group.name}}</a>" on the {{
|
212
|
+
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:20px;font-weight:300;line-height:30px;text-align:left;color:#000000;">You have been invited to join "<a href="{{url}}" style="color: #2e58ff; text-decoration: none; font-weight: 400;">{{group.name}}</a>" on the {{COMPANY_NAME}} portal.</div>
|
213
213
|
</td>
|
214
214
|
</tr>
|
215
215
|
{% if msg %}
|
@@ -284,6 +284,7 @@
|
|
284
284
|
<![endif]-->
|
285
285
|
<div class="mj-column-per-100 mj-outlook-group-fix" style="font-size:0px;text-align:left;direction:ltr;display:inline-block;vertical-align:top;width:100%;">
|
286
286
|
<table border="0" cellpadding="0" cellspacing="0" role="presentation" style="vertical-align:top;" width="100%">
|
287
|
+
{% if POWERED_BY %}
|
287
288
|
<tr>
|
288
289
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
289
290
|
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
|
@@ -291,6 +292,7 @@
|
|
291
292
|
</div>
|
292
293
|
</td>
|
293
294
|
</tr>
|
295
|
+
{% endif %}
|
294
296
|
<tr>
|
295
297
|
<td align="center" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
296
298
|
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:14px;font-weight:300;line-height:20px;text-align:center;color:#000000;">
|
@@ -186,7 +186,7 @@
|
|
186
186
|
<tr>
|
187
187
|
<td align="center" style="font-size:0px;padding:8px 0;word-break:break-word;">
|
188
188
|
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:30px;font-weight:300;line-height:30px;text-align:center;color:#000000;">
|
189
|
-
{{
|
189
|
+
{{COMPANY_NAME}}</div>
|
190
190
|
|
191
191
|
</td>
|
192
192
|
</tr>
|
@@ -209,7 +209,7 @@
|
|
209
209
|
</tr>
|
210
210
|
<tr>
|
211
211
|
<td align="left" style="font-size:0px;padding:10px 25px;word-break:break-word;">
|
212
|
-
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:20px;font-weight:300;line-height:30px;text-align:left;color:#000000;">You have been invited to join "<a href="{{url}}" style="color: #2e58ff; text-decoration: none; font-weight: 400;">{{group.name}}</a>" on the {{
|
212
|
+
<div style="font-family:Roboto, Helvetica, Arial, sans-serif;font-size:20px;font-weight:300;line-height:30px;text-align:left;color:#000000;">You have been invited to join "<a href="{{url}}" style="color: #2e58ff; text-decoration: none; font-weight: 400;">{{group.name}}</a>" on the {{COMPANY_NAME}} portal.</div>
|
213
213
|
</td>
|
214
214
|
</tr>
|
215
215
|
{% if msg %}
|
@@ -360,4 +360,5 @@
|
|
360
360
|
</div>
|
361
361
|
</body>
|
362
362
|
|
363
|
-
</html>
|
363
|
+
</html>
|
364
|
+
|
@@ -409,7 +409,7 @@ class MediaItem(models.Model, RestModel, MetaDataModel):
|
|
409
409
|
super(MediaItem, self).__init__(*args, **kwargs)
|
410
410
|
self.old_state = self.state
|
411
411
|
|
412
|
-
def onRestCanSave(self, request):
|
412
|
+
def onRestCanSave(self, request=None, data=None, extended=None):
|
413
413
|
# must throw an exception if cannot save
|
414
414
|
return True
|
415
415
|
|
@@ -271,9 +271,18 @@ def generate_uuid(slug, group, slug_append=None):
|
|
271
271
|
|
272
272
|
class Metrics(models.Model, rm.RestModel):
|
273
273
|
class RestMeta:
|
274
|
+
QUERY_FIELDS = ["group__kind", "all_fields"]
|
274
275
|
GRAPHS = {
|
275
|
-
"
|
276
|
-
"
|
276
|
+
"detailed": {
|
277
|
+
"fields": [
|
278
|
+
"id", "created", "start",
|
279
|
+
"granularity", "uuid",
|
280
|
+
"slug"
|
281
|
+
],
|
282
|
+
"extra": [("getMetrics", "metrics")],
|
283
|
+
"graphs": {
|
284
|
+
"group": "basic"
|
285
|
+
}
|
277
286
|
}
|
278
287
|
}
|
279
288
|
|
@@ -15,6 +15,9 @@ from .datem import *
|
|
15
15
|
from .log import getLogger
|
16
16
|
import getpass
|
17
17
|
|
18
|
+
from urllib.parse import urlparse
|
19
|
+
|
20
|
+
|
18
21
|
try:
|
19
22
|
from fuzzywuzzy import fuzz
|
20
23
|
except:
|
@@ -121,6 +124,17 @@ def log_error(*args):
|
|
121
124
|
getLoggerByRequest(request).error(*extra, *args)
|
122
125
|
|
123
126
|
|
127
|
+
def log_stack(*args):
|
128
|
+
request = getActiveRequest()
|
129
|
+
import inspect
|
130
|
+
extra = []
|
131
|
+
for frame in inspect.stack():
|
132
|
+
file, line, func = frame[1:4]
|
133
|
+
extra.append(f"{file}, line {line} in function {func}")
|
134
|
+
ERROR_LOGGER.error(*extra, *args)
|
135
|
+
getLoggerByRequest(request).error(*extra, *args)
|
136
|
+
|
137
|
+
|
124
138
|
def setLogModel(self, component, pk):
|
125
139
|
# this method allows for updating the component to associate a log with
|
126
140
|
if not pk or (self._log_pk == pk):
|
@@ -261,6 +275,30 @@ def getRemoteIP(request):
|
|
261
275
|
ip = request.META.get('REMOTE_ADDR')
|
262
276
|
return ip
|
263
277
|
|
278
|
+
|
279
|
+
def parseHostName(url, root=False):
|
280
|
+
if url.startswith("http"):
|
281
|
+
parsed_url = urlparse(url)
|
282
|
+
hname = parsed_url.netloc
|
283
|
+
else:
|
284
|
+
hname = url
|
285
|
+
if root and hname.count('.') > 1:
|
286
|
+
return hname[hname.find(".")+1:]
|
287
|
+
return hname
|
288
|
+
|
289
|
+
|
290
|
+
def getFromEmailForHost(host):
|
291
|
+
email_domain = settings.EMAIL_DEFAULT_DOMAIN
|
292
|
+
from_label = settings.EMAIL_FROM_LABEL
|
293
|
+
if settings.EMAIL_SETTINGS:
|
294
|
+
hostname = parseHostName(host, True)
|
295
|
+
info = settings.EMAIL_SETTINGS.get(hostname, None)
|
296
|
+
if info is not None:
|
297
|
+
email_domain = info.get("email_domain", email_domain)
|
298
|
+
from_label = info.get("from_label", from_label)
|
299
|
+
return f"{from_label} <noreply@{email_domain}>"
|
300
|
+
|
301
|
+
|
264
302
|
def getUserAgent(request):
|
265
303
|
# Some mobile browsers put the User-Agent in a HTTP-X header
|
266
304
|
return request.META.get('HTTP_X_OPERAMINI_PHONE_UA') or \
|
@@ -443,7 +481,7 @@ def getContext(request, *args, **kwargs):
|
|
443
481
|
c["protocol"] = getProtocol(request)
|
444
482
|
c["request"] = request
|
445
483
|
|
446
|
-
for k, v in
|
484
|
+
for k, v in kwargs.items():
|
447
485
|
c[k] = v
|
448
486
|
return c
|
449
487
|
|
@@ -50,7 +50,7 @@ def send(to, subject, body=None, attachments=[],
|
|
50
50
|
html = renderBody(html, template, context)
|
51
51
|
|
52
52
|
msg = createMultiPartMessage(
|
53
|
-
|
53
|
+
from_email, to, subject,
|
54
54
|
text=text, html=html, attachments=attachments,
|
55
55
|
replyto=replyto)
|
56
56
|
|
@@ -418,7 +418,7 @@ class RestModel(object):
|
|
418
418
|
obj = new_obj
|
419
419
|
if using is None:
|
420
420
|
using = self.restGetModelDB()
|
421
|
-
obj.
|
421
|
+
obj.checkPermsAndSave(None, value, using=using)
|
422
422
|
# rh.log_print("{} vs {}".format(self._state.db, obj._state.db))
|
423
423
|
# rh.log_print("saving FK to {} ({}.{}) - {}".format(fieldname, using, obj.pk, type(obj)), value)
|
424
424
|
setattr(self, fieldname, obj)
|
@@ -468,7 +468,7 @@ class RestModel(object):
|
|
468
468
|
def saveFromRequest(self, request, **kwargs):
|
469
469
|
if "files" not in kwargs:
|
470
470
|
kwargs["files"] = request.FILES
|
471
|
-
return self.
|
471
|
+
return self.checkPermsAndSave(request, request.DATA, **kwargs)
|
472
472
|
|
473
473
|
def hasFieldChanged(self, fieldname):
|
474
474
|
if not hasattr(self, "_changed__"):
|
@@ -489,17 +489,20 @@ class RestModel(object):
|
|
489
489
|
else:
|
490
490
|
self._changed__[fieldname] = old_value
|
491
491
|
|
492
|
-
def
|
492
|
+
def checkPermsAndSave(self, request, data, files=None, **kwargs):
|
493
493
|
can_save = getattr(self.RestMeta, "CAN_SAVE", True)
|
494
494
|
if not can_save:
|
495
|
-
|
496
|
-
save_media_files = getattr(self.RestMeta, "SAVE_MEDIA_FILES", False) or getattr(self.RestMeta, "SAVE_MEDIA_FILES_BY_NAME", False)
|
495
|
+
raise re.PermissionDeniedException("saving not allowed via rest for this model.")
|
497
496
|
# check check for save permissions
|
498
497
|
if request is None:
|
499
498
|
request = RestModel.getActiveRequest()
|
500
499
|
if request is None:
|
501
500
|
request = objict(member=None, FILES=[], DATA=objict(), is_authenticated=False, is_local=True)
|
502
|
-
self.onRestCanSave(request)
|
501
|
+
self.onRestCanSave(request, data, kwargs)
|
502
|
+
return self.saveFromDict(request, data, files=None, **kwargs)
|
503
|
+
|
504
|
+
def saveFromDict(self, request, data, files=None, **kwargs):
|
505
|
+
save_media_files = getattr(self.RestMeta, "SAVE_MEDIA_FILES", False) or getattr(self.RestMeta, "SAVE_MEDIA_FILES_BY_NAME", False)
|
503
506
|
is_new = self.id is None
|
504
507
|
has_fields = hasattr(self.RestMeta, "SAVE_FIELDS") and len(self.RestMeta.SAVE_FIELDS)
|
505
508
|
has_no_fields = hasattr(self.RestMeta, "NO_SAVE_FIELDS") and len(self.RestMeta.NO_SAVE_FIELDS)
|
@@ -516,9 +519,10 @@ class RestModel(object):
|
|
516
519
|
else:
|
517
520
|
m_field = field
|
518
521
|
req_field = field
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
+
if request is not None:
|
523
|
+
req_value = getattr(request, req_field, None)
|
524
|
+
if req_value is not None:
|
525
|
+
data[m_field] = req_value
|
522
526
|
# rh.log_print(data)
|
523
527
|
self._changed__ = objict()
|
524
528
|
if hasattr(self.RestMeta, "POST_SAVE_FIELDS"):
|
@@ -561,7 +565,7 @@ class RestModel(object):
|
|
561
565
|
if len(deferred):
|
562
566
|
self.save(using=using)
|
563
567
|
|
564
|
-
if len(rfiles) and save_media_files:
|
568
|
+
if rfiles is not None and len(rfiles) and save_media_files:
|
565
569
|
self.restSaveMediaFiles(rfiles)
|
566
570
|
|
567
571
|
# these setters are responsible for saving themselves
|
@@ -575,7 +579,7 @@ class RestModel(object):
|
|
575
579
|
return self
|
576
580
|
|
577
581
|
def restSaveFiles(self, request, files=None):
|
578
|
-
if files is None:
|
582
|
+
if files is None and request is not None:
|
579
583
|
files = request.FILES
|
580
584
|
if not files:
|
581
585
|
return files
|
@@ -728,10 +732,10 @@ class RestModel(object):
|
|
728
732
|
self.on_rest_pre_get(request)
|
729
733
|
return self.restGet(request)
|
730
734
|
|
731
|
-
def onRestCanSave(self, request=None):
|
732
|
-
self.onRestCheckSavePerms(request)
|
735
|
+
def onRestCanSave(self, request=None, data=None, extended=None):
|
736
|
+
self.onRestCheckSavePerms(request, data, extended)
|
733
737
|
|
734
|
-
def onRestCheckSavePerms(self, request=None):
|
738
|
+
def onRestCheckSavePerms(self, request=None, data=None, extended=None):
|
735
739
|
if request is None:
|
736
740
|
request = self.getActiveRequest()
|
737
741
|
if request is None:
|
@@ -739,7 +743,7 @@ class RestModel(object):
|
|
739
743
|
if getattr(request, "is_local", False):
|
740
744
|
return True
|
741
745
|
perms = getattr(self.RestMeta, "SAVE_PERMS", getattr(self.RestMeta, "VIEW_PERMS", None))
|
742
|
-
if self.
|
746
|
+
if self.id is None:
|
743
747
|
perms = getattr(self.RestMeta, "CREATE_PERMS", perms)
|
744
748
|
if perms:
|
745
749
|
if "owner" in perms and self.checkIsOwner(request.member):
|
@@ -747,8 +751,16 @@ class RestModel(object):
|
|
747
751
|
# we need to check if this user has permission
|
748
752
|
group_field = getattr(self.RestMeta, "GROUP_FIELD", "group")
|
749
753
|
# rh.log_error(F"group field={group_field}")
|
750
|
-
if self.
|
751
|
-
group =
|
754
|
+
if self.id is None:
|
755
|
+
group = None
|
756
|
+
if extended is not None:
|
757
|
+
group = extended.get(group_field, None)
|
758
|
+
if group is None:
|
759
|
+
if data is not None:
|
760
|
+
group = data.get(group_field, None)
|
761
|
+
if group is None:
|
762
|
+
if request is not None:
|
763
|
+
group = request.DATA.get(group_field, None)
|
752
764
|
elif "__" in group_field and hasattr(self, "group"):
|
753
765
|
group = self.group
|
754
766
|
elif "__" in group_field:
|
@@ -762,13 +774,13 @@ class RestModel(object):
|
|
762
774
|
group = getattr(self, group_field, None)
|
763
775
|
status, error, code = rh.requestHasPerms(request, perms, group)
|
764
776
|
if not status:
|
765
|
-
if self.
|
777
|
+
if self.id is None and code == 402:
|
766
778
|
code = 435
|
767
|
-
|
779
|
+
rh.log_error(F"onRestCheckSavePerms: {self.__class__.__name__} {request.member} {group} permission denied: status={status}, error={error}, code={code}", perms)
|
768
780
|
raise re.PermissionDeniedException(error, code)
|
769
781
|
|
770
782
|
def on_rest_post(self, request):
|
771
|
-
self.
|
783
|
+
self.checkPermsAndSave(request, request.DATA)
|
772
784
|
status_only = request.DATA.get("status_only", False, field_type=bool)
|
773
785
|
if status_only:
|
774
786
|
return self.restStatus(request, True)
|
@@ -784,11 +796,12 @@ class RestModel(object):
|
|
784
796
|
def on_rest_saved(self, request, is_new=False):
|
785
797
|
pass
|
786
798
|
|
787
|
-
def on_rest_delete(self, request):
|
799
|
+
def on_rest_delete(self, request, force=False):
|
788
800
|
can_delete = getattr(self.RestMeta, "CAN_DELETE", False)
|
789
801
|
if not can_delete:
|
790
802
|
return self.restStatus(request, False, error="deletion not allowed via rest for this model.")
|
791
|
-
|
803
|
+
if not force:
|
804
|
+
self.onRestCanSave(request)
|
792
805
|
self.on_rest_deleted(request)
|
793
806
|
self.delete()
|
794
807
|
RestModel._setupGraphHelpers()
|
@@ -1121,7 +1134,7 @@ class RestModel(object):
|
|
1121
1134
|
try:
|
1122
1135
|
obj = cls.ro_objects().filter(**item).last()
|
1123
1136
|
if not obj:
|
1124
|
-
obj.
|
1137
|
+
obj.checkPermsAndSave(request, item)
|
1125
1138
|
items.append(obj)
|
1126
1139
|
except Exception:
|
1127
1140
|
pass
|
@@ -1189,17 +1202,17 @@ class RestModel(object):
|
|
1189
1202
|
# check if model id is in post
|
1190
1203
|
request.rest_class = cls
|
1191
1204
|
cls._boundRest()
|
1192
|
-
if
|
1205
|
+
if pk is None and getattr(cls.RestMeta, "PK_FROM_FILTER", False):
|
1193
1206
|
pk_fields = []
|
1194
1207
|
key = cls.get_class_name().lower()
|
1195
|
-
key_p = "{
|
1208
|
+
key_p = f"{key}_id"
|
1196
1209
|
pk_fields.append(key_p)
|
1197
1210
|
# check if the cls has a field with the class name, (causes conflict)
|
1198
1211
|
if not cls.get_field_type(key):
|
1199
1212
|
pk_fields.append(key)
|
1200
1213
|
pk = request.DATA.get(pk_fields, None, field_type=int)
|
1201
1214
|
# generic rest request handler
|
1202
|
-
if pk:
|
1215
|
+
if pk is not None:
|
1203
1216
|
using = getattr(cls.RestMeta, "RO_DATABASE", None)
|
1204
1217
|
if using is None:
|
1205
1218
|
using = getattr(cls.RestMeta, "DATABASE", None)
|
@@ -1207,7 +1220,7 @@ class RestModel(object):
|
|
1207
1220
|
obj = cls.objects.using(using).filter(pk=pk).last()
|
1208
1221
|
else:
|
1209
1222
|
obj = cls.objects.filter(pk=pk).last()
|
1210
|
-
if
|
1223
|
+
if obj is None:
|
1211
1224
|
return GRAPH_HELPERS.views.restNotFound(request)
|
1212
1225
|
if request.method == "GET":
|
1213
1226
|
return obj.on_rest_get(request)
|
@@ -1423,7 +1436,18 @@ class RestModel(object):
|
|
1423
1436
|
"""
|
1424
1437
|
This will look at the query request and allow for basic filtering.
|
1425
1438
|
|
1426
|
-
|
1439
|
+
QUERY_FIELDS_SPECIAL can be used to allow mappings of certain queries:
|
1440
|
+
?group=iso
|
1441
|
+
{
|
1442
|
+
"group": "group__kind"
|
1443
|
+
}
|
1444
|
+
|
1445
|
+
QUERY_FIELDS can be used to restrict what fields can be queried
|
1446
|
+
and add special fields:
|
1447
|
+
|
1448
|
+
?group__kind=iso
|
1449
|
+
# this will allow "group__kind" but also support all other fields
|
1450
|
+
["group__kind", "all_fields"]
|
1427
1451
|
|
1428
1452
|
<field_name>=value
|
1429
1453
|
or
|
@@ -1523,7 +1547,7 @@ class RestModel(object):
|
|
1523
1547
|
value = rh.parseDateTime(value)
|
1524
1548
|
q[key] = value
|
1525
1549
|
if bool(q):
|
1526
|
-
# rh.debug("queryFromRequest", q, request.default_rest_filters)
|
1550
|
+
# rh.debug("queryFromRequest", q, "default_filters:", request.default_rest_filters)
|
1527
1551
|
qset = qset.filter(**q)
|
1528
1552
|
return qset
|
1529
1553
|
|
@@ -5,38 +5,42 @@ import csv
|
|
5
5
|
|
6
6
|
|
7
7
|
def flattenObject(obj, field_names):
|
8
|
-
NOT_FOUND = "-!@#$%^&*()-"
|
9
|
-
|
10
8
|
row = []
|
11
9
|
for f in field_names:
|
12
|
-
d =
|
13
|
-
if
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
10
|
+
d = ""
|
11
|
+
if "__" in f:
|
12
|
+
f = f.replace("__", ".")
|
13
|
+
if "." in f:
|
14
|
+
# we could use obj.getFieldValue
|
15
|
+
keys = f.split('.')
|
16
|
+
f1 = keys[0]
|
17
|
+
f2 = keys[1]
|
18
|
+
if f1 == "metadata" and hasattr(obj, "getProperty"):
|
19
|
+
if len(keys) > 2:
|
20
|
+
d = obj.getProperty(f2, category=keys[2])
|
21
|
+
else:
|
22
|
+
d = obj.getProperty(f2)
|
23
|
+
elif hasattr(obj, "getFieldValue"):
|
24
|
+
d = obj.getFieldValue(f, "t/a")
|
24
25
|
if callable(d):
|
25
26
|
d = d()
|
26
27
|
else:
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if
|
34
|
-
|
35
|
-
d = getattr(d1, f2, "")
|
36
|
-
else:
|
37
|
-
d = ""
|
28
|
+
d1 = getattr(obj, f1, None)
|
29
|
+
if d1 is not None:
|
30
|
+
if not hasattr(d1, f2):
|
31
|
+
if hasattr(d1, "first"):
|
32
|
+
d1 = d1.first()
|
33
|
+
d = getattr(d1, f2, "")
|
34
|
+
if callable(d):
|
35
|
+
d = d()
|
38
36
|
else:
|
37
|
+
d = getattr(obj, f, "n/a")
|
38
|
+
if callable(d):
|
39
|
+
d = d()
|
40
|
+
if d is None:
|
39
41
|
d = "n/a"
|
42
|
+
elif hasattr(d, "pk"):
|
43
|
+
d = d.pk
|
40
44
|
row.append(str(d))
|
41
45
|
return row
|
42
46
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0003_member_phone_number.py
RENAMED
File without changes
|
File without changes
|
{django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0005_member_auth_code_expires.py
RENAMED
File without changes
|
{django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0006_member_security_token.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0009_alter_member_phone_number.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{django_restit-4.1.34 → django_restit-4.1.40}/account/migrations/0012_settings_settingsmetadata.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|