Showing preview only (2,094K chars total). Download the full file or copy to clipboard to get everything.
Repository: jet-admin/jet-django
Branch: master
Commit: 9bd4536e02d5
Files: 403
Total size: 1.9 MB
Directory structure:
gitextract_c7mt80bt/
├── .gitignore
├── LICENSE
├── MANIFEST.in
├── README.rst
├── build/
│ └── lib/
│ └── jet_django/
│ ├── __init__.py
│ ├── admin/
│ │ ├── __init__.py
│ │ ├── jet.py
│ │ ├── model_action.py
│ │ └── model_description.py
│ ├── apps.py
│ ├── filters/
│ │ ├── __init__.py
│ │ ├── model.py
│ │ ├── model_aggregate.py
│ │ ├── model_group.py
│ │ ├── view_settings.py
│ │ └── widget.py
│ ├── management/
│ │ └── commands/
│ │ └── register_token.py
│ ├── migrations/
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models/
│ │ ├── dashboard.py
│ │ ├── menu_item.py
│ │ ├── model_description.py
│ │ ├── token.py
│ │ ├── view_settings.py
│ │ └── widget.py
│ ├── pagination.py
│ ├── permissions.py
│ ├── serializers/
│ │ ├── __init__.py
│ │ ├── dashboard.py
│ │ ├── dashboard_set_widgets.py
│ │ ├── menu_settings.py
│ │ ├── model.py
│ │ ├── model_description.py
│ │ ├── model_detail.py
│ │ ├── reorder.py
│ │ ├── sql.py
│ │ ├── view_settings.py
│ │ ├── widget_detail.py
│ │ ├── widget_list.py
│ │ └── widget_update_position.py
│ ├── settings.py
│ ├── urls.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── backend.py
│ │ └── siblings.py
│ └── views/
│ ├── __init__.py
│ ├── dashboard.py
│ ├── menu_settings.py
│ ├── model.py
│ ├── model_description.py
│ ├── register.py
│ ├── sql.py
│ ├── view_settings.py
│ └── widget.py
├── jet_django/
│ ├── __init__.py
│ ├── admin/
│ │ ├── __init__.py
│ │ ├── jet.py
│ │ ├── model_action.py
│ │ └── model_description.py
│ ├── apps.py
│ ├── deps/
│ │ ├── __init__.py
│ │ ├── django_filters/
│ │ │ ├── __init__.py
│ │ │ ├── compat.py
│ │ │ ├── conf.py
│ │ │ ├── constants.py
│ │ │ ├── exceptions.py
│ │ │ ├── fields.py
│ │ │ ├── filters.py
│ │ │ ├── filterset.py
│ │ │ ├── locale/
│ │ │ │ ├── be/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── cs/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── da/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── de/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── el/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── es_AR/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── es_ES/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── fr/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── pl/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── pt_BR/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── ru/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── sk/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ ├── uk/
│ │ │ │ │ └── LC_MESSAGES/
│ │ │ │ │ ├── django.mo
│ │ │ │ │ └── django.po
│ │ │ │ └── zh_CN/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ └── django.po
│ │ │ ├── models.py
│ │ │ ├── rest_framework/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── backends.py
│ │ │ │ ├── filters.py
│ │ │ │ └── filterset.py
│ │ │ ├── utils.py
│ │ │ ├── views.py
│ │ │ └── widgets.py
│ │ └── rest_framework/
│ │ ├── __init__.py
│ │ ├── apps.py
│ │ ├── authentication.py
│ │ ├── authtoken/
│ │ │ ├── __init__.py
│ │ │ ├── admin.py
│ │ │ ├── apps.py
│ │ │ ├── management/
│ │ │ │ ├── __init__.py
│ │ │ │ └── commands/
│ │ │ │ ├── __init__.py
│ │ │ │ └── drf_create_token.py
│ │ │ ├── migrations/
│ │ │ │ ├── 0001_initial.py
│ │ │ │ ├── 0002_auto_20160226_1747.py
│ │ │ │ └── __init__.py
│ │ │ ├── models.py
│ │ │ ├── serializers.py
│ │ │ └── views.py
│ │ ├── checks.py
│ │ ├── compat.py
│ │ ├── decorators.py
│ │ ├── documentation.py
│ │ ├── exceptions.py
│ │ ├── fields.py
│ │ ├── filters.py
│ │ ├── generics.py
│ │ ├── locale/
│ │ │ ├── ach/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ar/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── be/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ca/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ca_ES/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── cs/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── da/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── de/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── el/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── el_GR/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── en/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── en_AU/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── en_CA/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── en_US/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── es/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── et/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── fa/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── fa_IR/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── fi/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── fr/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── fr_CA/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── gl/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── gl_ES/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── he_IL/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── hu/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── id/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── it/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ja/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ko_KR/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── lv/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── mk/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── nb/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── nl/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── nn/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── no/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── pl/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── pt/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── pt_BR/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── pt_PT/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ro/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── ru/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── sk/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── sl/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── sv/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── tr/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── tr_TR/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── uk/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── vi/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── zh_CN/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── zh_Hans/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ ├── zh_Hant/
│ │ │ │ └── LC_MESSAGES/
│ │ │ │ ├── django.mo
│ │ │ │ └── django.po
│ │ │ └── zh_TW/
│ │ │ └── LC_MESSAGES/
│ │ │ ├── django.mo
│ │ │ └── django.po
│ │ ├── metadata.py
│ │ ├── mixins.py
│ │ ├── models.py
│ │ ├── negotiation.py
│ │ ├── pagination.py
│ │ ├── parsers.py
│ │ ├── permissions.py
│ │ ├── relations.py
│ │ ├── renderers.py
│ │ ├── request.py
│ │ ├── response.py
│ │ ├── reverse.py
│ │ ├── routers.py
│ │ ├── schemas/
│ │ │ ├── __init__.py
│ │ │ ├── generators.py
│ │ │ ├── inspectors.py
│ │ │ ├── utils.py
│ │ │ └── views.py
│ │ ├── serializers.py
│ │ ├── settings.py
│ │ ├── status.py
│ │ ├── test.py
│ │ ├── throttling.py
│ │ ├── urlpatterns.py
│ │ ├── urls.py
│ │ ├── utils/
│ │ │ ├── __init__.py
│ │ │ ├── breadcrumbs.py
│ │ │ ├── encoders.py
│ │ │ ├── field_mapping.py
│ │ │ ├── formatting.py
│ │ │ ├── html.py
│ │ │ ├── humanize_datetime.py
│ │ │ ├── json.py
│ │ │ ├── mediatypes.py
│ │ │ ├── model_meta.py
│ │ │ ├── representation.py
│ │ │ ├── serializer_helpers.py
│ │ │ └── urls.py
│ │ ├── validators.py
│ │ ├── versioning.py
│ │ ├── views.py
│ │ └── viewsets.py
│ ├── fields/
│ │ └── raw_file.py
│ ├── filters/
│ │ ├── __init__.py
│ │ ├── geos_geometry.py
│ │ ├── model.py
│ │ ├── model_aggregate.py
│ │ └── model_group.py
│ ├── management/
│ │ └── commands/
│ │ ├── jet_register_token.py
│ │ ├── jet_reset_token.py
│ │ ├── jet_set_token.py
│ │ └── jet_token.py
│ ├── messages.py
│ ├── migrations/
│ │ ├── 0001_initial.py
│ │ ├── 0002_auto_20181014_2002.py
│ │ └── __init__.py
│ ├── mixins/
│ │ ├── cors_api_view.py
│ │ └── method_override.py
│ ├── models/
│ │ └── token.py
│ ├── pagination.py
│ ├── permissions.py
│ ├── serializers/
│ │ ├── __init__.py
│ │ ├── file_upload.py
│ │ ├── message.py
│ │ ├── model.py
│ │ ├── model_detail.py
│ │ ├── reorder.py
│ │ ├── reset_order.py
│ │ └── sql.py
│ ├── settings.py
│ ├── static/
│ │ └── jet_django.deps.rest_framework/
│ │ ├── css/
│ │ │ ├── bootstrap-tweaks.css
│ │ │ ├── default.css
│ │ │ ├── font-awesome-4.0.3.css
│ │ │ └── prettify.css
│ │ ├── docs/
│ │ │ ├── css/
│ │ │ │ ├── base.css
│ │ │ │ └── highlight.css
│ │ │ └── js/
│ │ │ ├── api.js
│ │ │ └── highlight.pack.js
│ │ └── js/
│ │ ├── ajax-form.js
│ │ ├── coreapi-0.1.1.js
│ │ ├── csrf.js
│ │ ├── default.js
│ │ └── prettify-min.js
│ ├── templates/
│ │ ├── jet_django.deps.django_filters/
│ │ │ ├── rest_framework/
│ │ │ │ ├── crispy_form.html
│ │ │ │ └── form.html
│ │ │ └── widgets/
│ │ │ └── multiwidget.html
│ │ └── jet_django.deps.rest_framework/
│ │ ├── admin/
│ │ │ ├── detail.html
│ │ │ ├── dict_value.html
│ │ │ ├── list.html
│ │ │ ├── list_value.html
│ │ │ └── simple_list_value.html
│ │ ├── admin.html
│ │ ├── api.html
│ │ ├── base.html
│ │ ├── docs/
│ │ │ ├── auth/
│ │ │ │ ├── basic.html
│ │ │ │ ├── session.html
│ │ │ │ └── token.html
│ │ │ ├── document.html
│ │ │ ├── error.html
│ │ │ ├── index.html
│ │ │ ├── interact.html
│ │ │ ├── langs/
│ │ │ │ ├── javascript-intro.html
│ │ │ │ ├── javascript.html
│ │ │ │ ├── python-intro.html
│ │ │ │ ├── python.html
│ │ │ │ ├── shell-intro.html
│ │ │ │ └── shell.html
│ │ │ ├── link.html
│ │ │ └── sidebar.html
│ │ ├── filters/
│ │ │ ├── base.html
│ │ │ ├── ordering.html
│ │ │ └── search.html
│ │ ├── horizontal/
│ │ │ ├── checkbox.html
│ │ │ ├── checkbox_multiple.html
│ │ │ ├── dict_field.html
│ │ │ ├── fieldset.html
│ │ │ ├── form.html
│ │ │ ├── input.html
│ │ │ ├── list_field.html
│ │ │ ├── list_fieldset.html
│ │ │ ├── radio.html
│ │ │ ├── select.html
│ │ │ ├── select_multiple.html
│ │ │ └── textarea.html
│ │ ├── inline/
│ │ │ ├── checkbox.html
│ │ │ ├── checkbox_multiple.html
│ │ │ ├── dict_field.html
│ │ │ ├── fieldset.html
│ │ │ ├── form.html
│ │ │ ├── input.html
│ │ │ ├── list_field.html
│ │ │ ├── list_fieldset.html
│ │ │ ├── radio.html
│ │ │ ├── select.html
│ │ │ ├── select_multiple.html
│ │ │ └── textarea.html
│ │ ├── login.html
│ │ ├── login_base.html
│ │ ├── pagination/
│ │ │ ├── numbers.html
│ │ │ └── previous_and_next.html
│ │ ├── raw_data_form.html
│ │ ├── schema.js
│ │ └── vertical/
│ │ ├── checkbox.html
│ │ ├── checkbox_multiple.html
│ │ ├── dict_field.html
│ │ ├── fieldset.html
│ │ ├── form.html
│ │ ├── input.html
│ │ ├── list_field.html
│ │ ├── list_fieldset.html
│ │ ├── radio.html
│ │ ├── select.html
│ │ ├── select_multiple.html
│ │ └── textarea.html
│ ├── templatetags/
│ │ ├── __init__.py
│ │ └── jet_django_deps_rest_framework.py
│ ├── urls.py
│ ├── utils/
│ │ ├── __init__.py
│ │ ├── backend.py
│ │ └── siblings.py
│ └── views/
│ ├── __init__.py
│ ├── exception_handler.py
│ ├── file_upload.py
│ ├── message.py
│ ├── model.py
│ ├── model_description.py
│ ├── register.py
│ ├── root.py
│ └── sql.py
├── manage.py
├── setup.py
└── upload.sh
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
*.pyc
*.DS_Store
*.egg*
/.idea
/dist/
/docs/_build/
================================================
FILE: LICENSE
================================================
================================================
FILE: MANIFEST.in
================================================
include README.rst
include LICENSE
recursive-include jet_django *
================================================
FILE: README.rst
================================================
===================
Jet Bridge (Django)
===================
**Universal admin panel for Django**
.. image:: https://raw.githubusercontent.com/jet-admin/jet-django/master/static/overview.gif
:alt: Preview
:align: center
:target: https://raw.githubusercontent.com/jet-admin/jet-django/master/static/overview.gif
Description
===========
* Jet Admin: https://about.jetadmin.io
* **Live Demo**: https://app.jetadmin.io/demo
* Support: support@jetadmin.io
**Jet** is a SaaS service that automatically generates back office for your Django Application through REST API of **Jet Bridge** package installed to your project.
– **Visual**. Admin interface can be easily changed without need of development with the help of Visual Editor.
– **Secure**. Jet does not access your data: its transferred directly from browser to your application.
– **Customizable**. Flex functions allow you to solve your specific business tasks when standard functionality is not enough.
This is a complete remake of popular `Django Jet <https://github.com/geex-arts/django-jet>`_ admin interface.
Features
========
- **CRUD (create, read, update, delete):**
Create, view, update and delete data. Display it in an easy format, and then search and filter your data.
- **Dashboard:**
Create reports and visualize KPIs. Monitor new data like new orders, comments, etc.
- **Works with any technology:**
The interface is generated automatically based on an analysis of the data and data structure of your applications.
- **Visual editor:**
Customize the admin area to make it easy for any manager to use. Allow managers to modify the interface, configure features, and set up analytics widgets without using any developers — just like WIX, Squarespace….
- **Secure:**
Your data is safe. We do not have access to your information. We simply plug your information in to an easy-to-use interface for you to interact with it better.
- **Works on any device:**
The interface is optimized for any device from phones to tablets to desktops.
- **Quick installation:**
It takes only a few hours to integrate with your project.
- **Available 24/7:**
Use it around the clock and don’t worry about updates — we take care of that.
- **Manage users:**
Assign access rights to any data from within the panel.
- **Activity log:**
Track the history of all changes and know who made them.
Requirements
============
- **Python** – 3.4, 3.5, 3.6, 3.7
- **Django** – 1.11, 2.0, 2.1
Installation
============
In order to install Jet Admin on your project please follow this guide:
https://app.jetadmin.io/projects/create
.. note::
If you don't have **Jet** account yet you will be asked to create one and sign in with the existing account.
After registering your project you will be redirected to your project and can start working with **Jet**
Support
=======
Feel free to Email us – support@jetadmin.io
License
=======
This project is **MIT** licensed - see the LICENCE file for details.
================================================
FILE: build/lib/jet_django/__init__.py
================================================
VERSION = '0.0.1'
default_app_config = 'jet_django.apps.JetDjangoConfig'
================================================
FILE: build/lib/jet_django/admin/__init__.py
================================================
================================================
FILE: build/lib/jet_django/admin/jet.py
================================================
from jet_django.admin.model_description import JetAdminModelDescription
from rest_framework import views
from rest_framework.response import Response
from django.apps import apps
from jet_django.permissions import HasProjectPermissions
class JetAdmin(object):
models = []
def models_view(self):
Admin = self
class View(views.APIView):
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
def get(self, request, *args, **kwargs):
return Response(map(lambda x: x.serialize(), Admin.models))
return View
def register(self, Model, fields=None, actions=list(), ordering_field=None, hidden=False):
self.models.append(JetAdminModelDescription(Model, fields, actions, ordering_field, hidden))
def register_related_models(self):
def model_key(x):
return '{}_{}'.format(
x['app_label'],
x['model']
)
registered = set(map(lambda x: model_key(x.get_model()), self.models))
for models_description in self.models:
for item in models_description.get_related_models():
key = model_key(item['model_info'])
if key in registered:
continue
self.register(item['model'], hidden=True)
registered.add(key)
jet = JetAdmin()
models = apps.get_models()
for model in models:
jet.register(model)
================================================
FILE: build/lib/jet_django/admin/model_action.py
================================================
from django import forms
from django.utils.text import camel_case_to_spaces
class JetAdminModelAction(forms.Form):
_ids = forms.CharField(label='object ids')
class Meta:
pass
@classmethod
def init_meta(cls):
name = camel_case_to_spaces(cls.__name__).replace(' ', '_')
verbose_name = getattr(cls.Meta, 'verbose_name', name)
cls._meta = cls.Meta
cls._meta.name = name
cls._meta.verbose_name = verbose_name
def clean__ids(self):
return self.cleaned_data['_ids'].split(',')
def get_fields(self):
fields = self.fields.copy()
del fields['_ids']
return fields
def filer_queryset(self, queryset):
return queryset.filter(pk__in=self.cleaned_data['_ids'])
def save(self, queryset):
raise NotImplementedError
================================================
FILE: build/lib/jet_django/admin/model_description.py
================================================
from django.contrib.contenttypes.models import ContentType
from django.db import models
from jet_django.filters.model import model_filter_class_factory
from jet_django.serializers.model import model_serializer_factory
from jet_django.serializers.model_detail import model_detail_serializer_factory
from jet_django.views.model import model_viewset_factory
class JetAdminModelDescription(object):
def __init__(self, Model, fields=None, actions=list(), ordering_field=None, hidden=False):
self.model = Model
self.fields = fields
self.hidden = hidden
for action in actions:
action.init_meta()
self.actions = actions
self.ordering_field = ordering_field \
if ordering_field in map(lambda x: x.name, self.get_model_fields()) \
else None
self.content_type = ContentType.objects.get_for_model(Model)
self.field_names = list(map(lambda x: x.name, self.get_display_model_fields()))
self.serializer = model_serializer_factory(Model, self.field_names)
self.detail_serializer = model_detail_serializer_factory(Model, self.field_names)
self.filter_class = model_filter_class_factory(Model, self.get_display_model_fields())
self.queryset = Model.objects.all()
self.viewset = model_viewset_factory(
Model,
self.filter_class,
self.serializer,
self.detail_serializer,
self.queryset,
self.actions,
self.ordering_field
)
@property
def viewset_url(self):
return 'models/{}/{}'.format(self.content_type.app_label, self.content_type.model)
def get_model_fields(self):
fields = self.model._meta.get_fields()
def filter_fields(x):
if any(map(lambda rel: isinstance(x, rel), [
models.OneToOneRel,
models.OneToOneField,
models.ManyToOneRel,
models.ManyToManyField,
models.ManyToManyRel
])):
return False
return True
return filter(filter_fields, fields)
def get_model_relations(self):
fields = self.model._meta.get_fields(include_hidden=True)
def filter_fields(x):
if any(map(lambda rel: isinstance(x, rel), [
models.OneToOneRel,
models.OneToOneField,
models.ManyToOneRel,
models.ManyToManyField,
models.ManyToManyRel
])):
return True
return False
return filter(filter_fields, fields)
def get_display_model_fields(self):
fields = self.get_model_fields()
def filter_fields(x):
if x.name == self.ordering_field:
return True
elif self.fields:
return x.name in self.fields
return True
return filter(filter_fields, fields)
def serialize(self):
return {
'model': self.content_type.model,
'app_label': self.content_type.app_label,
'db_table': self.model._meta.db_table,
'verbose_name': self.model._meta.verbose_name,
'verbose_name_plural': self.model._meta.verbose_name_plural,
'hidden': self.hidden,
'fields': map(lambda field: {
'name': field.name,
'verbose_name': field.verbose_name,
'is_relation': field.is_relation,
'field': field.__class__.__name__,
'editable': field.editable,
'filterable': field.name in self.filter_class.Meta.fields,
'params': {
'related_model': self.serialize_model(field.related_model)
}
}, self.get_display_model_fields()),
'flex_fields': [],
'relations': map(lambda field: {
'name': field.name,
'verbose_name': field.related_model._meta.verbose_name_plural,
'related_model': self.serialize_model(field.related_model),
'field': field.__class__.__name__,
'related_model_field': field.remote_field.name,
'through': self.serialize_model(field.through) if isinstance(field, models.ManyToManyRel) else None
}, self.get_model_relations()),
'actions': map(lambda action: {
'name': action._meta.name,
'verbose_name': action._meta.verbose_name,
'fields': map(lambda field: {
'name': field[0],
'verbose_name': field[1].label or field[0],
'related_model': self.serialize_model(field[1].queryset.model) if hasattr(field[1], 'queryset') else None,
'field': field[1].__class__.__name__
}, action.get_fields().items()),
}, map(lambda action: action(), self.actions)),
'ordering_field': self.ordering_field
}
def get_model(self):
return {
'model': self.content_type.model,
'app_label': self.content_type.app_label,
}
def get_related_models(self):
return map(lambda field: {
'model': field.related_model,
'model_info': self.serialize_model(field.related_model)
}, self.get_model_relations())
def serialize_model(self, Model):
if not Model:
return
content_type = ContentType.objects.get_for_model(Model)
return {
'model': content_type.model,
'app_label': content_type.app_label
}
================================================
FILE: build/lib/jet_django/apps.py
================================================
from django.apps import AppConfig
class JetDjangoConfig(AppConfig):
name = 'jet_django'
def ready(self):
from jet_django.utils.backend import register_token
try:
register_token()
except: # if no migrations yet
pass
================================================
FILE: build/lib/jet_django/filters/__init__.py
================================================
================================================
FILE: build/lib/jet_django/filters/model.py
================================================
from functools import reduce
import django_filters
from django.db.models import Q, fields
from django_filters import filters
from django_filters.constants import EMPTY_VALUES
def model_filter_class_factory(build_model, model_fields):
model_fields = list(model_fields)
def filter_field(field):
try:
django_filters.FilterSet.filter_for_field(field, field.name)
return True
except AssertionError:
return False
def search_field(field):
return isinstance(field, (fields.CharField, fields.TextField))
search_fields = list(map(lambda x: x.name, filter(search_field, model_fields)))
filter_field_names = list(map(lambda x: x.name, filter(filter_field, model_fields)))
filter_fields = dict(map(
lambda x: [x.name, list(x.get_lookups().keys())],
filter(lambda x: x.name in filter_field_names, build_model._meta.fields)
))
class SearchFilter(django_filters.CharFilter):
def filter(self, qs, value):
if value in EMPTY_VALUES:
return qs
query = reduce(lambda q, field: q | Q(**dict([('{}__icontains'.format(field), value)])), search_fields, Q())
qs = qs.filter(query)
return qs
class FilterSet(django_filters.FilterSet):
_order_by = filters.OrderingFilter(fields=filter_field_names)
_search = SearchFilter()
class Meta:
model = build_model
fields = filter_fields
return FilterSet
================================================
FILE: build/lib/jet_django/filters/model_aggregate.py
================================================
import django_filters
from django.db.models import Count, Sum, Min, Max, Avg
from django_filters.constants import EMPTY_VALUES
class AggregateFilter(django_filters.CharFilter):
def filter(self, qs, value):
if value in EMPTY_VALUES:
return qs
if value['y_func'] == 'count':
y_func = Count(value['y_column'])
elif value['y_func'] == 'sum':
y_func = Sum(value['y_column'])
elif value['y_func'] == 'min':
y_func = Min(value['y_column'])
elif value['y_func'] == 'max':
y_func = Max(value['y_column'])
elif value['y_func'] == 'avg':
y_func = Avg(value['y_column'])
else:
return qs.none()
qs = qs \
.aggregate(y_func=y_func)
return qs
================================================
FILE: build/lib/jet_django/filters/model_group.py
================================================
import django_filters
from django.db.models import Count, Sum, Min, Max, Avg, F
from django_filters.constants import EMPTY_VALUES
class GroupFilter(django_filters.CharFilter):
def filter(self, qs, value):
if value in EMPTY_VALUES:
return qs
if value['y_func'] == 'count':
y_func = Count(value['y_column'])
elif value['y_func'] == 'sum':
y_func = Sum(value['y_column'])
elif value['y_func'] == 'min':
y_func = Min(value['y_column'])
elif value['y_func'] == 'max':
y_func = Max(value['y_column'])
elif value['y_func'] == 'avg':
y_func = Avg(value['y_column'])
else:
return qs.none()
x_lookup = value['x_lookup'] if value['x_lookup'] else F
qs = qs \
.annotate(group=x_lookup(value['x_column']))\
.values('group')\
.annotate(y_func=y_func)\
.order_by('group')
return qs
================================================
FILE: build/lib/jet_django/filters/view_settings.py
================================================
import django_filters
from jet_django.models.view_settings import ViewSettings
class ViewSettingsFilterSet(django_filters.FilterSet):
class Meta:
model = ViewSettings
fields = (
'app_label',
'model',
'view',
)
================================================
FILE: build/lib/jet_django/filters/widget.py
================================================
import django_filters
from jet_django.models.widget import Widget
class WidgetFilterSet(django_filters.FilterSet):
class Meta:
model = Widget
fields = (
'dashboard',
)
================================================
FILE: build/lib/jet_django/management/commands/register_token.py
================================================
from django.core.management import BaseCommand
from jet_django.utils.backend import register_token
class Command(BaseCommand):
def handle(self, *args, **options):
token, created = register_token()
if not created and token:
print('Token already exists: {}'.format(token.token))
elif not created and not token:
print('Token creation failed')
elif created and token:
print('Token created: {}'.format(token.token))
================================================
FILE: build/lib/jet_django/migrations/0001_initial.py
================================================
# -*- coding: utf-8 -*-
# Generated by Django 1.11.5 on 2018-08-26 17:24
from __future__ import unicode_literals
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Dashboard',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=255, verbose_name='name')),
('ordering', models.PositiveIntegerField(default=0, verbose_name='ordering')),
('date_add', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date added')),
],
options={
'verbose_name': 'dashboard',
'verbose_name_plural': 'dashboards',
'ordering': ('ordering',),
},
),
migrations.CreateModel(
name='MenuSettings',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('items', models.TextField(blank=True, default='', verbose_name='items')),
('date_add', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date added')),
],
options={
'verbose_name': 'menu settings',
'verbose_name_plural': 'menu settings',
},
),
migrations.CreateModel(
name='ModelDescription',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('app_label', models.CharField(max_length=255, verbose_name='app_label')),
('model', models.CharField(blank=True, default='', max_length=255, verbose_name='model')),
('params', models.TextField(blank=True, default='', verbose_name='params')),
('date_add', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date added')),
],
options={
'verbose_name': 'model description',
'verbose_name_plural': 'model descriptions',
},
),
migrations.CreateModel(
name='Token',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('project', models.CharField(blank=True, default='', max_length=30, verbose_name='project')),
('token', models.UUIDField(verbose_name='token')),
('date_add', models.DateTimeField(verbose_name='date added')),
],
options={
'verbose_name': 'token',
'verbose_name_plural': 'tokens',
},
),
migrations.CreateModel(
name='ViewSettings',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('app_label', models.CharField(max_length=255, verbose_name='app_label')),
('model', models.CharField(blank=True, default='', max_length=255, verbose_name='model')),
('view', models.CharField(blank=True, default='change', max_length=255, verbose_name='view')),
('params', models.TextField(blank=True, default='', verbose_name='params')),
('date_add', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date added')),
],
options={
'verbose_name': 'view settings',
'verbose_name_plural': 'views settings',
},
),
migrations.CreateModel(
name='Widget',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('widget_type', models.CharField(max_length=255, verbose_name='type')),
('name', models.CharField(max_length=255, verbose_name='name')),
('x', models.PositiveSmallIntegerField(verbose_name='x')),
('y', models.PositiveSmallIntegerField(verbose_name='y')),
('width', models.PositiveSmallIntegerField(default=1, verbose_name='width')),
('height', models.PositiveSmallIntegerField(default=1, verbose_name='height')),
('params', models.TextField(blank=True, default='', verbose_name='params')),
('date_add', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date added')),
('dashboard', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='widgets', to='jet_django.Dashboard', verbose_name='dashboard')),
],
options={
'verbose_name': 'widget',
'verbose_name_plural': 'widgets',
'ordering': ('y', 'x'),
},
),
]
================================================
FILE: build/lib/jet_django/migrations/__init__.py
================================================
================================================
FILE: build/lib/jet_django/models/dashboard.py
================================================
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class Dashboard(models.Model):
name = models.CharField(
verbose_name=_('name'),
max_length=255
)
ordering = models.PositiveIntegerField(
verbose_name=_('ordering'),
default=0
)
date_add = models.DateTimeField(
verbose_name=_('date added'),
default=timezone.now
)
class Meta:
verbose_name = _('dashboard')
verbose_name_plural = _('dashboards')
ordering = ('ordering',)
def __str__(self):
return str(self.name)
================================================
FILE: build/lib/jet_django/models/menu_item.py
================================================
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class MenuSettings(models.Model):
items = models.TextField(
verbose_name=_('items'),
blank=True,
default=''
)
date_add = models.DateTimeField(
verbose_name=_('date added'),
default=timezone.now
)
class Meta:
verbose_name = _('menu settings')
verbose_name_plural = _('menu settings')
def __str__(self):
return '{}'.format(self.date_add)
================================================
FILE: build/lib/jet_django/models/model_description.py
================================================
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class ModelDescription(models.Model):
app_label = models.CharField(
verbose_name=_('app_label'),
max_length=255
)
model = models.CharField(
verbose_name=_('model'),
max_length=255,
blank=True,
default=''
)
params = models.TextField(
verbose_name=_('params'),
blank=True,
default=''
)
date_add = models.DateTimeField(
verbose_name=_('date added'),
default=timezone.now
)
class Meta:
verbose_name = _('model description')
verbose_name_plural = _('model descriptions')
def __str__(self):
return '{} {}'.format(self.app_label, self.model)
================================================
FILE: build/lib/jet_django/models/token.py
================================================
from django.db import models
from django.utils.translation import ugettext_lazy as _
class Token(models.Model):
project = models.CharField(
verbose_name=_('project'),
max_length=30,
blank=True,
default=''
)
token = models.UUIDField(
verbose_name=_('token')
)
date_add = models.DateTimeField(
verbose_name=_('date added')
)
class Meta:
verbose_name = _('token')
verbose_name_plural = _('tokens')
def __str__(self):
return str(self.token)
================================================
FILE: build/lib/jet_django/models/view_settings.py
================================================
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class ViewSettings(models.Model):
app_label = models.CharField(
verbose_name=_('app_label'),
max_length=255
)
model = models.CharField(
verbose_name=_('model'),
max_length=255,
blank=True,
default=''
)
view = models.CharField(
verbose_name=_('view'),
max_length=255,
blank=True,
default='change'
)
params = models.TextField(
verbose_name=_('params'),
blank=True,
default=''
)
date_add = models.DateTimeField(
verbose_name=_('date added'),
default=timezone.now
)
class Meta:
verbose_name = _('view settings')
verbose_name_plural = _('views settings')
def __str__(self):
return '{} {}'.format(self.app_label, self.model)
================================================
FILE: build/lib/jet_django/models/widget.py
================================================
from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _
class Widget(models.Model):
dashboard = models.ForeignKey(
to='jet_django.Dashboard',
verbose_name=_('dashboard'),
related_name='widgets'
)
widget_type = models.CharField(
verbose_name=_('type'),
max_length=255
)
name = models.CharField(
verbose_name=_('name'),
max_length=255
)
x = models.PositiveSmallIntegerField(
verbose_name=_('x')
)
y = models.PositiveSmallIntegerField(
verbose_name=_('y')
)
width = models.PositiveSmallIntegerField(
verbose_name=_('width'),
default=1
)
height = models.PositiveSmallIntegerField(
verbose_name=_('height'),
default=1
)
params = models.TextField(
verbose_name=_('params'),
blank=True,
default=''
)
date_add = models.DateTimeField(
verbose_name=_('date added'),
default=timezone.now
)
class Meta:
verbose_name = _('widget')
verbose_name_plural = _('widgets')
ordering = ('y', 'x')
def __str__(self):
return str(self.name)
================================================
FILE: build/lib/jet_django/pagination.py
================================================
from collections import OrderedDict
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
class CustomPageNumberPagination(PageNumberPagination):
page_size_query_param = '_per_page'
def get_paginated_response(self, data):
return Response(OrderedDict([
('count', self.page.paginator.count),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('results', data),
('num_pages', self.page.paginator.num_pages),
('per_page', self.page.paginator.per_page),
]))
================================================
FILE: build/lib/jet_django/permissions.py
================================================
from rest_framework.permissions import BasePermission
from jet_django import settings
from jet_django.utils.backend import project_auth
class HasProjectPermissions(BasePermission):
token_prefix = 'Token '
project_token_prefix = 'ProjectToken '
def has_permission(self, request, view):
# return True
token = request.META.get('HTTP_AUTHORIZATION')
if not token:
return False
if token[:len(self.token_prefix)] == self.token_prefix:
token = token[len(self.token_prefix):]
return project_auth(token)
elif token[:len(self.project_token_prefix)] == self.project_token_prefix:
token = token[len(self.project_token_prefix):]
return project_auth(token)
else:
return False
class ModifyNotInDemo(BasePermission):
def has_permission(self, request, view):
if not settings.JET_DEMO:
return True
if view.action in ['create', 'update', 'partial_update', 'destroy']:
return False
return True
================================================
FILE: build/lib/jet_django/serializers/__init__.py
================================================
================================================
FILE: build/lib/jet_django/serializers/dashboard.py
================================================
from rest_framework import serializers
from jet_django.models.dashboard import Dashboard
from jet_django.serializers.widget_list import WidgetListSerializer
class DashboardSerializer(serializers.ModelSerializer):
widgets = WidgetListSerializer(many=True, read_only=True)
class Meta:
model = Dashboard
fields = (
'id',
'name',
'ordering',
'date_add',
'widgets'
)
================================================
FILE: build/lib/jet_django/serializers/dashboard_set_widgets.py
================================================
from django.db import transaction
from rest_framework import serializers
from jet_django.models.dashboard import Dashboard
from jet_django.models.widget import Widget
from jet_django.serializers.widget_update_position import WidgetUpdatePositionSerializer
class DashboardSetWidgetsSerializer(serializers.ModelSerializer):
widgets = WidgetUpdatePositionSerializer(many=True)
class Meta:
model = Dashboard
fields = (
'widgets',
)
def update(self, instance, validated_data):
with transaction.atomic():
widgets = Widget.objects.filter(dashboard=instance)
for widget in validated_data['widgets']:
widgets.filter(pk=widget['id']).update(
x=widget['x'],
y=widget['y'],
width=widget['width'],
height=widget['height'],
params=widget['params']
)
widgets.exclude(pk__in=map(lambda x: x['id'], validated_data['widgets'])).delete()
return instance
================================================
FILE: build/lib/jet_django/serializers/menu_settings.py
================================================
from rest_framework import serializers
from jet_django.models.menu_item import MenuSettings
class MenuSettingsSerializer(serializers.ModelSerializer):
class Meta:
model = MenuSettings
fields = (
'items',
'date_add'
)
================================================
FILE: build/lib/jet_django/serializers/model.py
================================================
from rest_framework import serializers
def model_serializer_factory(build_model, build_fields):
class Serializer(serializers.ModelSerializer):
class Meta:
model = build_model
fields = build_fields + ['__str__']
return Serializer
================================================
FILE: build/lib/jet_django/serializers/model_description.py
================================================
from rest_framework import serializers
from jet_django.models.model_description import ModelDescription
class ModelDescriptionSerializer(serializers.ModelSerializer):
class Meta:
model = ModelDescription
fields = (
'app_label',
'model',
'params',
'date_add'
)
================================================
FILE: build/lib/jet_django/serializers/model_detail.py
================================================
from rest_framework import serializers
from jet_django.utils.siblings import get_model_sibling
def model_detail_serializer_factory(build_model, build_fields):
class Serializer(serializers.ModelSerializer):
__previous_sibling__ = serializers.SerializerMethodField('get_previous_sibling')
__next_sibling__ = serializers.SerializerMethodField('get_next_sibling')
class Meta:
model = build_model
fields = build_fields + ['__str__', '__previous_sibling__', '__next_sibling__']
def sibling_response(self, sibling):
if not sibling:
return
return {
'id': sibling.pk,
'__str__': str(sibling)
}
def get_previous_sibling(self, instance, ordering=None):
sibling = get_model_sibling(build_model, instance, False, ordering)
return self.sibling_response(sibling)
def get_next_sibling(self, instance, ordering=None):
sibling = get_model_sibling(build_model, instance, True, ordering)
return self.sibling_response(sibling)
return Serializer
================================================
FILE: build/lib/jet_django/serializers/reorder.py
================================================
from django.db import transaction
from django.db.models import F
from rest_framework import serializers, relations
def reorder_serializer_factory(build_queryset, ordering_field):
class ReorderSerializer(serializers.Serializer):
forward = serializers.BooleanField()
segment_from = relations.PrimaryKeyRelatedField(queryset=build_queryset)
segment_to = relations.PrimaryKeyRelatedField(queryset=build_queryset)
item = relations.PrimaryKeyRelatedField(queryset=build_queryset)
def save(self):
with transaction.atomic():
if self.validated_data['forward']:
build_queryset.filter(
**{
'{}__gte'.format(ordering_field): getattr(self.validated_data['segment_from'], ordering_field),
'{}__lte'.format(ordering_field): getattr(self.validated_data['segment_to'], ordering_field)
}
).update(
**{ordering_field: F(ordering_field) - 1}
)
build_queryset.filter(
pk=self.validated_data['item'].pk
).update(
**{ordering_field: getattr(self.validated_data['segment_to'], ordering_field)}
)
else:
build_queryset.filter(
**{
'{}__gte'.format(ordering_field): getattr(self.validated_data['segment_from'], ordering_field),
'{}__lte'.format(ordering_field): getattr(self.validated_data['segment_to'], ordering_field)
}
).update(
**{ordering_field: F(ordering_field) + 1}
)
build_queryset.filter(
pk=self.validated_data['item'].pk
).update(
**{ordering_field: getattr(self.validated_data['segment_from'], ordering_field)}
)
return ReorderSerializer
================================================
FILE: build/lib/jet_django/serializers/sql.py
================================================
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
class SqlSerializer(serializers.Serializer):
query = serializers.CharField()
params = serializers.CharField(required=False)
def validate_query(self, value):
forbidden = ['insert', 'update', 'delete', 'grant', 'show']
for i in range(len(forbidden)):
forbidden.append('({}'.format(forbidden[i]))
if any(map(lambda x: ' {} '.format(value.lower()).find(' {} '.format(x)) != -1, forbidden)):
raise ValidationError('forbidden query')
return value
================================================
FILE: build/lib/jet_django/serializers/view_settings.py
================================================
from rest_framework import serializers
from jet_django.models.view_settings import ViewSettings
class ViewSettingsSerializer(serializers.ModelSerializer):
class Meta:
model = ViewSettings
fields = (
'app_label',
'model',
'view',
'params',
'date_add'
)
================================================
FILE: build/lib/jet_django/serializers/widget_detail.py
================================================
from rest_framework import serializers
from jet_django.models.widget import Widget
class WidgetDetailSerializer(serializers.ModelSerializer):
class Meta:
model = Widget
fields = (
'id',
'widget_type',
'name',
'x',
'y',
'width',
'height',
'params',
'date_add',
'dashboard'
)
================================================
FILE: build/lib/jet_django/serializers/widget_list.py
================================================
from rest_framework import serializers
from jet_django.models.widget import Widget
class WidgetListSerializer(serializers.ModelSerializer):
class Meta:
model = Widget
fields = (
'id',
'widget_type',
'name',
'x',
'y',
'width',
'height',
'params',
'date_add'
)
================================================
FILE: build/lib/jet_django/serializers/widget_update_position.py
================================================
from rest_framework import serializers
from jet_django.models.widget import Widget
class WidgetUpdatePositionSerializer(serializers.ModelSerializer):
class Meta:
model = Widget
fields = (
'id',
'x',
'y',
'width',
'height',
'params'
)
extra_kwargs = {'id': {'read_only': False}}
================================================
FILE: build/lib/jet_django/settings.py
================================================
from django.conf import settings
JET_BACKEND_API_BASE_URL = getattr(settings, 'JET_BACKEND_API_BASE_URL', 'https://api.jetadmin.io/api')
JET_BACKEND_WEB_BASE_URL = getattr(settings, 'JET_BACKEND_WEB_BASE_URL', 'https://app.jetadmin.io')
JET_DEMO = getattr(settings, 'JET_DEMO', False)
================================================
FILE: build/lib/jet_django/urls.py
================================================
from django.conf.urls import url
from rest_framework.routers import DefaultRouter
from jet_django.admin.jet import jet
from jet_django.views.dashboard import DashboardViewSet
from jet_django.views.menu_settings import MenuSettingsViewSet
from jet_django.views.model_description import ModelDescriptionViewSet
from jet_django.views.register import RegisterView
from jet_django.views.sql import SqlView
from jet_django.views.view_settings import ViewSettingsViewSet
from jet_django.views.widget import WidgetViewSet
def init_urls():
class Router(DefaultRouter):
include_root_view = False
router = Router()
jet.register_related_models()
for model in jet.models:
router.register(model.viewset_url, model.viewset)
router.register('model_descriptions', ModelDescriptionViewSet)
router.register('dashboards', DashboardViewSet)
router.register('widgets', WidgetViewSet)
router.register('view_settings', ViewSettingsViewSet)
router.register('menu_settings', MenuSettingsViewSet)
extra_urls = [
url(r'^model_descriptions_base/', jet.models_view().as_view(), name='model-descriptions'),
url(r'^register/', RegisterView.as_view(), name='register'),
url(r'^sql/', SqlView.as_view(), name='sql')
]
api_urls = router.urls + extra_urls
return api_urls
jet_urls = init_urls()
================================================
FILE: build/lib/jet_django/utils/__init__.py
================================================
================================================
FILE: build/lib/jet_django/utils/backend.py
================================================
import requests
from jet_django import settings
from jet_django.models.token import Token
def api_method_url(method):
return '{}/{}'.format(settings.JET_BACKEND_API_BASE_URL, method)
def register_token():
token = Token.objects.all().first()
if token:
return token, False
url = api_method_url('project_tokens/')
headers = {
'User-Agent': 'Jet Django'
}
r = requests.request('POST', url, headers=headers)
success = 200 <= r.status_code < 300
if not success:
print('Register Token request error', r.status_code, r.reason)
return None, False
result = r.json()
token = Token.objects.create(token=result['token'], date_add=result['date_add'])
return token, True
def project_auth(token):
project_token = Token.objects.all().first()
if not project_token:
return False
url = api_method_url('project_auth/')
data = {
'project_token': project_token.token,
'token': token
}
headers = {
'User-Agent': 'Jet Django'
}
r = requests.request('POST', url, data=data, headers=headers)
success = 200 <= r.status_code < 300
if not success:
print('Project Auth request error', r.status_code, r.reason)
return False
return True
================================================
FILE: build/lib/jet_django/utils/siblings.py
================================================
from collections import OrderedDict
def get_model_sibling(Model, instance, next, ordering=None):
if len(Model._meta.ordering):
ordering = list(Model._meta.ordering) + ['-id']
elif ordering is None:
ordering = ['-id']
elif ordering != ['-id']:
ordering = list(ordering) + ['-id']
def inverse_ordering(x):
if x[0:1] == '-':
return x[1:]
else:
return '-{}'.format(x)
if not next:
ordering = list(map(inverse_ordering, ordering))
def map_ordering(x):
asc = x[0:1] != '-'
name = x if asc else x[1:]
operator = 'gte' if asc else 'lte'
return '{}__{}'.format(name, operator), getattr(instance, name)
params = OrderedDict(map(map_ordering, ordering[0:1]))
found_instance = False
sibling = None
for item in Model.objects.filter(**params).order_by(*ordering).all():
if item.pk == instance.pk:
found_instance = True
elif found_instance:
sibling = item
break
return sibling
================================================
FILE: build/lib/jet_django/views/__init__.py
================================================
================================================
FILE: build/lib/jet_django/views/dashboard.py
================================================
from rest_framework import viewsets
from rest_framework.decorators import detail_route
from rest_framework.response import Response
from jet_django.models.dashboard import Dashboard
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.dashboard import DashboardSerializer
from jet_django.serializers.dashboard_set_widgets import DashboardSetWidgetsSerializer
class DashboardViewSet(viewsets.ModelViewSet):
model = Dashboard
serializer_class = DashboardSerializer
queryset = Dashboard.objects.prefetch_related('widgets').all()
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
@detail_route(methods=['put'])
def set_widgets(self, request, *args, **kwargs):
serializer = DashboardSetWidgetsSerializer(instance=self.get_object(), data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
instance_serializer = self.get_serializer(instance=self.get_object())
return Response(instance_serializer.data)
================================================
FILE: build/lib/jet_django/views/menu_settings.py
================================================
from django.http import Http404
from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from jet_django.models.menu_item import MenuSettings
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.menu_settings import MenuSettingsSerializer
class MenuSettingsViewSet(viewsets.ModelViewSet):
model = MenuSettings
serializer_class = MenuSettingsSerializer
queryset = MenuSettings.objects.all()
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
def create(self, request, *args, **kwargs):
try:
self.get_object()
return super().update(request, *args, **kwargs)
except Http404:
return super().create(request, *args, **kwargs)
def get_object(self):
queryset = self.get_queryset()[:1]
obj = get_object_or_404(queryset)
# May raise a permission denied
self.check_object_permissions(self.request, obj)
return obj
================================================
FILE: build/lib/jet_django/views/model.py
================================================
from django.core.exceptions import NON_FIELD_ERRORS
from rest_framework import status, viewsets, serializers
from rest_framework.decorators import list_route
from rest_framework.response import Response
from rest_framework.serializers import ModelSerializer
from jet_django.filters.model_aggregate import AggregateFilter
from jet_django.filters.model_group import GroupFilter
from jet_django.pagination import CustomPageNumberPagination
from jet_django.permissions import HasProjectPermissions, ModifyNotInDemo
from jet_django.serializers.reorder import reorder_serializer_factory
class AggregateSerializer(serializers.Serializer):
y_func = serializers.IntegerField()
def __init__(self, *args, **kwargs):
if 'y_func_serializer' in kwargs:
self.fields['y_func'] = kwargs.pop('y_func_serializer')
super().__init__(*args, **kwargs)
class GroupSerializer(serializers.Serializer):
group = serializers.CharField()
y_func = serializers.IntegerField()
def __init__(self, *args, **kwargs):
if 'group_serializer' in kwargs:
self.fields['group'] = kwargs.pop('group_serializer')
if 'y_func_serializer' in kwargs:
self.fields['y_func'] = kwargs.pop('y_func_serializer')
super().__init__(*args, **kwargs)
def model_viewset_factory(build_model, build_filter_class, build_serializer_class, build_detail_serializer_class, build_queryset, build_actions, ordering_field):
ReorderSerializer = reorder_serializer_factory(build_queryset, ordering_field)
class Viewset(viewsets.ModelViewSet):
model = build_model
queryset = build_queryset
pagination_class = CustomPageNumberPagination
filter_class = build_filter_class
authentication_classes = ()
permission_classes = (HasProjectPermissions, ModifyNotInDemo)
def get_serializer_class(self):
if self.action == 'aggregate':
return AggregateSerializer
elif self.action == 'group':
return GroupSerializer
elif self.action == 'retrieve':
return build_detail_serializer_class
else:
return build_serializer_class
@list_route(methods=['get'])
def aggregate(self, request):
queryset = self.filter_queryset(self.get_queryset())
y_func = request.GET['_y_func'].lower()
y_column = request.GET.get('_y_column', 'id')
y_field = self.model._meta.get_field(y_column)
y_serializer_class, y_serializer_kwargs = ModelSerializer().build_standard_field(y_column, y_field)
y_serializer = y_serializer_class(**y_serializer_kwargs)
queryset = AggregateFilter().filter(queryset, {
'y_func': y_func,
'y_column': y_column
})
serializer = self.get_serializer(
queryset,
y_func_serializer=y_serializer
)
return Response(serializer.data)
@list_route(methods=['get'])
def group(self, request):
queryset = self.filter_queryset(self.get_queryset())
x_column = request.GET['_x_column']
x_lookup_name = request.GET.get('_x_lookup')
y_func = request.GET['_y_func'].lower()
y_column = request.GET.get('_y_column', 'id')
x_field = self.model._meta.get_field(x_column)
x_lookup = x_field.class_lookups.get(x_lookup_name)
y_field = self.model._meta.get_field(y_column)
if x_lookup:
x_field = x_lookup('none').output_field
x_serializer_class, x_serializer_kwargs = ModelSerializer().build_standard_field(x_column, x_field)
x_serializer = x_serializer_class(**x_serializer_kwargs)
y_serializer_class, y_serializer_kwargs = ModelSerializer().build_standard_field(y_column, y_field)
y_serializer = y_serializer_class(**y_serializer_kwargs)
queryset = GroupFilter().filter(queryset, {
'x_column': x_column,
'x_lookup': x_lookup,
'y_func': y_func,
'y_column': y_column
})
serializer = self.get_serializer(
queryset,
many=True,
group_serializer=x_serializer,
y_func_serializer=y_serializer
)
return Response(serializer.data)
def get_serializer(self, *args, **kwargs):
"""
Return the serializer instance that should be used for validating and
deserializing input, and for serializing output.
"""
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
return serializer_class(*args, **kwargs)
@list_route(methods=['post'])
def reorder(self, request):
serializer = ReorderSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
return Response(serializer.data)
@list_route(methods=['post'])
def reset_order(self, request):
i = 1
for instance in build_queryset:
setattr(instance, ordering_field, i)
instance.save()
i += 1
return Response({})
for action in build_actions:
def route(self, request):
form = action(data=request.data)
if not form.is_valid():
return Response(form.errors, status=status.HTTP_400_BAD_REQUEST)
queryset = form.filer_queryset(self.get_queryset())
try:
result = form.save(queryset)
except Exception as e:
return Response({NON_FIELD_ERRORS: str(e)}, status=status.HTTP_400_BAD_REQUEST)
return Response({'action': form._meta.name, 'result': result})
decorator = list_route(methods=['post'])
route = decorator(route)
setattr(Viewset, action._meta.name, route)
return Viewset
================================================
FILE: build/lib/jet_django/views/model_description.py
================================================
import json
from django.http import Http404
from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from rest_framework.response import Response
from jet_django.admin.jet import jet
from jet_django.models.model_description import ModelDescription
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.model_description import ModelDescriptionSerializer
class ModelDescriptionViewSet(viewsets.ModelViewSet):
model = ModelDescription
serializer_class = ModelDescriptionSerializer
queryset = ModelDescription.objects
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
def create(self, request, *args, **kwargs):
try:
object = self.get_object()
return super().update(request, *args, **kwargs)
except Http404:
return super().create(request, *args, **kwargs)
def list(self, request, *args, **kwargs):
def map_override(x):
try:
item = json.loads(x.params)
except ValueError:
item = {}
item['app_label'] = x.app_label
item['model'] = x.model
return item
def find_index(ar, x):
i = 0
for item in ar:
if x(item):
return i
else:
i += 1
base = list(map(lambda x: x.serialize(), jet.models))
overrides = list(map(map_override, self.get_queryset().all()))
for md_override in overrides:
md_i = find_index(
base, lambda x: x.get('app_label') == md_override.get('app_label')
and x.get('model') == md_override.get('model'))
if md_i is None:
continue
for item in ['db_table', 'verbose_name', 'verbose_name_plural', 'hidden', 'ordering_field']:
if item in base[md_i] and item in md_override:
base[md_i][item] = md_override[item]
md_fields = list(base[md_i]['fields'])
for field_override in md_override.get('fields', []):
field_i = find_index(md_fields, lambda x: x.get('name') == field_override.get('name'))
if field_i is None:
continue
for item in ['verbose_name', 'field', 'editable', 'filterable', 'params']:
if item in md_fields[field_i] and item in field_override:
md_fields[field_i][item] = field_override[item]
base[md_i]['fields'] = md_fields
md_flex_fields = list(base[md_i]['flex_fields'])
for field_override in md_override.get('flex_fields', []):
field_i = find_index(md_flex_fields, lambda x: x.get('name') == field_override.get('name'))
if field_i is None:
field = {'name': field_override.get('name')}
md_flex_fields.append(field)
field_i = len(md_flex_fields) - 1
for item in ['verbose_name', 'field', 'query', 'code', 'params']:
if item in field_override:
md_flex_fields[field_i][item] = field_override[item]
base[md_i]['flex_fields'] = md_flex_fields
md_relations = list(base[md_i]['relations'])
for relation_override in md_override.get('relations', []):
relation_i = find_index(md_relations, lambda x: x.get('name') == relation_override.get('name'))
if relation_i is None:
continue
for item in ['verbose_name', 'field']:
if item in md_relations[relation_i] and item in relation_override:
md_relations[relation_i][item] = relation_override[item]
base[md_i]['relations'] = md_relations
return Response(base)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
filter_kwargs = {
'app_label': self.request.data.get('app_label'),
'model': self.request.data.get('model')
}
obj = get_object_or_404(queryset, **filter_kwargs)
# May raise a permission denied
self.check_object_permissions(self.request, obj)
return obj
================================================
FILE: build/lib/jet_django/views/register.py
================================================
from django.http import HttpResponseBadRequest
from django.views import generic
from jet_django import settings
from jet_django.utils.backend import register_token
class RegisterView(generic.RedirectView):
def get(self, request, *args, **kwargs):
token, created = register_token()
if not token:
return HttpResponseBadRequest
self.url = '{}/projects/register/{}'.format(settings.JET_BACKEND_WEB_BASE_URL, token.token)
return super().get(request, *args, **kwargs)
================================================
FILE: build/lib/jet_django/views/sql.py
================================================
from django.db import connection, ProgrammingError
from django.utils.translation import ugettext_lazy as _
from django.utils import six
from rest_framework import views, status
from rest_framework.exceptions import APIException
from rest_framework.response import Response
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.sql import SqlSerializer
class SqlError(APIException):
status_code = status.HTTP_400_BAD_REQUEST
default_detail = _('Query failed')
default_code = 'invalid'
def __init__(self, detail):
self.detail = {'error': str(detail)}
def __str__(self):
return six.text_type(self.detail)
class SqlView(views.APIView):
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
def get(self, request, *args, **kwargs):
serializer = SqlSerializer(data=request.GET)
serializer.is_valid(raise_exception=True)
with connection.cursor() as cursor:
try:
cursor.execute(serializer.data['query'], serializer.data.get('params', '').split(','))
except ProgrammingError as e:
raise SqlError(e)
rows = cursor.fetchall()
return Response(rows)
================================================
FILE: build/lib/jet_django/views/view_settings.py
================================================
from django.http import Http404
from django.shortcuts import get_object_or_404
from rest_framework import viewsets
from jet_django.filters.view_settings import ViewSettingsFilterSet
from jet_django.models.view_settings import ViewSettings
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.view_settings import ViewSettingsSerializer
class ViewSettingsViewSet(viewsets.ModelViewSet):
model = ViewSettings
serializer_class = ViewSettingsSerializer
queryset = ViewSettings.objects
filter_class = ViewSettingsFilterSet
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
def create(self, request, *args, **kwargs):
try:
object = self.get_object()
return super().update(request, *args, **kwargs)
except Http404:
return super().create(request, *args, **kwargs)
def get_object(self):
queryset = self.filter_queryset(self.get_queryset())
filter_kwargs = {
'app_label': self.request.data.get('app_label'),
'model': self.request.data.get('model'),
'view': self.request.data.get('view')
}
obj = get_object_or_404(queryset, **filter_kwargs)
# May raise a permission denied
self.check_object_permissions(self.request, obj)
return obj
================================================
FILE: build/lib/jet_django/views/widget.py
================================================
from rest_framework import viewsets
from jet_django.filters.widget import WidgetFilterSet
from jet_django.models.widget import Widget
from jet_django.permissions import HasProjectPermissions
from jet_django.serializers.widget_detail import WidgetDetailSerializer
class WidgetViewSet(viewsets.ModelViewSet):
model = Widget
serializer_class = WidgetDetailSerializer
queryset = Widget.objects.prefetch_related('dashboard').all()
filter_class = WidgetFilterSet
pagination_class = None
authentication_classes = ()
permission_classes = (HasProjectPermissions,)
================================================
FILE: jet_django/__init__.py
================================================
VERSION = '0.7.3'
default_app_config = 'jet_django.apps.JetDjangoConfig'
================================================
FILE: jet_django/admin/__init__.py
================================================
================================================
FILE: jet_django/admin/jet.py
================================================
from jet_django.admin.model_description import JetAdminModelDescription
class JetAdmin(object):
models = []
message_handlers = {}
def register(self, Model, fields=None, hidden=False):
self.models.append(JetAdminModelDescription(Model, fields, hidden))
def register_related_models(self):
def model_key(x):
return x['model']
registered = set(map(lambda x: model_key(x.get_model()), self.models))
for models_description in self.models:
for item in models_description.get_related_models():
key = model_key(item['model_info'])
if key in registered:
continue
self.register(item['model'], hidden=True)
registered.add(key)
def add_message_handler(self, message_name, func):
self.message_handlers[message_name] = func
def get_message_handler(self, message_name):
return self.message_handlers.get(message_name)
jet = JetAdmin()
================================================
FILE: jet_django/admin/model_action.py
================================================
from django import forms
from django.utils.text import camel_case_to_spaces
class JetAdminModelAction(forms.Form):
_ids = forms.CharField(label='object ids')
class Meta:
pass
@classmethod
def init_meta(cls):
name = camel_case_to_spaces(cls.__name__).replace(' ', '_')
verbose_name = getattr(cls.Meta, 'verbose_name', name)
cls._meta = cls.Meta
cls._meta.name = name
cls._meta.verbose_name = verbose_name
def clean__ids(self):
return self.cleaned_data['_ids'].split(',')
def get_fields(self):
fields = self.fields.copy()
del fields['_ids']
return fields
def filer_queryset(self, queryset):
return queryset.filter(pk__in=self.cleaned_data['_ids'])
def save(self, queryset):
raise NotImplementedError
================================================
FILE: jet_django/admin/model_description.py
================================================
from django.contrib.contenttypes.fields import GenericRel, GenericForeignKey, GenericRelation
from django.contrib.contenttypes.models import ContentType
from django.db import models
from jet_django.filters.model import model_filter_class_factory
from jet_django.serializers.model import model_serializer_factory
from jet_django.serializers.model_detail import model_detail_serializer_factory
from jet_django.views.model import model_viewset_factory
class JetAdminModelDescription(object):
def __init__(self, Model, fields=None, hidden=False):
self.model = Model
self.fields = fields
self.hidden = hidden
self.content_type = ContentType.objects.get_for_model(Model)
self.field_names = list(map(lambda x: x.name, self.get_display_model_fields()))
self.serializer = model_serializer_factory(Model, self.field_names)
self.detail_serializer = model_detail_serializer_factory(Model, self.field_names)
self.filter_class = model_filter_class_factory(Model, self.get_display_model_fields(), self.get_model_relations())
self.queryset = Model.objects.all()
self.viewset = model_viewset_factory(
Model,
self.filter_class,
self.serializer,
self.detail_serializer,
self.queryset
)
@property
def viewset_url(self):
return 'models/(?P<model>{})'.format(self.model._meta.db_table)
def get_model_fields(self):
fields = self.model._meta.get_fields()
def filter_fields(x):
if any(map(lambda rel: isinstance(x, rel), [
models.ManyToOneRel,
models.ManyToManyField,
models.ManyToManyRel,
GenericRel,
GenericForeignKey,
GenericRelation
])):
return False
return True
return filter(filter_fields, fields)
def get_model_relations(self):
fields = self.model._meta.get_fields(include_hidden=True)
def filter_fields(x):
if any(map(lambda rel: isinstance(x, rel), [
models.OneToOneRel,
models.OneToOneField,
models.ManyToOneRel,
models.ManyToManyField,
models.ManyToManyRel
])):
return True
return False
return list(filter(filter_fields, fields))
def get_model_relation_through(self, field):
if isinstance(field, models.ManyToManyRel):
return self.serialize_model(field.through)
elif isinstance(field, models.ManyToManyField):
return self.serialize_model(field.remote_field.through)
def get_display_model_fields(self):
fields = self.get_model_fields()
def filter_fields(x):
if self.fields:
return x.name in self.fields
return True
return filter(filter_fields, fields)
def serialize(self):
return {
'model': self.model._meta.db_table,
'db_table': self.model._meta.db_table,
'verbose_name': self.model._meta.verbose_name,
'verbose_name_plural': self.model._meta.verbose_name_plural,
'hidden': self.hidden,
'fields': map(lambda field: {
'name': field.name,
'db_column': field.get_attname_column()[1],
'verbose_name': field.verbose_name,
'is_relation': field.is_relation,
'field': field.__class__.__name__,
'required': not field.blank,
'null': field.null,
'editable': field.editable,
'filterable': field.name in self.filter_class.Meta.fields,
'params': {
'related_model': self.serialize_model(field.related_model)
}
}, self.get_display_model_fields()),
'flex_fields': [],
'relations': map(lambda field: {
'name': field.name,
'verbose_name': field.related_model._meta.verbose_name_plural,
'related_model': self.serialize_model(field.related_model),
'field': field.__class__.__name__,
'related_model_field': field.remote_field.name,
'through': self.get_model_relation_through(field)
}, self.get_model_relations())
}
def get_model(self):
return {
'model': self.model._meta.db_table
}
def get_related_models(self):
return map(lambda field: {
'model': field.related_model,
'model_info': self.serialize_model(field.related_model)
}, self.get_model_relations())
def serialize_model(self, Model):
if not Model:
return
return {
'model': Model._meta.db_table,
}
================================================
FILE: jet_django/apps.py
================================================
import logging
import sys
from django.apps import AppConfig
from django.apps import apps
from django.db import ProgrammingError
from jet_django import settings
logger = logging.getLogger('jet_django')
class JetDjangoConfig(AppConfig):
name = 'jet_django'
def check_token(self):
from jet_django.utils.backend import register_token, is_token_activated
is_command = len(sys.argv) > 1 and sys.argv[1].startswith('jet_')
if not is_command and settings.JET_REGISTER_TOKEN_ON_START:
try:
print('[JET] Checking if token is not activated yet...')
token, created = register_token()
if not token:
return
if not is_token_activated(token):
print('[!] Your server token is not activated')
print('[!] Token: {}'.format(token.token))
else:
print('[JET] Token activated')
except ProgrammingError as e:
no_migrations = str(e).find('relation "jet_django_token" does not exist') != -1
if no_migrations:
print('[JET] Apply migrations first: python manage.py migrate jet_django')
else:
print(e)
except Exception as e: # if no migrations yet
print(e)
pass
def register_models(self):
from jet_django.admin.jet import jet
try:
models = apps.get_models()
for model in models:
jet.register(model)
except: # if no migrations yet
pass
def ready(self):
self.check_token()
self.register_models()
================================================
FILE: jet_django/deps/__init__.py
================================================
================================================
FILE: jet_django/deps/django_filters/__init__.py
================================================
# flake8: noqa
import pkgutil
from .filterset import FilterSet
from .filters import *
# We make the `rest_framework` module available without an additional import.
# If DRF is not installed, no-op.
if pkgutil.find_loader('jet_django.deps.rest_framework') is not None:
from . import rest_framework
del pkgutil
__version__ = '2.0.0'
def parse_version(version):
'''
'0.1.2.dev1' -> (0, 1, 2, 'dev1')
'0.1.2' -> (0, 1, 2)
'''
v = version.split('.')
ret = []
for p in v:
if p.isdigit():
ret.append(int(p))
else:
ret.append(p)
return tuple(ret)
VERSION = parse_version(__version__)
================================================
FILE: jet_django/deps/django_filters/compat.py
================================================
from django.conf import settings
# django-crispy-forms is optional
try:
import crispy_forms
except ImportError:
crispy_forms = None
def is_crispy():
return 'crispy_forms' in settings.INSTALLED_APPS and crispy_forms
# coreapi is optional (Note that uritemplate is a dependency of coreapi)
# Fixes #525 - cannot simply import from jet_django.deps.rest_framework.compat, due to
# import issues w/ django-guardian.
try:
import coreapi
except ImportError:
coreapi = None
try:
import coreschema
except ImportError:
coreschema = None
================================================
FILE: jet_django/deps/django_filters/conf.py
================================================
from django.conf import settings as dj_settings
from django.core.signals import setting_changed
from django.utils.translation import ugettext_lazy as _
from .utils import deprecate
DEFAULTS = {
'DISABLE_HELP_TEXT': False,
# empty/null choices
'EMPTY_CHOICE_LABEL': '---------',
'NULL_CHOICE_LABEL': None,
'NULL_CHOICE_VALUE': 'null',
'VERBOSE_LOOKUPS': {
# transforms don't need to be verbose, since their expressions are chained
'date': _('date'),
'year': _('year'),
'month': _('month'),
'day': _('day'),
'week_day': _('week day'),
'hour': _('hour'),
'minute': _('minute'),
'second': _('second'),
# standard lookups
'exact': _(''),
'iexact': _(''),
'contains': _('contains'),
'icontains': _('contains'),
'in': _('is in'),
'gt': _('is greater than'),
'gte': _('is greater than or equal to'),
'lt': _('is less than'),
'lte': _('is less than or equal to'),
'startswith': _('starts with'),
'istartswith': _('starts with'),
'endswith': _('ends with'),
'iendswith': _('ends with'),
'range': _('is in range'),
'isnull': _(''),
'regex': _('matches regex'),
'iregex': _('matches regex'),
'search': _('search'),
# postgres lookups
'contained_by': _('is contained by'),
'overlap': _('overlaps'),
'has_key': _('has key'),
'has_keys': _('has keys'),
'has_any_keys': _('has any keys'),
'trigram_similar': _('search'),
},
}
DEPRECATED_SETTINGS = [
]
def is_callable(value):
# check for callables, except types
return callable(value) and not isinstance(value, type)
class Settings(object):
def __getattr__(self, name):
if name not in DEFAULTS:
msg = "'%s' object has no attribute '%s'"
raise AttributeError(msg % (self.__class__.__name__, name))
value = self.get_setting(name)
if is_callable(value):
value = value()
# Cache the result
setattr(self, name, value)
return value
def get_setting(self, setting):
django_setting = 'FILTERS_%s' % setting
if setting in DEPRECATED_SETTINGS and hasattr(dj_settings, django_setting):
deprecate("The '%s' setting has been deprecated." % django_setting)
return getattr(dj_settings, django_setting, DEFAULTS[setting])
def change_setting(self, setting, value, enter, **kwargs):
if not setting.startswith('FILTERS_'):
return
setting = setting[8:] # strip 'FILTERS_'
# ensure a valid app setting is being overridden
if setting not in DEFAULTS:
return
# if exiting, delete value to repopulate
if enter:
setattr(self, setting, value)
else:
delattr(self, setting)
settings = Settings()
setting_changed.connect(settings.change_setting)
================================================
FILE: jet_django/deps/django_filters/constants.py
================================================
ALL_FIELDS = '__all__'
EMPTY_VALUES = ([], (), {}, '', None)
================================================
FILE: jet_django/deps/django_filters/exceptions.py
================================================
from django.core.exceptions import FieldError
class FieldLookupError(FieldError):
def __init__(self, model_field, lookup_expr):
super().__init__(
"Unsupported lookup '%s' for field '%s'." % (lookup_expr, model_field)
)
================================================
FILE: jet_django/deps/django_filters/fields.py
================================================
from collections import namedtuple
from datetime import datetime, time
from django import forms
from django.utils.dateparse import parse_datetime
from django.utils.encoding import force_str
from django.utils.translation import ugettext_lazy as _
from .conf import settings
from .constants import EMPTY_VALUES
from .utils import handle_timezone
from .widgets import (
BaseCSVWidget,
CSVWidget,
DateRangeWidget,
LookupChoiceWidget,
RangeWidget
)
class RangeField(forms.MultiValueField):
widget = RangeWidget
def __init__(self, fields=None, *args, **kwargs):
if fields is None:
fields = (
forms.DecimalField(),
forms.DecimalField())
super().__init__(fields, *args, **kwargs)
def compress(self, data_list):
if data_list:
return slice(*data_list)
return None
class DateRangeField(RangeField):
widget = DateRangeWidget
def __init__(self, *args, **kwargs):
fields = (
forms.DateField(),
forms.DateField())
super().__init__(fields, *args, **kwargs)
def compress(self, data_list):
if data_list:
start_date, stop_date = data_list
if start_date:
start_date = handle_timezone(
datetime.combine(start_date, time.min),
False
)
if stop_date:
stop_date = handle_timezone(
datetime.combine(stop_date, time.max),
False
)
return slice(start_date, stop_date)
return None
class DateTimeRangeField(RangeField):
widget = DateRangeWidget
def __init__(self, *args, **kwargs):
fields = (
forms.DateTimeField(),
forms.DateTimeField())
super().__init__(fields, *args, **kwargs)
class TimeRangeField(RangeField):
widget = DateRangeWidget
def __init__(self, *args, **kwargs):
fields = (
forms.TimeField(),
forms.TimeField())
super().__init__(fields, *args, **kwargs)
class Lookup(namedtuple('Lookup', ('value', 'lookup_expr'))):
def __new__(cls, value, lookup_expr):
if value in EMPTY_VALUES or lookup_expr in EMPTY_VALUES:
raise ValueError(
"Empty values ([], (), {}, '', None) are not "
"valid Lookup arguments. Return None instead."
)
return super().__new__(cls, value, lookup_expr)
class LookupChoiceField(forms.MultiValueField):
default_error_messages = {
'lookup_required': _('Select a lookup.'),
}
def __init__(self, field, lookup_choices, *args, **kwargs):
empty_label = kwargs.pop('empty_label', settings.EMPTY_CHOICE_LABEL)
fields = (field, ChoiceField(choices=lookup_choices, empty_label=empty_label))
widget = LookupChoiceWidget(widgets=[f.widget for f in fields])
kwargs['widget'] = widget
kwargs['help_text'] = field.help_text
super().__init__(fields, *args, **kwargs)
def compress(self, data_list):
if len(data_list) == 2:
value, lookup_expr = data_list
if value not in EMPTY_VALUES:
if lookup_expr not in EMPTY_VALUES:
return Lookup(value=value, lookup_expr=lookup_expr)
else:
raise forms.ValidationError(
self.error_messages['lookup_required'],
code='lookup_required')
return None
class IsoDateTimeField(forms.DateTimeField):
"""
Supports 'iso-8601' date format too which is out the scope of
the ``datetime.strptime`` standard library
# ISO 8601: ``http://www.w3.org/TR/NOTE-datetime``
Based on Gist example by David Medina https://gist.github.com/copitux/5773821
"""
ISO_8601 = 'iso-8601'
input_formats = [ISO_8601]
def strptime(self, value, format):
value = force_str(value)
if format == self.ISO_8601:
parsed = parse_datetime(value)
if parsed is None: # Continue with other formats if doesn't match
raise ValueError
return handle_timezone(parsed)
return super().strptime(value, format)
class BaseCSVField(forms.Field):
"""
Base field for validating CSV types. Value validation is performed by
secondary base classes.
ex::
class IntegerCSVField(BaseCSVField, filters.IntegerField):
pass
"""
base_widget_class = BaseCSVWidget
def __init__(self, *args, **kwargs):
widget = kwargs.get('widget') or self.widget
kwargs['widget'] = self._get_widget_class(widget)
super().__init__(*args, **kwargs)
def _get_widget_class(self, widget):
# passthrough, allows for override
if isinstance(widget, BaseCSVWidget) or (
isinstance(widget, type) and
issubclass(widget, BaseCSVWidget)):
return widget
# complain since we are unable to reconstruct widget instances
assert isinstance(widget, type), \
"'%s.widget' must be a widget class, not %s." \
% (self.__class__.__name__, repr(widget))
bases = (self.base_widget_class, widget, )
return type(str('CSV%s' % widget.__name__), bases, {})
def clean(self, value):
if value is None:
return None
return [super(BaseCSVField, self).clean(v) for v in value]
class BaseRangeField(BaseCSVField):
# Force use of text input, as range must always have two inputs. A date
# input would only allow a user to input one value and would always fail.
widget = CSVWidget
default_error_messages = {
'invalid_values': _('Range query expects two values.')
}
def clean(self, value):
value = super().clean(value)
assert value is None or isinstance(value, list)
if value and len(value) != 2:
raise forms.ValidationError(
self.error_messages['invalid_values'],
code='invalid_values')
return value
class ChoiceIterator(object):
# Emulates the behavior of ModelChoiceIterator, but instead wraps
# the field's _choices iterable.
def __init__(self, field, choices):
self.field = field
self.choices = choices
def __iter__(self):
if self.field.empty_label is not None:
yield ("", self.field.empty_label)
if self.field.null_label is not None:
yield (self.field.null_value, self.field.null_label)
# Python 2 lacks 'yield from'
for choice in self.choices:
yield choice
def __len__(self):
add = 1 if self.field.empty_label is not None else 0
add += 1 if self.field.null_label is not None else 0
return len(self.choices) + add
class ModelChoiceIterator(forms.models.ModelChoiceIterator):
# Extends the base ModelChoiceIterator to add in 'null' choice handling.
# This is a bit verbose since we have to insert the null choice after the
# empty choice, but before the remainder of the choices.
def __iter__(self):
iterable = super().__iter__()
if self.field.empty_label is not None:
yield next(iterable)
if self.field.null_label is not None:
yield (self.field.null_value, self.field.null_label)
# Python 2 lacks 'yield from'
for value in iterable:
yield value
def __len__(self):
add = 1 if self.field.null_label is not None else 0
return super().__len__() + add
class ChoiceIteratorMixin(object):
def __init__(self, *args, **kwargs):
self.null_label = kwargs.pop('null_label', settings.NULL_CHOICE_LABEL)
self.null_value = kwargs.pop('null_value', settings.NULL_CHOICE_VALUE)
super().__init__(*args, **kwargs)
def _get_choices(self):
return super()._get_choices()
def _set_choices(self, value):
super()._set_choices(value)
value = self.iterator(self, self._choices)
self._choices = self.widget.choices = value
choices = property(_get_choices, _set_choices)
# Unlike their Model* counterparts, forms.ChoiceField and forms.MultipleChoiceField do not set empty_label
class ChoiceField(ChoiceIteratorMixin, forms.ChoiceField):
iterator = ChoiceIterator
def __init__(self, *args, **kwargs):
self.empty_label = kwargs.pop('empty_label', settings.EMPTY_CHOICE_LABEL)
super().__init__(*args, **kwargs)
class MultipleChoiceField(ChoiceIteratorMixin, forms.MultipleChoiceField):
iterator = ChoiceIterator
def __init__(self, *args, **kwargs):
self.empty_label = None
super().__init__(*args, **kwargs)
class ModelChoiceField(ChoiceIteratorMixin, forms.ModelChoiceField):
iterator = ModelChoiceIterator
def to_python(self, value):
# bypass the queryset value check
if self.null_label is not None and value == self.null_value:
return value
return super().to_python(value)
class ModelMultipleChoiceField(ChoiceIteratorMixin, forms.ModelMultipleChoiceField):
iterator = ModelChoiceIterator
def _check_values(self, value):
null = self.null_label is not None and value and self.null_value in value
if null: # remove the null value and any potential duplicates
value = [v for v in value if v != self.null_value]
result = list(super()._check_values(value))
result += [self.null_value] if null else []
return result
================================================
FILE: jet_django/deps/django_filters/filters.py
================================================
from collections import OrderedDict
from datetime import timedelta
from django import forms
from django.db.models import Q
from django.db.models.constants import LOOKUP_SEP
from django.forms.utils import pretty_name
from django.utils.itercompat import is_iterable
from django.utils.timezone import now
from django.utils.translation import ugettext_lazy as _
from .conf import settings
from .constants import EMPTY_VALUES
from .fields import (
BaseCSVField,
BaseRangeField,
ChoiceField,
DateRangeField,
DateTimeRangeField,
IsoDateTimeField,
LookupChoiceField,
ModelChoiceField,
ModelMultipleChoiceField,
MultipleChoiceField,
RangeField,
TimeRangeField
)
from .utils import get_model_field, label_for_filter
__all__ = [
'AllValuesFilter',
'AllValuesMultipleFilter',
'BaseCSVFilter',
'BaseInFilter',
'BaseRangeFilter',
'BooleanFilter',
'CharFilter',
'ChoiceFilter',
'DateFilter',
'DateFromToRangeFilter',
'DateRangeFilter',
'DateTimeFilter',
'DateTimeFromToRangeFilter',
'DurationFilter',
'Filter',
'IsoDateTimeFilter',
'LookupChoiceFilter',
'ModelChoiceFilter',
'ModelMultipleChoiceFilter',
'MultipleChoiceFilter',
'NumberFilter',
'NumericRangeFilter',
'OrderingFilter',
'RangeFilter',
'TimeFilter',
'TimeRangeFilter',
'TypedChoiceFilter',
'TypedMultipleChoiceFilter',
'UUIDFilter',
]
class Filter(object):
creation_counter = 0
field_class = forms.Field
def __init__(self, field_name=None, lookup_expr='exact', *, label=None,
method=None, distinct=False, exclude=False, **kwargs):
self.field_name = field_name
self.lookup_expr = lookup_expr
self.label = label
self.method = method
self.distinct = distinct
self.exclude = exclude
self.extra = kwargs
self.extra.setdefault('required', False)
self.creation_counter = Filter.creation_counter
Filter.creation_counter += 1
# TODO: remove assertion in 2.1
assert not isinstance(self.lookup_expr, (type(None), list)), \
"The `lookup_expr` argument no longer accepts `None` or a list of " \
"expressions. Use the `LookupChoiceFilter` instead. See: " \
"https://django-filter.readthedocs.io/en/master/guide/migration.html"
def get_method(self, qs):
"""Return filter method based on whether we're excluding
or simply filtering.
"""
return qs.exclude if self.exclude else qs.filter
def method():
"""
Filter method needs to be lazily resolved, as it may be dependent on
the 'parent' FilterSet.
"""
def fget(self):
return self._method
def fset(self, value):
self._method = value
# clear existing FilterMethod
if isinstance(self.filter, FilterMethod):
del self.filter
# override filter w/ FilterMethod.
if value is not None:
self.filter = FilterMethod(self)
return locals()
method = property(**method())
def label():
def fget(self):
if self._label is None and hasattr(self, 'model'):
self._label = label_for_filter(
self.model, self.field_name, self.lookup_expr, self.exclude
)
return self._label
def fset(self, value):
self._label = value
return locals()
label = property(**label())
@property
def field(self):
if not hasattr(self, '_field'):
field_kwargs = self.extra.copy()
if settings.DISABLE_HELP_TEXT:
field_kwargs.pop('help_text', None)
self._field = self.field_class(label=self.label, **field_kwargs)
return self._field
def filter(self, qs, value):
if value in EMPTY_VALUES:
return qs
if self.distinct:
qs = qs.distinct()
lookup = '%s__%s' % (self.field_name, self.lookup_expr)
qs = self.get_method(qs)(**{lookup: value})
return qs
class CharFilter(Filter):
field_class = forms.CharField
class BooleanFilter(Filter):
field_class = forms.NullBooleanField
class ChoiceFilter(Filter):
field_class = ChoiceField
def __init__(self, *args, **kwargs):
self.null_value = kwargs.get('null_value', settings.NULL_CHOICE_VALUE)
super().__init__(*args, **kwargs)
def filter(self, qs, value):
if value != self.null_value:
return super().filter(qs, value)
qs = self.get_method(qs)(**{'%s__%s' % (self.field_name, self.lookup_expr): None})
return qs.distinct() if self.distinct else qs
class TypedChoiceFilter(Filter):
field_class = forms.TypedChoiceField
class UUIDFilter(Filter):
field_class = forms.UUIDField
class MultipleChoiceFilter(Filter):
"""
This filter performs OR(by default) or AND(using conjoined=True) query
on the selected options.
Advanced usage
--------------
Depending on your application logic, when all or no choices are selected,
filtering may be a no-operation. In this case you may wish to avoid the
filtering overhead, particularly if using a `distinct` call.
You can override `get_filter_predicate` to use a custom filter.
By default it will use the filter's name for the key, and the value will
be the model object - or in case of passing in `to_field_name` the
value of that attribute on the model.
Set `always_filter` to `False` after instantiation to enable the default
`is_noop` test. You can override `is_noop` if you need a different test
for your application.
`distinct` defaults to `True` as to-many relationships will generally
require this.
"""
field_class = MultipleChoiceField
always_filter = True
def __init__(self, *args, **kwargs):
kwargs.setdefault('distinct', True)
self.conjoined = kwargs.pop('conjoined', False)
self.null_value = kwargs.get('null_value', settings.NULL_CHOICE_VALUE)
super().__init__(*args, **kwargs)
def is_noop(self, qs, value):
"""
Return `True` to short-circuit unnecessary and potentially slow
filtering.
"""
if self.always_filter:
return False
# A reasonable default for being a noop...
if self.extra.get('required') and len(value) == len(self.field.choices):
return True
return False
def filter(self, qs, value):
if not value:
# Even though not a noop, no point filtering if empty.
return qs
if self.is_noop(qs, value):
return qs
if not self.conjoined:
q = Q()
for v in set(value):
if v == self.null_value:
v = None
predicate = self.get_filter_predicate(v)
if self.conjoined:
qs = self.get_method(qs)(**predicate)
else:
q |= Q(**predicate)
if not self.conjoined:
qs = self.get_method(qs)(q)
return qs.distinct() if self.distinct else qs
def get_filter_predicate(self, v):
try:
return {self.field_name: getattr(v, self.field.to_field_name)}
except (AttributeError, TypeError):
return {self.field_name: v}
class TypedMultipleChoiceFilter(MultipleChoiceFilter):
field_class = forms.TypedMultipleChoiceField
class DateFilter(Filter):
field_class = forms.DateField
class DateTimeFilter(Filter):
field_class = forms.DateTimeField
class IsoDateTimeFilter(DateTimeFilter):
"""
Uses IsoDateTimeField to support filtering on ISO 8601 formated datetimes.
For context see:
* https://code.djangoproject.com/ticket/23448
* https://github.com/tomchristie/django-rest-framework/issues/1338
* https://github.com/alex/django-filter/pull/264
"""
field_class = IsoDateTimeField
class TimeFilter(Filter):
field_class = forms.TimeField
class DurationFilter(Filter):
field_class = forms.DurationField
class QuerySetRequestMixin(object):
"""
Add callable functionality to filters that support the ``queryset``
argument. If the ``queryset`` is callable, then it **must** accept the
``request`` object as a single argument.
This is useful for filtering querysets by properties on the ``request``
object, such as the user.
Example::
def departments(request):
company = request.user.company
return company.department_set.all()
class EmployeeFilter(filters.FilterSet):
department = filters.ModelChoiceFilter(queryset=departments)
...
The above example restricts the set of departments to those in the logged-in
user's associated company.
"""
def __init__(self, *args, **kwargs):
self.queryset = kwargs.get('queryset')
super().__init__(*args, **kwargs)
def get_request(self):
try:
return self.parent.request
except AttributeError:
return None
def get_queryset(self, request):
queryset = self.queryset
if callable(queryset):
return queryset(request)
return queryset
@property
def field(self):
request = self.get_request()
queryset = self.get_queryset(request)
if queryset is not None:
self.extra['queryset'] = queryset
return super().field
class ModelChoiceFilter(QuerySetRequestMixin, ChoiceFilter):
field_class = ModelChoiceField
def __init__(self, *args, **kwargs):
kwargs.setdefault('empty_label', settings.EMPTY_CHOICE_LABEL)
super().__init__(*args, **kwargs)
class ModelMultipleChoiceFilter(QuerySetRequestMixin, MultipleChoiceFilter):
field_class = ModelMultipleChoiceField
class NumberFilter(Filter):
field_class = forms.DecimalField
class NumericRangeFilter(Filter):
field_class = RangeField
def filter(self, qs, value):
if value:
if value.start is not None and value.stop is not None:
value = (value.start, value.stop)
elif value.start is not None:
self.lookup_expr = 'startswith'
value = value.start
elif value.stop is not None:
self.lookup_expr = 'endswith'
value = value.stop
return super().filter(qs, value)
class RangeFilter(Filter):
field_class = RangeField
def filter(self, qs, value):
if value:
if value.start is not None and value.stop is not None:
self.lookup_expr = 'range'
value = (value.start, value.stop)
elif value.start is not None:
self.lookup_expr = 'gte'
value = value.start
elif value.stop is not None:
self.lookup_expr = 'lte'
value = value.stop
return super().filter(qs, value)
def _truncate(dt):
return dt.date()
class DateRangeFilter(ChoiceFilter):
choices = [
('today', _('Today')),
('yesterday', _('Yesterday')),
('week', _('Past 7 days')),
('month', _('This month')),
('year', _('This year')),
]
filters = {
'today': lambda qs, name: qs.filter(**{
'%s__year' % name: now().year,
'%s__month' % name: now().month,
'%s__day' % name: now().day
}),
'yesterday': lambda qs, name: qs.filter(**{
'%s__year' % name: (now() - timedelta(days=1)).year,
'%s__month' % name: (now() - timedelta(days=1)).month,
'%s__day' % name: (now() - timedelta(days=1)).day,
}),
'week': lambda qs, name: qs.filter(**{
'%s__gte' % name: _truncate(now() - timedelta(days=7)),
'%s__lt' % name: _truncate(now() + timedelta(days=1)),
}),
'month': lambda qs, name: qs.filter(**{
'%s__year' % name: now().year,
'%s__month' % name: now().month
}),
'year': lambda qs, name: qs.filter(**{
'%s__year' % name: now().year,
}),
}
def __init__(self, choices=None, filters=None, *args, **kwargs):
if choices is not None:
self.choices = choices
if filters is not None:
self.filters = filters
unique = set([x[0] for x in self.choices]) ^ set(self.filters)
assert not unique, \
"Keys must be present in both 'choices' and 'filters'. Missing keys: " \
"'%s'" % ', '.join(sorted(unique))
# TODO: remove assertion in 2.1
assert not hasattr(self, 'options'), \
"The 'options' attribute has been replaced by 'choices' and 'filters'. " \
"See: https://django-filter.readthedocs.io/en/master/guide/migration.html"
# null choice not relevant
kwargs.setdefault('null_label', None)
super().__init__(choices=self.choices, *args, **kwargs)
def filter(self, qs, value):
if not value:
return qs
assert value in self.filters
qs = self.filters[value](qs, self.field_name)
return qs.distinct() if self.distinct else qs
class DateFromToRangeFilter(RangeFilter):
field_class = DateRangeField
class DateTimeFromToRangeFilter(RangeFilter):
field_class = DateTimeRangeField
class TimeRangeFilter(RangeFilter):
field_class = TimeRangeField
class AllValuesFilter(ChoiceFilter):
@property
def field(self):
qs = self.model._default_manager.distinct()
qs = qs.order_by(self.field_name).values_list(self.field_name, flat=True)
self.extra['choices'] = [(o, o) for o in qs]
return super().field
class AllValuesMultipleFilter(MultipleChoiceFilter):
@property
def field(self):
qs = self.model._default_manager.distinct()
qs = qs.order_by(self.field_name).values_list(self.field_name, flat=True)
self.extra['choices'] = [(o, o) for o in qs]
return super().field
class BaseCSVFilter(Filter):
"""
Base class for CSV type filters, such as IN and RANGE.
"""
base_field_class = BaseCSVField
def __init__(self, *args, **kwargs):
kwargs.setdefault('help_text', _('Multiple values may be separated by commas.'))
super().__init__(*args, **kwargs)
class ConcreteCSVField(self.base_field_class, self.field_class):
pass
ConcreteCSVField.__name__ = self._field_class_name(
self.field_class, self.lookup_expr
)
self.field_class = ConcreteCSVField
@classmethod
def _field_class_name(cls, field_class, lookup_expr):
"""
Generate a suitable class name for the concrete field class. This is not
completely reliable, as not all field class names are of the format
<Type>Field.
ex::
BaseCSVFilter._field_class_name(DateTimeField, 'year__in')
returns 'DateTimeYearInField'
"""
# DateTimeField => DateTime
type_name = field_class.__name__
if type_name.endswith('Field'):
type_name = type_name[:-5]
# year__in => YearIn
parts = lookup_expr.split(LOOKUP_SEP)
expression_name = ''.join(p.capitalize() for p in parts)
# DateTimeYearInField
return str('%s%sField' % (type_name, expression_name))
class BaseInFilter(BaseCSVFilter):
def __init__(self, *args, **kwargs):
kwargs.setdefault('lookup_expr', 'in')
super().__init__(*args, **kwargs)
class BaseRangeFilter(BaseCSVFilter):
base_field_class = BaseRangeField
def __init__(self, *args, **kwargs):
kwargs.setdefault('lookup_expr', 'range')
super().__init__(*args, **kwargs)
class LookupChoiceFilter(Filter):
"""
A combined filter that allows users to select the lookup expression from a dropdown.
* ``lookup_choices`` is an optional argument that accepts multiple input
formats, and is ultimately normlized as the choices used in the lookup
dropdown. See ``.get_lookup_choices()`` for more information.
* ``field_class`` is an optional argument that allows you to set the inner
form field class used to validate the value. Default: ``forms.CharField``
ex::
price = django_filters.LookupChoiceFilter(
field_class=forms.DecimalField,
lookup_choices=[
('exact', 'Equals'),
('gt', 'Greater than'),
('lt', 'Less than'),
]
)
"""
field_class = forms.CharField
outer_class = LookupChoiceField
def __init__(self, field_name=None, lookup_choices=None, field_class=None, **kwargs):
self.empty_label = kwargs.pop('empty_label', settings.EMPTY_CHOICE_LABEL)
super(LookupChoiceFilter, self).__init__(field_name=field_name, **kwargs)
self.lookup_choices = lookup_choices
if field_class is not None:
self.field_class = field_class
@classmethod
def normalize_lookup(cls, lookup):
"""
Normalize the lookup into a tuple of ``(lookup expression, display value)``
If the ``lookup`` is already a tuple, the tuple is not altered.
If the ``lookup`` is a string, a tuple is returned with the lookup
expression used as the basis for the display value.
ex::
>>> LookupChoiceFilter.normalize_lookup(('exact', 'Equals'))
('exact', 'Equals')
>>> LookupChoiceFilter.normalize_lookup('has_key')
('has_key', 'Has key')
"""
if isinstance(lookup, str):
return (lookup, pretty_name(lookup))
return (lookup[0], lookup[1])
def get_lookup_choices(self):
"""
Get the lookup choices in a format suitable for ``django.forms.ChoiceField``.
If the filter is initialized with ``lookup_choices``, this value is normalized
and passed to the underlying ``LookupChoiceField``. If no choices are provided,
they are generated from the corresponding model field's registered lookups.
"""
lookups = self.lookup_choices
if lookups is None:
field = get_model_field(self.model, self.field_name)
lookups = field.get_lookups()
return [self.normalize_lookup(l) for l in lookups]
@property
def field(self):
if not hasattr(self, '_field'):
inner_field = super().field
lookups = self.get_lookup_choices()
self._field = self.outer_class(
inner_field, lookups,
label=self.label,
empty_label=self.empty_label,
required=self.extra['required'],
)
return self._field
def filter(self, qs, lookup):
if not lookup:
return super(LookupChoiceFilter, self).filter(qs, None)
self.lookup_expr = lookup.lookup_expr
return super(LookupChoiceFilter, self).filter(qs, lookup.value)
class OrderingFilter(BaseCSVFilter, ChoiceFilter):
"""
Enable queryset ordering. As an extension of ``ChoiceFilter`` it accepts
two additional arguments that are used to build the ordering choices.
* ``fields`` is a mapping of {model field name: parameter name}. The
parameter names are exposed in the choices and mask/alias the field
names used in the ``order_by()`` call. Similar to field ``choices``,
``fields`` accepts the 'list of two-tuples' syntax that retains order.
``fields`` may also just be an iterable of strings. In this case, the
field names simply double as the exposed parameter names.
* ``field_labels`` is an optional argument that allows you to customize
the display label for the corresponding parameter. It accepts a mapping
of {field name: human readable label}. Keep in mind that the key is the
field name, and not the exposed parameter name.
Additionally, you can just provide your own ``choices`` if you require
explicit control over the exposed options. For example, when you might
want to disable descending sort options.
This filter is also CSV-based, and accepts multiple ordering params. The
default select widget does not enable the use of this, but it is useful
for APIs.
"""
descending_fmt = _('%s (descending)')
def __init__(self, *args, **kwargs):
"""
``fields`` may be either a mapping or an iterable.
``field_labels`` must be a map of field names to display labels
"""
fields = kwargs.pop('fields', {})
fields = self.normalize_fields(fields)
field_labels = kwargs.pop('field_labels', {})
self.param_map = {v: k for k, v in fields.items()}
if 'choices' not in kwargs:
kwargs['choices'] = self.build_choices(fields, field_labels)
kwargs.setdefault('label', _('Ordering'))
kwargs.setdefault('help_text', '')
kwargs.setdefault('null_label', None)
super().__init__(*args, **kwargs)
def get_ordering_value(self, param):
descending = param.startswith('-')
param = param[1:] if descending else param
field_name = self.param_map.get(param, param)
return "-%s" % field_name if descending else field_name
def filter(self, qs, value):
if value in EMPTY_VALUES:
return qs
ordering = [self.get_ordering_value(param) for param in value]
return qs.order_by(*ordering)
@classmethod
def normalize_fields(cls, fields):
"""
Normalize the fields into an ordered map of {field name: param name}
"""
# fields is a mapping, copy into new OrderedDict
if isinstance(fields, dict):
return OrderedDict(fields)
# convert iterable of values => iterable of pairs (field name, param name)
assert is_iterable(fields), \
"'fields' must be an iterable (e.g., a list, tuple, or mapping)."
# fields is an iterable of field names
assert all(isinstance(field, str) or
is_iterable(field) and len(field) == 2 # may need to be wrapped in parens
for field in fields), \
"'fields' must contain strings or (field name, param name) pairs."
return OrderedDict([
(f, f) if isinstance(f, str) else f for f in fields
])
def build_choices(self, fields, labels):
ascending = [
(param, labels.get(field, _(pretty_name(param))))
for field, param in fields.items()
]
descending = [
('-%s' % param, labels.get('-%s' % param, self.descending_fmt % label))
for param, label in ascending
]
# interleave the ascending and descending choices
return [val for pair in zip(ascending, descending) for val in pair]
class FilterMethod(object):
"""
This helper is used to override Filter.filter() when a 'method' argument
is passed. It proxies the call to the actual method on the filter's parent.
"""
def __init__(self, filter_instance):
self.f = filter_instance
def __call__(self, qs, value):
if value in EMPTY_VALUES:
return qs
return self.method(qs, self.f.field_name, value)
@property
def method(self):
"""
Resolve the method on the parent filterset.
"""
instance = self.f
# noop if 'method' is a function
if callable(instance.method):
return instance.method
# otherwise, method is the name of a method on the parent FilterSet.
assert hasattr(instance, 'parent'), \
"Filter '%s' must have a parent FilterSet to find '.%s()'" % \
(instance.field_name, instance.method)
parent = instance.parent
method = getattr(parent, instance.method, None)
assert callable(method), \
"Expected parent FilterSet '%s.%s' to have a '.%s()' method." % \
(parent.__class__.__module__, parent.__class__.__name__, instance.method)
return method
================================================
FILE: jet_django/deps/django_filters/filterset.py
================================================
import copy
from collections import OrderedDict
from django import forms
from django.db import models
from django.db.models.constants import LOOKUP_SEP
from django.db.models.fields.related import (
ManyToManyRel,
ManyToOneRel,
OneToOneRel
)
from .conf import settings
from .constants import ALL_FIELDS
from .filters import (
BaseInFilter,
BaseRangeFilter,
BooleanFilter,
CharFilter,
ChoiceFilter,
DateFilter,
DateTimeFilter,
DurationFilter,
Filter,
ModelChoiceFilter,
ModelMultipleChoiceFilter,
NumberFilter,
TimeFilter,
UUIDFilter
)
from .utils import (
get_all_model_fields,
get_model_field,
resolve_field,
try_dbfield
)
def remote_queryset(field):
"""
Get the queryset for the other side of a relationship. This works
for both `RelatedField`s and `ForignObjectRel`s.
"""
model = field.related_model
# Reverse relationships do not have choice limits
if not hasattr(field, 'get_limit_choices_to'):
return model._default_manager.all()
limit_choices_to = field.get_limit_choices_to()
return model._default_manager.complex_filter(limit_choices_to)
class FilterSetOptions(object):
def __init__(self, options=None):
self.model = getattr(options, 'model', None)
self.fields = getattr(options, 'fields', None)
self.exclude = getattr(options, 'exclude', None)
self.filter_overrides = getattr(options, 'filter_overrides', {})
self.form = getattr(options, 'form', forms.Form)
class FilterSetMetaclass(type):
def __new__(cls, name, bases, attrs):
attrs['declared_filters'] = cls.get_declared_filters(bases, attrs)
new_class = super().__new__(cls, name, bases, attrs)
new_class._meta = FilterSetOptions(getattr(new_class, 'Meta', None))
new_class.base_filters = new_class.get_filters()
# TODO: remove assertion in 2.1
assert not hasattr(new_class, 'filter_for_reverse_field'), (
"`%(cls)s.filter_for_reverse_field` has been removed. "
"`%(cls)s.filter_for_field` now generates filters for reverse fields. "
"See: https://django-filter.readthedocs.io/en/master/guide/migration.html"
% {'cls': new_class.__name__}
)
return new_class
@classmethod
def get_declared_filters(cls, bases, attrs):
filters = [
(filter_name, attrs.pop(filter_name))
for filter_name, obj in list(attrs.items())
if isinstance(obj, Filter)
]
# Default the `filter.field_name` to the attribute name on the filterset
for filter_name, f in filters:
if getattr(f, 'field_name', None) is None:
f.field_name = filter_name
filters.sort(key=lambda x: x[1].creation_counter)
# merge declared filters from base classes
for base in reversed(bases):
if hasattr(base, 'declared_filters'):
filters = [
(name, f) for name, f
in base.declared_filters.items()
if name not in attrs
] + filters
return OrderedDict(filters)
FILTER_FOR_DBFIELD_DEFAULTS = {
models.AutoField: {'filter_class': NumberFilter},
models.CharField: {'filter_class': CharFilter},
models.TextField: {'filter_class': CharFilter},
models.BooleanField: {'filter_class': BooleanFilter},
models.DateField: {'filter_class': DateFilter},
models.DateTimeField: {'filter_class': DateTimeFilter},
models.TimeField: {'filter_class': TimeFilter},
models.DurationField: {'filter_class': DurationFilter},
models.DecimalField: {'filter_class': NumberFilter},
models.SmallIntegerField: {'filter_class': NumberFilter},
models.IntegerField: {'filter_class': NumberFilter},
models.PositiveIntegerField: {'filter_class': NumberFilter},
models.PositiveSmallIntegerField: {'filter_class': NumberFilter},
models.FloatField: {'filter_class': NumberFilter},
models.NullBooleanField: {'filter_class': BooleanFilter},
models.SlugField: {'filter_class': CharFilter},
models.EmailField: {'filter_class': CharFilter},
models.FilePathField: {'filter_class': CharFilter},
models.URLField: {'filter_class': CharFilter},
models.GenericIPAddressField: {'filter_class': CharFilter},
models.CommaSeparatedIntegerField: {'filter_class': CharFilter},
models.UUIDField: {'filter_class': UUIDFilter},
# Forward relationships
models.OneToOneField: {
'filter_class': ModelChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
'to_field_name': f.remote_field.field_name,
'null_label': settings.NULL_CHOICE_LABEL if f.null else None,
}
},
models.ForeignKey: {
'filter_class': ModelChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
'to_field_name': f.remote_field.field_name,
'null_label': settings.NULL_CHOICE_LABEL if f.null else None,
}
},
models.ManyToManyField: {
'filter_class': ModelMultipleChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
}
},
# Reverse relationships
OneToOneRel: {
'filter_class': ModelChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
'null_label': settings.NULL_CHOICE_LABEL if f.null else None,
}
},
ManyToOneRel: {
'filter_class': ModelMultipleChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
}
},
ManyToManyRel: {
'filter_class': ModelMultipleChoiceFilter,
'extra': lambda f: {
'queryset': remote_queryset(f),
}
},
}
class BaseFilterSet(object):
FILTER_DEFAULTS = FILTER_FOR_DBFIELD_DEFAULTS
def __init__(self, data=None, queryset=None, *, request=None, prefix=None):
if queryset is None:
queryset = self._meta.model._default_manager.all()
model = queryset.model
self.is_bound = data is not None
self.data = data or {}
self.queryset = queryset
self.request = request
self.form_prefix = prefix
self.filters = copy.deepcopy(self.base_filters)
# propagate the model and filterset to the filters
for filter_ in self.filters.values():
filter_.model = model
filter_.parent = self
def is_valid(self):
"""
Return True if the underlying form has no errors, or False otherwise.
"""
return self.is_bound and self.form.is_valid()
@property
def errors(self):
"""
Return an ErrorDict for the data provided for the underlying form.
"""
return self.form.errors
def filter_queryset(self, queryset):
"""
Filter the queryset with the underlying form's `cleaned_data`. You must
call `is_valid()` or `errors` before calling this method.
This method should be overridden if additional filtering needs to be
applied to the queryset before it is cached.
"""
for name, value in self.form.cleaned_data.items():
queryset = self.filters[name].filter(queryset, value)
assert isinstance(queryset, models.QuerySet), \
"Expected '%s.%s' to return a QuerySet, but got a %s instead." \
% (type(self).__name__, name, type(queryset).__name__)
return queryset
@property
def qs(self):
if not hasattr(self, '_qs'):
qs = self.queryset.all()
if self.is_bound:
# ensure form validation before filtering
self.errors
qs = self.filter_queryset(qs)
self._qs = qs
return self._qs
def get_form_class(self):
"""
Returns a django Form suitable of validating the filterset data.
This method should be overridden if the form class needs to be
customized relative to the filterset instance.
"""
fields = OrderedDict([
(name, filter_.field)
for name, filter_ in self.filters.items()])
return type(str('%sForm' % self.__class__.__name__),
(self._meta.form,), fields)
@property
def form(self):
if not hasattr(self, '_form'):
Form = self.get_form_class()
if self.is_bound:
self._form = Form(self.data, prefix=self.form_prefix)
else:
self._form = Form(prefix=self.form_prefix)
return self._form
@classmethod
def get_fields(cls):
"""
Resolve the 'fields' argument that should be used for generating filters on the
filterset. This is 'Meta.fields' sans the fields in 'Meta.exclude'.
"""
model = cls._meta.model
fields = cls._meta.fields
exclude = cls._meta.exclude
assert not (fields is None and exclude is None), \
"Setting 'Meta.model' without either 'Meta.fields' or 'Meta.exclude' " \
"has been deprecated since 0.15.0 and is now disallowed. Add an explicit " \
"'Meta.fields' or 'Meta.exclude' to the %s class." % cls.__name__
# Setting exclude with no fields implies all other fields.
if exclude is not None and fields is None:
fields = ALL_FIELDS
# Resolve ALL_FIELDS into all fields for the filterset's model.
if fields == ALL_FIELDS:
fields = get_all_model_fields(model)
# Remove excluded fields
exclude = exclude or []
if not isinstance(fields, dict):
fields = [(f, ['exact']) for f in fields if f not in exclude]
else:
fields = [(f, lookups) for f, lookups in fields.items() if f not in exclude]
return OrderedDict(fields)
@classmethod
def get_filter_name(cls, field_name, lookup_expr):
"""
Combine a field name and lookup expression into a usable filter name.
Exact lookups are the implicit default, so "exact" is stripped from the
end of the filter name.
"""
filter_name = LOOKUP_SEP.join([field_name, lookup_expr])
# This also works with transformed exact lookups, such as 'date__exact'
_exact = LOOKUP_SEP + 'exact'
if filter_name.endswith(_exact):
filter_name = filter_name[:-len(_exact)]
return filter_name
@classmethod
def get_filters(cls):
"""
Get all filters for the filterset. This is the combination of declared and
generated filters.
"""
# No model specified - skip filter generation
if not cls._meta.model:
return cls.declared_filters.copy()
# Determine the filters that should be included on the filterset.
filters = OrderedDict()
fields = cls.get_fields()
undefined = []
for field_name, lookups in fields.items():
field = get_model_field(cls._meta.model, field_name)
# warn if the field doesn't exist.
if field is None:
undefined.append(field_name)
for lookup_expr in lookups:
filter_name = cls.get_filter_name(field_name, lookup_expr)
# If the filter is explicitly declared on the class, skip generation
if filter_name in cls.declared_filters:
filters[filter_name] = cls.declared_filters[filter_name]
continue
if field is not None:
filters[filter_name] = cls.filter_for_field(field, field_name, lookup_expr)
# filter out declared filters
undefined = [f for f in undefined if f not in cls.declared_filters]
if undefined:
raise TypeError(
"'Meta.fields' contains fields that are not defined on this FilterSet: "
"%s" % ', '.join(undefined)
)
# Add in declared filters. This is necessary since we don't enforce adding
# declared filters to the 'Meta.fields' option
filters.update(cls.declared_filters)
return filters
@classmethod
def filter_for_field(cls, field, field_name, lookup_expr='exact'):
field, lookup_type = resolve_field(field, lookup_expr)
default = {
'field_name': field_name,
'lookup_expr': lookup_expr,
}
filter_class, params = cls.filter_for_lookup(field, lookup_type)
default.update(params)
assert filter_class is not None, (
"%s resolved field '%s' with '%s' lookup to an unrecognized field "
"type %s. Try adding an override to 'Meta.filter_overrides'. See: "
"https://django-filter.readthedocs.io/en/master/ref/filterset.html"
"#customise-filter-generation-with-filter-overrides"
) % (cls.__name__, field_name, lookup_expr, field.__class__.__name__)
return filter_class(**default)
@classmethod
def filter_for_lookup(cls, field, lookup_type):
DEFAULTS = dict(cls.FILTER_DEFAULTS)
if hasattr(cls, '_meta'):
DEFAULTS.update(cls._meta.filter_overrides)
data = try_dbfield(DEFAULTS.get, field.__class__) or {}
filter_class = data.get('filter_class')
params = data.get('extra', lambda field: {})(field)
# if there is no filter class, exit early
if not filter_class:
return None, {}
# perform lookup specific checks
if lookup_type == 'exact' and getattr(field, 'choices', None):
return ChoiceFilter, {'choices': field.choices}
if lookup_type == 'isnull':
data = try_dbfield(DEFAULTS.get, models.BooleanField)
filter_class = data.get('filter_class')
params = data.get('extra', lambda field: {})(field)
return filter_class, params
if lookup_type == 'in':
class ConcreteInFilter(BaseInFilter, filter_class):
pass
ConcreteInFilter.__name__ = cls._csv_filter_class_name(
filter_class, lookup_type
)
return ConcreteInFilter, params
if lookup_type == 'range':
class ConcreteRangeFilter(BaseRangeFilter, filter_class):
pass
ConcreteRangeFilter.__name__ = cls._csv_filter_class_name(
filter_class, lookup_type
)
return ConcreteRangeFilter, params
return filter_class, params
@classmethod
def _csv_filter_class_name(cls, filter_class, lookup_type):
"""
Generate a suitable class name for a concrete filter class. This is not
completely reliable, as not all filter class names are of the format
<Type>Filter.
ex::
FilterSet._csv_filter_class_name(DateTimeFilter, 'in')
returns 'DateTimeInFilter'
"""
# DateTimeFilter => DateTime
type_name = filter_class.__name__
if type_name.endswith('Filter'):
type_name = type_name[:-6]
# in => In
lookup_name = lookup_type.capitalize()
# DateTimeInFilter
return str('%s%sFilter' % (type_name, lookup_name))
class FilterSet(BaseFilterSet, metaclass=FilterSetMetaclass):
pass
def filterset_factory(model, fields=ALL_FIELDS):
meta = type(str('Meta'), (object,), {'model': model, 'fields': fields})
filterset = type(str('%sFilterSet' % model._meta.object_name),
(FilterSet,), {'Meta': meta})
return filterset
================================================
FILE: jet_django/deps/django_filters/locale/be/LC_MESSAGES/django.po
================================================
#
#: conf.py:27 conf.py:28 conf.py:41
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-24 18:51+0500\n"
"PO-Revision-Date: 2016-09-29 11:47+0300\n"
"Last-Translator: Eugena Mikhaylikova <eugena.mihailikova@gmail.com>\n"
"Language-Team: TextTempearture\n"
"Language: be\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.8.9\n"
#: conf.py:17
msgid "date"
msgstr "дата"
#: conf.py:18
msgid "year"
msgstr "год"
#: conf.py:19
msgid "month"
msgstr "месяц"
#: conf.py:20
msgid "day"
msgstr "дзень"
#: conf.py:21
msgid "week day"
msgstr "дзень тыдня"
#: conf.py:22
msgid "hour"
msgstr "гадзіну"
#: conf.py:23
msgid "minute"
msgstr "хвіліна"
#: conf.py:24
msgid "second"
msgstr "секунда"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "змяшчае"
#: conf.py:31
msgid "is in"
msgstr "у"
#: conf.py:32
msgid "is greater than"
msgstr "больш чым"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "больш або роўна"
#: conf.py:34
msgid "is less than"
msgstr "менш чым"
#: conf.py:35
msgid "is less than or equal to"
msgstr "менш або роўна"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "пачынаецца"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "заканчваецца"
#: conf.py:40
msgid "is in range"
msgstr "у дыяпазоне"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "адпавядае рэгулярнаму выразу"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "пошук"
#: conf.py:47
msgid "is contained by"
msgstr "змяшчаецца ў"
#: conf.py:48
msgid "overlaps"
msgstr "перакрываецца"
#: conf.py:49
msgid "has key"
msgstr "мае ключ"
#: conf.py:50
msgid "has keys"
msgstr "мае ключы"
#: conf.py:51
msgid "has any keys"
msgstr "мае любыя ключы"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Запыт дыяпазону чакае два значэння."
#: filters.py:429
msgid "Any date"
msgstr "Любая дата"
#: filters.py:430
msgid "Today"
msgstr "Сёння"
#: filters.py:435
msgid "Past 7 days"
msgstr "Мінулыя 7 дзён"
#: filters.py:439
msgid "This month"
msgstr "За гэты месяц"
#: filters.py:443
msgid "This year"
msgstr "У гэтым годзе"
#: filters.py:446
msgid "Yesterday"
msgstr "Учора"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Некалькі значэнняў могуць быць падзеленыя коскамі."
#: filters.py:591
#, python-format
msgid "%s (descending)"
msgstr "%s (па змяншэнні)"
#: filters.py:607
msgid "Ordering"
msgstr "Парадак"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Адправіць"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Фільтры па палях"
#: utils.py:224
msgid "exclude"
msgstr "выключаючы"
#: widgets.py:57
msgid "All"
msgstr "Усе"
#: widgets.py:159
msgid "Unknown"
msgstr "Не было прапанавана"
#: widgets.py:160
msgid "Yes"
msgstr "Ды"
#: widgets.py:161
msgid "No"
msgstr "Няма"
================================================
FILE: jet_django/deps/django_filters/locale/cs/LC_MESSAGES/django.po
================================================
#
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-24 11:03+0500\n"
"PO-Revision-Date: 2016-09-29 11:47+0300\n"
"Last-Translator: Eugena Mikhaylikova <eugena.mihailikova@gmail.com>\n"
"Language-Team: TextTempearture\n"
"Language: cs\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Generator: Poedit 1.8.9\n"
#: conf.py:17
msgid "date"
msgstr "datum"
#: conf.py:18
msgid "year"
msgstr "rok"
#: conf.py:19
msgid "month"
msgstr "měsíc"
#: conf.py:20
msgid "day"
msgstr "den"
#: conf.py:21
msgid "week day"
msgstr "den v týdnu"
#: conf.py:22
msgid "hour"
msgstr "hodinu"
#: conf.py:23
msgid "minute"
msgstr "minutu"
#: conf.py:24
msgid "second"
msgstr "vteřina"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "obsahuje"
#: conf.py:31
msgid "is in"
msgstr "v"
#: conf.py:32
msgid "is greater than"
msgstr "více než"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "větší nebo roven"
#: conf.py:34
msgid "is less than"
msgstr "méně než"
#: conf.py:35
msgid "is less than or equal to"
msgstr "menší nebo rovné"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "začíná"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "končí"
#: conf.py:40
msgid "is in range"
msgstr "v rozsahu"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "odpovídá normálnímu výrazu"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "vyhledávání"
#: conf.py:47
msgid "is contained by"
msgstr "je obsažen v"
#: conf.py:48
msgid "overlaps"
msgstr "překrývají"
#: conf.py:49
msgid "has key"
msgstr "má klíč"
#: conf.py:50
msgid "has keys"
msgstr "má klíče"
#: conf.py:51
msgid "has any keys"
msgstr "má nějaké klíče"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Rozsah dotazu očekává dvě hodnoty."
#: filters.py:429
msgid "Any date"
msgstr "Jakékoliv datum"
#: filters.py:430
msgid "Today"
msgstr "Dnes"
#: filters.py:435
msgid "Past 7 days"
msgstr "Posledních 7 dní"
#: filters.py:439
msgid "This month"
msgstr "Tento měsíc"
#: filters.py:443
msgid "This year"
msgstr "Tento rok"
#: filters.py:446
msgid "Yesterday"
msgstr "Včera"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Více hodnot lze oddělit čárkami."
#: filters.py:591
msgid "%s (descending)"
msgstr "%s (sestupně)"
#: filters.py:607
msgid "Ordering"
msgstr "Řád z"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Odeslat"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Filtry na polích"
#: utils.py:224
msgid "exclude"
msgstr "s výjimkou"
#: widgets.py:57
msgid "All"
msgstr "Všechno"
#: widgets.py:159
msgid "Unknown"
msgstr "Není nastaveno"
#: widgets.py:160
msgid "Yes"
msgstr "Ano"
#: widgets.py:161
msgid "No"
msgstr "Ne"
================================================
FILE: jet_django/deps/django_filters/locale/da/LC_MESSAGES/django.po
================================================
msgid ""
msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.0.1\n"
"Project-Id-Version: django-filter\n"
"Language: da\n"
"Last-Translator: Danni Randeris <danni@danniranderis.dk>\n"
"Language-Team: Danni Randeris <danni@danniranderis.dk>\n"
"POT-Creation-Date: 2017-10-28\n"
"PO-Revision-Date: 2017-10-28\n"
#: conf.py:17
msgid "date"
msgstr "dato"
#: conf.py:18
msgid "year"
msgstr "år"
#: conf.py:19
msgid "month"
msgstr "måned"
#: conf.py:20
msgid "day"
msgstr "dag"
#: conf.py:21
msgid "week day"
msgstr "ugedag"
#: conf.py:22
msgid "hour"
msgstr "time"
#: conf.py:23
msgid "minute"
msgstr "minut"
#: conf.py:24
msgid "second"
msgstr "sekund"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "indeholder"
#: conf.py:31
msgid "is in"
msgstr "er i"
#: conf.py:32
msgid "is greater than"
msgstr "er større end"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "er større end eller lig med"
#: conf.py:34
msgid "is less than"
msgstr "er mindre end"
#: conf.py:35
msgid "is less than or equal to"
msgstr "er mindre end eller lig med"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "starter med"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "slutter med"
#: conf.py:40
msgid "is in range"
msgstr "er i intervallet"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "matcher regex"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "søg"
#: conf.py:47
msgid "is contained by"
msgstr "er indeholdt af"
#: conf.py:48
msgid "overlaps"
msgstr "overlapper"
#: conf.py:49
msgid "has key"
msgstr "har string"
#: conf.py:50
msgid "has keys"
msgstr "har stringe"
#: conf.py:51
msgid "has any keys"
msgstr "har hvilken som helst string"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Interval forespørgslen forventer to værdier."
#: filters.py:429
msgid "Any date"
msgstr "Hvilken som helst dag"
#: filters.py:430
msgid "Today"
msgstr "I dag"
#: filters.py:435
msgid "Past 7 days"
msgstr "Sidste 7 dage"
#: filters.py:439
msgid "This month"
msgstr "Denne måned"
#: filters.py:443
msgid "This year"
msgstr "Dette år"
#: filters.py:446
msgid "Yesterday"
msgstr "I går"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Flere værdier kan adskilles via komma."
#: filters.py:591
msgid "%s (descending)"
msgstr "%s (aftagende)"
#: filters.py:607
msgid "Ordering"
msgstr "Sortering"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
#, fuzzy
msgid "Submit"
msgstr "Indsend"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
#, fuzzy
msgid "Field filters"
msgstr "Felt filtre"
#: utils.py:224
msgid "exclude"
msgstr "udelad"
#: widgets.py:57
msgid "All"
msgstr "Alle"
#: widgets.py:159
msgid "Unknown"
msgstr "Ukendt"
#: widgets.py:160
msgid "Yes"
msgstr "Ja"
#: widgets.py:161
msgid "No"
msgstr "Nej"
================================================
FILE: jet_django/deps/django_filters/locale/de/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: conf.py:27 conf.py:28 conf.py:41
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-24 11:03+0500\n"
"PO-Revision-Date: 2013-08-10 12:29+0100\n"
"Last-Translator: Florian Apolloner <florian@apolloner.eu>\n"
"Language-Team: \n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.5.4\n"
#: conf.py:17
msgid "date"
msgstr "Daten"
#: conf.py:18
msgid "year"
msgstr "Jahr"
#: conf.py:19
msgid "month"
msgstr "Monat"
#: conf.py:20
#, fuzzy
#| msgid "Today"
msgid "day"
msgstr "Heute"
#: conf.py:21
msgid "week day"
msgstr "Wochentag"
#: conf.py:22
msgid "hour"
msgstr "Stunde"
#: conf.py:23
msgid "minute"
msgstr "Minute"
#: conf.py:24
msgid "second"
msgstr "zweite"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "enthält"
#: conf.py:31
msgid "is in"
msgstr "ist in"
#: conf.py:32
msgid "is greater than"
msgstr "ist größer als"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "ist größer oder gleich"
#: conf.py:34
msgid "is less than"
msgstr "ist kleiner als"
#: conf.py:35
msgid "is less than or equal to"
msgstr "ist kleiner oder gleich"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "beginnt mit"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "endet mit"
#: conf.py:40
msgid "is in range"
msgstr "ist in Reichweite"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "passt auf Regex"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "Suche"
#: conf.py:47
msgid "is contained by"
msgstr "ist enthalten in"
#: conf.py:48
msgid "overlaps"
msgstr "überlappen"
#: conf.py:49
msgid "has key"
msgstr "hat Schlüssel"
#: conf.py:50
msgid "has keys"
msgstr "hat Schlüssel"
#: conf.py:51
msgid "has any keys"
msgstr "hat irgendwelche Schlüssel"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Die Bereichsabfrage erwartet zwei Werte."
#: filters.py:429
msgid "Any date"
msgstr "Alle Daten"
#: filters.py:430
msgid "Today"
msgstr "Heute"
#: filters.py:435
msgid "Past 7 days"
msgstr "Letzte 7 Tage"
#: filters.py:439
msgid "This month"
msgstr "Diesen Monat"
#: filters.py:443
msgid "This year"
msgstr "Dieses Jahr"
#: filters.py:446
msgid "Yesterday"
msgstr "Gestern"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Mehrere Werte können durch Kommas getrennt sein."
#: filters.py:591
#, python-format
msgid "%s (descending)"
msgstr "%s (absteigend)"
#: filters.py:607
msgid "Ordering"
msgstr "Ordnung"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Einreichen"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Feldfilter"
#: utils.py:224
msgid "exclude"
msgstr "ausschließen"
#: widgets.py:57
msgid "All"
msgstr "Alle"
#: widgets.py:159
msgid "Unknown"
msgstr "Unbekannte"
#: widgets.py:160
msgid "Yes"
msgstr "Ja"
#: widgets.py:161
msgid "No"
msgstr "Nein"
================================================
FILE: jet_django/deps/django_filters/locale/el/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Serafeim Papastefanos <spapas@gmail.com>, 2017.
#
#: .\conf.py:27 .\conf.py:28 .\conf.py:41
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-11-16 10:06+0200\n"
"PO-Revision-Date: 2017-11-16 10:04+0200\n"
"Last-Translator: Serafeim Papastefanos <spapas@gmail.com>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.5\n"
#: .\conf.py:17
msgid "date"
msgstr "ημερομηνία"
#: .\conf.py:18
msgid "year"
msgstr "έτος"
#: .\conf.py:19
msgid "month"
msgstr "μήνας"
#: .\conf.py:20
msgid "day"
msgstr "ημέρα"
#: .\conf.py:21
msgid "week day"
msgstr "ημέρα της εβδομάδας"
#: .\conf.py:22
msgid "hour"
msgstr "ώρα"
#: .\conf.py:23
msgid "minute"
msgstr "λεπτό"
#: .\conf.py:24
msgid "second"
msgstr "δευτερόλεπτο"
#: .\conf.py:29 .\conf.py:30
msgid "contains"
msgstr "περιέχει"
#: .\conf.py:31
msgid "is in"
msgstr "είναι εντός των"
#: .\conf.py:32
msgid "is greater than"
msgstr "είναι μεγαλύτερο από"
#: .\conf.py:33
msgid "is greater than or equal to"
msgstr "είναι μεγαλύτερο ή ίσο του"
#: .\conf.py:34
msgid "is less than"
msgstr "είναι μικρότερο από"
#: .\conf.py:35
msgid "is less than or equal to"
msgstr "είναι μικρότερο ή ίσο του"
#: .\conf.py:36 .\conf.py:37
msgid "starts with"
msgstr "ξεκινά με"
#: .\conf.py:38 .\conf.py:39
msgid "ends with"
msgstr "τελειώνει με"
#: .\conf.py:40
msgid "is in range"
msgstr "είναι εντος του εύρους"
#: .\conf.py:42 .\conf.py:43
msgid "matches regex"
msgstr "περιέχει regex"
#: .\conf.py:44 .\conf.py:52
msgid "search"
msgstr "αναζήτηση"
#: .\conf.py:47
msgid "is contained by"
msgstr "περιέχεται σε"
#: .\conf.py:48
msgid "overlaps"
msgstr "επικαλύπτεται"
#: .\conf.py:49
msgid "has key"
msgstr "έχει το κλειδί"
#: .\conf.py:50
msgid "has keys"
msgstr "έχει τα κλειδιά"
#: .\conf.py:51
msgid "has any keys"
msgstr "έχει οποιαδήποτε κλειδιά"
#: .\fields.py:178
msgid "Range query expects two values."
msgstr "Το ερώτημα εύρους απαιτεί δύο τιμές,"
#: .\filters.py:429
msgid "Any date"
msgstr "Οποιαδήποτε ημερομηνία"
#: .\filters.py:430
msgid "Today"
msgstr "Σήμερα"
#: .\filters.py:435
msgid "Past 7 days"
msgstr "Τις προηγούμενες 7 ημέρες"
#: .\filters.py:439
msgid "This month"
msgstr "Αυτό το μήνα"
#: .\filters.py:443
msgid "This year"
msgstr "Αυτό το έτος"
#: .\filters.py:446
msgid "Yesterday"
msgstr "Χτες"
#: .\filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Οι πολλαπλές τιμές πρέπει να διαχωρίζονται με κόμμα."
#: .\filters.py:591
#, python-format
msgid "%s (descending)"
msgstr "%s (φθίνουσα"
#: .\filters.py:607
msgid "Ordering"
msgstr "Ταξινόμηση"
#: .\rest_framework\filterset.py:30
#: .\templates\django_filters\rest_framework\form.html:5
msgid "Submit"
msgstr "Υποβολή"
#: .\templates\django_filters\rest_framework\crispy_form.html:4
#: .\templates\django_filters\rest_framework\form.html:2
msgid "Field filters"
msgstr "Φίλτρα πεδίων"
#: .\utils.py:224
msgid "exclude"
msgstr "απέκλεισε"
#: .\widgets.py:57
msgid "All"
msgstr "Όλα"
#: .\widgets.py:159
msgid "Unknown"
msgstr "Άγνωστο"
#: .\widgets.py:160
msgid "Yes"
msgstr "Ναι"
#: .\widgets.py:161
msgid "No"
msgstr "Όχι"
================================================
FILE: jet_django/deps/django_filters/locale/es_AR/LC_MESSAGES/django.po
================================================
# Django Filter translation.
# Copyright (C) 2013
# This file is distributed under the same license as the django_filter package.
# Gonzalo Bustos, 2015.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-05 19:24+0200\n"
"PO-Revision-Date: 2015-10-11 20:53-0300\n"
"Last-Translator: Gonzalo Bustos\n"
"Language-Team: Spanish (Argentina)\n"
"Language: es_AR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.6.10\n"
#: filters.py:51
msgid "This is an exclusion filter"
msgstr "Este es un filtro de exclusión"
#: filters.py:158
msgid "Any date"
msgstr "Cualquier fecha"
#: filters.py:159
msgid "Today"
msgstr "Hoy"
#: filters.py:164
msgid "Past 7 days"
msgstr "Últimos 7 días"
#: filters.py:168
msgid "This month"
msgstr "Este mes"
#: filters.py:172
msgid "This year"
msgstr "Este año"
#: widgets.py:63
msgid "All"
msgstr "Todos"
================================================
FILE: jet_django/deps/django_filters/locale/es_ES/LC_MESSAGES/django.po
================================================
# Django Filter translation.
# Copyright (C) 2013
# This file is distributed under the same license as the django_filter package.
# Carlos Goce, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-26 20:32+0100\n"
"PO-Revision-Date: 2017-01-26 20:52+0100\n"
"Last-Translator: Carlos Goce\n"
"Language-Team: Spanish (España)\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.11\n"
#: conf.py:26
msgid "date"
msgstr "fecha"
#: conf.py:27
msgid "year"
msgstr "año"
#: conf.py:28
msgid "month"
msgstr "mes"
#: conf.py:29
msgid "day"
msgstr "día"
#: conf.py:30
msgid "week day"
msgstr "día de la semana"
#: conf.py:31
msgid "hour"
msgstr "hora"
#: conf.py:32
msgid "minute"
msgstr "minuto"
#: conf.py:33
msgid "second"
msgstr "segundo"
#: conf.py:38 conf.py:39
msgid "contains"
msgstr "contiene"
#: conf.py:40
msgid "is in"
msgstr "presente en"
#: conf.py:41
msgid "is greater than"
msgstr "mayor que"
#: conf.py:42
msgid "is greater than or equal to"
msgstr "mayor o igual que"
#: conf.py:43
msgid "is less than"
msgstr "menor que"
#: conf.py:44
msgid "is less than or equal to"
msgstr "menor o igual que"
#: conf.py:45 conf.py:46
msgid "starts with"
msgstr "comienza por"
#: conf.py:47 conf.py:48
msgid "ends with"
msgstr "termina por"
#: conf.py:49
msgid "is in range"
msgstr "en el rango"
#: conf.py:51 conf.py:52
msgid "matches regex"
msgstr "coincide con la expresión regular"
#: conf.py:53 conf.py:61
msgid "search"
msgstr "buscar"
#: conf.py:56
msgid "is contained by"
msgstr "contenido en"
#: conf.py:57
msgid "overlaps"
msgstr "solapado"
#: conf.py:58
msgid "has key"
msgstr "contiene la clave"
#: conf.py:59
msgid "has keys"
msgstr "contiene las claves"
#: conf.py:60
msgid "has any keys"
msgstr "contiene alguna de las claves"
#: fields.py:167
msgid "Range query expects two values."
msgstr "Consultar un rango requiere dos valores"
#: filters.py:443
msgid "Any date"
msgstr "Cualquier fecha"
#: filters.py:444
msgid "Today"
msgstr "Hoy"
#: filters.py:449
msgid "Past 7 days"
msgstr "Últimos 7 días"
#: filters.py:453
msgid "This month"
msgstr "Este mes"
#: filters.py:457
msgid "This year"
msgstr "Este año"
#: filters.py:460
msgid "Yesterday"
msgstr "Ayer"
#: filters.py:526
msgid "Multiple values may be separated by commas."
msgstr "Múltiples valores separados por comas."
#: filters.py:605
#, python-format
msgid "%s (descending)"
msgstr "%s (descendente)"
#: filters.py:621
msgid "Ordering"
msgstr "Ordenado"
#: utils.py:220
msgid "exclude"
msgstr "excluye"
#: widgets.py:71
msgid "All"
msgstr "Todo"
#: widgets.py:119
msgid "Unknown"
msgstr "Desconocido"
#: widgets.py:120
msgid "Yes"
msgstr "Sí"
#: widgets.py:121
msgid "No"
msgstr "No"
#: rest_framework/filterset.py:31
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Enviar"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Filtros de campo"
================================================
FILE: jet_django/deps/django_filters/locale/fr/LC_MESSAGES/django.po
================================================
# Django Filter translation.
# Copyright (C) 2013
# This file is distributed under the same license as the django_filter package.
# Axel Haustant <noirbizarre@gmail.com>, 2013.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2013-07-05 19:24+0200\n"
"PO-Revision-Date: 2013-07-05 19:24+0200\n"
"Last-Translator: Axel Haustant <noirbizarre@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: filters.py:51
msgid "This is an exclusion filter"
msgstr "Ceci est un filtre d'exclusion"
#: filters.py:158
msgid "Any date"
msgstr "Toutes les dates"
#: filters.py:159
msgid "Today"
msgstr "Aujourd'hui"
#: filters.py:164
msgid "Past 7 days"
msgstr "7 derniers jours"
#: filters.py:168
msgid "This month"
msgstr "Ce mois-ci"
#: filters.py:172
msgid "This year"
msgstr "Cette année"
#: widgets.py:63
msgid "All"
msgstr "Tous"
================================================
FILE: jet_django/deps/django_filters/locale/pl/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: conf.py:35 conf.py:36 conf.py:49
msgid ""
msgstr ""
"Project-Id-Version: django_filters 0.0.1\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-09-01 17:21+0000\n"
"PO-Revision-Date: 2015-07-25 01:27+0100\n"
"Last-Translator: Adam Dobrawy <naczelnik@jawnosc.tk>\n"
"Language-Team: Adam Dobrawy <naczelnik@jawnosc.tk>\n"
"Language: pl_PL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.5.4\n"
#: conf.py:25
#, fuzzy
#| msgid "Any date"
msgid "date"
msgstr "Dowolna data"
#: conf.py:26
#, fuzzy
#| msgid "This year"
msgid "year"
msgstr "Ten rok"
#: conf.py:27
#, fuzzy
#| msgid "This month"
msgid "month"
msgstr "Ten miesiąc"
#: conf.py:28
#, fuzzy
#| msgid "Today"
msgid "day"
msgstr "Dziś"
#: conf.py:29
msgid "week day"
msgstr "dzień tygodnia"
#: conf.py:30
msgid "hour"
msgstr "godzina"
#: conf.py:31
msgid "minute"
msgstr "minuta"
#: conf.py:32
msgid "second"
msgstr ""
#: conf.py:37 conf.py:38
msgid "contains"
msgstr "zawiera"
#: conf.py:39
msgid "is in"
msgstr "zawiera się w"
#: conf.py:40
msgid "is greater than"
msgstr "powyżej"
#: conf.py:41
msgid "is greater than or equal to"
msgstr "powyżej lub równe"
#: conf.py:42
msgid "is less than"
msgstr "poniżej"
#: conf.py:43
msgid "is less than or equal to"
msgstr "poniżej lub równe"
#: conf.py:44 conf.py:45
msgid "starts with"
msgstr "zaczyna się od"
#: conf.py:46 conf.py:47
msgid "ends with"
msgstr "kończy się na"
#: conf.py:48
msgid "is in range"
msgstr "zawiera się w zakresie"
#: conf.py:50 conf.py:51
msgid "matches regex"
msgstr "pasuje do wyrażenia regularnego"
#: conf.py:52 conf.py:60
msgid "search"
msgstr "szukaj"
#: conf.py:55
msgid "is contained by"
msgstr "zawiera się w"
#: conf.py:56
msgid "overlaps"
msgstr ""
#: conf.py:57
msgid "has key"
msgstr ""
#: conf.py:58
msgid "has keys"
msgstr ""
#: conf.py:59
msgid "has any keys"
msgstr ""
#: fields.py:172
msgid "Range query expects two values."
msgstr ""
#: filters.py:452
msgid "Any date"
msgstr "Dowolna data"
#: filters.py:453
msgid "Today"
msgstr "Dziś"
#: filters.py:458
msgid "Past 7 days"
msgstr "Ostatnie 7 dni"
#: filters.py:462
msgid "This month"
msgstr "Ten miesiąc"
#: filters.py:466
msgid "This year"
msgstr "Ten rok"
#: filters.py:469
msgid "Yesterday"
msgstr "Wczoraj"
#: filters.py:535
msgid "Multiple values may be separated by commas."
msgstr "Wiele wartości można rozdzielić przecinkami"
#: filters.py:614
#, python-format
msgid "%s (descending)"
msgstr "%s (malejąco)"
#: filters.py:630
msgid "Ordering"
msgstr "Sortowanie"
#: rest_framework/filterset.py:34
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr ""
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
#, fuzzy
#| msgid "Filter"
msgid "Field filters"
msgstr "Filter"
#: utils.py:225
msgid "exclude"
msgstr ""
#: widgets.py:66
msgid "All"
msgstr "Wszystko"
#: widgets.py:173
msgid "Unknown"
msgstr ""
#: widgets.py:174
msgid "Yes"
msgstr "Tak"
#: widgets.py:175
msgid "No"
msgstr "Nie"
#~ msgid "This is an exclusion filter"
#~ msgstr "Jest to filtr wykluczający"
================================================
FILE: jet_django/deps/django_filters/locale/pt_BR/LC_MESSAGES/django.po
================================================
# Django Filter translation.
# Copyright (C) 2017
# This file is distributed under the same license as the django_filter package.
# Anderson Scouto da Silva, 2017.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-11 22:04+0100\n"
"PO-Revision-Date: 2017-12-11 22:07-0200\n"
"Last-Translator: Anderson Scouto da Silva\n"
"Language-Team: \n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.13\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: conf.py:26
msgid "date"
msgstr "data"
#: conf.py:27
msgid "year"
msgstr "ano"
#: conf.py:28
msgid "month"
msgstr "mês"
#: conf.py:29
msgid "day"
msgstr "dia"
#: conf.py:30
msgid "week day"
msgstr "dia da semana"
#: conf.py:31
msgid "hour"
msgstr "hora"
#: conf.py:32
msgid "minute"
msgstr "minuto"
#: conf.py:33
msgid "second"
msgstr "segundo"
#: conf.py:38 conf.py:39
msgid "contains"
msgstr "contém"
#: conf.py:40
msgid "is in"
msgstr "presente em"
#: conf.py:41
msgid "is greater than"
msgstr "é maior que"
#: conf.py:42
msgid "is greater than or equal to"
msgstr "é maior ou igual que"
#: conf.py:43
msgid "is less than"
msgstr "é menor que"
#: conf.py:44
msgid "is less than or equal to"
msgstr "é menor ou igual que"
#: conf.py:45 conf.py:46
msgid "starts with"
msgstr "começa com"
#: conf.py:47 conf.py:48
msgid "ends with"
msgstr "termina com"
#: conf.py:49
msgid "is in range"
msgstr "está no range"
#: conf.py:51 conf.py:52
msgid "matches regex"
msgstr "coincide com a expressão regular"
#: conf.py:53 conf.py:61
msgid "search"
msgstr "buscar"
#: conf.py:56
msgid "is contained by"
msgstr "está contido por"
#: conf.py:57
msgid "overlaps"
msgstr "sobrepõe"
#: conf.py:58
msgid "has key"
msgstr "contém a chave"
#: conf.py:59
msgid "has keys"
msgstr "contém as chaves"
#: conf.py:60
msgid "has any keys"
msgstr "contém uma das chaves"
#: fields.py:167
msgid "Range query expects two values."
msgstr "Consulta por range requer dois valores."
#: filters.py:443
msgid "Any date"
msgstr "Qualquer data"
#: filters.py:444
msgid "Today"
msgstr "Hoje"
#: filters.py:449
msgid "Past 7 days"
msgstr "Últimos 7 dias"
#: filters.py:453
msgid "This month"
msgstr "Este mês"
#: filters.py:457
msgid "This year"
msgstr "Este ano"
#: filters.py:460
msgid "Yesterday"
msgstr "Ontem"
#: filters.py:526
msgid "Multiple values may be separated by commas."
msgstr "Valores múltiplos podem ser separados por vírgulas."
#: filters.py:605
#, python-format
msgid "%s (descending)"
msgstr "%s (decrescente)"
#: filters.py:621
msgid "Ordering"
msgstr "Ordenado"
#: utils.py:220
msgid "exclude"
msgstr "excluir"
#: widgets.py:71
msgid "All"
msgstr "Tudo"
#: widgets.py:119
msgid "Unknown"
msgstr "Desconhecido"
#: widgets.py:120
msgid "Yes"
msgstr "Sim"
#: widgets.py:121
msgid "No"
msgstr "Não"
#: rest_framework/filterset.py:31
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Enviar"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Filtros de campo"
================================================
FILE: jet_django/deps/django_filters/locale/ru/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#: conf.py:27 conf.py:28 conf.py:41
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-24 11:03+0500\n"
"PO-Revision-Date: 2016-09-29 11:47+0300\n"
"Last-Translator: Mikhail Mitrofanov <mm@elec.ru>\n"
"Language-Team: \n"
"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.8.9\n"
#: conf.py:17
msgid "date"
msgstr "дата"
#: conf.py:18
msgid "year"
msgstr "год"
#: conf.py:19
msgid "month"
msgstr "месяц"
#: conf.py:20
msgid "day"
msgstr "день"
#: conf.py:21
msgid "week day"
msgstr "день недели"
#: conf.py:22
msgid "hour"
msgstr "час"
#: conf.py:23
msgid "minute"
msgstr "минута"
#: conf.py:24
msgid "second"
msgstr "секунда"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "содержит"
#: conf.py:31
msgid "is in"
msgstr "в"
#: conf.py:32
msgid "is greater than"
msgstr "больше чем"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "больше или равно"
#: conf.py:34
msgid "is less than"
msgstr "меньше чем"
#: conf.py:35
msgid "is less than or equal to"
msgstr "меньше или равно"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "начинается"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "заканчивается"
#: conf.py:40
msgid "is in range"
msgstr "в диапазоне"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "соответствует регулярному выражению"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "поиск"
#: conf.py:47
msgid "is contained by"
msgstr "содержится в"
#: conf.py:48
msgid "overlaps"
msgstr "перекрывается"
#: conf.py:49
msgid "has key"
msgstr "имеет ключ"
#: conf.py:50
msgid "has keys"
msgstr "имеет ключи"
#: conf.py:51
msgid "has any keys"
msgstr "имеет любые ключи"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Запрос диапазона ожидает два значения."
#: filters.py:429
msgid "Any date"
msgstr "Любая дата"
#: filters.py:430
msgid "Today"
msgstr "Сегодня"
#: filters.py:435
msgid "Past 7 days"
msgstr "Прошедшие 7 дней"
#: filters.py:439
msgid "This month"
msgstr "За этот месяц"
#: filters.py:443
msgid "This year"
msgstr "В этом году"
#: filters.py:446
msgid "Yesterday"
msgstr "Вчера"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Несколько значений могут быть разделены запятыми."
#: filters.py:591
#, python-format
msgid "%s (descending)"
msgstr "%s (по убыванию)"
#: filters.py:607
msgid "Ordering"
msgstr "Порядок"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Отправить"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Фильтры по полям"
#: utils.py:224
msgid "exclude"
msgstr "исключая"
#: widgets.py:57
msgid "All"
msgstr "Все"
#: widgets.py:159
msgid "Unknown"
msgstr "Не задано"
#: widgets.py:160
msgid "Yes"
msgstr "Да"
#: widgets.py:161
msgid "No"
msgstr "Нет"
================================================
FILE: jet_django/deps/django_filters/locale/sk/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-25 19:11+0200\n"
"PO-Revision-Date: 2018-03-25 19:18+0058\n"
"Last-Translator: b'Erik Telepovsky <erik@pragmaticmates.com>'\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
"X-Translated-Using: django-rosetta 0.8.1\n"
#: conf.py:17
msgid "date"
msgstr "dátum"
#: conf.py:18
msgid "year"
msgstr "rok"
#: conf.py:19
msgid "month"
msgstr "mesiac"
#: conf.py:20
msgid "day"
msgstr "deň"
#: conf.py:21
msgid "week day"
msgstr "deň týždňa"
#: conf.py:22
msgid "hour"
msgstr "hodina"
#: conf.py:23
msgid "minute"
msgstr "minúta"
#: conf.py:24
msgid "second"
msgstr "sekunda"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "obsahuje"
#: conf.py:31
msgid "is in"
msgstr "je v"
#: conf.py:32
msgid "is greater than"
msgstr "je vačší než"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "je vačší alebo rovný ako"
#: conf.py:34
msgid "is less than"
msgstr "je menší než"
#: conf.py:35
msgid "is less than or equal to"
msgstr "je menší alebo rovný ako"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "začína s"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "končí s"
#: conf.py:40
msgid "is in range"
msgstr "je v rozsahu"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "spĺňa regex"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "hľadať"
#: conf.py:47
msgid "is contained by"
msgstr "je obsiahnutý"
#: conf.py:48
msgid "overlaps"
msgstr "presahuje"
#: conf.py:49
msgid "has key"
msgstr "má kľúč"
#: conf.py:50
msgid "has keys"
msgstr "má kľúče"
#: conf.py:51
msgid "has any keys"
msgstr "má akékoľvek kľúče"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Rozsah očakáva dve hodnoty."
#: filters.py:429
msgid "Any date"
msgstr "Akýkoľvek dátum"
#: filters.py:430
msgid "Today"
msgstr "Dnes"
#: filters.py:435
msgid "Past 7 days"
msgstr "Posledných 7 dní"
#: filters.py:439
msgid "This month"
msgstr "Tento mesiac"
#: filters.py:443
msgid "This year"
msgstr "Tento rok"
#: filters.py:446
msgid "Yesterday"
msgstr "Včera"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Viacero hodnôt môže byť oddelených čiarkami."
#: filters.py:591
#, python-format
msgid "%s (descending)"
msgstr "%s (klesajúco)"
#: filters.py:607
msgid "Ordering"
msgstr "Zoradenie"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Potvrdiť"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Filtre poľa"
#: utils.py:224
msgid "exclude"
msgstr "neobsahuje"
#: widgets.py:57
msgid "All"
msgstr "Všetky"
#: widgets.py:159
msgid "Unknown"
msgstr "Neznáme"
#: widgets.py:160
msgid "Yes"
msgstr "Áno"
#: widgets.py:161
msgid "No"
msgstr "Nie"
================================================
FILE: jet_django/deps/django_filters/locale/uk/LC_MESSAGES/django.po
================================================
#
msgid ""
msgstr ""
"Project-Id-Version: django-filter\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-24 11:03+0500\n"
"PO-Revision-Date: 2016-09-29 11:47+0300\n"
"Last-Translator: Eugena Mikhaylikova <eugena.mihailikova@gmail.com>\n"
"Language-Team: TextTempearture\n"
"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Poedit 1.8.9\n"
#: conf.py:17
msgid "date"
msgstr "дата"
#: conf.py:18
msgid "year"
msgstr "рік"
#: conf.py:19
msgid "month"
msgstr "місяць"
#: conf.py:20
msgid "day"
msgstr "день"
#: conf.py:21
msgid "week day"
msgstr "день тижня"
#: conf.py:22
msgid "hour"
msgstr "година"
#: conf.py:23
msgid "minute"
msgstr "хвилина"
#: conf.py:24
msgid "second"
msgstr "секунда"
#: conf.py:29 conf.py:30
msgid "contains"
msgstr "містить"
#: conf.py:31
msgid "is in"
msgstr "в"
#: conf.py:32
msgid "is greater than"
msgstr "більше ніж"
#: conf.py:33
msgid "is greater than or equal to"
msgstr "більше або дорівнює"
#: conf.py:34
msgid "is less than"
msgstr "менше ніж"
#: conf.py:35
msgid "is less than or equal to"
msgstr "менше або дорівнює"
#: conf.py:36 conf.py:37
msgid "starts with"
msgstr "починається"
#: conf.py:38 conf.py:39
msgid "ends with"
msgstr "закінчується"
#: conf.py:40
msgid "is in range"
msgstr "в діапазоні"
#: conf.py:42 conf.py:43
msgid "matches regex"
msgstr "відповідає регулярному виразу"
#: conf.py:44 conf.py:52
msgid "search"
msgstr "пошук"
#: conf.py:47
msgid "is contained by"
msgstr "міститься в"
#: conf.py:48
msgid "overlaps"
msgstr "перекривається"
#: conf.py:49
msgid "has key"
msgstr "має ключ"
#: conf.py:50
msgid "has keys"
msgstr "має ключі"
#: conf.py:51
msgid "has any keys"
msgstr "має будь-які ключі"
#: fields.py:178
msgid "Range query expects two values."
msgstr "Запит діапазону очікує два значення."
#: filters.py:429
msgid "Any date"
msgstr "Будь-яка дата"
#: filters.py:430
msgid "Today"
msgstr "Сьогодні"
#: filters.py:435
msgid "Past 7 days"
msgstr "Минулі 7 днів"
#: filters.py:439
msgid "This month"
msgstr "За цей місяць"
#: filters.py:443
msgid "This year"
msgstr "В цьому році"
#: filters.py:446
msgid "Yesterday"
msgstr "Вчора"
#: filters.py:512
msgid "Multiple values may be separated by commas."
msgstr "Кілька значень можуть бути розділені комами."
#: filters.py:591
msgid "%s (descending)"
msgstr "%s (по спадаючій)"
#: filters.py:607
msgid "Ordering"
msgstr "Порядок"
#: rest_framework/filterset.py:30
#: templates/jet_django.deps.django_filters/rest_framework/form.html:5
msgid "Submit"
msgstr "Відправити"
#: templates/jet_django.deps.django_filters/rest_framework/crispy_form.html:4
#: templates/jet_django.deps.django_filters/rest_framework/form.html:2
msgid "Field filters"
msgstr "Фільтри по полях"
#: utils.py:224
msgid "exclude"
msgstr "виключаючи"
#: widgets.py:57
msgid "All"
msgstr "Усе"
#: widgets.py:159
msgid "Unknown"
msgstr "Не задано"
#: widgets.py:160
msgid "Yes"
msgstr "Так"
#: widgets.py:161
msgid "No"
msgstr "Немає"
================================================
FILE: jet_django/deps/django_filters/locale/zh_CN/LC_MESSAGES/django.po
================================================
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# Kane Blueriver <kxxoling@gmail.com>, 2016.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-30 17:39+0800\n"
"PO-Revision-Date: 2016-01-30 17:50+0800\n"
"Last-Translator: Kane Blueriver <kxxoling@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: filters.py:62
msgid "This is an exclusion filter"
msgstr "未启用该过滤器"
#: filters.py:62
msgid "Filter"
msgstr "过滤器"
#: filters.py:264
msgid "Any date"
msgstr "任何时刻"
#: filters.py:265
msgid "Today"
msgstr "今日"
#: filters.py:270
msgid "Past 7 days"
msgstr "过去 7 日"
#: filters.py:274
msgid "This month"
msgstr "本月"
#: filters.py:278
msgid "This year"
msgstr "今年"
#: filters.py:281
msgid "Yesterday"
msgstr "昨日"
#: filterset.py:398 filterset.py:409
#, python-format
msgid "%s (descending)"
msgstr "%s(降序)"
#: filterset.py:411
msgid "Ordering"
msgstr "排序"
#: widgets.py:60
msgid "All"
msgstr "全部"
================================================
FILE: jet_django/deps/django_filters/models.py
================================================
================================================
FILE: jet_django/deps/django_filters/rest_framework/__init__.py
================================================
# flake8: noqa
from .backends import DjangoFilterBackend
from .filterset import FilterSet
from .filters import *
================================================
FILE: jet_django/deps/django_filters/rest_framework/backends.py
================================================
import warnings
from django.template import loader
from django.utils.deprecation import RenameMethodsBase
from . import filters, filterset
from .. import compat, utils
# TODO: remove metaclass in 2.1
class RenameAttributes(utils.RenameAttributesBase, RenameMethodsBase):
renamed_attributes = (
('default_filter_set', 'filterset_base', utils.MigrationNotice),
)
renamed_methods = (
('get_filter_class', 'get_filterset_class', utils.MigrationNotice),
)
class DjangoFilterBackend(metaclass=RenameAttributes):
filterset_base = filterset.FilterSet
raise_exception = True
@property
def template(self):
if compat.is_crispy():
return 'jet_django.deps.django_filters/rest_framework/crispy_form.html'
return 'jet_django.deps.django_filters/rest_framework/form.html'
def get_filterset(self, request, queryset, view):
filterset_class = self.get_filterset_class(view, queryset)
if filterset_class is None:
return None
kwargs = self.get_filterset_kwargs(request, queryset, view)
return filterset_class(**kwargs)
def get_filterset_class(self, view, queryset=None):
"""
Return the `FilterSet` class used to filter the queryset.
"""
filterset_class = getattr(view, 'filterset_class', None)
filterset_fields = getattr(view, 'filterset_fields', None)
# TODO: remove assertion in 2.1
if filterset_class is None and hasattr(view, 'filter_class'):
utils.deprecate(
"`%s.filter_class` attribute should be renamed `filterset_class`."
% view.__class__.__name__)
filterset_class = getattr(view, 'filter_class', None)
# TODO: remove assertion in 2.1
if filterset_fields is None and hasattr(view, 'filter_fields'):
utils.deprecate(
"`%s.filter_fields` attribute should be renamed `filterset_fields`."
% view.__class__.__name__)
filterset_fields = getattr(view, 'filter_fields', None)
if filterset_class:
filterset_model = filterset_class._meta.model
# FilterSets do not need to specify a Meta class
if filterset_model and queryset is not None:
assert issubclass(queryset.model, filterset_model), \
'FilterSet model %s does not match queryset model %s' % \
(filterset_model, queryset.model)
return filterset_class
if filterset_fields and queryset is not None:
MetaBase = getattr(self.filterset_base, 'Meta', object)
class AutoFilterSet(self.filterset_base):
class Meta(MetaBase):
model = queryset.model
fields = filterset_fields
return AutoFilterSet
return None
def get_filterset_kwargs(self, request, queryset, view):
return {
'data': request.query_params,
'queryset': queryset,
'request': request,
}
def filter_queryset(self, request, queryset, view):
filterset = self.get_filterset(request, queryset, view)
if filterset is None:
return queryset
if not filterset.is_valid() and self.raise_exception:
raise utils.translate_validation(filterset.errors)
return filterset.qs
def to_html(self, request, queryset, view):
filterset = self.get_filterset(request, queryset, view)
if filterset is None:
return None
template = loader.get_template(self.template)
context = {'filter': filterset}
return template.render(context, request)
def get_coreschema_field(self, field):
if isinstance(field, filters.NumberFilter):
field_cls = compat.coreschema.Number
else:
field_cls = compat.coreschema.String
return field_cls(
description=str(field.extra.get('help_text', ''))
)
def get_schema_fields(self, view):
# This is not compatible with widgets where the query param differs from the
# filter's attribute name. Notably, this includes `MultiWidget`, where query
# params will be of the format `<name>_0`, `<name>_1`, etc...
assert compat.coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
assert compat.coreschema is not None, 'coreschema must be installed to use `get_schema_fields()`'
try:
queryset = view.get_queryset()
except Exception:
queryset = None
warnings.warn(
"{} is not compatible with schema generation".format(view.__class__)
)
filterset_class = self.get_filterset_class(view, queryset)
return [] if not filterset_class else [
compat.coreapi.Field(
name=field_name,
required=field.extra['required'],
location='query',
schema=self.get_coreschema_field(field)
) for field_name, field in filterset_class.base_filters.items()
]
================================================
FILE: jet_django/deps/django_filters/rest_framework/filters.py
================================================
from jet_django.deps.django_filters import filters
from ..filters import * # noqa
from ..widgets import BooleanWidget
__all__ = filters.__all__
class BooleanFilter(filters.BooleanFilter):
def __init__(self, *args, **kwargs):
kwargs.setdefault('widget', BooleanWidget)
super().__init__(*args, **kwargs)
================================================
FILE: jet_django/deps/django_filters/rest_framework/filterset.py
================================================
from copy import deepcopy
from django.db import models
from django.utils.translation import ugettext_lazy as _
from jet_django.deps.django_filters import filterset
from .. import compat
from .filters import BooleanFilter, IsoDateTimeFilter
FILTER_FOR_DBFIELD_DEFAULTS = deepcopy(filterset.FILTER_FOR_DBFIELD_DEFAULTS)
FILTER_FOR_DBFIELD_DEFAULTS.update({
models.DateTimeField: {'filter_class': IsoDateTimeFilter},
models.BooleanField: {'filter_class': BooleanFilter},
models.NullBooleanField: {'filter_class': BooleanFilter},
})
class FilterSet(filterset.FilterSet):
FILTER_DEFAULTS = FILTER_FOR_DBFIELD_DEFAULTS
@property
def form(self):
form = super().form
if compat.is_crispy():
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Submit
layout_components = list(form.fields.keys()) + [
Submit('', _('Submit'), css_class='btn-default'),
]
helper = FormHelper()
helper.form_method = 'GET'
helper.template_pack = 'bootstrap3'
helper.layout = Layout(*layout_components)
form.helper = helper
return form
================================================
FILE: jet_django/deps/django_filters/utils.py
================================================
import warnings
from collections import OrderedDict
import django
from django.conf import settings
from django.core.exceptions import FieldError
from django.db import models
from django.db.models.constants import LOOKUP_SEP
from django.db.models.expressions import Expression
from django.db.models.fields import FieldDoesNotExist
from django.db.models.fields.related import ForeignObjectRel, RelatedField
from django.utils import timezone
from django.utils.encoding import force_text
from django.utils.text import capfirst
from django.utils.translation import ugettext as _
from .exceptions import FieldLookupError
def deprecate(msg, level_modifier=0):
warnings.warn(msg, MigrationNotice, stacklevel=3 + level_modifier)
class MigrationNotice(DeprecationWarning):
url = 'https://django-filter.readthedocs.io/en/master/guide/migration.html'
def __init__(self, message):
super().__init__('%s See: %s' % (message, self.url))
class RenameAttributesBase(type):
"""
Handles the deprecation paths when renaming an attribute.
It does the following:
- Defines accessors that redirect to the renamed attributes.
- Complain whenever an old attribute is accessed.
This is conceptually based on `django.utils.deprecation.RenameMethodsBase`.
"""
renamed_attributes = ()
def __new__(metacls, name, bases, attrs):
# remove old attributes before creating class
old_names = [r[0] for r in metacls.renamed_attributes]
old_names = [name for name in old_names if name in attrs]
old_attrs = {name: attrs.pop(name) for name in old_names}
# get a handle to any accessors defined on the class
cls_getattr = attrs.pop('__getattr__', None)
cls_setattr = attrs.pop('__setattr__', None)
new_class = super().__new__(metacls, name, bases, attrs)
def __getattr__(self, name):
name = type(self).get_name(name)
if cls_getattr is not None:
return cls_getattr(self, name)
elif hasattr(super(new_class, self), '__getattr__'):
return super(new_class, self).__getattr__(name)
return self.__getattribute__(name)
def __setattr__(self, name, value):
name = type(self).get_name(name)
if cls_setattr is not None:
return cls_setattr(self, name, value)
return super(new_class, self).__setattr__(name, value)
new_class.__getattr__ = __getattr__
new_class.__setattr__ = __setattr__
# set renamed attributes
for name, value in old_attrs.items():
setattr(new_class, name, value)
return new_class
def get_name(metacls, name):
"""
Get the real attribute name. If the attribute has been renamed,
the new name will be returned and a deprecation warning issued.
"""
for renamed_attribute in metacls.renamed_attributes:
old_name, new_name, deprecation_warning = renamed_attribute
if old_name == name:
warnings.warn("`%s.%s` attribute should be renamed `%s`."
% (metacls.__name__, old_name, new_name),
deprecation_warning, 3)
return new_name
return name
def __getattr__(metacls, name):
return super().__getattribute__(metacls.get_name(name))
def __setattr__(metacls, name, value):
return super().__setattr__(metacls.get_name(name), value)
def try_dbfield(fn, field_class):
"""
Try ``fn`` with the DB ``field_class`` by walking its
MRO until a result is found.
ex::
_try_dbfield(field_dict.get, models.CharField)
"""
# walk the mro, as field_class could be a derived model field.
for cls in field_class.mro():
# skip if cls is models.Field
if cls is models.Field:
continue
data = fn(cls)
if data:
return data
def get_all_model_fields(model):
opts = model._meta
return [
f.name for f in sorted(opts.fields + opts.many_to_many)
if not isinstance(f, models.AutoField) and
not (getattr(f.remote_field, 'parent_link', False))
]
def get_model_field(model, field_name):
"""
Get a ``model`` field, traversing relationships
in the ``field_name``.
ex::
f = get_model_field(Book, 'author__first_name')
"""
fields = get_field_parts(model, field_name)
return fields[-1] if fields else None
def get_field_parts(model, field_name):
"""
Get the field parts that represent the traversable relationships from the
base ``model`` to the final field, described by ``field_name``.
ex::
>>> parts = get_field_parts(Book, 'author__first_name')
>>> [p.verbose_name for p in parts]
['author', 'first name']
"""
parts = field_name.split(LOOKUP_SEP)
opts = model._meta
fields = []
# walk relationships
for name in parts:
try:
field = opts.get_field(name)
except FieldDoesNotExist:
return None
fields.append(field)
if isinstance(field, RelatedField):
opts = field.remote_field.model._meta
elif isinstance(field, ForeignObjectRel):
opts = field.related_model._meta
return fields
def resolve_field(model_field, lookup_expr):
"""
Resolves a ``lookup_expr`` into its final output field, given
the initial ``model_field``. The lookup expression should only contain
transforms and lookups, not intermediary model field parts.
Note:
This method is based on django.db.models.sql.query.Query.build_lookup
For more info on the lookup API:
https://docs.djangoproject.com/en/1.9/ref/models/lookups/
"""
query = model_field.model._default_manager.all().query
lhs = Expression(model_field)
lookups = lookup_expr.split(LOOKUP_SEP)
assert len(lookups) > 0
try:
while lookups:
name = lookups[0]
args = (lhs, name)
if django.VERSION < (2, 0):
# rest_of_lookups was removed in Django 2.0
args += (lookups,)
# If there is just one part left, try first get_lookup() so
# that if the lhs supports both transform and lookup for the
# name, then lookup will be picked.
if len(lookups) == 1:
final_lookup = lhs.get_lookup(name)
if not final_lookup:
# We didn't find a lookup. We are going to interpret
# the name as transform, and do an Exact lookup against
# it.
lhs = query.try_transform(*args)
final_lookup = lhs.get_lookup('exact')
return lhs.output_field, final_lookup.lookup_name
lhs = query.try_transform(*args)
lookups = lookups[1:]
except FieldError as e:
raise FieldLookupError(model_field, lookup_expr) from e
def handle_timezone(value, is_dst=None):
if settings.USE_TZ and timezone.is_naive(value):
return timezone.make_aware(value, timezone.get_current_timezone(), is_dst)
elif not settings.USE_TZ and timezone.is_aware(value):
return timezone.make_naive(value, timezone.utc)
return value
def verbose_field_name(model, field_name):
"""
Get the verbose name for a given ``field_name``. The ``field_name``
will be traversed across relationships. Returns '[invalid name]' for
any field name that cannot be traversed.
ex::
>>> verbose_field_name(Article, 'author__name')
'author name'
"""
if field_name is None:
return '[invalid name]'
parts = get_field_parts(model, field_name)
if not parts:
return '[invalid name]'
names = []
for part in parts:
if isinstance(part, ForeignObjectRel):
if part.related_name:
names.append(part.related_name.replace('_', ' '))
else:
return '[invalid name]'
else:
names.append(force_text(part.verbose_name))
return ' '.join(names)
def verbose_lookup_expr(lookup_expr):
"""
Get a verbose, more humanized expression for a given ``lookup_expr``.
Each part in the expression is looked up in the ``FILTERS_VERBOSE_LOOKUPS``
dictionary. Missing keys will simply default to itself.
ex::
>>> verbose_lookup_expr('year__lt')
'year is less than'
# with `FILTERS_VERBOSE_LOOKUPS = {}`
>>> verbose_lookup_expr('year__lt')
'year lt'
"""
from .conf import settings as app_settings
VERBOSE_LOOKUPS = app_settings.VERBOSE_LOOKUPS or {}
lookups = [
force_text(VERBOSE_LOOKUPS.get(lookup, _(lookup)))
for lookup in lookup_expr.split(LOOKUP_SEP)
]
return ' '.join(lookups)
def label_for_filter(model, field_name, lookup_expr, exclude=False):
"""
Create a generic label suitable for a filter.
ex::
>>> label_for_filter(Article, 'author__name', 'in')
'auther name is in'
"""
name = verbose_field_name(model, field_name)
verbose_expression = [_('exclude'), name] if exclude else [name]
# iterable lookups indicate a LookupTypeField, which should not be verbose
if isinstance(lookup_expr, str):
verbose_expression += [verbose_lookup_expr(lookup_expr)]
verbose_expression = [force_text(part) for part in verbose_expression if part]
verbose_expression = capfirst(' '.join(verbose_expression))
return verbose_expression
def translate_validation(error_dict):
"""
Translate a Django ErrorDict into its DRF ValidationError.
"""
# it's necessary to lazily import the exception, as it can otherwise create
# an import loop when importing django_filters inside the project settings.
from jet_django.deps.rest_framework.exceptions import ValidationError, ErrorDetail
exc = OrderedDict(
(key, [ErrorDetail(e.message, code=e.code) for e in error_list])
for key, error_list in error_dict.as_data().items()
)
return ValidationError(exc)
================================================
FILE: jet_django/deps/django_filters/views.py
================================================
from django.core.exceptions import ImproperlyConfigured
from django.views.generic import View
from django.views.generic.list import (
MultipleObjectMixin,
MultipleObjectTemplateResponseMixin
)
from .constants import ALL_FIELDS
from .filterset import filterset_factory
from .utils import MigrationNotice, RenameAttributesBase
# TODO: remove metaclass in 2.1
class FilterMixinRenames(RenameAttributesBase):
renamed_attributes = (
('filter_fields', 'filterset_fields', MigrationNotice),
)
class FilterMixin(metaclass=FilterMixinRenames):
"""
A mixin that provides a way to show and handle a FilterSet in a request.
"""
filterset_class = None
filterset_fields = ALL_FIELDS
strict = True
def get_filterset_class(self):
"""
Returns the filterset class to use in this view
"""
if self.filterset_class:
return self.filterset_class
elif self.model:
return filterset_factory(model=self.model, fields=self.filterset_fields)
else:
msg = "'%s' must define 'filterset_class' or 'model'"
raise ImproperlyConfigured(msg % self.__class__.__name__)
def get_filterset(self, filterset_class):
"""
Returns an instance of the filterset to be used in this view.
"""
kwargs = self.get_filterset_kwargs(filterset_class)
return filterset_class(**kwargs)
def get_filterset_kwargs(self, filterset_class):
"""
Returns the keyword arguments for instanciating the filterset.
"""
kwargs = {
'data': self.request.GET or None,
'request': self.request,
}
try:
kwargs.update({
'queryset': self.get_queryset(),
})
except ImproperlyConfigured:
# ignore the error here if the filterset has a model defined
# to acquire a queryset from
if filterset_class._meta.model is None:
msg = ("'%s' does not define a 'model' and the view '%s' does "
"not return a valid queryset from 'get_queryset'. You "
"must fix one of them.")
args = (filterset_class.__name__, self.__class__.__name__)
raise ImproperlyConfigured(msg % args)
return kwargs
def get_strict(self):
return self.strict
class BaseFilterView(FilterMixin, MultipleObjectMixin, View):
def get(self, request, *args, **kwargs):
filterset_class = self.get_filterset_class()
self.filterset = self.get_filterset(filterset_class)
if self.filterset.is_valid() or not self.get_strict():
self.object_list = self.filterset.qs
else:
self.object_list = self.filterset.queryset.none()
context = self.get_context_data(filter=self.filterset,
object_list=self.object_list)
return self.render_to_response(context)
class FilterView(MultipleObjectTemplateResponseMixin, BaseFilterView):
"""
Render some list of objects with filter, set by `self.model` or
`self.queryset`.
`self.queryset` can actually be any iterable of items, not just a queryset.
"""
template_name_suffix = '_filter'
def object_filter(request, model=None, queryset=None, template_name=None,
extra_context=None, context_processors=None,
filter_class=None):
class ECFilterView(FilterView):
"""Handle the extra_context from the functional object_filter view"""
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
extra_context = self.kwargs.get('extra_context') or {}
for k, v in extra_context.items():
if callable(v):
v = v()
context[k] = v
return context
kwargs = dict(model=model, queryset=queryset, template_name=template_name,
filterset_class=filter_class)
view = ECFilterView.as_view(**kwargs)
return view(request, extra_context=extra_context)
================================================
FILE: jet_django/deps/django_filters/widgets.py
================================================
from collections import Iterable
from itertools import chain
from re import search, sub
from django import forms
from django.db.models.fields import BLANK_CHOICE_DASH
from django.forms.utils import flatatt
from django.utils.datastructures import MultiValueDict
from django.utils.encoding import force_text
from django.utils.http import urlencode
from django.utils.safestring import mark_safe
from django.utils.translation import ugettext as _
class LinkWidget(forms.Widget):
def __init__(self, attrs=None, choices=()):
super().__init__(attrs)
self.choices = choices
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
self.data = data
return value
def render(self, name, value, attrs=None, choices=(), renderer=None):
if not hasattr(self, 'data'):
self.data = {}
if value is None:
value = ''
final_attrs = self.build_attrs(self.attrs, extra_attrs=attrs)
output = ['<ul%s>' % flatatt(final_attrs)]
options = self.render_options(choices, [value], name)
if options:
output.append(options)
output.append('</ul>')
return mark_safe('\n'.join(output))
def render_options(self, choices, selected_choices, name):
selected_choices = set(force_text(v) for v in selected_choices)
output = []
for option_value, option_label in chain(self.choices, choices):
if isinstance(option_label, (list, tuple)):
for option in option_label:
output.append(
self.render_option(name, selected_choices, *option))
else:
output.append(
self.render_option(name, selected_choices,
option_value, option_label))
return '\n'.join(output)
def render_option(self, name, selected_choices,
option_value, option_label):
option_value = force_text(option_value)
if option_label == BLANK_CHOICE_DASH[0][1]:
option_label = _("All")
data = self.data.copy()
data[name] = option_value
selected = data == self.data or option_value in selected_choices
try:
url = data.urlencode()
except AttributeError:
url = urlencode(data)
return self.option_string() % {
'attrs': selected and ' class="selected"' or '',
'query_string': url,
'label': force_text(option_label)
}
def option_string(self):
return '<li><a%(attrs)s href="?%(query_string)s">%(label)s</a></li>'
class SuffixedMultiWidget(forms.MultiWidget):
"""
A MultiWidget that allows users to provide custom suffixes instead of indexes.
- Suffixes must be unique.
- There must be the same number of suffixes as fields.
"""
suffixes = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
assert len(self.widgets) == len(self.suffixes)
assert len(self.suffixes) == len(set(self.suffixes))
def suffixed(self, name, suffix):
return '_'.join([name, suffix]) if suffix else name
def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
for subcontext, suffix in zip(context['widget']['subwidgets'], self.suffixes):
subcontext['name'] = self.suffixed(name, suffix)
return context
def value_from_datadict(self, data, files, name):
return [
widget.value_from_datadict(data, files, self.suffixed(name, suffix))
for widget, suffix in zip(self.widgets, self.suffixes)
]
def value_omitted_from_data(self, data, files, name):
return all(
widget.value_omitted_from_data(data, files, self.suffixed(name, suffix))
for widget, suffix in zip(self.widgets, self.suffixes)
)
def replace_name(self, output, index):
result = search(r'name="(?P<name>.*)_%d"' % index, output)
name = result.group('name')
name = self.suffixed(name, self.suffixes[index])
name = 'name="%s"' % name
return sub(r'name=".*_%d"' % index, name, output)
def decompress(self, value):
if value is None:
return [None, None]
return value
class RangeWidget(SuffixedMultiWidget):
template_name = 'jet_django.deps.django_filters/widgets/multiwidget.html'
suffixes = ['min', 'max']
def __init__(self, attrs=None):
widgets = (forms.TextInput, forms.TextInput)
super().__init__(widgets, attrs)
def decompress(self, value):
if value:
return [value.start, value.stop]
return [None, None]
class DateRangeWidget(RangeWidget):
suffixes = ['after', 'before']
class LookupChoiceWidget(SuffixedMultiWidget):
suffixes = [None, 'lookup']
def decompress(self, value):
if value is None:
return [None, None]
return value
class BooleanWidget(forms.Select):
"""Convert true/false values into the internal Python True/False.
This can be used for AJAX queries that pass true/false from JavaScript's
internal types through.
"""
def __init__(self, attrs=None):
choices = (('', _('Unknown')),
('true', _('Yes')),
('false', _('No')))
super().__init__(attrs, choices)
def render(self, name, value, attrs=None, renderer=None):
try:
value = {
True: 'true',
False: 'false',
'1': 'true',
'0': 'false'
}[value]
except KeyError:
value = ''
return super().render(name, value, attrs, renderer=renderer)
def value_from_datadict(self, data, files, name):
value = data.get(name, None)
if isinstance(value, str):
value = value.lower()
return {
'1': True,
'0': False,
'true': True,
'false': False,
True: True,
False: False,
}.get(value, None)
class BaseCSVWidget(forms.Widget):
def _isiterable(self, value):
return isinstance(value, Iterable) and not isinstance(value, str)
def value_from_datadict(self, data, files, name):
value = super().value_from_datadict(data, files, name)
if value is not None:
if value == '': # empty value should parse as an empty list
return []
return value.split(',')
return None
def render(self, name, value, attrs=None, renderer=None):
if not self._isiterable(value):
value = [value]
if len(value) <= 1:
# delegate to main widget (Select, etc...) if not multiple values
value = value[0] if value else ''
return super().render(name, value, attrs, renderer=renderer)
gitextract_c7mt80bt/ ├── .gitignore ├── LICENSE ├── MANIFEST.in ├── README.rst ├── build/ │ └── lib/ │ └── jet_django/ │ ├── __init__.py │ ├── admin/ │ │ ├── __init__.py │ │ ├── jet.py │ │ ├── model_action.py │ │ └── model_description.py │ ├── apps.py │ ├── filters/ │ │ ├── __init__.py │ │ ├── model.py │ │ ├── model_aggregate.py │ │ ├── model_group.py │ │ ├── view_settings.py │ │ └── widget.py │ ├── management/ │ │ └── commands/ │ │ └── register_token.py │ ├── migrations/ │ │ ├── 0001_initial.py │ │ └── __init__.py │ ├── models/ │ │ ├── dashboard.py │ │ ├── menu_item.py │ │ ├── model_description.py │ │ ├── token.py │ │ ├── view_settings.py │ │ └── widget.py │ ├── pagination.py │ ├── permissions.py │ ├── serializers/ │ │ ├── __init__.py │ │ ├── dashboard.py │ │ ├── dashboard_set_widgets.py │ │ ├── menu_settings.py │ │ ├── model.py │ │ ├── model_description.py │ │ ├── model_detail.py │ │ ├── reorder.py │ │ ├── sql.py │ │ ├── view_settings.py │ │ ├── widget_detail.py │ │ ├── widget_list.py │ │ └── widget_update_position.py │ ├── settings.py │ ├── urls.py │ ├── utils/ │ │ ├── __init__.py │ │ ├── backend.py │ │ └── siblings.py │ └── views/ │ ├── __init__.py │ ├── dashboard.py │ ├── menu_settings.py │ ├── model.py │ ├── model_description.py │ ├── register.py │ ├── sql.py │ ├── view_settings.py │ └── widget.py ├── jet_django/ │ ├── __init__.py │ ├── admin/ │ │ ├── __init__.py │ │ ├── jet.py │ │ ├── model_action.py │ │ └── model_description.py │ ├── apps.py │ ├── deps/ │ │ ├── __init__.py │ │ ├── django_filters/ │ │ │ ├── __init__.py │ │ │ ├── compat.py │ │ │ ├── conf.py │ │ │ ├── constants.py │ │ │ ├── exceptions.py │ │ │ ├── fields.py │ │ │ ├── filters.py │ │ │ ├── filterset.py │ │ │ ├── locale/ │ │ │ │ ├── be/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── cs/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── da/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── de/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── el/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── es_AR/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── es_ES/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── fr/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── pl/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── pt_BR/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── ru/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── sk/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ ├── uk/ │ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ │ ├── django.mo │ │ │ │ │ └── django.po │ │ │ │ └── zh_CN/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── django.po │ │ │ ├── models.py │ │ │ ├── rest_framework/ │ │ │ │ ├── __init__.py │ │ │ │ ├── backends.py │ │ │ │ ├── filters.py │ │ │ │ └── filterset.py │ │ │ ├── utils.py │ │ │ ├── views.py │ │ │ └── widgets.py │ │ └── rest_framework/ │ │ ├── __init__.py │ │ ├── apps.py │ │ ├── authentication.py │ │ ├── authtoken/ │ │ │ ├── __init__.py │ │ │ ├── admin.py │ │ │ ├── apps.py │ │ │ ├── management/ │ │ │ │ ├── __init__.py │ │ │ │ └── commands/ │ │ │ │ ├── __init__.py │ │ │ │ └── drf_create_token.py │ │ │ ├── migrations/ │ │ │ │ ├── 0001_initial.py │ │ │ │ ├── 0002_auto_20160226_1747.py │ │ │ │ └── __init__.py │ │ │ ├── models.py │ │ │ ├── serializers.py │ │ │ └── views.py │ │ ├── checks.py │ │ ├── compat.py │ │ ├── decorators.py │ │ ├── documentation.py │ │ ├── exceptions.py │ │ ├── fields.py │ │ ├── filters.py │ │ ├── generics.py │ │ ├── locale/ │ │ │ ├── ach/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ar/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── be/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ca/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ca_ES/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── cs/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── da/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── de/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── el/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── el_GR/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── en/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── en_AU/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── en_CA/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── en_US/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── es/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── et/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── fa/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── fa_IR/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── fi/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── fr/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── fr_CA/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── gl/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── gl_ES/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── he_IL/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── hu/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── id/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── it/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ja/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ko_KR/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── lv/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── mk/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── nb/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── nl/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── nn/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── no/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── pl/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── pt/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── pt_BR/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── pt_PT/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ro/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── ru/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── sk/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── sl/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── sv/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── tr/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── tr_TR/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── uk/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── vi/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── zh_CN/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── zh_Hans/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ ├── zh_Hant/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ ├── django.mo │ │ │ │ └── django.po │ │ │ └── zh_TW/ │ │ │ └── LC_MESSAGES/ │ │ │ ├── django.mo │ │ │ └── django.po │ │ ├── metadata.py │ │ ├── mixins.py │ │ ├── models.py │ │ ├── negotiation.py │ │ ├── pagination.py │ │ ├── parsers.py │ │ ├── permissions.py │ │ ├── relations.py │ │ ├── renderers.py │ │ ├── request.py │ │ ├── response.py │ │ ├── reverse.py │ │ ├── routers.py │ │ ├── schemas/ │ │ │ ├── __init__.py │ │ │ ├── generators.py │ │ │ ├── inspectors.py │ │ │ ├── utils.py │ │ │ └── views.py │ │ ├── serializers.py │ │ ├── settings.py │ │ ├── status.py │ │ ├── test.py │ │ ├── throttling.py │ │ ├── urlpatterns.py │ │ ├── urls.py │ │ ├── utils/ │ │ │ ├── __init__.py │ │ │ ├── breadcrumbs.py │ │ │ ├── encoders.py │ │ │ ├── field_mapping.py │ │ │ ├── formatting.py │ │ │ ├── html.py │ │ │ ├── humanize_datetime.py │ │ │ ├── json.py │ │ │ ├── mediatypes.py │ │ │ ├── model_meta.py │ │ │ ├── representation.py │ │ │ ├── serializer_helpers.py │ │ │ └── urls.py │ │ ├── validators.py │ │ ├── versioning.py │ │ ├── views.py │ │ └── viewsets.py │ ├── fields/ │ │ └── raw_file.py │ ├── filters/ │ │ ├── __init__.py │ │ ├── geos_geometry.py │ │ ├── model.py │ │ ├── model_aggregate.py │ │ └── model_group.py │ ├── management/ │ │ └── commands/ │ │ ├── jet_register_token.py │ │ ├── jet_reset_token.py │ │ ├── jet_set_token.py │ │ └── jet_token.py │ ├── messages.py │ ├── migrations/ │ │ ├── 0001_initial.py │ │ ├── 0002_auto_20181014_2002.py │ │ └── __init__.py │ ├── mixins/ │ │ ├── cors_api_view.py │ │ └── method_override.py │ ├── models/ │ │ └── token.py │ ├── pagination.py │ ├── permissions.py │ ├── serializers/ │ │ ├── __init__.py │ │ ├── file_upload.py │ │ ├── message.py │ │ ├── model.py │ │ ├── model_detail.py │ │ ├── reorder.py │ │ ├── reset_order.py │ │ └── sql.py │ ├── settings.py │ ├── static/ │ │ └── jet_django.deps.rest_framework/ │ │ ├── css/ │ │ │ ├── bootstrap-tweaks.css │ │ │ ├── default.css │ │ │ ├── font-awesome-4.0.3.css │ │ │ └── prettify.css │ │ ├── docs/ │ │ │ ├── css/ │ │ │ │ ├── base.css │ │ │ │ └── highlight.css │ │ │ └── js/ │ │ │ ├── api.js │ │ │ └── highlight.pack.js │ │ └── js/ │ │ ├── ajax-form.js │ │ ├── coreapi-0.1.1.js │ │ ├── csrf.js │ │ ├── default.js │ │ └── prettify-min.js │ ├── templates/ │ │ ├── jet_django.deps.django_filters/ │ │ │ ├── rest_framework/ │ │ │ │ ├── crispy_form.html │ │ │ │ └── form.html │ │ │ └── widgets/ │ │ │ └── multiwidget.html │ │ └── jet_django.deps.rest_framework/ │ │ ├── admin/ │ │ │ ├── detail.html │ │ │ ├── dict_value.html │ │ │ ├── list.html │ │ │ ├── list_value.html │ │ │ └── simple_list_value.html │ │ ├── admin.html │ │ ├── api.html │ │ ├── base.html │ │ ├── docs/ │ │ │ ├── auth/ │ │ │ │ ├── basic.html │ │ │ │ ├── session.html │ │ │ │ └── token.html │ │ │ ├── document.html │ │ │ ├── error.html │ │ │ ├── index.html │ │ │ ├── interact.html │ │ │ ├── langs/ │ │ │ │ ├── javascript-intro.html │ │ │ │ ├── javascript.html │ │ │ │ ├── python-intro.html │ │ │ │ ├── python.html │ │ │ │ ├── shell-intro.html │ │ │ │ └── shell.html │ │ │ ├── link.html │ │ │ └── sidebar.html │ │ ├── filters/ │ │ │ ├── base.html │ │ │ ├── ordering.html │ │ │ └── search.html │ │ ├── horizontal/ │ │ │ ├── checkbox.html │ │ │ ├── checkbox_multiple.html │ │ │ ├── dict_field.html │ │ │ ├── fieldset.html │ │ │ ├── form.html │ │ │ ├── input.html │ │ │ ├── list_field.html │ │ │ ├── list_fieldset.html │ │ │ ├── radio.html │ │ │ ├── select.html │ │ │ ├── select_multiple.html │ │ │ └── textarea.html │ │ ├── inline/ │ │ │ ├── checkbox.html │ │ │ ├── checkbox_multiple.html │ │ │ ├── dict_field.html │ │ │ ├── fieldset.html │ │ │ ├── form.html │ │ │ ├── input.html │ │ │ ├── list_field.html │ │ │ ├── list_fieldset.html │ │ │ ├── radio.html │ │ │ ├── select.html │ │ │ ├── select_multiple.html │ │ │ └── textarea.html │ │ ├── login.html │ │ ├── login_base.html │ │ ├── pagination/ │ │ │ ├── numbers.html │ │ │ └── previous_and_next.html │ │ ├── raw_data_form.html │ │ ├── schema.js │ │ └── vertical/ │ │ ├── checkbox.html │ │ ├── checkbox_multiple.html │ │ ├── dict_field.html │ │ ├── fieldset.html │ │ ├── form.html │ │ ├── input.html │ │ ├── list_field.html │ │ ├── list_fieldset.html │ │ ├── radio.html │ │ ├── select.html │ │ ├── select_multiple.html │ │ └── textarea.html │ ├── templatetags/ │ │ ├── __init__.py │ │ └── jet_django_deps_rest_framework.py │ ├── urls.py │ ├── utils/ │ │ ├── __init__.py │ │ ├── backend.py │ │ └── siblings.py │ └── views/ │ ├── __init__.py │ ├── exception_handler.py │ ├── file_upload.py │ ├── message.py │ ├── model.py │ ├── model_description.py │ ├── register.py │ ├── root.py │ └── sql.py ├── manage.py ├── setup.py └── upload.sh
SYMBOL INDEX (1584 symbols across 158 files)
FILE: build/lib/jet_django/admin/jet.py
class JetAdmin (line 9) | class JetAdmin(object):
method models_view (line 12) | def models_view(self):
method register (line 24) | def register(self, Model, fields=None, actions=list(), ordering_field=...
method register_related_models (line 27) | def register_related_models(self):
FILE: build/lib/jet_django/admin/model_action.py
class JetAdminModelAction (line 5) | class JetAdminModelAction(forms.Form):
class Meta (line 8) | class Meta:
method init_meta (line 12) | def init_meta(cls):
method clean__ids (line 19) | def clean__ids(self):
method get_fields (line 22) | def get_fields(self):
method filer_queryset (line 27) | def filer_queryset(self, queryset):
method save (line 30) | def save(self, queryset):
FILE: build/lib/jet_django/admin/model_description.py
class JetAdminModelDescription (line 10) | class JetAdminModelDescription(object):
method __init__ (line 11) | def __init__(self, Model, fields=None, actions=list(), ordering_field=...
method viewset_url (line 40) | def viewset_url(self):
method get_model_fields (line 43) | def get_model_fields(self):
method get_model_relations (line 57) | def get_model_relations(self):
method get_display_model_fields (line 71) | def get_display_model_fields(self):
method serialize (line 81) | def serialize(self):
method get_model (line 122) | def get_model(self):
method get_related_models (line 128) | def get_related_models(self):
method serialize_model (line 134) | def serialize_model(self, Model):
FILE: build/lib/jet_django/apps.py
class JetDjangoConfig (line 4) | class JetDjangoConfig(AppConfig):
method ready (line 7) | def ready(self):
FILE: build/lib/jet_django/filters/model.py
function model_filter_class_factory (line 9) | def model_filter_class_factory(build_model, model_fields):
FILE: build/lib/jet_django/filters/model_aggregate.py
class AggregateFilter (line 6) | class AggregateFilter(django_filters.CharFilter):
method filter (line 8) | def filter(self, qs, value):
FILE: build/lib/jet_django/filters/model_group.py
class GroupFilter (line 6) | class GroupFilter(django_filters.CharFilter):
method filter (line 8) | def filter(self, qs, value):
FILE: build/lib/jet_django/filters/view_settings.py
class ViewSettingsFilterSet (line 6) | class ViewSettingsFilterSet(django_filters.FilterSet):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/filters/widget.py
class WidgetFilterSet (line 6) | class WidgetFilterSet(django_filters.FilterSet):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/management/commands/register_token.py
class Command (line 6) | class Command(BaseCommand):
method handle (line 7) | def handle(self, *args, **options):
FILE: build/lib/jet_django/migrations/0001_initial.py
class Migration (line 10) | class Migration(migrations.Migration):
FILE: build/lib/jet_django/models/dashboard.py
class Dashboard (line 6) | class Dashboard(models.Model):
class Meta (line 20) | class Meta:
method __str__ (line 25) | def __str__(self):
FILE: build/lib/jet_django/models/menu_item.py
class MenuSettings (line 6) | class MenuSettings(models.Model):
class Meta (line 17) | class Meta:
method __str__ (line 21) | def __str__(self):
FILE: build/lib/jet_django/models/model_description.py
class ModelDescription (line 6) | class ModelDescription(models.Model):
class Meta (line 27) | class Meta:
method __str__ (line 31) | def __str__(self):
FILE: build/lib/jet_django/models/token.py
class Token (line 5) | class Token(models.Model):
class Meta (line 19) | class Meta:
method __str__ (line 23) | def __str__(self):
FILE: build/lib/jet_django/models/view_settings.py
class ViewSettings (line 6) | class ViewSettings(models.Model):
class Meta (line 33) | class Meta:
method __str__ (line 37) | def __str__(self):
FILE: build/lib/jet_django/models/widget.py
class Widget (line 6) | class Widget(models.Model):
class Meta (line 44) | class Meta:
method __str__ (line 49) | def __str__(self):
FILE: build/lib/jet_django/pagination.py
class CustomPageNumberPagination (line 7) | class CustomPageNumberPagination(PageNumberPagination):
method get_paginated_response (line 10) | def get_paginated_response(self, data):
FILE: build/lib/jet_django/permissions.py
class HasProjectPermissions (line 7) | class HasProjectPermissions(BasePermission):
method has_permission (line 11) | def has_permission(self, request, view):
class ModifyNotInDemo (line 30) | class ModifyNotInDemo(BasePermission):
method has_permission (line 32) | def has_permission(self, request, view):
FILE: build/lib/jet_django/serializers/dashboard.py
class DashboardSerializer (line 7) | class DashboardSerializer(serializers.ModelSerializer):
class Meta (line 10) | class Meta:
FILE: build/lib/jet_django/serializers/dashboard_set_widgets.py
class DashboardSetWidgetsSerializer (line 9) | class DashboardSetWidgetsSerializer(serializers.ModelSerializer):
class Meta (line 12) | class Meta:
method update (line 18) | def update(self, instance, validated_data):
FILE: build/lib/jet_django/serializers/menu_settings.py
class MenuSettingsSerializer (line 6) | class MenuSettingsSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/serializers/model.py
function model_serializer_factory (line 4) | def model_serializer_factory(build_model, build_fields):
FILE: build/lib/jet_django/serializers/model_description.py
class ModelDescriptionSerializer (line 6) | class ModelDescriptionSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/serializers/model_detail.py
function model_detail_serializer_factory (line 6) | def model_detail_serializer_factory(build_model, build_fields):
FILE: build/lib/jet_django/serializers/reorder.py
function reorder_serializer_factory (line 6) | def reorder_serializer_factory(build_queryset, ordering_field):
FILE: build/lib/jet_django/serializers/sql.py
class SqlSerializer (line 5) | class SqlSerializer(serializers.Serializer):
method validate_query (line 9) | def validate_query(self, value):
FILE: build/lib/jet_django/serializers/view_settings.py
class ViewSettingsSerializer (line 6) | class ViewSettingsSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/serializers/widget_detail.py
class WidgetDetailSerializer (line 6) | class WidgetDetailSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/serializers/widget_list.py
class WidgetListSerializer (line 6) | class WidgetListSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/serializers/widget_update_position.py
class WidgetUpdatePositionSerializer (line 6) | class WidgetUpdatePositionSerializer(serializers.ModelSerializer):
class Meta (line 7) | class Meta:
FILE: build/lib/jet_django/urls.py
function init_urls (line 14) | def init_urls():
FILE: build/lib/jet_django/utils/backend.py
function api_method_url (line 7) | def api_method_url(method):
function register_token (line 11) | def register_token():
function project_auth (line 35) | def project_auth(token):
FILE: build/lib/jet_django/utils/siblings.py
function get_model_sibling (line 4) | def get_model_sibling(Model, instance, next, ordering=None):
FILE: build/lib/jet_django/views/dashboard.py
class DashboardViewSet (line 11) | class DashboardViewSet(viewsets.ModelViewSet):
method set_widgets (line 20) | def set_widgets(self, request, *args, **kwargs):
FILE: build/lib/jet_django/views/menu_settings.py
class MenuSettingsViewSet (line 10) | class MenuSettingsViewSet(viewsets.ModelViewSet):
method create (line 18) | def create(self, request, *args, **kwargs):
method get_object (line 25) | def get_object(self):
FILE: build/lib/jet_django/views/model.py
class AggregateSerializer (line 14) | class AggregateSerializer(serializers.Serializer):
method __init__ (line 17) | def __init__(self, *args, **kwargs):
class GroupSerializer (line 24) | class GroupSerializer(serializers.Serializer):
method __init__ (line 28) | def __init__(self, *args, **kwargs):
function model_viewset_factory (line 38) | def model_viewset_factory(build_model, build_filter_class, build_seriali...
FILE: build/lib/jet_django/views/model_description.py
class ModelDescriptionViewSet (line 14) | class ModelDescriptionViewSet(viewsets.ModelViewSet):
method create (line 22) | def create(self, request, *args, **kwargs):
method list (line 29) | def list(self, request, *args, **kwargs):
method get_object (line 108) | def get_object(self):
FILE: build/lib/jet_django/views/register.py
class RegisterView (line 8) | class RegisterView(generic.RedirectView):
method get (line 9) | def get(self, request, *args, **kwargs):
FILE: build/lib/jet_django/views/sql.py
class SqlError (line 12) | class SqlError(APIException):
method __init__ (line 17) | def __init__(self, detail):
method __str__ (line 20) | def __str__(self):
class SqlView (line 24) | class SqlView(views.APIView):
method get (line 29) | def get(self, request, *args, **kwargs):
FILE: build/lib/jet_django/views/view_settings.py
class ViewSettingsViewSet (line 11) | class ViewSettingsViewSet(viewsets.ModelViewSet):
method create (line 20) | def create(self, request, *args, **kwargs):
method get_object (line 27) | def get_object(self):
FILE: build/lib/jet_django/views/widget.py
class WidgetViewSet (line 9) | class WidgetViewSet(viewsets.ModelViewSet):
FILE: jet_django/admin/jet.py
class JetAdmin (line 4) | class JetAdmin(object):
method register (line 8) | def register(self, Model, fields=None, hidden=False):
method register_related_models (line 11) | def register_related_models(self):
method add_message_handler (line 26) | def add_message_handler(self, message_name, func):
method get_message_handler (line 29) | def get_message_handler(self, message_name):
FILE: jet_django/admin/model_action.py
class JetAdminModelAction (line 5) | class JetAdminModelAction(forms.Form):
class Meta (line 8) | class Meta:
method init_meta (line 12) | def init_meta(cls):
method clean__ids (line 19) | def clean__ids(self):
method get_fields (line 22) | def get_fields(self):
method filer_queryset (line 27) | def filer_queryset(self, queryset):
method save (line 30) | def save(self, queryset):
FILE: jet_django/admin/model_description.py
class JetAdminModelDescription (line 11) | class JetAdminModelDescription(object):
method __init__ (line 12) | def __init__(self, Model, fields=None, hidden=False):
method viewset_url (line 32) | def viewset_url(self):
method get_model_fields (line 35) | def get_model_fields(self):
method get_model_relations (line 50) | def get_model_relations(self):
method get_model_relation_through (line 64) | def get_model_relation_through(self, field):
method get_display_model_fields (line 70) | def get_display_model_fields(self):
method serialize (line 78) | def serialize(self):
method get_model (line 110) | def get_model(self):
method get_related_models (line 115) | def get_related_models(self):
method serialize_model (line 121) | def serialize_model(self, Model):
FILE: jet_django/apps.py
class JetDjangoConfig (line 13) | class JetDjangoConfig(AppConfig):
method check_token (line 16) | def check_token(self):
method register_models (line 44) | def register_models(self):
method ready (line 55) | def ready(self):
FILE: jet_django/deps/django_filters/__init__.py
function parse_version (line 16) | def parse_version(version):
FILE: jet_django/deps/django_filters/compat.py
function is_crispy (line 10) | def is_crispy():
FILE: jet_django/deps/django_filters/conf.py
function is_callable (line 61) | def is_callable(value):
class Settings (line 66) | class Settings(object):
method __getattr__ (line 68) | def __getattr__(self, name):
method get_setting (line 82) | def get_setting(self, setting):
method change_setting (line 90) | def change_setting(self, setting, value, enter, **kwargs):
FILE: jet_django/deps/django_filters/exceptions.py
class FieldLookupError (line 5) | class FieldLookupError(FieldError):
method __init__ (line 6) | def __init__(self, model_field, lookup_expr):
FILE: jet_django/deps/django_filters/fields.py
class RangeField (line 21) | class RangeField(forms.MultiValueField):
method __init__ (line 24) | def __init__(self, fields=None, *args, **kwargs):
method compress (line 31) | def compress(self, data_list):
class DateRangeField (line 37) | class DateRangeField(RangeField):
method __init__ (line 40) | def __init__(self, *args, **kwargs):
method compress (line 46) | def compress(self, data_list):
class DateTimeRangeField (line 63) | class DateTimeRangeField(RangeField):
method __init__ (line 66) | def __init__(self, *args, **kwargs):
class TimeRangeField (line 73) | class TimeRangeField(RangeField):
method __init__ (line 76) | def __init__(self, *args, **kwargs):
class Lookup (line 83) | class Lookup(namedtuple('Lookup', ('value', 'lookup_expr'))):
method __new__ (line 84) | def __new__(cls, value, lookup_expr):
class LookupChoiceField (line 94) | class LookupChoiceField(forms.MultiValueField):
method __init__ (line 99) | def __init__(self, field, lookup_choices, *args, **kwargs):
method compress (line 107) | def compress(self, data_list):
class IsoDateTimeField (line 120) | class IsoDateTimeField(forms.DateTimeField):
method strptime (line 132) | def strptime(self, value, format):
class BaseCSVField (line 143) | class BaseCSVField(forms.Field):
method __init__ (line 155) | def __init__(self, *args, **kwargs):
method _get_widget_class (line 161) | def _get_widget_class(self, widget):
method clean (line 176) | def clean(self, value):
class BaseRangeField (line 182) | class BaseRangeField(BaseCSVField):
method clean (line 191) | def clean(self, value):
class ChoiceIterator (line 204) | class ChoiceIterator(object):
method __init__ (line 208) | def __init__(self, field, choices):
method __iter__ (line 212) | def __iter__(self):
method __len__ (line 222) | def __len__(self):
class ModelChoiceIterator (line 228) | class ModelChoiceIterator(forms.models.ModelChoiceIterator):
method __iter__ (line 233) | def __iter__(self):
method __len__ (line 245) | def __len__(self):
class ChoiceIteratorMixin (line 250) | class ChoiceIteratorMixin(object):
method __init__ (line 251) | def __init__(self, *args, **kwargs):
method _get_choices (line 257) | def _get_choices(self):
method _set_choices (line 260) | def _set_choices(self, value):
class ChoiceField (line 269) | class ChoiceField(ChoiceIteratorMixin, forms.ChoiceField):
method __init__ (line 272) | def __init__(self, *args, **kwargs):
class MultipleChoiceField (line 277) | class MultipleChoiceField(ChoiceIteratorMixin, forms.MultipleChoiceField):
method __init__ (line 280) | def __init__(self, *args, **kwargs):
class ModelChoiceField (line 285) | class ModelChoiceField(ChoiceIteratorMixin, forms.ModelChoiceField):
method to_python (line 288) | def to_python(self, value):
class ModelMultipleChoiceField (line 295) | class ModelMultipleChoiceField(ChoiceIteratorMixin, forms.ModelMultipleC...
method _check_values (line 298) | def _check_values(self, value):
FILE: jet_django/deps/django_filters/filters.py
class Filter (line 63) | class Filter(object):
method __init__ (line 67) | def __init__(self, field_name=None, lookup_expr='exact', *, label=None,
method get_method (line 88) | def get_method(self, qs):
method method (line 94) | def method():
method label (line 116) | def label():
method field (line 131) | def field(self):
method filter (line 141) | def filter(self, qs, value):
class CharFilter (line 151) | class CharFilter(Filter):
class BooleanFilter (line 155) | class BooleanFilter(Filter):
class ChoiceFilter (line 159) | class ChoiceFilter(Filter):
method __init__ (line 162) | def __init__(self, *args, **kwargs):
method filter (line 166) | def filter(self, qs, value):
class TypedChoiceFilter (line 174) | class TypedChoiceFilter(Filter):
class UUIDFilter (line 178) | class UUIDFilter(Filter):
class MultipleChoiceFilter (line 182) | class MultipleChoiceFilter(Filter):
method __init__ (line 209) | def __init__(self, *args, **kwargs):
method is_noop (line 215) | def is_noop(self, qs, value):
method filter (line 229) | def filter(self, qs, value):
method get_filter_predicate (line 253) | def get_filter_predicate(self, v):
class TypedMultipleChoiceFilter (line 260) | class TypedMultipleChoiceFilter(MultipleChoiceFilter):
class DateFilter (line 264) | class DateFilter(Filter):
class DateTimeFilter (line 268) | class DateTimeFilter(Filter):
class IsoDateTimeFilter (line 272) | class IsoDateTimeFilter(DateTimeFilter):
class TimeFilter (line 285) | class TimeFilter(Filter):
class DurationFilter (line 289) | class DurationFilter(Filter):
class QuerySetRequestMixin (line 293) | class QuerySetRequestMixin(object):
method __init__ (line 316) | def __init__(self, *args, **kwargs):
method get_request (line 320) | def get_request(self):
method get_queryset (line 326) | def get_queryset(self, request):
method field (line 334) | def field(self):
class ModelChoiceFilter (line 344) | class ModelChoiceFilter(QuerySetRequestMixin, ChoiceFilter):
method __init__ (line 347) | def __init__(self, *args, **kwargs):
class ModelMultipleChoiceFilter (line 352) | class ModelMultipleChoiceFilter(QuerySetRequestMixin, MultipleChoiceFilt...
class NumberFilter (line 356) | class NumberFilter(Filter):
class NumericRangeFilter (line 360) | class NumericRangeFilter(Filter):
method filter (line 363) | def filter(self, qs, value):
class RangeFilter (line 377) | class RangeFilter(Filter):
method filter (line 380) | def filter(self, qs, value):
function _truncate (line 395) | def _truncate(dt):
class DateRangeFilter (line 399) | class DateRangeFilter(ChoiceFilter):
method __init__ (line 432) | def __init__(self, choices=None, filters=None, *args, **kwargs):
method filter (line 452) | def filter(self, qs, value):
class DateFromToRangeFilter (line 462) | class DateFromToRangeFilter(RangeFilter):
class DateTimeFromToRangeFilter (line 466) | class DateTimeFromToRangeFilter(RangeFilter):
class TimeRangeFilter (line 470) | class TimeRangeFilter(RangeFilter):
class AllValuesFilter (line 474) | class AllValuesFilter(ChoiceFilter):
method field (line 476) | def field(self):
class AllValuesMultipleFilter (line 483) | class AllValuesMultipleFilter(MultipleChoiceFilter):
method field (line 485) | def field(self):
class BaseCSVFilter (line 492) | class BaseCSVFilter(Filter):
method __init__ (line 498) | def __init__(self, *args, **kwargs):
method _field_class_name (line 511) | def _field_class_name(cls, field_class, lookup_expr):
class BaseInFilter (line 537) | class BaseInFilter(BaseCSVFilter):
method __init__ (line 539) | def __init__(self, *args, **kwargs):
class BaseRangeFilter (line 544) | class BaseRangeFilter(BaseCSVFilter):
method __init__ (line 547) | def __init__(self, *args, **kwargs):
class LookupChoiceFilter (line 552) | class LookupChoiceFilter(Filter):
method __init__ (line 578) | def __init__(self, field_name=None, lookup_choices=None, field_class=N...
method normalize_lookup (line 588) | def normalize_lookup(cls, lookup):
method get_lookup_choices (line 609) | def get_lookup_choices(self):
method field (line 624) | def field(self):
method filter (line 638) | def filter(self, qs, lookup):
class OrderingFilter (line 646) | class OrderingFilter(BaseCSVFilter, ChoiceFilter):
method __init__ (line 674) | def __init__(self, *args, **kwargs):
method get_ordering_value (line 693) | def get_ordering_value(self, param):
method filter (line 700) | def filter(self, qs, value):
method normalize_fields (line 708) | def normalize_fields(cls, fields):
method build_choices (line 730) | def build_choices(self, fields, labels):
class FilterMethod (line 744) | class FilterMethod(object):
method __init__ (line 749) | def __init__(self, filter_instance):
method __call__ (line 752) | def __call__(self, qs, value):
method method (line 759) | def method(self):
FILE: jet_django/deps/django_filters/filterset.py
function remote_queryset (line 39) | def remote_queryset(field):
class FilterSetOptions (line 54) | class FilterSetOptions(object):
method __init__ (line 55) | def __init__(self, options=None):
class FilterSetMetaclass (line 65) | class FilterSetMetaclass(type):
method __new__ (line 66) | def __new__(cls, name, bases, attrs):
method get_declared_filters (line 84) | def get_declared_filters(cls, bases, attrs):
class BaseFilterSet (line 181) | class BaseFilterSet(object):
method __init__ (line 184) | def __init__(self, data=None, queryset=None, *, request=None, prefix=N...
method is_valid (line 202) | def is_valid(self):
method errors (line 209) | def errors(self):
method filter_queryset (line 215) | def filter_queryset(self, queryset):
method qs (line 231) | def qs(self):
method get_form_class (line 241) | def get_form_class(self):
method form (line 256) | def form(self):
method get_fields (line 266) | def get_fields(cls):
method get_filter_name (line 298) | def get_filter_name(cls, field_name, lookup_expr):
method get_filters (line 314) | def get_filters(cls):
method filter_for_field (line 361) | def filter_for_field(cls, field, field_name, lookup_expr='exact'):
method filter_for_lookup (line 382) | def filter_for_lookup(cls, field, lookup_type):
method _csv_filter_class_name (line 427) | def _csv_filter_class_name(cls, filter_class, lookup_type):
class FilterSet (line 452) | class FilterSet(BaseFilterSet, metaclass=FilterSetMetaclass):
function filterset_factory (line 456) | def filterset_factory(model, fields=ALL_FIELDS):
FILE: jet_django/deps/django_filters/rest_framework/backends.py
class RenameAttributes (line 11) | class RenameAttributes(utils.RenameAttributesBase, RenameMethodsBase):
class DjangoFilterBackend (line 20) | class DjangoFilterBackend(metaclass=RenameAttributes):
method template (line 25) | def template(self):
method get_filterset (line 30) | def get_filterset(self, request, queryset, view):
method get_filterset_class (line 38) | def get_filterset_class(self, view, queryset=None):
method get_filterset_kwargs (line 82) | def get_filterset_kwargs(self, request, queryset, view):
method filter_queryset (line 89) | def filter_queryset(self, request, queryset, view):
method to_html (line 98) | def to_html(self, request, queryset, view):
method get_coreschema_field (line 107) | def get_coreschema_field(self, field):
method get_schema_fields (line 116) | def get_schema_fields(self, view):
FILE: jet_django/deps/django_filters/rest_framework/filters.py
class BooleanFilter (line 9) | class BooleanFilter(filters.BooleanFilter):
method __init__ (line 10) | def __init__(self, *args, **kwargs):
FILE: jet_django/deps/django_filters/rest_framework/filterset.py
class FilterSet (line 19) | class FilterSet(filterset.FilterSet):
method form (line 23) | def form(self):
FILE: jet_django/deps/django_filters/utils.py
function deprecate (line 20) | def deprecate(msg, level_modifier=0):
class MigrationNotice (line 24) | class MigrationNotice(DeprecationWarning):
method __init__ (line 27) | def __init__(self, message):
class RenameAttributesBase (line 31) | class RenameAttributesBase(type):
method __new__ (line 43) | def __new__(metacls, name, bases, attrs):
method get_name (line 78) | def get_name(metacls, name):
method __getattr__ (line 94) | def __getattr__(metacls, name):
method __setattr__ (line 97) | def __setattr__(metacls, name, value):
function try_dbfield (line 101) | def try_dbfield(fn, field_class):
function get_all_model_fields (line 121) | def get_all_model_fields(model):
function get_model_field (line 131) | def get_model_field(model, field_name):
function get_field_parts (line 145) | def get_field_parts(model, field_name):
function resolve_field (line 177) | def resolve_field(model_field, lookup_expr):
function handle_timezone (line 221) | def handle_timezone(value, is_dst=None):
function verbose_field_name (line 229) | def verbose_field_name(model, field_name):
function verbose_lookup_expr (line 261) | def verbose_lookup_expr(lookup_expr):
function label_for_filter (line 288) | def label_for_filter(model, field_name, lookup_expr, exclude=False):
function translate_validation (line 311) | def translate_validation(error_dict):
FILE: jet_django/deps/django_filters/views.py
class FilterMixinRenames (line 14) | class FilterMixinRenames(RenameAttributesBase):
class FilterMixin (line 20) | class FilterMixin(metaclass=FilterMixinRenames):
method get_filterset_class (line 28) | def get_filterset_class(self):
method get_filterset (line 40) | def get_filterset(self, filterset_class):
method get_filterset_kwargs (line 47) | def get_filterset_kwargs(self, filterset_class):
method get_strict (line 70) | def get_strict(self):
class BaseFilterView (line 74) | class BaseFilterView(FilterMixin, MultipleObjectMixin, View):
method get (line 76) | def get(self, request, *args, **kwargs):
class FilterView (line 90) | class FilterView(MultipleObjectTemplateResponseMixin, BaseFilterView):
function object_filter (line 99) | def object_filter(request, model=None, queryset=None, template_name=None,
FILE: jet_django/deps/django_filters/widgets.py
class LinkWidget (line 15) | class LinkWidget(forms.Widget):
method __init__ (line 16) | def __init__(self, attrs=None, choices=()):
method value_from_datadict (line 21) | def value_from_datadict(self, data, files, name):
method render (line 26) | def render(self, name, value, attrs=None, choices=(), renderer=None):
method render_options (line 39) | def render_options(self, choices, selected_choices, name):
method render_option (line 53) | def render_option(self, name, selected_choices,
method option_string (line 71) | def option_string(self):
class SuffixedMultiWidget (line 75) | class SuffixedMultiWidget(forms.MultiWidget):
method __init__ (line 84) | def __init__(self, *args, **kwargs):
method suffixed (line 90) | def suffixed(self, name, suffix):
method get_context (line 93) | def get_context(self, name, value, attrs):
method value_from_datadict (line 100) | def value_from_datadict(self, data, files, name):
method value_omitted_from_data (line 106) | def value_omitted_from_data(self, data, files, name):
method replace_name (line 112) | def replace_name(self, output, index):
method decompress (line 120) | def decompress(self, value):
class RangeWidget (line 126) | class RangeWidget(SuffixedMultiWidget):
method __init__ (line 130) | def __init__(self, attrs=None):
method decompress (line 134) | def decompress(self, value):
class DateRangeWidget (line 140) | class DateRangeWidget(RangeWidget):
class LookupChoiceWidget (line 144) | class LookupChoiceWidget(SuffixedMultiWidget):
method decompress (line 147) | def decompress(self, value):
class BooleanWidget (line 153) | class BooleanWidget(forms.Select):
method __init__ (line 158) | def __init__(self, attrs=None):
method render (line 164) | def render(self, name, value, attrs=None, renderer=None):
method value_from_datadict (line 176) | def value_from_datadict(self, data, files, name):
class BaseCSVWidget (line 191) | class BaseCSVWidget(forms.Widget):
method _isiterable (line 192) | def _isiterable(self, value):
method value_from_datadict (line 195) | def value_from_datadict(self, data, files, name):
method render (line 204) | def render(self, name, value, attrs=None, renderer=None):
class CSVWidget (line 222) | class CSVWidget(BaseCSVWidget, forms.TextInput):
class QueryArrayWidget (line 226) | class QueryArrayWidget(BaseCSVWidget, forms.TextInput):
method value_from_datadict (line 237) | def value_from_datadict(self, data, files, name):
FILE: jet_django/deps/rest_framework/apps.py
class RestFrameworkConfig (line 4) | class RestFrameworkConfig(AppConfig):
method ready (line 8) | def ready(self):
FILE: jet_django/deps/rest_framework/authentication.py
function get_authorization_header (line 18) | def get_authorization_header(request):
class CSRFCheck (line 31) | class CSRFCheck(CsrfViewMiddleware):
method _reject (line 32) | def _reject(self, request, reason):
class BaseAuthentication (line 37) | class BaseAuthentication(object):
method authenticate (line 42) | def authenticate(self, request):
method authenticate_header (line 48) | def authenticate_header(self, request):
class BasicAuthentication (line 57) | class BasicAuthentication(BaseAuthentication):
method authenticate (line 63) | def authenticate(self, request):
method authenticate_credentials (line 89) | def authenticate_credentials(self, userid, password, request=None):
method authenticate_header (line 108) | def authenticate_header(self, request):
class SessionAuthentication (line 112) | class SessionAuthentication(BaseAuthentication):
method authenticate (line 117) | def authenticate(self, request):
method enforce_csrf (line 135) | def enforce_csrf(self, request):
class TokenAuthentication (line 145) | class TokenAuthentication(BaseAuthentication):
method get_model (line 158) | def get_model(self):
method authenticate (line 171) | def authenticate(self, request):
method authenticate_credentials (line 192) | def authenticate_credentials(self, key):
method authenticate_header (line 204) | def authenticate_header(self, request):
class RemoteUserAuthentication (line 208) | class RemoteUserAuthentication(BaseAuthentication):
method authenticate (line 223) | def authenticate(self, request):
FILE: jet_django/deps/rest_framework/authtoken/admin.py
class TokenAdmin (line 6) | class TokenAdmin(admin.ModelAdmin):
FILE: jet_django/deps/rest_framework/authtoken/apps.py
class AuthTokenConfig (line 5) | class AuthTokenConfig(AppConfig):
FILE: jet_django/deps/rest_framework/authtoken/management/commands/drf_create_token.py
class Command (line 9) | class Command(BaseCommand):
method create_user_token (line 12) | def create_user_token(self, username, reset_token):
method add_arguments (line 21) | def add_arguments(self, parser):
method handle (line 33) | def handle(self, *args, **options):
FILE: jet_django/deps/rest_framework/authtoken/migrations/0001_initial.py
class Migration (line 8) | class Migration(migrations.Migration):
FILE: jet_django/deps/rest_framework/authtoken/migrations/0002_auto_20160226_1747.py
class Migration (line 8) | class Migration(migrations.Migration):
FILE: jet_django/deps/rest_framework/authtoken/models.py
class Token (line 11) | class Token(models.Model):
class Meta (line 22) | class Meta:
method save (line 32) | def save(self, *args, **kwargs):
method generate_key (line 37) | def generate_key(self):
method __str__ (line 40) | def __str__(self):
FILE: jet_django/deps/rest_framework/authtoken/serializers.py
class AuthTokenSerializer (line 7) | class AuthTokenSerializer(serializers.Serializer):
method validate (line 15) | def validate(self, attrs):
FILE: jet_django/deps/rest_framework/authtoken/views.py
class ObtainAuthToken (line 10) | class ObtainAuthToken(APIView):
method post (line 41) | def post(self, request, *args, **kwargs):
FILE: jet_django/deps/rest_framework/checks.py
function pagination_system_check (line 5) | def pagination_system_check(app_configs, **kwargs):
FILE: jet_django/deps/rest_framework/compat.py
function get_original_route (line 27) | def get_original_route(urlpattern):
function get_regex_pattern (line 40) | def get_regex_pattern(urlpattern):
function is_route_pattern (line 53) | def is_route_pattern(urlpattern):
function make_url_resolver (line 63) | def make_url_resolver(regex, urlpatterns):
function unicode_repr (line 74) | def unicode_repr(instance):
function unicode_to_repr (line 82) | def unicode_to_repr(value):
function unicode_http_header (line 91) | def unicode_http_header(value):
function distinct (line 98) | def distinct(queryset, base):
function apply_markdown (line 171) | def apply_markdown(text):
function pygments_highlight (line 197) | def pygments_highlight(text, lang, style):
function pygments_css (line 202) | def pygments_css(style):
function pygments_highlight (line 209) | def pygments_highlight(text, lang, style):
function pygments_css (line 212) | def pygments_css(style):
class CodeBlockPreprocessor (line 222) | class CodeBlockPreprocessor(Preprocessor):
method run (line 228) | def run(self, lines):
function md_filter_add_syntax_highlight (line 241) | def md_filter_add_syntax_highlight(md):
function md_filter_add_syntax_highlight (line 245) | def md_filter_add_syntax_highlight(md):
class CustomValidatorMessage (line 277) | class CustomValidatorMessage(object):
method __init__ (line 285) | def __init__(self, *args, **kwargs):
class MinValueValidator (line 290) | class MinValueValidator(CustomValidatorMessage, validators.MinValueValid...
class MaxValueValidator (line 294) | class MaxValueValidator(CustomValidatorMessage, validators.MaxValueValid...
class MinLengthValidator (line 298) | class MinLengthValidator(CustomValidatorMessage, validators.MinLengthVal...
class MaxLengthValidator (line 302) | class MaxLengthValidator(CustomValidatorMessage, validators.MaxLengthVal...
function authenticate (line 306) | def authenticate(request=None, **credentials):
FILE: jet_django/deps/rest_framework/decorators.py
function api_view (line 19) | def api_view(http_method_names=None, exclude_from_schema=False):
function renderer_classes (line 91) | def renderer_classes(renderer_classes):
function parser_classes (line 98) | def parser_classes(parser_classes):
function authentication_classes (line 105) | def authentication_classes(authentication_classes):
function throttle_classes (line 112) | def throttle_classes(throttle_classes):
function permission_classes (line 119) | def permission_classes(permission_classes):
function schema (line 126) | def schema(view_inspector):
function action (line 133) | def action(methods=None, detail=None, url_path=None, url_name=None, **kw...
function detail_route (line 157) | def detail_route(methods=None, **kwargs):
function list_route (line 175) | def list_route(methods=None, **kwargs):
FILE: jet_django/deps/rest_framework/documentation.py
function get_docs_view (line 10) | def get_docs_view(
function get_schemajs_view (line 33) | def get_schemajs_view(
function include_docs_urls (line 53) | def include_docs_urls(
FILE: jet_django/deps/rest_framework/exceptions.py
function _get_error_details (line 22) | def _get_error_details(data, default_code=None):
function _get_codes (line 48) | def _get_codes(detail):
function _get_full_details (line 56) | def _get_full_details(detail):
class ErrorDetail (line 67) | class ErrorDetail(six.text_type):
method __new__ (line 73) | def __new__(cls, string, code=None):
method __eq__ (line 78) | def __eq__(self, other):
method __ne__ (line 85) | def __ne__(self, other):
method __repr__ (line 88) | def __repr__(self):
class APIException (line 95) | class APIException(Exception):
method __init__ (line 104) | def __init__(self, detail=None, code=None):
method __str__ (line 112) | def __str__(self):
method get_codes (line 115) | def get_codes(self):
method get_full_details (line 123) | def get_full_details(self):
class ValidationError (line 139) | class ValidationError(APIException):
method __init__ (line 144) | def __init__(self, detail=None, code=None):
class ParseError (line 158) | class ParseError(APIException):
class AuthenticationFailed (line 164) | class AuthenticationFailed(APIException):
class NotAuthenticated (line 170) | class NotAuthenticated(APIException):
class PermissionDenied (line 176) | class PermissionDenied(APIException):
class NotFound (line 182) | class NotFound(APIException):
class MethodNotAllowed (line 188) | class MethodNotAllowed(APIException):
method __init__ (line 193) | def __init__(self, method, detail=None, code=None):
class NotAcceptable (line 199) | class NotAcceptable(APIException):
method __init__ (line 204) | def __init__(self, detail=None, code=None, available_renderers=None):
class UnsupportedMediaType (line 209) | class UnsupportedMediaType(APIException):
method __init__ (line 214) | def __init__(self, media_type, detail=None, code=None):
class Throttled (line 220) | class Throttled(APIException):
method __init__ (line 227) | def __init__(self, wait=None, detail=None, code=None):
function server_error (line 241) | def server_error(request, *args, **kwargs):
function bad_request (line 251) | def bad_request(request, exception, *args, **kwargs):
FILE: jet_django/deps/rest_framework/fields.py
class empty (line 43) | class empty:
function is_simple_callable (line 54) | def is_simple_callable(obj):
function is_simple_callable (line 71) | def is_simple_callable(obj):
function get_attribute (line 88) | def get_attribute(instance, attrs):
function set_value (line 115) | def set_value(dictionary, keys, value):
function to_choices_dict (line 136) | def to_choices_dict(choices):
function flatten_choices_dict (line 164) | def flatten_choices_dict(choices):
function iter_options (line 183) | def iter_options(grouped_choices, cutoff=None, cutoff_text=None):
function get_error_detail (line 230) | def get_error_detail(exc_info):
class CreateOnlyDefault (line 242) | class CreateOnlyDefault(object):
method __init__ (line 248) | def __init__(self, default):
method set_context (line 251) | def set_context(self, serializer_field):
method __call__ (line 256) | def __call__(self):
method __repr__ (line 263) | def __repr__(self):
class CurrentUserDefault (line 269) | class CurrentUserDefault(object):
method set_context (line 270) | def set_context(self, serializer_field):
method __call__ (line 273) | def __call__(self):
method __repr__ (line 276) | def __repr__(self):
class SkipField (line 280) | class SkipField(Exception):
class Field (line 296) | class Field(object):
method __init__ (line 307) | def __init__(self, read_only=False, write_only=False,
method bind (line 353) | def bind(self, field_name, parent):
method validators (line 390) | def validators(self):
method validators (line 396) | def validators(self, validators):
method get_validators (line 399) | def get_validators(self):
method get_initial (line 402) | def get_initial(self):
method get_value (line 411) | def get_value(self, dictionary):
method get_attribute (line 435) | def get_attribute(self, instance):
method get_default (line 464) | def get_default(self):
method validate_empty_values (line 482) | def validate_empty_values(self, data):
method run_validation (line 510) | def run_validation(self, data=empty):
method run_validators (line 527) | def run_validators(self, value):
method to_internal_value (line 551) | def to_internal_value(self, data):
method to_representation (line 561) | def to_representation(self, value):
method fail (line 574) | def fail(self, key, **kwargs):
method root (line 588) | def root(self):
method context (line 598) | def context(self):
method __new__ (line 604) | def __new__(cls, *args, **kwargs):
method __deepcopy__ (line 614) | def __deepcopy__(self, memo):
method __repr__ (line 632) | def __repr__(self):
class BooleanField (line 643) | class BooleanField(Field):
method __init__ (line 666) | def __init__(self, **kwargs):
method to_internal_value (line 670) | def to_internal_value(self, data):
method to_representation (line 680) | def to_representation(self, value):
class NullBooleanField (line 688) | class NullBooleanField(Field):
method __init__ (line 711) | def __init__(self, **kwargs):
method to_internal_value (line 716) | def to_internal_value(self, data):
method to_representation (line 728) | def to_representation(self, value):
class CharField (line 740) | class CharField(Field):
method __init__ (line 749) | def __init__(self, **kwargs):
method run_validation (line 768) | def run_validation(self, data=empty):
method to_internal_value (line 778) | def to_internal_value(self, data):
method to_representation (line 787) | def to_representation(self, value):
class EmailField (line 791) | class EmailField(CharField):
method __init__ (line 796) | def __init__(self, **kwargs):
class RegexField (line 802) | class RegexField(CharField):
method __init__ (line 807) | def __init__(self, regex, **kwargs):
class SlugField (line 813) | class SlugField(CharField):
method __init__ (line 819) | def __init__(self, allow_unicode=False, **kwargs):
class URLField (line 829) | class URLField(CharField):
method __init__ (line 834) | def __init__(self, **kwargs):
class UUIDField (line 840) | class UUIDField(Field):
method __init__ (line 847) | def __init__(self, **kwargs):
method to_internal_value (line 856) | def to_internal_value(self, data):
method to_representation (line 869) | def to_representation(self, value):
class IPAddressField (line 876) | class IPAddressField(CharField):
method __init__ (line 883) | def __init__(self, protocol='both', **kwargs):
method to_internal_value (line 890) | def to_internal_value(self, data):
class IntegerField (line 906) | class IntegerField(Field):
method __init__ (line 916) | def __init__(self, **kwargs):
method to_internal_value (line 933) | def to_internal_value(self, data):
method to_representation (line 943) | def to_representation(self, value):
class FloatField (line 947) | class FloatField(Field):
method __init__ (line 956) | def __init__(self, **kwargs):
method to_internal_value (line 973) | def to_internal_value(self, data):
method to_representation (line 983) | def to_representation(self, value):
class DecimalField (line 987) | class DecimalField(Field):
method __init__ (line 999) | def __init__(self, max_digits, decimal_places, coerce_to_string=None, ...
method to_internal_value (line 1038) | def to_internal_value(self, data):
method validate_precision (line 1068) | def validate_precision(self, value):
method to_representation (line 1103) | def to_representation(self, value):
method quantize (line 1118) | def quantize(self, value):
class DateTimeField (line 1137) | class DateTimeField(Field):
method __init__ (line 1146) | def __init__(self, format=empty, input_formats=None, default_timezone=...
method enforce_timezone (line 1155) | def enforce_timezone(self, value):
method default_timezone (line 1176) | def default_timezone(self):
method to_internal_value (line 1179) | def to_internal_value(self, value):
method to_representation (line 1206) | def to_representation(self, value):
class DateField (line 1225) | class DateField(Field):
method __init__ (line 1232) | def __init__(self, format=empty, input_formats=None, *args, **kwargs):
method to_internal_value (line 1239) | def to_internal_value(self, value):
method to_representation (line 1268) | def to_representation(self, value):
class TimeField (line 1292) | class TimeField(Field):
method __init__ (line 1298) | def __init__(self, format=empty, input_formats=None, *args, **kwargs):
method to_internal_value (line 1305) | def to_internal_value(self, value):
method to_representation (line 1331) | def to_representation(self, value):
class DurationField (line 1354) | class DurationField(Field):
method to_internal_value (line 1359) | def to_internal_value(self, value):
method to_representation (line 1367) | def to_representation(self, value):
class ChoiceField (line 1373) | class ChoiceField(Field):
method __init__ (line 1380) | def __init__(self, choices, **kwargs):
method to_internal_value (line 1389) | def to_internal_value(self, data):
method to_representation (line 1398) | def to_representation(self, value):
method iter_options (line 1403) | def iter_options(self):
method _get_choices (line 1413) | def _get_choices(self):
method _set_choices (line 1416) | def _set_choices(self, choices):
class MultipleChoiceField (line 1430) | class MultipleChoiceField(ChoiceField):
method __init__ (line 1438) | def __init__(self, *args, **kwargs):
method get_value (line 1442) | def get_value(self, dictionary):
method to_internal_value (line 1452) | def to_internal_value(self, data):
method to_representation (line 1463) | def to_representation(self, value):
class FilePathField (line 1469) | class FilePathField(ChoiceField):
method __init__ (line 1474) | def __init__(self, path, match=None, recursive=False, allow_files=True,
class FileField (line 1488) | class FileField(Field):
method __init__ (line 1497) | def __init__(self, *args, **kwargs):
method to_internal_value (line 1504) | def to_internal_value(self, data):
method to_representation (line 1521) | def to_representation(self, value):
class ImageField (line 1539) | class ImageField(FileField):
method __init__ (line 1546) | def __init__(self, *args, **kwargs):
method to_internal_value (line 1550) | def to_internal_value(self, data):
class _UnvalidatedField (line 1562) | class _UnvalidatedField(Field):
method __init__ (line 1563) | def __init__(self, *args, **kwargs):
method to_internal_value (line 1568) | def to_internal_value(self, data):
method to_representation (line 1571) | def to_representation(self, value):
class ListField (line 1575) | class ListField(Field):
method __init__ (line 1585) | def __init__(self, *args, **kwargs):
method get_value (line 1606) | def get_value(self, dictionary):
method to_internal_value (line 1620) | def to_internal_value(self, data):
method to_representation (line 1632) | def to_representation(self, data):
method run_child_validation (line 1638) | def run_child_validation(self, data):
class DictField (line 1653) | class DictField(Field):
method __init__ (line 1660) | def __init__(self, *args, **kwargs):
method get_value (line 1672) | def get_value(self, dictionary):
method to_internal_value (line 1679) | def to_internal_value(self, data):
method to_representation (line 1689) | def to_representation(self, value):
method run_child_validation (line 1698) | def run_child_validation(self, data):
class HStoreField (line 1715) | class HStoreField(DictField):
method __init__ (line 1718) | def __init__(self, *args, **kwargs):
class JSONField (line 1726) | class JSONField(Field):
method __init__ (line 1731) | def __init__(self, *args, **kwargs):
method get_value (line 1735) | def get_value(self, dictionary):
method to_internal_value (line 1747) | def to_internal_value(self, data):
method to_representation (line 1759) | def to_representation(self, value):
class ReadOnlyField (line 1771) | class ReadOnlyField(Field):
method __init__ (line 1784) | def __init__(self, **kwargs):
method to_representation (line 1788) | def to_representation(self, value):
class HiddenField (line 1792) | class HiddenField(Field):
method __init__ (line 1800) | def __init__(self, **kwargs):
method get_value (line 1805) | def get_value(self, dictionary):
method to_internal_value (line 1810) | def to_internal_value(self, data):
class SerializerMethodField (line 1814) | class SerializerMethodField(Field):
method __init__ (line 1829) | def __init__(self, method_name=None, **kwargs):
method bind (line 1835) | def bind(self, field_name, parent):
method to_representation (line 1853) | def to_representation(self, value):
class ModelField (line 1858) | class ModelField(Field):
method __init__ (line 1869) | def __init__(self, model_field, **kwargs):
method to_internal_value (line 1882) | def to_internal_value(self, data):
method get_attribute (line 1888) | def get_attribute(self, obj):
method to_representation (line 1893) | def to_representation(self, obj):
FILE: jet_django/deps/rest_framework/filters.py
class BaseFilterBackend (line 23) | class BaseFilterBackend(object):
method filter_queryset (line 28) | def filter_queryset(self, request, queryset, view):
method get_schema_fields (line 34) | def get_schema_fields(self, view):
class SearchFilter (line 40) | class SearchFilter(BaseFilterBackend):
method get_search_terms (line 53) | def get_search_terms(self, request):
method construct_search (line 61) | def construct_search(self, field_name):
method must_call_distinct (line 69) | def must_call_distinct(self, queryset, search_fields):
method filter_queryset (line 89) | def filter_queryset(self, request, queryset, view):
method to_html (line 119) | def to_html(self, request, queryset, view):
method get_schema_fields (line 132) | def get_schema_fields(self, view):
class OrderingFilter (line 148) | class OrderingFilter(BaseFilterBackend):
method get_ordering (line 156) | def get_ordering(self, request, queryset, view):
method get_default_ordering (line 174) | def get_default_ordering(self, view):
method get_default_valid_fields (line 180) | def get_default_valid_fields(self, queryset, view, context={}):
method get_valid_fields (line 207) | def get_valid_fields(self, queryset, view, context={}):
method remove_invalid_fields (line 231) | def remove_invalid_fields(self, queryset, fields, view, request):
method filter_queryset (line 235) | def filter_queryset(self, request, queryset, view):
method get_template_context (line 243) | def get_template_context(self, request, queryset, view):
method to_html (line 258) | def to_html(self, request, queryset, view):
method get_schema_fields (line 263) | def get_schema_fields(self, view):
class DjangoObjectPermissionsFilter (line 279) | class DjangoObjectPermissionsFilter(BaseFilterBackend):
method __init__ (line 284) | def __init__(self):
method filter_queryset (line 289) | def filter_queryset(self, request, queryset, view):
FILE: jet_django/deps/rest_framework/generics.py
function get_object_or_404 (line 15) | def get_object_or_404(queryset, *filter_args, **filter_kwargs):
class GenericAPIView (line 26) | class GenericAPIView(views.APIView):
method get_queryset (line 50) | def get_queryset(self):
method get_object (line 77) | def get_object(self):
method get_serializer (line 105) | def get_serializer(self, *args, **kwargs):
method get_serializer_class (line 114) | def get_serializer_class(self):
method get_serializer_context (line 132) | def get_serializer_context(self):
method filter_queryset (line 142) | def filter_queryset(self, queryset):
method paginator (line 156) | def paginator(self):
method paginate_queryset (line 167) | def paginate_queryset(self, queryset):
method get_paginated_response (line 175) | def get_paginated_response(self, data):
class CreateAPIView (line 186) | class CreateAPIView(mixins.CreateModelMixin,
method post (line 191) | def post(self, request, *args, **kwargs):
class ListAPIView (line 195) | class ListAPIView(mixins.ListModelMixin,
method get (line 200) | def get(self, request, *args, **kwargs):
class RetrieveAPIView (line 204) | class RetrieveAPIView(mixins.RetrieveModelMixin,
method get (line 209) | def get(self, request, *args, **kwargs):
class DestroyAPIView (line 213) | class DestroyAPIView(mixins.DestroyModelMixin,
method delete (line 218) | def delete(self, request, *args, **kwargs):
class UpdateAPIView (line 222) | class UpdateAPIView(mixins.UpdateModelMixin,
method put (line 227) | def put(self, request, *args, **kwargs):
method patch (line 230) | def patch(self, request, *args, **kwargs):
class ListCreateAPIView (line 234) | class ListCreateAPIView(mixins.ListModelMixin,
method get (line 240) | def get(self, request, *args, **kwargs):
method post (line 243) | def post(self, request, *args, **kwargs):
class RetrieveUpdateAPIView (line 247) | class RetrieveUpdateAPIView(mixins.RetrieveModelMixin,
method get (line 253) | def get(self, request, *args, **kwargs):
method put (line 256) | def put(self, request, *args, **kwargs):
method patch (line 259) | def patch(self, request, *args, **kwargs):
class RetrieveDestroyAPIView (line 263) | class RetrieveDestroyAPIView(mixins.RetrieveModelMixin,
method get (line 269) | def get(self, request, *args, **kwargs):
method delete (line 272) | def delete(self, request, *args, **kwargs):
class RetrieveUpdateDestroyAPIView (line 276) | class RetrieveUpdateDestroyAPIView(mixins.RetrieveModelMixin,
method get (line 283) | def get(self, request, *args, **kwargs):
method put (line 286) | def put(self, request, *args, **kwargs):
method patch (line 289) | def patch(self, request, *args, **kwargs):
method delete (line 292) | def delete(self, request, *args, **kwargs):
FILE: jet_django/deps/rest_framework/metadata.py
class BaseMetadata (line 22) | class BaseMetadata(object):
method determine_metadata (line 23) | def determine_metadata(self, request, view):
class SimpleMetadata (line 31) | class SimpleMetadata(BaseMetadata):
method determine_metadata (line 63) | def determine_metadata(self, request, view):
method determine_actions (line 75) | def determine_actions(self, request, view):
method get_serializer_info (line 102) | def get_serializer_info(self, serializer):
method get_field_info (line 117) | def get_field_info(self, field):
FILE: jet_django/deps/rest_framework/mixins.py
class CreateModelMixin (line 14) | class CreateModelMixin(object):
method create (line 18) | def create(self, request, *args, **kwargs):
method perform_create (line 25) | def perform_create(self, serializer):
method get_success_headers (line 28) | def get_success_headers(self, data):
class ListModelMixin (line 35) | class ListModelMixin(object):
method list (line 39) | def list(self, request, *args, **kwargs):
class RetrieveModelMixin (line 51) | class RetrieveModelMixin(object):
method retrieve (line 55) | def retrieve(self, request, *args, **kwargs):
class UpdateModelMixin (line 61) | class UpdateModelMixin(object):
method update (line 65) | def update(self, request, *args, **kwargs):
method perform_update (line 79) | def perform_update(self, serializer):
method partial_update (line 82) | def partial_update(self, request, *args, **kwargs):
class DestroyModelMixin (line 87) | class DestroyModelMixin(object):
method destroy (line 91) | def destroy(self, request, *args, **kwargs):
method perform_destroy (line 96) | def perform_destroy(self, instance):
FILE: jet_django/deps/rest_framework/negotiation.py
class BaseContentNegotiation (line 16) | class BaseContentNegotiation(object):
method select_parser (line 17) | def select_parser(self, request, parsers):
method select_renderer (line 20) | def select_renderer(self, request, renderers, format_suffix=None):
class DefaultContentNegotiation (line 24) | class DefaultContentNegotiation(BaseContentNegotiation):
method select_parser (line 27) | def select_parser(self, request, parsers):
method select_renderer (line 37) | def select_renderer(self, request, renderers, format_suffix=None):
method filter_renderers (line 80) | def filter_renderers(self, renderers, format):
method get_accept_list (line 91) | def get_accept_list(self, request):
FILE: jet_django/deps/rest_framework/pagination.py
function _positive_int (line 26) | def _positive_int(integer_string, strict=False, cutoff=None):
function _divide_with_ceil (line 38) | def _divide_with_ceil(a, b):
function _get_displayed_page_numbers (line 48) | def _get_displayed_page_numbers(current, final):
function _get_page_links (line 99) | def _get_page_links(page_numbers, current, url_func):
function _reverse_ordering (line 119) | def _reverse_ordering(ordering_tuple):
class BasePagination (line 136) | class BasePagination(object):
method paginate_queryset (line 139) | def paginate_queryset(self, queryset, request, view=None): # pragma: ...
method get_paginated_response (line 142) | def get_paginated_response(self, data): # pragma: no cover
method to_html (line 145) | def to_html(self): # pragma: no cover
method get_results (line 148) | def get_results(self, data):
method get_schema_fields (line 151) | def get_schema_fields(self, view):
class PageNumberPagination (line 156) | class PageNumberPagination(BasePagination):
method paginate_queryset (line 189) | def paginate_queryset(self, queryset, request, view=None):
method get_paginated_response (line 218) | def get_paginated_response(self, data):
method get_page_size (line 226) | def get_page_size(self, request):
method get_next_link (line 239) | def get_next_link(self):
method get_previous_link (line 246) | def get_previous_link(self):
method get_html_context (line 255) | def get_html_context(self):
method to_html (line 275) | def to_html(self):
method get_schema_fields (line 280) | def get_schema_fields(self, view):
class LimitOffsetPagination (line 309) | class LimitOffsetPagination(BasePagination):
method paginate_queryset (line 324) | def paginate_queryset(self, queryset, request, view=None):
method get_paginated_response (line 339) | def get_paginated_response(self, data):
method get_limit (line 347) | def get_limit(self, request):
method get_offset (line 360) | def get_offset(self, request):
method get_next_link (line 368) | def get_next_link(self):
method get_previous_link (line 378) | def get_previous_link(self):
method get_html_context (line 391) | def get_html_context(self):
method to_html (line 432) | def to_html(self):
method get_schema_fields (line 437) | def get_schema_fields(self, view):
method get_count (line 461) | def get_count(self, queryset):
class CursorPagination (line 471) | class CursorPagination(BasePagination):
method paginate_queryset (line 499) | def paginate_queryset(self, queryset, request, view=None):
method get_page_size (line 576) | def get_page_size(self, request):
method get_next_link (line 589) | def get_next_link(self):
method get_previous_link (line 637) | def get_previous_link(self):
method get_ordering (line 685) | def get_ordering(self, request, queryset, view):
method decode_cursor (line 730) | def decode_cursor(self, request):
method encode_cursor (line 755) | def encode_cursor(self, cursor):
method _get_position_from_instance (line 771) | def _get_position_from_instance(self, instance, ordering):
method get_paginated_response (line 779) | def get_paginated_response(self, data):
method get_html_context (line 786) | def get_html_context(self):
method to_html (line 792) | def to_html(self):
method get_schema_fields (line 797) | def get_schema_fields(self, view):
FILE: jet_django/deps/rest_framework/parsers.py
class DataAndFiles (line 28) | class DataAndFiles(object):
method __init__ (line 29) | def __init__(self, data, files):
class BaseParser (line 34) | class BaseParser(object):
method parse (line 41) | def parse(self, stream, media_type=None, parser_context=None):
class JSONParser (line 50) | class JSONParser(BaseParser):
method parse (line 58) | def parse(self, stream, media_type=None, parser_context=None):
class FormParser (line 73) | class FormParser(BaseParser):
method parse (line 79) | def parse(self, stream, media_type=None, parser_context=None):
class MultiPartParser (line 90) | class MultiPartParser(BaseParser):
method parse (line 96) | def parse(self, stream, media_type=None, parser_context=None):
class FileUploadParser (line 119) | class FileUploadParser(BaseParser):
method parse (line 129) | def parse(self, stream, media_type=None, parser_context=None):
method get_filename (line 196) | def get_filename(self, stream, media_type, parser_context):
method get_encoded_filename (line 216) | def get_encoded_filename(self, filename_parm):
FILE: jet_django/deps/rest_framework/permissions.py
class BasePermission (line 13) | class BasePermission(object):
method has_permission (line 18) | def has_permission(self, request, view):
method has_object_permission (line 24) | def has_object_permission(self, request, view, obj):
class AllowAny (line 31) | class AllowAny(BasePermission):
method has_permission (line 39) | def has_permission(self, request, view):
class IsAuthenticated (line 43) | class IsAuthenticated(BasePermission):
method has_permission (line 48) | def has_permission(self, request, view):
class IsAdminUser (line 52) | class IsAdminUser(BasePermission):
method has_permission (line 57) | def has_permission(self, request, view):
class IsAuthenticatedOrReadOnly (line 61) | class IsAuthenticatedOrReadOnly(BasePermission):
method has_permission (line 66) | def has_permission(self, request, view):
class DjangoModelPermissions (line 74) | class DjangoModelPermissions(BasePermission):
method get_required_permissions (line 101) | def get_required_permissions(self, method, model_cls):
method _queryset (line 116) | def _queryset(self, view):
method has_permission (line 131) | def has_permission(self, request, view):
class DjangoModelPermissionsOrAnonReadOnly (line 147) | class DjangoModelPermissionsOrAnonReadOnly(DjangoModelPermissions):
class DjangoObjectPermissions (line 155) | class DjangoObjectPermissions(DjangoModelPermissions):
method get_required_object_permissions (line 176) | def get_required_object_permissions(self, method, model_cls):
method has_object_permission (line 187) | def has_object_permission(self, request, view, obj):
FILE: jet_django/deps/rest_framework/relations.py
function method_overridden (line 25) | def method_overridden(method_name, klass, instance):
class Hyperlink (line 34) | class Hyperlink(six.text_type):
method __new__ (line 40) | def __new__(self, url, obj):
method __getnewargs__ (line 45) | def __getnewargs__(self):
method name (line 49) | def name(self):
class PKOnlyObject (line 59) | class PKOnlyObject(object):
method __init__ (line 65) | def __init__(self, pk):
method __str__ (line 68) | def __str__(self):
class RelatedField (line 81) | class RelatedField(Field):
method __init__ (line 86) | def __init__(self, **kwargs):
method __new__ (line 111) | def __new__(cls, *args, **kwargs):
method many_init (line 119) | def many_init(cls, *args, **kwargs):
method run_validation (line 141) | def run_validation(self, data=empty):
method get_queryset (line 147) | def get_queryset(self):
method use_pk_only_optimization (line 159) | def use_pk_only_optimization(self):
method get_attribute (line 162) | def get_attribute(self, instance):
method get_choices (line 179) | def get_choices(self, cutoff=None):
method choices (line 198) | def choices(self):
method grouped_choices (line 202) | def grouped_choices(self):
method iter_options (line 205) | def iter_options(self):
method display_value (line 212) | def display_value(self, instance):
class StringRelatedField (line 216) | class StringRelatedField(RelatedField):
method __init__ (line 222) | def __init__(self, **kwargs):
method to_representation (line 226) | def to_representation(self, value):
class PrimaryKeyRelatedField (line 230) | class PrimaryKeyRelatedField(RelatedField):
method __init__ (line 237) | def __init__(self, **kwargs):
method use_pk_only_optimization (line 241) | def use_pk_only_optimization(self):
method to_internal_value (line 244) | def to_internal_value(self, data):
method to_representation (line 254) | def to_representation(self, value):
class HyperlinkedRelatedField (line 260) | class HyperlinkedRelatedField(RelatedField):
method __init__ (line 272) | def __init__(self, view_name=None, **kwargs):
method use_pk_only_optimization (line 287) | def use_pk_only_optimization(self):
method get_object (line 290) | def get_object(self, view_name, view_args, view_kwargs):
method get_url (line 301) | def get_url(self, obj, view_name, request, format):
method to_internal_value (line 316) | def to_internal_value(self, data):
method to_representation (line 352) | def to_representation(self, value):
class HyperlinkedIdentityField (line 399) | class HyperlinkedIdentityField(HyperlinkedRelatedField):
method __init__ (line 407) | def __init__(self, view_name=None, **kwargs):
method use_pk_only_optimization (line 413) | def use_pk_only_optimization(self):
class SlugRelatedField (line 419) | class SlugRelatedField(RelatedField):
method __init__ (line 429) | def __init__(self, slug_field=None, **kwargs):
method to_internal_value (line 434) | def to_internal_value(self, data):
method to_representation (line 442) | def to_representation(self, obj):
class ManyRelatedField (line 446) | class ManyRelatedField(Field):
method __init__ (line 467) | def __init__(self, child_relation=None, *args, **kwargs):
method get_value (line 484) | def get_value(self, dictionary):
method to_internal_value (line 496) | def to_internal_value(self, data):
method get_attribute (line 507) | def get_attribute(self, instance):
method to_representation (line 515) | def to_representation(self, iterable):
method get_choices (line 521) | def get_choices(self, cutoff=None):
method choices (line 525) | def choices(self):
method grouped_choices (line 529) | def grouped_choices(self):
method iter_options (line 532) | def iter_options(self):
FILE: jet_django/deps/rest_framework/renderers.py
function zero_as_none (line 37) | def zero_as_none(value):
class BaseRenderer (line 41) | class BaseRenderer(object):
method render (line 51) | def render(self, data, accepted_media_type=None, renderer_context=None):
class JSONRenderer (line 55) | class JSONRenderer(BaseRenderer):
method get_indent (line 72) | def get_indent(self, accepted_media_type, renderer_context):
method render (line 87) | def render(self, data, accepted_media_type=None, renderer_context=None):
class TemplateHTMLRenderer (line 122) | class TemplateHTMLRenderer(BaseRenderer):
method render (line 150) | def render(self, data, accepted_media_type=None, renderer_context=None):
method resolve_template (line 178) | def resolve_template(self, template_names):
method get_template_context (line 181) | def get_template_context(self, data, renderer_context):
method get_template_names (line 187) | def get_template_names(self, response, view):
method get_exception_template (line 200) | def get_exception_template(self, response):
class StaticHTMLRenderer (line 215) | class StaticHTMLRenderer(TemplateHTMLRenderer):
method render (line 232) | def render(self, data, accepted_media_type=None, renderer_context=None):
class HTMLFormRenderer (line 248) | class HTMLFormRenderer(BaseRenderer):
method render_field (line 337) | def render_field(self, field, parent_style):
method render (line 362) | def render(self, data, accepted_media_type=None, renderer_context=None):
class BrowsableAPIRenderer (line 384) | class BrowsableAPIRenderer(BaseRenderer):
method get_default_renderer (line 396) | def get_default_renderer(self, view):
method get_content (line 412) | def get_content(self, renderer, data,
method show_form_for_method (line 432) | def show_form_for_method(self, view, method, request, obj):
method _get_serializer (line 447) | def _get_serializer(self, serializer_class, view_instance, request, *a...
method get_rendered_html_form (line 455) | def get_rendered_html_form(self, data, view, method, request):
method render_form_for_serializer (line 522) | def render_form_for_serializer(self, serializer):
method get_raw_data_form (line 533) | def get_raw_data_form(self, data, view, method, request):
method get_name (line 604) | def get_name(self, view):
method get_description (line 607) | def get_description(self, view, status_code):
method get_breadcrumbs (line 612) | def get_breadcrumbs(self, request):
method get_filter_form (line 615) | def get_filter_form(self, data, view, request):
method get_context (line 646) | def get_context(self, data, accepted_media_type, renderer_context):
method render (line 716) | def render(self, data, accepted_media_type=None, renderer_context=None):
class AdminRenderer (line 737) | class AdminRenderer(BrowsableAPIRenderer):
method render (line 741) | def render(self, data, accepted_media_type=None, renderer_context=None):
method get_context (line 781) | def get_context(self, data, accepted_media_type, renderer_context):
class DocumentationRenderer (line 820) | class DocumentationRenderer(BaseRenderer):
method get_context (line 829) | def get_context(self, data, request):
method render (line 839) | def render(self, data, accepted_media_type=None, renderer_context=None):
class SchemaJSRenderer (line 855) | class SchemaJSRenderer(BaseRenderer):
method render (line 861) | def render(self, data, accepted_media_type=None, renderer_context=None):
class MultiPartRenderer (line 871) | class MultiPartRenderer(BaseRenderer):
method render (line 877) | def render(self, data, accepted_media_type=None, renderer_context=None):
class CoreJSONRenderer (line 889) | class CoreJSONRenderer(BaseRenderer):
method __init__ (line 894) | def __init__(self):
method render (line 897) | def render(self, data, media_type=None, renderer_context=None):
FILE: jet_django/deps/rest_framework/request.py
function is_form_media_type (line 27) | def is_form_media_type(media_type):
class override_method (line 36) | class override_method(object):
method __init__ (line 47) | def __init__(self, view, request, method):
method __enter__ (line 53) | def __enter__(self):
method __exit__ (line 60) | def __exit__(self, *args, **kwarg):
class WrappedAttributeError (line 65) | class WrappedAttributeError(Exception):
function wrap_attributeerrors (line 70) | def wrap_attributeerrors():
class Empty (line 83) | class Empty(object):
function _hasattr (line 91) | def _hasattr(obj, name):
function clone_request (line 95) | def clone_request(request, method):
class ForcedAuthentication (line 128) | class ForcedAuthentication(object):
method __init__ (line 134) | def __init__(self, force_user, force_token):
method authenticate (line 138) | def authenticate(self, request):
class Request (line 142) | class Request(object):
method __init__ (line 154) | def __init__(self, request, parsers=None, authenticators=None,
method _default_negotiator (line 184) | def _default_negotiator(self):
method content_type (line 188) | def content_type(self):
method stream (line 193) | def stream(self):
method query_params (line 202) | def query_params(self):
method data (line 209) | def data(self):
method user (line 215) | def user(self):
method user (line 226) | def user(self, value):
method auth (line 239) | def auth(self):
method auth (line 250) | def auth(self, value):
method successful_authenticator (line 259) | def successful_authenticator(self):
method _load_data_and_files (line 269) | def _load_data_and_files(self):
method _load_stream (line 287) | def _load_stream(self):
method _supports_form_parsing (line 306) | def _supports_form_parsing(self):
method _parse (line 316) | def _parse(self):
method _authenticate (line 368) | def _authenticate(self):
method _not_authenticated (line 387) | def _not_authenticated(self):
method __getattr__ (line 405) | def __getattr__(self, attr):
method DATA (line 416) | def DATA(self):
method POST (line 423) | def POST(self):
method FILES (line 432) | def FILES(self):
method QUERY_PARAMS (line 441) | def QUERY_PARAMS(self):
method force_plaintext_errors (line 447) | def force_plaintext_errors(self, value):
FILE: jet_django/deps/rest_framework/response.py
class Response (line 16) | class Response(SimpleTemplateResponse):
method __init__ (line 22) | def __init__(self, data=None, status=None,
method rendered_content (line 52) | def rendered_content(self):
method status_text (line 86) | def status_text(self):
method __getstate__ (line 93) | def __getstate__(self):
FILE: jet_django/deps/rest_framework/reverse.py
function preserve_builtin_query_params (line 15) | def preserve_builtin_query_params(url, request=None):
function reverse (line 35) | def reverse(viewname, args=None, kwargs=None, request=None, format=None,...
function _reverse (line 55) | def _reverse(viewname, args=None, kwargs=None, request=None, format=None...
FILE: jet_django/deps/rest_framework/routers.py
class DynamicDetailRoute (line 38) | class DynamicDetailRoute(object):
method __new__ (line 39) | def __new__(cls, url, name, initkwargs):
class DynamicListRoute (line 49) | class DynamicListRoute(object):
method __new__ (line 50) | def __new__(cls, url, name, initkwargs):
function escape_curly_brackets (line 60) | def escape_curly_brackets(url_path):
function flatten (line 69) | def flatten(list_of_lists):
class BaseRouter (line 76) | class BaseRouter(object):
method __init__ (line 77) | def __init__(self):
method register (line 80) | def register(self, prefix, viewset, base_name=None):
method get_default_base_name (line 85) | def get_default_base_name(self, viewset):
method get_urls (line 92) | def get_urls(self):
method urls (line 99) | def urls(self):
class SimpleRouter (line 105) | class SimpleRouter(BaseRouter):
method __init__ (line 150) | def __init__(self, trailing_slash=True):
method get_default_base_name (line 154) | def get_default_base_name(self, viewset):
method get_routes (line 167) | def get_routes(self, viewset):
method _get_dynamic_route (line 203) | def _get_dynamic_route(self, route, action):
method get_method_map (line 218) | def get_method_map(self, viewset, method_map):
method get_lookup_regex (line 230) | def get_lookup_regex(self, viewset, lookup_prefix=''):
method get_urls (line 253) | def get_urls(self):
class APIRootView (line 297) | class APIRootView(views.APIView):
method get (line 305) | def get(self, request, *args, **kwargs):
class DefaultRouter (line 327) | class DefaultRouter(SimpleRouter):
method __init__ (line 340) | def __init__(self, *args, **kwargs):
method get_api_root_view (line 347) | def get_api_root_view(self, api_urls=None):
method get_urls (line 358) | def get_urls(self):
FILE: jet_django/deps/rest_framework/schemas/__init__.py
function get_schema_view (line 29) | def get_schema_view(
FILE: jet_django/deps/rest_framework/schemas/generators.py
function common_path (line 28) | def common_path(paths):
function get_pk_name (line 40) | def get_pk_name(model):
function is_api_view (line 45) | def is_api_view(callback):
class LinkNode (line 68) | class LinkNode(OrderedDict):
method __init__ (line 69) | def __init__(self):
method get_available_key (line 74) | def get_available_key(self, preferred_key):
function insert_into (line 87) | def insert_into(target, keys, value):
function distribute_links (line 112) | def distribute_links(obj):
function is_custom_action (line 121) | def is_custom_action(action):
function endpoint_ordering (line 127) | def endpoint_ordering(endpoint):
class EndpointEnumerator (line 144) | class EndpointEnumerator(object):
method __init__ (line 148) | def __init__(self, patterns=None, urlconf=None):
method get_api_endpoints (line 163) | def get_api_endpoints(self, patterns=None, prefix=''):
method get_path_from_regex (line 193) | def get_path_from_regex(self, path_regex):
method should_include_endpoint (line 203) | def should_include_endpoint(self, path, callback):
method get_allowed_methods (line 226) | def get_allowed_methods(self, callback):
class SchemaGenerator (line 240) | class SchemaGenerator(object):
method __init__ (line 261) | def __init__(self, title=None, url=None, description=None, patterns=No...
method get_schema (line 278) | def get_schema(self, request=None, public=False):
method get_links (line 300) | def get_links(self, request=None):
method determine_path_prefix (line 333) | def determine_path_prefix(self, paths):
method create_view (line 364) | def create_view(self, callback, method, request=None):
method has_view_permissions (line 389) | def has_view_permissions(self, path, method, view):
method coerce_path (line 402) | def coerce_path(self, path, method, view):
method get_keys (line 419) | def get_keys(self, subpath, method, view):
FILE: jet_django/deps/rest_framework/schemas/inspectors.py
function field_to_schema (line 26) | def field_to_schema(field):
function get_pk_description (line 108) | def get_pk_description(model, model_field):
class ViewInspector (line 122) | class ViewInspector(object):
method __get__ (line 128) | def __get__(self, instance, owner):
method view (line 148) | def view(self):
method view (line 154) | def view(self, value):
method view (line 158) | def view(self):
method get_link (line 161) | def get_link(self, path, method, base_url):
class AutoSchema (line 176) | class AutoSchema(ViewInspector):
method __init__ (line 182) | def __init__(self, manual_fields=None):
method get_link (line 193) | def get_link(self, path, method, base_url):
method get_description (line 220) | def get_description(self, path, method):
method get_path_fields (line 257) | def get_path_fields(self, path, method):
method get_serializer_fields (line 301) | def get_serializer_fields(self, path, method):
method get_pagination_fields (line 352) | def get_pagination_fields(self, path, method):
method _allows_filters (line 365) | def _allows_filters(self, path, method):
method get_filter_fields (line 385) | def get_filter_fields(self, path, method):
method get_manual_fields (line 394) | def get_manual_fields(self, path, method):
method update_fields (line 398) | def update_fields(fields, update_with):
method get_encoding (line 419) | def get_encoding(self, path, method):
class ManualSchema (line 443) | class ManualSchema(ViewInspector):
method __init__ (line 448) | def __init__(self, fields, description='', encoding=None):
method get_link (line 460) | def get_link(self, path, method, base_url):
class DefaultSchema (line 474) | class DefaultSchema(object):
method __get__ (line 476) | def __get__(self, instance, owner):
FILE: jet_django/deps/rest_framework/schemas/utils.py
function is_list_view (line 9) | def is_list_view(path, method, view):
FILE: jet_django/deps/rest_framework/schemas/views.py
class SchemaView (line 12) | class SchemaView(APIView):
method __init__ (line 19) | def __init__(self, *args, **kwargs):
method get (line 30) | def get(self, request, *args, **kwargs):
FILE: jet_django/deps/rest_framework/serializers.py
class BaseSerializer (line 86) | class BaseSerializer(Field):
method __init__ (line 111) | def __init__(self, instance=None, data=empty, **kwargs):
method __new__ (line 120) | def __new__(cls, *args, **kwargs):
method many_init (line 128) | def many_init(cls, *args, **kwargs):
method to_internal_value (line 159) | def to_internal_value(self, data):
method to_representation (line 162) | def to_representation(self, instance):
method update (line 165) | def update(self, instance, validated_data):
method create (line 168) | def create(self, validated_data):
method save (line 171) | def save(self, **kwargs):
method is_valid (line 221) | def is_valid(self, raise_exception=False):
method data (line 249) | def data(self):
method errors (line 270) | def errors(self):
method validated_data (line 277) | def validated_data(self):
class SerializerMetaclass (line 287) | class SerializerMetaclass(type):
method _get_declared_fields (line 297) | def _get_declared_fields(cls, bases, attrs):
method __new__ (line 316) | def __new__(cls, name, bases, attrs):
function as_serializer_error (line 321) | def as_serializer_error(exc):
class Serializer (line 348) | class Serializer(BaseSerializer):
method fields (line 354) | def fields(self):
method _writable_fields (line 368) | def _writable_fields(self):
method _readable_fields (line 374) | def _readable_fields(self):
method get_fields (line 380) | def get_fields(self):
method get_validators (line 389) | def get_validators(self):
method get_initial (line 398) | def get_initial(self):
method get_value (line 417) | def get_value(self, dictionary):
method run_validation (line 424) | def run_validation(self, data=empty):
method _read_only_defaults (line 444) | def _read_only_defaults(self):
method run_validators (line 460) | def run_validators(self, value):
method to_internal_value (line 468) | def to_internal_value(self, data):
method to_representation (line 505) | def to_representation(self, instance):
method validate (line 531) | def validate(self, attrs):
method __repr__ (line 534) | def __repr__(self):
method __iter__ (line 541) | def __iter__(self):
method __getitem__ (line 545) | def __getitem__(self, key):
method data (line 559) | def data(self):
method errors (line 564) | def errors(self):
class ListSerializer (line 577) | class ListSerializer(BaseSerializer):
method __init__ (line 586) | def __init__(self, *args, **kwargs):
method bind (line 594) | def bind(self, field_name, parent):
method get_initial (line 598) | def get_initial(self):
method get_value (line 603) | def get_value(self, dictionary):
method run_validation (line 613) | def run_validation(self, data=empty):
method to_internal_value (line 633) | def to_internal_value(self, data):
method to_representation (line 674) | def to_representation(self, data):
method validate (line 686) | def validate(self, attrs):
method update (line 689) | def update(self, instance, validated_data):
method create (line 698) | def create(self, validated_data):
method save (line 703) | def save(self, **kwargs):
method is_valid (line 735) | def is_valid(self, raise_exception=False):
method __repr__ (line 757) | def __repr__(self):
method data (line 764) | def data(self):
method errors (line 769) | def errors(self):
function raise_errors_on_nested_writes (line 784) | def raise_errors_on_nested_writes(method_name, serializer, validated_data):
class ModelSerializer (line 846) | class ModelSerializer(Serializer):
method create (line 905) | def create(self, validated_data):
method update (line 967) | def update(self, instance, validated_data):
method get_fields (line 987) | def get_fields(self):
method get_field_names (line 1063) | def get_field_names(self, declared_fields, info):
method get_default_field_names (line 1155) | def get_default_field_names(self, declared_fields, model_info):
method build_field (line 1169) | def build_field(self, field_name, info, model_class, nested_depth):
method build_standard_field (line 1192) | def build_standard_field(self, field_name, model_field):
method build_relational_field (line 1245) | def build_relational_field(self, field_name, relation_info):
method build_nested_field (line 1263) | def build_nested_field(self, field_name, relation_info, nested_depth):
method build_property_field (line 1278) | def build_property_field(self, field_name, model_class):
method build_url_field (line 1287) | def build_url_field(self, field_name, model_class):
method build_unknown_field (line 1296) | def build_unknown_field(self, field_name, model_class):
method include_extra_kwargs (line 1305) | def include_extra_kwargs(self, kwargs, extra_kwargs):
method get_extra_kwargs (line 1330) | def get_extra_kwargs(self):
method get_uniqueness_extra_kwargs (line 1360) | def get_uniqueness_extra_kwargs(self, field_names, declared_fields, ex...
method _get_model_fields (line 1434) | def _get_model_fields(self, field_names, declared_fields, extra_kwargs):
method get_validators (line 1471) | def get_validators(self):
method get_unique_together_validators (line 1486) | def get_unique_together_validators(self):
method get_unique_for_date_validators (line 1523) | def get_unique_for_date_validators(self):
class HyperlinkedModelSerializer (line 1578) | class HyperlinkedModelSerializer(ModelSerializer):
method get_default_field_names (line 1588) | def get_default_field_names(self, declared_fields, model_info):
method build_nested_field (line 1600) | def build_nested_field(self, field_name, relation_info, nested_depth):
FILE: jet_django/deps/rest_framework/settings.py
function perform_import (line 162) | def perform_import(val, setting_name):
function import_from_string (line 176) | def import_from_string(val, setting_name):
class APISettings (line 190) | class APISettings(object):
method __init__ (line 201) | def __init__(self, user_settings=None, defaults=None, import_strings=N...
method user_settings (line 209) | def user_settings(self):
method __getattr__ (line 214) | def __getattr__(self, attr):
method __check_user_settings (line 234) | def __check_user_settings(self, user_settings):
method reload (line 241) | def reload(self):
function reload_api_settings (line 252) | def reload_api_settings(*args, **kwargs):
FILE: jet_django/deps/rest_framework/status.py
function is_informational (line 11) | def is_informational(code):
function is_success (line 15) | def is_success(code):
function is_redirect (line 19) | def is_redirect(code):
function is_client_error (line 23) | def is_client_error(code):
function is_server_error (line 27) | def is_server_error(code):
FILE: jet_django/deps/rest_framework/test.py
function force_authenticate (line 25) | def force_authenticate(request, user=None, token=None):
class HeaderDict (line 31) | class HeaderDict(requests.packages.urllib3._collections.HTTPHeaderDict):
method get_all (line 32) | def get_all(self, key, default):
class MockOriginalResponse (line 35) | class MockOriginalResponse(object):
method __init__ (line 36) | def __init__(self, headers):
method isclosed (line 40) | def isclosed(self):
method close (line 43) | def close(self):
class DjangoTestAdapter (line 46) | class DjangoTestAdapter(requests.adapters.HTTPAdapter):
method __init__ (line 51) | def __init__(self):
method get_environ (line 55) | def get_environ(self, request):
method send (line 81) | def send(self, request, *args, **kwargs):
method close (line 107) | def close(self):
class RequestsClient (line 110) | class RequestsClient(requests.Session):
method __init__ (line 111) | def __init__(self, *args, **kwargs):
method request (line 117) | def request(self, method, url, *args, **kwargs):
function RequestsClient (line 123) | def RequestsClient(*args, **kwargs):
method __init__ (line 111) | def __init__(self, *args, **kwargs):
method request (line 117) | def request(self, method, url, *args, **kwargs):
class CoreAPIClient (line 128) | class CoreAPIClient(coreapi.Client):
method __init__ (line 129) | def __init__(self, *args, **kwargs):
method session (line 135) | def session(self):
function CoreAPIClient (line 139) | def CoreAPIClient(*args, **kwargs):
method __init__ (line 129) | def __init__(self, *args, **kwargs):
method session (line 135) | def session(self):
class APIRequestFactory (line 143) | class APIRequestFactory(DjangoRequestFactory):
method __init__ (line 147) | def __init__(self, enforce_csrf_checks=False, **defaults):
method _encode_data (line 154) | def _encode_data(self, data, format=None, content_type=None):
method get (line 197) | def get(self, path, data=None, **extra):
method post (line 211) | def post(self, path, data=None, format=None, content_type=None, **extra):
method put (line 215) | def put(self, path, data=None, format=None, content_type=None, **extra):
method patch (line 219) | def patch(self, path, data=None, format=None, content_type=None, **ext...
method delete (line 223) | def delete(self, path, data=None, format=None, content_type=None, **ex...
method options (line 227) | def options(self, path, data=None, format=None, content_type=None, **e...
method generic (line 231) | def generic(self, method, path, data='',
method request (line 240) | def request(self, **kwargs):
class ForceAuthClientHandler (line 246) | class ForceAuthClientHandler(ClientHandler):
method __init__ (line 252) | def __init__(self, *args, **kwargs):
method get_response (line 257) | def get_response(self, request):
class APIClient (line 264) | class APIClient(APIRequestFactory, DjangoClient):
method __init__ (line 265) | def __init__(self, enforce_csrf_checks=False, **defaults):
method credentials (line 270) | def credentials(self, **kwargs):
method force_authenticate (line 276) | def force_authenticate(self, user=None, token=None):
method request (line 286) | def request(self, **kwargs):
method get (line 291) | def get(self, path, data=None, follow=False, **extra):
method post (line 297) | def post(self, path, data=None, format=None, content_type=None,
method put (line 305) | def put(self, path, data=None, format=None, content_type=None,
method patch (line 313) | def patch(self, path, data=None, format=None, content_type=None,
method delete (line 321) | def delete(self, path, data=None, format=None, content_type=None,
method options (line 329) | def options(self, path, data=None, format=None, content_type=None,
method logout (line 337) | def logout(self):
class APITransactionTestCase (line 348) | class APITransactionTestCase(testcases.TransactionTestCase):
class APITestCase (line 352) | class APITestCase(testcases.TestCase):
class APISimpleTestCase (line 356) | class APISimpleTestCase(testcases.SimpleTestCase):
class APILiveServerTestCase (line 360) | class APILiveServerTestCase(testcases.LiveServerTestCase):
class URLPatternsTestCase (line 364) | class URLPatternsTestCase(testcases.SimpleTestCase):
method setUpClass (line 381) | def setUpClass(cls):
method tearDownClass (line 395) | def tearDownClass(cls):
FILE: jet_django/deps/rest_framework/throttling.py
class BaseThrottle (line 14) | class BaseThrottle(object):
method allow_request (line 19) | def allow_request(self, request, view):
method get_ident (line 25) | def get_ident(self, request):
method wait (line 44) | def wait(self):
class SimpleRateThrottle (line 52) | class SimpleRateThrottle(BaseThrottle):
method __init__ (line 70) | def __init__(self):
method get_cache_key (line 75) | def get_cache_key(self, request, view):
method get_rate (line 84) | def get_rate(self):
method parse_rate (line 99) | def parse_rate(self, rate):
method allow_request (line 111) | def allow_request(self, request, view):
method throttle_success (line 136) | def throttle_success(self):
method throttle_failure (line 145) | def throttle_failure(self):
method wait (line 151) | def wait(self):
class AnonRateThrottle (line 167) | class AnonRateThrottle(SimpleRateThrottle):
method get_cache_key (line 175) | def get_cache_key(self, request, view):
class UserRateThrottle (line 185) | class UserRateThrottle(SimpleRateThrottle):
method get_cache_key (line 195) | def get_cache_key(self, request, view):
class ScopedRateThrottle (line 207) | class ScopedRateThrottle(SimpleRateThrottle):
method __init__ (line 216) | def __init__(self):
method allow_request (line 221) | def allow_request(self, request, view):
method get_cache_key (line 237) | def get_cache_key(self, request, view):
FILE: jet_django/deps/rest_framework/urlpatterns.py
function _get_format_path_converter (line 11) | def _get_format_path_converter(suffix_kwarg, allowed):
function apply_suffix_patterns (line 37) | def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required, ...
function format_suffix_patterns (line 85) | def format_suffix_patterns(urlpatterns, suffix_required=False, allowed=N...
FILE: jet_django/deps/rest_framework/utils/breadcrumbs.py
function get_breadcrumbs (line 6) | def get_breadcrumbs(url, request=None):
FILE: jet_django/deps/rest_framework/utils/encoders.py
class JSONEncoder (line 19) | class JSONEncoder(json.JSONEncoder):
method default (line 24) | def default(self, obj):
FILE: jet_django/deps/rest_framework/utils/field_mapping.py
class ClassLookupDict (line 19) | class ClassLookupDict(object):
method __init__ (line 26) | def __init__(self, mapping):
method __getitem__ (line 29) | def __getitem__(self, key):
method __setitem__ (line 42) | def __setitem__(self, key, value):
function needs_label (line 46) | def needs_label(model_field, field_name):
function get_detail_view_name (line 55) | def get_detail_view_name(model):
function get_field_kwargs (line 66) | def get_field_kwargs(field_name, model_field):
function get_relation_kwargs (line 233) | def get_relation_kwargs(field_name, relation_info):
function get_nested_relation_kwargs (line 282) | def get_nested_relation_kwargs(relation_info):
function get_url_kwargs (line 289) | def get_url_kwargs(model_field):
FILE: jet_django/deps/rest_framework/utils/formatting.py
function remove_trailing_string (line 15) | def remove_trailing_string(content, trailing):
function dedent (line 25) | def dedent(content):
function camelcase_to_spaces (line 50) | def camelcase_to_spaces(content):
function markup_description (line 60) | def markup_description(description):
FILE: jet_django/deps/rest_framework/utils/html.py
function is_html_input (line 9) | def is_html_input(dictionary):
function parse_html_list (line 15) | def parse_html_list(dictionary, prefix=''):
function parse_html_dict (line 65) | def parse_html_dict(dictionary, prefix=''):
FILE: jet_django/deps/rest_framework/utils/humanize_datetime.py
function datetime_formats (line 7) | def datetime_formats(formats):
function date_formats (line 15) | def date_formats(formats):
function time_formats (line 20) | def time_formats(formats):
function humanize_strptime (line 25) | def humanize_strptime(format_string):
FILE: jet_django/deps/rest_framework/utils/json.py
function strict_constant (line 15) | def strict_constant(o):
function dump (line 20) | def dump(*args, **kwargs):
function dumps (line 26) | def dumps(*args, **kwargs):
function load (line 32) | def load(*args, **kwargs):
function loads (line 38) | def loads(*args, **kwargs):
FILE: jet_django/deps/rest_framework/utils/mediatypes.py
function media_type_matches (line 14) | def media_type_matches(lhs, rhs):
function order_by_precedence (line 32) | def order_by_precedence(media_type_lst):
class _MediaType (line 50) | class _MediaType(object):
method __init__ (line 51) | def __init__(self, media_type_str):
method match (line 56) | def match(self, other):
method precedence (line 71) | def precedence(self):
method __str__ (line 83) | def __str__(self):
FILE: jet_django/deps/rest_framework/utils/model_meta.py
function get_field_info (line 29) | def get_field_info(model):
function _get_pk (line 48) | def _get_pk(opts):
function _get_fields (line 60) | def _get_fields(opts):
function _get_to_field (line 68) | def _get_to_field(field):
function _get_forward_relationships (line 72) | def _get_forward_relationships(opts):
function _get_reverse_relationships (line 104) | def _get_reverse_relationships(opts):
function _merge_fields_and_pk (line 141) | def _merge_fields_and_pk(pk, fields):
function _merge_relationships (line 150) | def _merge_relationships(forward_relations, reverse_relations):
function is_abstract_model (line 157) | def is_abstract_model(model):
FILE: jet_django/deps/rest_framework/utils/representation.py
function manager_repr (line 16) | def manager_repr(value):
function smart_repr (line 30) | def smart_repr(value):
function field_repr (line 53) | def field_repr(field, force_many=False):
function serializer_repr (line 76) | def serializer_repr(serializer, indent, force_many=None):
function list_repr (line 103) | def list_repr(serializer, indent):
FILE: jet_django/deps/rest_framework/utils/serializer_helpers.py
class ReturnDict (line 12) | class ReturnDict(OrderedDict):
method __init__ (line 19) | def __init__(self, *args, **kwargs):
method copy (line 23) | def copy(self):
method __repr__ (line 26) | def __repr__(self):
method __reduce__ (line 29) | def __reduce__(self):
class ReturnList (line 35) | class ReturnList(list):
method __init__ (line 42) | def __init__(self, *args, **kwargs):
method __repr__ (line 46) | def __repr__(self):
method __reduce__ (line 49) | def __reduce__(self):
class BoundField (line 55) | class BoundField(object):
method __init__ (line 62) | def __init__(self, field, value, errors, prefix=''):
method __getattr__ (line 69) | def __getattr__(self, attr_name):
method _proxy_class (line 73) | def _proxy_class(self):
method __repr__ (line 76) | def __repr__(self):
method as_form_field (line 81) | def as_form_field(self):
class JSONBoundField (line 86) | class JSONBoundField(BoundField):
method as_form_field (line 87) | def as_form_field(self):
class NestedBoundField (line 99) | class NestedBoundField(BoundField):
method __init__ (line 106) | def __init__(self, field, value, errors, prefix=''):
method __iter__ (line 111) | def __iter__(self):
method __getitem__ (line 115) | def __getitem__(self, key):
method as_form_field (line 123) | def as_form_field(self):
class BindingDict (line 133) | class BindingDict(collections.MutableMapping):
method __init__ (line 142) | def __init__(self, serializer):
method __setitem__ (line 146) | def __setitem__(self, key, field):
method __getitem__ (line 150) | def __getitem__(self, key):
method __delitem__ (line 153) | def __delitem__(self, key):
method __iter__ (line 156) | def __iter__(self):
method __len__ (line 159) | def __len__(self):
method __repr__ (line 162) | def __repr__(self):
FILE: jet_django/deps/rest_framework/utils/urls.py
function replace_query_param (line 5) | def replace_query_param(url, key, val):
function remove_query_param (line 17) | def remove_query_param(url, key):
FILE: jet_django/deps/rest_framework/validators.py
function qs_exists (line 22) | def qs_exists(queryset):
function qs_filter (line 29) | def qs_filter(queryset, **kwargs):
class UniqueValidator (line 36) | class UniqueValidator(object):
method __init__ (line 44) | def __init__(self, queryset, message=None, lookup='exact'):
method set_context (line 50) | def set_context(self, serializer_field):
method filter_queryset (line 61) | def filter_queryset(self, value, queryset):
method exclude_current_instance (line 68) | def exclude_current_instance(self, queryset):
method __call__ (line 77) | def __call__(self, value):
method __repr__ (line 84) | def __repr__(self):
class UniqueTogetherValidator (line 91) | class UniqueTogetherValidator(object):
method __init__ (line 100) | def __init__(self, queryset, fields, message=None):
method set_context (line 106) | def set_context(self, serializer):
method enforce_required_fields (line 114) | def enforce_required_fields(self, attrs):
method filter_queryset (line 130) | def filter_queryset(self, attrs, queryset):
method exclude_current_instance (line 148) | def exclude_current_instance(self, attrs, queryset):
method __call__ (line 157) | def __call__(self, attrs):
method __repr__ (line 172) | def __repr__(self):
class BaseUniqueForValidator (line 180) | class BaseUniqueForValidator(object):
method __init__ (line 184) | def __init__(self, queryset, field, date_field, message=None):
method set_context (line 190) | def set_context(self, serializer):
method enforce_required_fields (line 202) | def enforce_required_fields(self, attrs):
method filter_queryset (line 215) | def filter_queryset(self, attrs, queryset):
method exclude_current_instance (line 218) | def exclude_current_instance(self, attrs, queryset):
method __call__ (line 227) | def __call__(self, attrs):
method __repr__ (line 238) | def __repr__(self):
class UniqueForDateValidator (line 247) | class UniqueForDateValidator(BaseUniqueForValidator):
method filter_queryset (line 250) | def filter_queryset(self, attrs, queryset):
class UniqueForMonthValidator (line 262) | class UniqueForMonthValidator(BaseUniqueForValidator):
method filter_queryset (line 265) | def filter_queryset(self, attrs, queryset):
class UniqueForYearValidator (line 275) | class UniqueForYearValidator(BaseUniqueForValidator):
method filter_queryset (line 278) | def filter_queryset(self, attrs, queryset):
FILE: jet_django/deps/rest_framework/versioning.py
class BaseVersioning (line 16) | class BaseVersioning(object):
method determine_version (line 21) | def determine_version(self, request, *args, **kwargs):
method reverse (line 27) | def reverse(self, viewname, args=None, kwargs=None, request=None, form...
method is_allowed_version (line 30) | def is_allowed_version(self, version):
class AcceptHeaderVersioning (line 37) | class AcceptHeaderVersioning(BaseVersioning):
method determine_version (line 45) | def determine_version(self, request, *args, **kwargs):
class URLPathVersioning (line 57) | class URLPathVersioning(BaseVersioning):
method determine_version (line 76) | def determine_version(self, request, *args, **kwargs):
method reverse (line 82) | def reverse(self, viewname, args=None, kwargs=None, request=None, form...
class NamespaceVersioning (line 92) | class NamespaceVersioning(BaseVersioning):
method determine_version (line 118) | def determine_version(self, request, *args, **kwargs):
method reverse (line 130) | def reverse(self, viewname, args=None, kwargs=None, request=None, form...
method get_versioned_viewname (line 137) | def get_versioned_viewname(self, viewname, request):
class HostNameVersioning (line 141) | class HostNameVersioning(BaseVersioning):
method determine_version (line 150) | def determine_version(self, request, *args, **kwargs):
class QueryParameterVersioning (line 164) | class QueryParameterVersioning(BaseVersioning):
method determine_version (line 172) | def determine_version(self, request, *args, **kwargs):
method reverse (line 178) | def reverse(self, viewname, args=None, kwargs=None, request=None, form...
FILE: jet_django/deps/rest_framework/views.py
function get_view_name (line 24) | def get_view_name(view_cls, suffix=None):
function get_view_description (line 41) | def get_view_description(view_cls, html=False):
function set_rollback (line 55) | def set_rollback():
function exception_handler (line 61) | def exception_handler(exc, context):
class APIView (line 94) | class APIView(View):
method as_view (line 112) | def as_view(cls, **initkwargs):
method allowed_methods (line 137) | def allowed_methods(self):
method default_response_headers (line 144) | def default_response_headers(self):
method http_method_not_allowed (line 152) | def http_method_not_allowed(self, request, *args, **kwargs):
method permission_denied (line 159) | def permission_denied(self, request, message=None):
method throttled (line 167) | def throttled(self, request, wait):
method get_authenticate_header (line 173) | def get_authenticate_header(self, request):
method get_parser_context (line 182) | def get_parser_context(self, http_request):
method get_renderer_context (line 195) | def get_renderer_context(self):
method get_exception_handler_context (line 209) | def get_exception_handler_context(self):
method get_view_name (line 221) | def get_view_name(self):
method get_view_description (line 229) | def get_view_description(self, html=False):
method get_format_suffix (line 239) | def get_format_suffix(self, **kwargs):
method get_renderers (line 246) | def get_renderers(self):
method get_parsers (line 252) | def get_parsers(self):
method get_authenticators (line 258) | def get_authenticators(self):
method get_permissions (line 264) | def get_permissions(self):
method get_throttles (line 270) | def get_throttles(self):
method get_content_negotiator (line 276) | def get_content_negotiator(self):
method get_exception_handler (line 284) | def get_exception_handler(self):
method perform_content_negotiation (line 292) | def perform_content_negotiation(self, request, force=False):
method perform_authentication (line 306) | def perform_authentication(self, request):
method check_permissions (line 316) | def check_permissions(self, request):
method check_object_permissions (line 327) | def check_object_permissions(self, request, obj):
method check_throttles (line 338) | def check_throttles(self, request):
method determine_version (line 347) | def determine_version(self, request, *args, **kwargs):
method initialize_request (line 359) | def initialize_request(self, request, *args, **kwargs):
method initial (line 373) | def initial(self, request, *args, **kwargs):
method finalize_response (line 392) | def finalize_response(self, request, response, *args, **kwargs):
method handle_exception (line 422) | def handle_exception(self, exc):
method raise_uncaught_exception (line 448) | def raise_uncaught_exception(self, exc):
method dispatch (line 459) | def dispatch(self, request, *args, **kwargs):
method options (line 488) | def options(self, request, *args, **kwargs):
FILE: jet_django/deps/rest_framework/viewsets.py
function _is_extra_action (line 31) | def _is_extra_action(attr):
class ViewSetMixin (line 35) | class ViewSetMixin(object):
method as_view (line 49) | def as_view(cls, actions=None, **initkwargs):
method initialize_request (line 121) | def initialize_request(self, request, *args, **kwargs):
method reverse_action (line 136) | def reverse_action(self, url_name, *args, **kwargs):
method get_extra_actions (line 146) | def get_extra_actions(cls):
class ViewSet (line 153) | class ViewSet(ViewSetMixin, views.APIView):
class GenericViewSet (line 160) | class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
class ReadOnlyModelViewSet (line 169) | class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
class ModelViewSet (line 178) | class ModelViewSet(mixins.CreateModelMixin,
FILE: jet_django/fields/raw_file.py
class RawFileField (line 7) | class RawFileField(serializers.CharField):
method __init__ (line 9) | def __init__(self, *args, **kwargs):
method to_internal_value (line 16) | def to_internal_value(self, data):
method to_representation (line 30) | def to_representation(self, value):
FILE: jet_django/filters/geos_geometry.py
class GEOSGeometryFilter (line 4) | class GEOSGeometryFilter(django_filters.CharFilter):
method filter (line 6) | def filter(self, qs, value):
FILE: jet_django/filters/model.py
function filter_field (line 47) | def filter_field(field):
function search_field (line 58) | def search_field(field):
function foreign_key_field (line 76) | def foreign_key_field(field):
function foreign_key_map (line 80) | def foreign_key_map(field):
function model_filter_class_factory (line 85) | def model_filter_class_factory(build_model, model_fields, model_relations):
FILE: jet_django/filters/model_aggregate.py
class AggregateFilter (line 6) | class AggregateFilter(django_filters.CharFilter):
method filter (line 8) | def filter(self, qs, value):
FILE: jet_django/filters/model_group.py
class GroupFilter (line 6) | class GroupFilter(django_filters.CharFilter):
method filter (line 8) | def filter(self, qs, value):
FILE: jet_django/management/commands/jet_register_token.py
class Command (line 6) | class Command(BaseCommand):
method handle (line 7) | def handle(self, *args, **options):
FILE: jet_django/management/commands/jet_reset_token.py
class Command (line 6) | class Command(BaseCommand):
method handle (line 7) | def handle(self, *args, **options):
FILE: jet_django/management/commands/jet_set_token.py
class Command (line 9) | class Command(BaseCommand):
method add_arguments (line 10) | def add_arguments(self, parser):
method handle (line 13) | def handle(self, *args, **options):
FILE: jet_django/management/commands/jet_token.py
class Command (line 6) | class Command(BaseCommand):
method add_arguments (line 7) | def add_arguments(self, parser):
method handle (line 10) | def handle(self, *args, **options):
FILE: jet_django/migrations/0001_initial.py
class Migration (line 10) | class Migration(migrations.Migration):
FILE: jet_django/migrations/0002_auto_20181014_2002.py
class Migration (line 8) | class Migration(migrations.Migration):
FILE: jet_django/mixins/cors_api_view.py
class CORSAPIViewMixin (line 4) | class CORSAPIViewMixin(object):
method default_response_headers (line 6) | def default_response_headers(self):
FILE: jet_django/mixins/method_override.py
class MethodOverrideViewMixin (line 2) | class MethodOverrideViewMixin(object):
method dispatch (line 3) | def dispatch(self, request, *args, **kwargs):
FILE: jet_django/models/token.py
class Token (line 5) | class Token(models.Model):
class Meta (line 19) | class Meta:
method __str__ (line 23) | def __str__(self):
FILE: jet_django/pagination.py
class CustomPaginator (line 11) | class CustomPaginator(Paginator):
method count_for_postgresql (line 12) | def count_for_postgresql(self, db_table):
method count_for_mysql (line 17) | def count_for_mysql(self, db_table):
method count (line 23) | def count(self):
class CustomPageNumberPagination (line 42) | class CustomPageNumberPagination(PageNumberPagination):
method get_paginated_response (line 46) | def get_paginated_response(self, data):
FILE: jet_django/permissions.py
class HasProjectPermissions (line 7) | class HasProjectPermissions(BasePermission):
method has_permission (line 11) | def has_permission(self, request, view):
class ModifyNotInDemo (line 41) | class ModifyNotInDemo(BasePermission):
method has_permission (line 43) | def has_permission(self, request, view):
FILE: jet_django/serializers/file_upload.py
class FileUploadSerializer (line 9) | class FileUploadSerializer(serializers.Serializer):
method validate (line 16) | def validate(self, attrs):
method save (line 29) | def save(self, **kwargs):
FILE: jet_django/serializers/message.py
class MessageSerializer (line 5) | class MessageSerializer(serializers.Serializer):
method save (line 9) | def save(self, **kwargs):
FILE: jet_django/serializers/model.py
function model_serializer_factory (line 7) | def model_serializer_factory(build_model, build_fields):
FILE: jet_django/serializers/model_detail.py
function model_detail_serializer_factory (line 4) | def model_detail_serializer_factory(build_model, build_fields):
FILE: jet_django/serializers/reorder.py
function reorder_serializer_factory (line 6) | def reorder_serializer_factory(build_queryset):
FILE: jet_django/serializers/reset_order.py
function reset_order_serializer_factory (line 6) | def reset_order_serializer_factory(build_queryset):
FILE: jet_django/serializers/sql.py
class ParamsSerializers (line 9) | class ParamsSerializers(serializers.CharField):
method to_internal_value (line 10) | def to_internal_value(self, data):
method to_representation (line 14) | def to_representation(self, value):
class SqlError (line 18) | class SqlError(APIException):
method __init__ (line 23) | def __init__(self, detail):
method __str__ (line 26) | def __str__(self):
class SqlSerializer (line 30) | class SqlSerializer(serializers.Serializer):
method validate_query (line 34) | def validate_query(self, value):
method execute (line 42) | def execute(self, data):
class SqlsSerializer (line 61) | class SqlsSerializer(serializers.Serializer):
method execute (line 64) | def execute(self, data):
FILE: jet_django/static/jet_django.deps.rest_framework/docs/js/api.js
function normalizeKeys (line 5) | function normalizeKeys (arr) {
function normalizeHTTPHeader (line 13) | function normalizeHTTPHeader (str) {
function formEntries (line 30) | function formEntries (form) {
function requestCallback (line 159) | function requestCallback (request) {
function responseCallback (line 170) | function responseCallback (response, responseText) {
FILE: jet_django/static/jet_django.deps.rest_framework/docs/js/highlight.pack.js
function n (line 1) | function n(e){return e.replace(/&/gm,"&").replace(/</gm,"<").repl...
function t (line 1) | function t(e){return e.nodeName.toLowerCase()}
function r (line 1) | function r(e,n){var t=e&&e.exec(n);return t&&0==t.index}
function a (line 1) | function a(e){var n=(e.className+" "+(e.parentNode?e.parentNode.classNam...
function i (line 1) | function i(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t...
function o (line 1) | function o(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i...
function u (line 1) | function u(e,r,a){function i(){return e.length&&r.length?e[0].offset!=r[...
function c (line 1) | function c(e){function n(e){return e&&e.source||e}function t(t,r){return...
function s (line 1) | function s(e,t,a,i){function o(e,n){for(var t=0;t<n.c.length;t++)if(r(n....
function l (line 1) | function l(e,t){t=t||x.languages||Object.keys(w);var r={r:0,value:n(e)},...
function f (line 1) | function f(e){return x.tabReplace&&(e=e.replace(/^((<[^>]+>|\t)+)/gm,fun...
function g (line 1) | function g(e,n,t){var r=n?E[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)...
function p (line 1) | function p(e){var n=a(e);if(!/no(-?)highlight|plain|text/.test(n)){var t...
function d (line 1) | function d(e){x=i(x,e)}
function h (line 1) | function h(){if(!h.called){h.called=!0;var e=document.querySelectorAll("...
function b (line 1) | function b(){addEventListener("DOMContentLoaded",h,!1),addEventListener(...
function v (line 1) | function v(n,t){var r=w[n]=t(e);r.aliases&&r.aliases.forEach(function(e)...
function m (line 1) | function m(){return Object.keys(w)}
function N (line 1) | function N(e){return w[e]||w[E[e]]}
FILE: jet_django/static/jet_django.deps.rest_framework/js/ajax-form.js
function replaceDocument (line 1) | function replaceDocument(docString) {
function doAjaxSubmit (line 8) | function doAjaxSubmit(e) {
function captureSubmittingElement (line 113) | function captureSubmittingElement(e) {
FILE: jet_django/static/jet_django.deps.rest_framework/js/coreapi-0.1.1.js
function s (line 1) | function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&re...
function defineProperties (line 4) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 6) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function BasicAuthentication (line 9) | function BasicAuthentication() {
function defineProperties (line 51) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 53) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function trim (line 57) | function trim(str) {
function getCookie (line 61) | function getCookie(cookieName, cookieString) {
function SessionAuthentication (line 77) | function SessionAuthentication() {
function defineProperties (line 107) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 109) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function TokenAuthentication (line 112) | function TokenAuthentication() {
function defineProperties (line 139) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 141) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function lookupLink (line 149) | function lookupLink(node, keys) {
function Client (line 189) | function Client() {
function defineProperties (line 233) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 237) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function unescapeKey (line 242) | function unescapeKey(key) {
function getString (line 249) | function getString(obj, key) {
function getBoolean (line 257) | function getBoolean(obj, key) {
function getObject (line 265) | function getObject(obj, key) {
function getArray (line 273) | function getArray(obj, key) {
function getContent (line 281) | function getContent(data, baseUrl) {
function primitiveToNode (line 294) | function primitiveToNode(data, baseUrl) {
function CoreJSONCodec (line 347) | function CoreJSONCodec() {
function defineProperties (line 389) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 391) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function JSONCodec (line 394) | function JSONCodec() {
function defineProperties (line 419) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 421) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function TextCodec (line 424) | function TextCodec() {
function _classCallCheck (line 449) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _classCallCheck (line 515) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function _possibleConstructorReturn (line 517) | function _possibleConstructorReturn(self, call) { if (!self) { throw new...
function _inherits (line 519) | function _inherits(subClass, superClass) { if (typeof superClass !== "fu...
function ParameterError (line 524) | function ParameterError(message) {
function LinkLookupError (line 540) | function LinkLookupError(message) {
function ErrorMessage (line 556) | function ErrorMessage(message, content) {
function defineProperties (line 603) | function defineProperties(target, props) { for (var i = 0; i < props.len...
function _classCallCheck (line 605) | function _classCallCheck(instance, Constructor) { if (!(instance instanc...
function HTTPTransport (line 626) | function HTTPTransport() {
function querystring (line 885) | function querystring(query) {
function querystringify (line 911) | function querystringify(obj, prefix) {
function extractProtocol (line 1021) | function extractProtocol(address) {
function resolve (line 1039) | function resolve(relative, base) {
function URL (line 1076) | function URL(address, location, parser) {
function UrlTemplate (line 1406) | function UrlTemplate() {
function normalizeName (line 1632) | function normalizeName(name) {
function normalizeValue (line 1642) | function normalizeValue(value) {
function iteratorFor (line 1650) | function iteratorFor(items) {
function Headers (line 1667) | function Headers(headers) {
function consumed (line 1736) | function consumed(body) {
function fileReaderReady (line 1743) | function fileReaderReady(reader) {
function readBlobAsArrayBuffer (line 1754) | function readBlobAsArrayBuffer(blob) {
function readBlobAsText (line 1761) | function readBlobAsText(blob) {
function bufferClone (line 1768) | function bufferClone(buf) {
function Body (line 1778) | function Body() {
function normalizeMethod (line 1878) | function normalizeMethod(method) {
function Request (line 1883) | function Request(input, options) {
function decode (line 1924) | function decode(body) {
function parseHeaders (line 1937) | function parseHeaders(rawHeaders) {
function Response (line 1952) | function Response(bodyInit, options) {
FILE: jet_django/static/jet_django.deps.rest_framework/js/csrf.js
function getCookie (line 1) | function getCookie(name) {
function csrfSafeMethod (line 21) | function csrfSafeMethod(method) {
function sameOrigin (line 26) | function sameOrigin(url) {
FILE: jet_django/static/jet_django.deps.rest_framework/js/prettify-min.js
function L (line 2) | function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var...
function M (line 6) | function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.classN...
function B (line 7) | function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}
function x (line 7) | function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(...
function u (line 9) | function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''...
function D (line 12) | function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.clas...
function k (line 15) | function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(...
function C (line 15) | function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-m...
function E (line 15) | function E(a){var m=
function m (line 25) | function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Inf...
FILE: jet_django/templatetags/jet_django_deps_rest_framework.py
function highlight_code (line 25) | def highlight_code(parser, token):
class CodeNode (line 32) | class CodeNode(template.Node):
method __init__ (line 35) | def __init__(self, lang, code):
method render (line 39) | def render(self, context):
function with_location (line 45) | def with_location(fields, location):
function form_for_link (line 53) | def form_for_link(link):
function render_markdown (line 69) | def render_markdown(markdown_text):
function get_pagination_html (line 76) | def get_pagination_html(pager):
function render_form (line 81) | def render_form(serializer, template_pack=None):
function render_field (line 88) | def render_field(field, style):
function optional_login (line 94) | def optional_login(request):
function optional_docs_login (line 110) | def optional_docs_login(request):
function optional_logout (line 126) | def optional_logout(request, user):
function add_query_param (line 151) | def add_query_param(request, key, val):
function as_string (line 161) | def as_string(value):
function as_list_of_strings (line 168) | def as_list_of_strings(value):
function add_class (line 176) | def add_class(value, css_class):
function format_value (line 205) | def format_value(value):
function items (line 236) | def items(value):
function data (line 247) | def data(value):
function schema_links (line 261) | def schema_links(section, sec_key=None):
function add_nested_class (line 284) | def add_nested_class(value):
function smart_urlquote_wrapper (line 302) | def smart_urlquote_wrapper(matched_url):
function urlize_quoted_links (line 314) | def urlize_quoted_links(text, trim_url_limit=None, nofollow=True, autoes...
function break_long_headers (line 393) | def break_long_headers(header):
FILE: jet_django/urls.py
function init_urls (line 15) | def init_urls():
FILE: jet_django/utils/backend.py
function api_method_url (line 10) | def api_method_url(method):
function get_token (line 14) | def get_token():
function register_token (line 19) | def register_token():
function is_token_activated (line 48) | def is_token_activated(token):
function reset_token (line 65) | def reset_token():
function project_auth (line 71) | def project_auth(token, permission=None):
FILE: jet_django/utils/siblings.py
function get_row_number (line 7) | def get_row_number(Model, instance, join_sql, join_args, where_sql, wher...
function get_row_siblings (line 45) | def get_row_siblings(Model, row_number, join_sql, join_args, where_sql, ...
function create_joins (line 97) | def create_joins(queryset, compiler):
function create_where (line 114) | def create_where(queryset, compiler):
function create_order_by (line 119) | def create_order_by(compiler):
function get_model_siblings (line 132) | def get_model_siblings(Model, instance, queryset):
FILE: jet_django/views/exception_handler.py
function jet_exception_handler (line 11) | def jet_exception_handler(exc, context):
FILE: jet_django/views/file_upload.py
class FileUploadView (line 8) | class FileUploadView(CORSAPIViewMixin, views.APIView):
method post (line 12) | def post(self, request, *args, **kwargs):
FILE: jet_django/views/message.py
class MessageView (line 8) | class MessageView(CORSAPIViewMixin, views.APIView):
method post (line 12) | def post(self, request, *args, **kwargs):
FILE: jet_django/views/model.py
class AggregateSerializer (line 17) | class AggregateSerializer(serializers.Serializer):
method __init__ (line 20) | def __init__(self, *args, **kwargs):
class GroupSerializer (line 27) | class GroupSerializer(serializers.Serializer):
method __init__ (line 31) | def __init__(self, *args, **kwargs):
function model_viewset_factory (line 41) | def model_viewset_factory(build_model, build_filter_class, build_seriali...
FILE: jet_django/views/model_description.py
class ModelDescriptionView (line 8) | class ModelDescriptionView(CORSAPIViewMixin, views.APIView):
method get (line 12) | def get(self, request, *args, **kwargs):
FILE: jet_django/views/register.py
class RegisterView (line 11) | class RegisterView(CORSAPIViewMixin, generic.RedirectView):
method get (line 13) | def get(self, request, *args, **kwargs):
FILE: jet_django/views/root.py
class RootView (line 10) | class RootView(CORSAPIViewMixin, views.APIView):
method get (line 11) | def get(self, request, *args, **kwargs):
FILE: jet_django/views/sql.py
class SqlView (line 8) | class SqlView(CORSAPIViewMixin, views.APIView):
method post (line 12) | def post(self, request, *args, **kwargs):
FILE: setup.py
function read (line 5) | def read(fname):
function get_install_requires (line 14) | def get_install_requires():
Condensed preview — 403 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,143K chars).
[
{
"path": ".gitignore",
"chars": 53,
"preview": "*.pyc\n*.DS_Store\n*.egg*\n\n/.idea\n/dist/\n/docs/_build/\n"
},
{
"path": "LICENSE",
"chars": 0,
"preview": ""
},
{
"path": "MANIFEST.in",
"chars": 66,
"preview": "include README.rst\ninclude LICENSE\nrecursive-include jet_django *\n"
},
{
"path": "README.rst",
"chars": 3029,
"preview": "===================\nJet Bridge (Django)\n===================\n\n**Universal admin panel for Django**\n\n.. image:: https://ra"
},
{
"path": "build/lib/jet_django/__init__.py",
"chars": 73,
"preview": "VERSION = '0.0.1'\ndefault_app_config = 'jet_django.apps.JetDjangoConfig'\n"
},
{
"path": "build/lib/jet_django/admin/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/admin/jet.py",
"chars": 1483,
"preview": "from jet_django.admin.model_description import JetAdminModelDescription\nfrom rest_framework import views\nfrom rest_frame"
},
{
"path": "build/lib/jet_django/admin/model_action.py",
"chars": 834,
"preview": "from django import forms\nfrom django.utils.text import camel_case_to_spaces\n\n\nclass JetAdminModelAction(forms.Form):\n "
},
{
"path": "build/lib/jet_django/admin/model_description.py",
"chars": 5673,
"preview": "from django.contrib.contenttypes.models import ContentType\nfrom django.db import models\n\nfrom jet_django.filters.model i"
},
{
"path": "build/lib/jet_django/apps.py",
"chars": 276,
"preview": "from django.apps import AppConfig\n\n\nclass JetDjangoConfig(AppConfig):\n name = 'jet_django'\n\n def ready(self):\n "
},
{
"path": "build/lib/jet_django/filters/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/filters/model.py",
"chars": 1517,
"preview": "from functools import reduce\n\nimport django_filters\nfrom django.db.models import Q, fields\nfrom django_filters import fi"
},
{
"path": "build/lib/jet_django/filters/model_aggregate.py",
"chars": 806,
"preview": "import django_filters\nfrom django.db.models import Count, Sum, Min, Max, Avg\nfrom django_filters.constants import EMPTY_"
},
{
"path": "build/lib/jet_django/filters/model_group.py",
"chars": 990,
"preview": "import django_filters\nfrom django.db.models import Count, Sum, Min, Max, Avg, F\nfrom django_filters.constants import EMP"
},
{
"path": "build/lib/jet_django/filters/view_settings.py",
"chars": 277,
"preview": "import django_filters\n\nfrom jet_django.models.view_settings import ViewSettings\n\n\nclass ViewSettingsFilterSet(django_fil"
},
{
"path": "build/lib/jet_django/filters/widget.py",
"chars": 211,
"preview": "import django_filters\n\nfrom jet_django.models.widget import Widget\n\n\nclass WidgetFilterSet(django_filters.FilterSet):\n "
},
{
"path": "build/lib/jet_django/management/commands/register_token.py",
"chars": 487,
"preview": "from django.core.management import BaseCommand\n\nfrom jet_django.utils.backend import register_token\n\n\nclass Command(Base"
},
{
"path": "build/lib/jet_django/migrations/0001_initial.py",
"chars": 5152,
"preview": "# -*- coding: utf-8 -*-\n# Generated by Django 1.11.5 on 2018-08-26 17:24\nfrom __future__ import unicode_literals\n\nfrom d"
},
{
"path": "build/lib/jet_django/migrations/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/models/dashboard.py",
"chars": 644,
"preview": "from django.db import models\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext_lazy as _\n\n"
},
{
"path": "build/lib/jet_django/models/menu_item.py",
"chars": 547,
"preview": "from django.db import models\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext_lazy as _\n\n"
},
{
"path": "build/lib/jet_django/models/model_description.py",
"chars": 810,
"preview": "from django.db import models\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext_lazy as _\n\n"
},
{
"path": "build/lib/jet_django/models/token.py",
"chars": 545,
"preview": "from django.db import models\nfrom django.utils.translation import ugettext_lazy as _\n\n\nclass Token(models.Model):\n pr"
},
{
"path": "build/lib/jet_django/models/view_settings.py",
"chars": 934,
"preview": "from django.db import models\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext_lazy as _\n\n"
},
{
"path": "build/lib/jet_django/models/widget.py",
"chars": 1239,
"preview": "from django.db import models\nfrom django.utils import timezone\nfrom django.utils.translation import ugettext_lazy as _\n\n"
},
{
"path": "build/lib/jet_django/pagination.py",
"chars": 625,
"preview": "from collections import OrderedDict\n\nfrom rest_framework.pagination import PageNumberPagination\nfrom rest_framework.resp"
},
{
"path": "build/lib/jet_django/permissions.py",
"chars": 1069,
"preview": "from rest_framework.permissions import BasePermission\n\nfrom jet_django import settings\nfrom jet_django.utils.backend imp"
},
{
"path": "build/lib/jet_django/serializers/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/serializers/dashboard.py",
"chars": 458,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.dashboard import Dashboard\nfrom jet_django.serializers.wi"
},
{
"path": "build/lib/jet_django/serializers/dashboard_set_widgets.py",
"chars": 1075,
"preview": "from django.db import transaction\nfrom rest_framework import serializers\n\nfrom jet_django.models.dashboard import Dashbo"
},
{
"path": "build/lib/jet_django/serializers/menu_settings.py",
"chars": 272,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.menu_item import MenuSettings\n\n\nclass MenuSettingsSeriali"
},
{
"path": "build/lib/jet_django/serializers/model.py",
"chars": 273,
"preview": "from rest_framework import serializers\n\n\ndef model_serializer_factory(build_model, build_fields):\n class Serializer(s"
},
{
"path": "build/lib/jet_django/serializers/model_description.py",
"chars": 339,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.model_description import ModelDescription\n\n\nclass ModelDe"
},
{
"path": "build/lib/jet_django/serializers/model_detail.py",
"chars": 1144,
"preview": "from rest_framework import serializers\n\nfrom jet_django.utils.siblings import get_model_sibling\n\n\ndef model_detail_seria"
},
{
"path": "build/lib/jet_django/serializers/reorder.py",
"chars": 2113,
"preview": "from django.db import transaction\nfrom django.db.models import F\nfrom rest_framework import serializers, relations\n\n\ndef"
},
{
"path": "build/lib/jet_django/serializers/sql.py",
"chars": 605,
"preview": "from rest_framework import serializers\nfrom rest_framework.exceptions import ValidationError\n\n\nclass SqlSerializer(seria"
},
{
"path": "build/lib/jet_django/serializers/view_settings.py",
"chars": 343,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.view_settings import ViewSettings\n\n\nclass ViewSettingsSer"
},
{
"path": "build/lib/jet_django/serializers/widget_detail.py",
"chars": 425,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.widget import Widget\n\n\nclass WidgetDetailSerializer(seria"
},
{
"path": "build/lib/jet_django/serializers/widget_list.py",
"chars": 398,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.widget import Widget\n\n\nclass WidgetListSerializer(seriali"
},
{
"path": "build/lib/jet_django/serializers/widget_update_position.py",
"chars": 389,
"preview": "from rest_framework import serializers\n\nfrom jet_django.models.widget import Widget\n\n\nclass WidgetUpdatePositionSerializ"
},
{
"path": "build/lib/jet_django/settings.py",
"chars": 286,
"preview": "from django.conf import settings\n\nJET_BACKEND_API_BASE_URL = getattr(settings, 'JET_BACKEND_API_BASE_URL', 'https://api."
},
{
"path": "build/lib/jet_django/urls.py",
"chars": 1363,
"preview": "from django.conf.urls import url\nfrom rest_framework.routers import DefaultRouter\n\nfrom jet_django.admin.jet import jet\n"
},
{
"path": "build/lib/jet_django/utils/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/utils/backend.py",
"chars": 1294,
"preview": "import requests\n\nfrom jet_django import settings\nfrom jet_django.models.token import Token\n\n\ndef api_method_url(method):"
},
{
"path": "build/lib/jet_django/utils/siblings.py",
"chars": 1071,
"preview": "from collections import OrderedDict\n\n\ndef get_model_sibling(Model, instance, next, ordering=None):\n if len(Model._met"
},
{
"path": "build/lib/jet_django/views/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "build/lib/jet_django/views/dashboard.py",
"chars": 1076,
"preview": "from rest_framework import viewsets\nfrom rest_framework.decorators import detail_route\nfrom rest_framework.response impo"
},
{
"path": "build/lib/jet_django/views/menu_settings.py",
"chars": 1039,
"preview": "from django.http import Http404\nfrom django.shortcuts import get_object_or_404\nfrom rest_framework import viewsets\n\nfrom"
},
{
"path": "build/lib/jet_django/views/model.py",
"chars": 6164,
"preview": "from django.core.exceptions import NON_FIELD_ERRORS\nfrom rest_framework import status, viewsets, serializers\nfrom rest_f"
},
{
"path": "build/lib/jet_django/views/model_description.py",
"chars": 4403,
"preview": "import json\n\nfrom django.http import Http404\nfrom django.shortcuts import get_object_or_404\nfrom rest_framework import v"
},
{
"path": "build/lib/jet_django/views/register.py",
"chars": 515,
"preview": "from django.http import HttpResponseBadRequest\nfrom django.views import generic\n\nfrom jet_django import settings\nfrom je"
},
{
"path": "build/lib/jet_django/views/sql.py",
"chars": 1278,
"preview": "from django.db import connection, ProgrammingError\nfrom django.utils.translation import ugettext_lazy as _\nfrom django.u"
},
{
"path": "build/lib/jet_django/views/view_settings.py",
"chars": 1389,
"preview": "from django.http import Http404\nfrom django.shortcuts import get_object_or_404\nfrom rest_framework import viewsets\n\nfrom"
},
{
"path": "build/lib/jet_django/views/widget.py",
"chars": 586,
"preview": "from rest_framework import viewsets\n\nfrom jet_django.filters.widget import WidgetFilterSet\nfrom jet_django.models.widget"
},
{
"path": "jet_django/__init__.py",
"chars": 73,
"preview": "VERSION = '0.7.3'\ndefault_app_config = 'jet_django.apps.JetDjangoConfig'\n"
},
{
"path": "jet_django/admin/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/admin/jet.py",
"chars": 1008,
"preview": "from jet_django.admin.model_description import JetAdminModelDescription\n\n\nclass JetAdmin(object):\n models = []\n me"
},
{
"path": "jet_django/admin/model_action.py",
"chars": 834,
"preview": "from django import forms\nfrom django.utils.text import camel_case_to_spaces\n\n\nclass JetAdminModelAction(forms.Form):\n "
},
{
"path": "jet_django/admin/model_description.py",
"chars": 4906,
"preview": "from django.contrib.contenttypes.fields import GenericRel, GenericForeignKey, GenericRelation\nfrom django.contrib.conten"
},
{
"path": "jet_django/apps.py",
"chars": 1729,
"preview": "import logging\n\nimport sys\nfrom django.apps import AppConfig\nfrom django.apps import apps\nfrom django.db import Programm"
},
{
"path": "jet_django/deps/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/django_filters/__init__.py",
"chars": 660,
"preview": "# flake8: noqa\nimport pkgutil\n\nfrom .filterset import FilterSet\nfrom .filters import *\n\n# We make the `rest_framework` m"
},
{
"path": "jet_django/deps/django_filters/compat.py",
"chars": 561,
"preview": "from django.conf import settings\n\n# django-crispy-forms is optional\ntry:\n import crispy_forms\nexcept ImportError:\n "
},
{
"path": "jet_django/deps/django_filters/conf.py",
"chars": 3027,
"preview": "from django.conf import settings as dj_settings\nfrom django.core.signals import setting_changed\nfrom django.utils.transl"
},
{
"path": "jet_django/deps/django_filters/constants.py",
"chars": 64,
"preview": "\nALL_FIELDS = '__all__'\n\n\nEMPTY_VALUES = ([], (), {}, '', None)\n"
},
{
"path": "jet_django/deps/django_filters/exceptions.py",
"chars": 254,
"preview": "\nfrom django.core.exceptions import FieldError\n\n\nclass FieldLookupError(FieldError):\n def __init__(self, model_field,"
},
{
"path": "jet_django/deps/django_filters/fields.py",
"chars": 9648,
"preview": "from collections import namedtuple\nfrom datetime import datetime, time\n\nfrom django import forms\nfrom django.utils.datep"
},
{
"path": "jet_django/deps/django_filters/filters.py",
"chars": 24378,
"preview": "from collections import OrderedDict\nfrom datetime import timedelta\n\nfrom django import forms\nfrom django.db.models impor"
},
{
"path": "jet_django/deps/django_filters/filterset.py",
"chars": 16073,
"preview": "import copy\nfrom collections import OrderedDict\n\nfrom django import forms\nfrom django.db import models\nfrom django.db.mo"
},
{
"path": "jet_django/deps/django_filters/locale/be/LC_MESSAGES/django.po",
"chars": 3218,
"preview": "#\n#: conf.py:27 conf.py:28 conf.py:41\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: django-filter\\n\"\n\"Report-Msgid-Bugs-To: \\n"
},
{
"path": "jet_django/deps/django_filters/locale/cs/LC_MESSAGES/django.po",
"chars": 3072,
"preview": "#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: django-filter\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2018-01-24 11:"
},
{
"path": "jet_django/deps/django_filters/locale/da/LC_MESSAGES/django.po",
"chars": 3027,
"preview": "msgid \"\"\nmsgstr \"\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: 8bit\\n\""
},
{
"path": "jet_django/deps/django_filters/locale/de/LC_MESSAGES/django.po",
"chars": 3362,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/locale/el/LC_MESSAGES/django.po",
"chars": 3471,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/locale/es_AR/LC_MESSAGES/django.po",
"chars": 1011,
"preview": "# Django Filter translation.\n# Copyright (C) 2013\n# This file is distributed under the same license as the django_filter"
},
{
"path": "jet_django/deps/django_filters/locale/es_ES/LC_MESSAGES/django.po",
"chars": 3181,
"preview": "# Django Filter translation.\n# Copyright (C) 2013\n# This file is distributed under the same license as the django_filter"
},
{
"path": "jet_django/deps/django_filters/locale/fr/LC_MESSAGES/django.po",
"chars": 1066,
"preview": "# Django Filter translation.\n# Copyright (C) 2013\n# This file is distributed under the same license as the django_filter"
},
{
"path": "jet_django/deps/django_filters/locale/pl/LC_MESSAGES/django.po",
"chars": 3540,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/locale/pt_BR/LC_MESSAGES/django.po",
"chars": 3246,
"preview": "# Django Filter translation.\n# Copyright (C) 2017\n# This file is distributed under the same license as the django_filter"
},
{
"path": "jet_django/deps/django_filters/locale/ru/LC_MESSAGES/django.po",
"chars": 3379,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/locale/sk/LC_MESSAGES/django.po",
"chars": 3319,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/locale/uk/LC_MESSAGES/django.po",
"chars": 3167,
"preview": "#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: django-filter\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2018-01-24 11:"
},
{
"path": "jet_django/deps/django_filters/locale/zh_CN/LC_MESSAGES/django.po",
"chars": 1239,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/django_filters/models.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/django_filters/rest_framework/__init__.py",
"chars": 113,
"preview": "# flake8: noqa\nfrom .backends import DjangoFilterBackend\nfrom .filterset import FilterSet\nfrom .filters import *\n"
},
{
"path": "jet_django/deps/django_filters/rest_framework/backends.py",
"chars": 5164,
"preview": "import warnings\n\nfrom django.template import loader\nfrom django.utils.deprecation import RenameMethodsBase\n\nfrom . impor"
},
{
"path": "jet_django/deps/django_filters/rest_framework/filters.py",
"chars": 328,
"preview": "from jet_django.deps.django_filters import filters\n\nfrom ..filters import * # noqa\nfrom ..widgets import BooleanWidget\n"
},
{
"path": "jet_django/deps/django_filters/rest_framework/filterset.py",
"chars": 1217,
"preview": "from copy import deepcopy\n\nfrom django.db import models\nfrom django.utils.translation import ugettext_lazy as _\n\nfrom je"
},
{
"path": "jet_django/deps/django_filters/utils.py",
"chars": 10216,
"preview": "import warnings\nfrom collections import OrderedDict\n\nimport django\nfrom django.conf import settings\nfrom django.core.exc"
},
{
"path": "jet_django/deps/django_filters/views.py",
"chars": 4150,
"preview": "from django.core.exceptions import ImproperlyConfigured\nfrom django.views.generic import View\nfrom django.views.generic."
},
{
"path": "jet_django/deps/django_filters/widgets.py",
"chars": 8645,
"preview": "from collections import Iterable\nfrom itertools import chain\nfrom re import search, sub\n\nfrom django import forms\nfrom d"
},
{
"path": "jet_django/deps/rest_framework/__init__.py",
"chars": 864,
"preview": "r\"\"\"\n______ _____ _____ _____ __\n| ___ \\ ___/ ___|_ _| / _| | |\n| |_/ "
},
{
"path": "jet_django/deps/rest_framework/apps.py",
"chars": 271,
"preview": "from django.apps import AppConfig\n\n\nclass RestFrameworkConfig(AppConfig):\n name = 'jet_django.deps.rest_framework'\n "
},
{
"path": "jet_django/deps/rest_framework/authentication.py",
"chars": 7490,
"preview": "\"\"\"\nProvides various authentication policies.\n\"\"\"\nfrom __future__ import unicode_literals\n\nimport base64\nimport binascii"
},
{
"path": "jet_django/deps/rest_framework/authtoken/__init__.py",
"chars": 85,
"preview": "default_app_config = 'jet_django.deps.rest_framework.authtoken.apps.AuthTokenConfig'\n"
},
{
"path": "jet_django/deps/rest_framework/authtoken/admin.py",
"chars": 277,
"preview": "from django.contrib import admin\n\nfrom jet_django.deps.rest_framework.authtoken.models import Token\n\n\nclass TokenAdmin(a"
},
{
"path": "jet_django/deps/rest_framework/authtoken/apps.py",
"chars": 215,
"preview": "from django.apps import AppConfig\nfrom django.utils.translation import ugettext_lazy as _\n\n\nclass AuthTokenConfig(AppCon"
},
{
"path": "jet_django/deps/rest_framework/authtoken/management/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/rest_framework/authtoken/management/commands/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/rest_framework/authtoken/management/commands/drf_create_token.py",
"chars": 1399,
"preview": "from django.contrib.auth import get_user_model\nfrom django.core.management.base import BaseCommand, CommandError\n\nfrom j"
},
{
"path": "jet_django/deps/rest_framework/authtoken/migrations/0001_initial.py",
"chars": 771,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom django.conf import settings\nfrom django.db import "
},
{
"path": "jet_django/deps/rest_framework/authtoken/migrations/0002_auto_20160226_1747.py",
"chars": 1059,
"preview": "# -*- coding: utf-8 -*-\nfrom __future__ import unicode_literals\n\nfrom django.conf import settings\nfrom django.db import "
},
{
"path": "jet_django/deps/rest_framework/authtoken/migrations/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/rest_framework/authtoken/models.py",
"chars": 1318,
"preview": "import binascii\nimport os\n\nfrom django.conf import settings\nfrom django.db import models\nfrom django.utils.encoding impo"
},
{
"path": "jet_django/deps/rest_framework/authtoken/serializers.py",
"chars": 1265,
"preview": "from django.utils.translation import ugettext_lazy as _\n\nfrom jet_django.deps.rest_framework import serializers\nfrom jet"
},
{
"path": "jet_django/deps/rest_framework/authtoken/views.py",
"chars": 2031,
"preview": "from jet_django.deps.rest_framework import parsers, renderers\nfrom jet_django.deps.rest_framework.authtoken.models impor"
},
{
"path": "jet_django/deps/rest_framework/checks.py",
"chars": 985,
"preview": "from django.core.checks import Tags, Warning, register\n\n\n@register(Tags.compatibility)\ndef pagination_system_check(app_c"
},
{
"path": "jet_django/deps/rest_framework/compat.py",
"chars": 8965,
"preview": "\"\"\"\nThe `compat` module provides support for backwards compatibility with older\nversions of Django/Python, and compatibi"
},
{
"path": "jet_django/deps/rest_framework/decorators.py",
"chars": 6402,
"preview": "\"\"\"\nThe most important decorator in this module is `@api_view`, which is used\nfor writing function-based views with REST"
},
{
"path": "jet_django/deps/rest_framework/documentation.py",
"chars": 2968,
"preview": "from django.conf.urls import include, url\n\nfrom jet_django.deps.rest_framework.renderers import (\n CoreJSONRenderer, "
},
{
"path": "jet_django/deps/rest_framework/exceptions.py",
"chars": 8191,
"preview": "\"\"\"\nHandled exceptions raised by REST framework.\n\nIn addition Django's built in 403 and 404 exceptions are handled.\n(`dj"
},
{
"path": "jet_django/deps/rest_framework/fields.py",
"chars": 68219,
"preview": "from __future__ import unicode_literals\n\nimport collections\nimport copy\nimport datetime\nimport decimal\nimport functools\n"
},
{
"path": "jet_django/deps/rest_framework/filters.py",
"chars": 11916,
"preview": "\"\"\"\nProvides generic filtering backends that can be used to filter the results\nreturned by list views.\n\"\"\"\nfrom __future"
},
{
"path": "jet_django/deps/rest_framework/generics.py",
"chars": 10103,
"preview": "\"\"\"\nGeneric views that provide commonly needed behaviour.\n\"\"\"\nfrom __future__ import unicode_literals\n\nfrom django.core."
},
{
"path": "jet_django/deps/rest_framework/locale/ach/LC_MESSAGES/django.po",
"chars": 9652,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ar/LC_MESSAGES/django.po",
"chars": 11571,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/be/LC_MESSAGES/django.po",
"chars": 9794,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ca/LC_MESSAGES/django.po",
"chars": 13369,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ca_ES/LC_MESSAGES/django.po",
"chars": 9667,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/cs/LC_MESSAGES/django.po",
"chars": 13138,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/da/LC_MESSAGES/django.po",
"chars": 13603,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/de/LC_MESSAGES/django.po",
"chars": 14343,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/el/LC_MESSAGES/django.po",
"chars": 13853,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/el_GR/LC_MESSAGES/django.po",
"chars": 9666,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/en/LC_MESSAGES/django.po",
"chars": 13364,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/en_AU/LC_MESSAGES/django.po",
"chars": 9671,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/en_CA/LC_MESSAGES/django.po",
"chars": 9668,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/en_US/LC_MESSAGES/django.po",
"chars": 9538,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/es/LC_MESSAGES/django.po",
"chars": 14397,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/et/LC_MESSAGES/django.po",
"chars": 13002,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/fa/LC_MESSAGES/django.po",
"chars": 9646,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/fa_IR/LC_MESSAGES/django.po",
"chars": 9659,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/fi/LC_MESSAGES/django.po",
"chars": 13484,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/fr/LC_MESSAGES/django.po",
"chars": 14255,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/fr_CA/LC_MESSAGES/django.po",
"chars": 9666,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/gl/LC_MESSAGES/django.po",
"chars": 9654,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/gl_ES/LC_MESSAGES/django.po",
"chars": 9751,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/he_IL/LC_MESSAGES/django.po",
"chars": 9667,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/hu/LC_MESSAGES/django.po",
"chars": 13363,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/id/LC_MESSAGES/django.po",
"chars": 9649,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/it/LC_MESSAGES/django.po",
"chars": 14060,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ja/LC_MESSAGES/django.po",
"chars": 12037,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ko_KR/LC_MESSAGES/django.po",
"chars": 12608,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/lv/LC_MESSAGES/django.po",
"chars": 13729,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/mk/LC_MESSAGES/django.po",
"chars": 13560,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/nb/LC_MESSAGES/django.po",
"chars": 13580,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/nl/LC_MESSAGES/django.po",
"chars": 13992,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/nn/LC_MESSAGES/django.po",
"chars": 9663,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/no/LC_MESSAGES/django.po",
"chars": 9655,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/pl/LC_MESSAGES/django.po",
"chars": 14171,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/pt/LC_MESSAGES/django.po",
"chars": 9656,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/pt_BR/LC_MESSAGES/django.po",
"chars": 14082,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/pt_PT/LC_MESSAGES/django.po",
"chars": 9673,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ro/LC_MESSAGES/django.po",
"chars": 14062,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/ru/LC_MESSAGES/django.po",
"chars": 13982,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/sk/LC_MESSAGES/django.po",
"chars": 13512,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/sl/LC_MESSAGES/django.po",
"chars": 13478,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/sv/LC_MESSAGES/django.po",
"chars": 13704,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/tr/LC_MESSAGES/django.po",
"chars": 13872,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/tr_TR/LC_MESSAGES/django.po",
"chars": 13542,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/uk/LC_MESSAGES/django.po",
"chars": 13881,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/vi/LC_MESSAGES/django.po",
"chars": 9649,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/zh_CN/LC_MESSAGES/django.po",
"chars": 11374,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/zh_Hans/LC_MESSAGES/django.po",
"chars": 11405,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/zh_Hant/LC_MESSAGES/django.po",
"chars": 9668,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/locale/zh_TW/LC_MESSAGES/django.po",
"chars": 9661,
"preview": "# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed under the same "
},
{
"path": "jet_django/deps/rest_framework/metadata.py",
"chars": 6016,
"preview": "\"\"\"\nThe metadata API is used to allow customization of how `OPTIONS` requests\nare handled. We currently provide a single"
},
{
"path": "jet_django/deps/rest_framework/mixins.py",
"chars": 3066,
"preview": "\"\"\"\nBasic building blocks for generic class based views.\n\nWe don't bind behaviour to http method handlers yet,\nwhich all"
},
{
"path": "jet_django/deps/rest_framework/models.py",
"chars": 50,
"preview": "# Just to keep things like ./manage.py test happy\n"
},
{
"path": "jet_django/deps/rest_framework/negotiation.py",
"chars": 4132,
"preview": "\"\"\"\nContent negotiation deals with selecting an appropriate renderer given the\nincoming request. Typically this will be"
},
{
"path": "jet_django/deps/rest_framework/pagination.py",
"chars": 30421,
"preview": "# coding: utf-8\n\"\"\"\nPagination serializers determine the structure of the output that should\nbe used for paginated respo"
},
{
"path": "jet_django/deps/rest_framework/parsers.py",
"chars": 8576,
"preview": "\"\"\"\nParsers are used to parse the content of incoming HTTP requests.\n\nThey give us a generic way of being able to handle"
},
{
"path": "jet_django/deps/rest_framework/permissions.py",
"chars": 6665,
"preview": "\"\"\"\nProvides a set of pluggable permission policies.\n\"\"\"\nfrom __future__ import unicode_literals\n\nfrom django.http impor"
},
{
"path": "jet_django/deps/rest_framework/relations.py",
"chars": 19654,
"preview": "# coding: utf-8\nfrom __future__ import unicode_literals\n\nfrom collections import OrderedDict\n\nfrom django.core.exception"
},
{
"path": "jet_django/deps/rest_framework/renderers.py",
"chars": 34626,
"preview": "\"\"\"\nRenderers are used to serialize a response into specific media types.\n\nThey give us a generic way of being able to h"
},
{
"path": "jet_django/deps/rest_framework/request.py",
"chars": 15250,
"preview": "\"\"\"\nThe Request class is used as a wrapper around the standard request object.\n\nThe wrapped request then offers a richer"
},
{
"path": "jet_django/deps/rest_framework/response.py",
"chars": 3595,
"preview": "\"\"\"\nThe Response class in REST framework is similar to HTTPResponse, except that\nit is initialized with unrendered data,"
},
{
"path": "jet_django/deps/rest_framework/reverse.py",
"chars": 2256,
"preview": "\"\"\"\nProvide urlresolver functions that return fully qualified URLs or view names\n\"\"\"\nfrom __future__ import unicode_lite"
},
{
"path": "jet_django/deps/rest_framework/routers.py",
"chars": 13435,
"preview": "\"\"\"\nRouters provide a convenient and consistent way of automatically\ndetermining the URL conf for your API.\n\nThey are us"
},
{
"path": "jet_django/deps/rest_framework/schemas/__init__.py",
"chars": 1561,
"preview": "\"\"\"\nrest_framework.schemas\n\nschemas:\n __init__.py\n generators.py # Top-down schema generation\n inspectors.py "
},
{
"path": "jet_django/deps/rest_framework/schemas/generators.py",
"chars": 15430,
"preview": "\"\"\"\ngenerators.py # Top-down schema generation\n\nSee schemas.__init__.py for package overview.\n\"\"\"\nimport re\nimport war"
},
{
"path": "jet_django/deps/rest_framework/schemas/inspectors.py",
"chars": 16585,
"preview": "# -*- coding: utf-8 -*-\n\"\"\"\ninspectors.py # Per-endpoint view introspection\n\nSee schemas.__init__.py for package overv"
},
{
"path": "jet_django/deps/rest_framework/schemas/utils.py",
"chars": 703,
"preview": "\"\"\"\nutils.py # Shared helper functions\n\nSee schemas.__init__.py for package overview.\n\"\"\"\nfrom jet_django.deps.re"
},
{
"path": "jet_django/deps/rest_framework/schemas/views.py",
"chars": 1246,
"preview": "\"\"\"\nviews.py # Houses `SchemaView`, `APIView` subclass.\n\nSee schemas.__init__.py for package overview.\n\"\"\"\nfrom j"
},
{
"path": "jet_django/deps/rest_framework/serializers.py",
"chars": 63403,
"preview": "\"\"\"\nSerializers and ModelSerializers are similar to Forms and ModelForms.\nUnlike forms, they are not constrained to deal"
},
{
"path": "jet_django/deps/rest_framework/settings.py",
"chars": 8174,
"preview": "\"\"\"\nSettings for REST framework are all namespaced in the REST_FRAMEWORK setting.\nFor example your project's `settings.p"
},
{
"path": "jet_django/deps/rest_framework/status.py",
"chars": 2190,
"preview": "\"\"\"\nDescriptive HTTP status codes, for code readability.\n\nSee RFC 2616 - https://www.w3.org/Protocols/rfc2616/rfc2616-se"
},
{
"path": "jet_django/deps/rest_framework/test.py",
"chars": 14836,
"preview": "# -- coding: utf-8 --\n\n# Note that we import as `DjangoRequestFactory` and `DjangoClient` in order\n# to make it harder f"
},
{
"path": "jet_django/deps/rest_framework/throttling.py",
"chars": 8101,
"preview": "\"\"\"\nProvides various throttling policies.\n\"\"\"\nfrom __future__ import unicode_literals\n\nimport time\n\nfrom django.core.cac"
},
{
"path": "jet_django/deps/rest_framework/urlpatterns.py",
"chars": 4380,
"preview": "from __future__ import unicode_literals\n\nfrom django.conf.urls import include, url\n\nfrom jet_django.deps.rest_framework."
},
{
"path": "jet_django/deps/rest_framework/urls.py",
"chars": 970,
"preview": "\"\"\"\nLogin and logout views for the browsable API.\n\nAdd these to your root URLconf if you're using the browsable API and\n"
},
{
"path": "jet_django/deps/rest_framework/utils/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "jet_django/deps/rest_framework/utils/breadcrumbs.py",
"chars": 2173,
"preview": "from __future__ import unicode_literals\n\nfrom django.urls import get_script_prefix, resolve\n\n\ndef get_breadcrumbs(url, r"
},
{
"path": "jet_django/deps/rest_framework/utils/encoders.py",
"chars": 2590,
"preview": "\"\"\"\nHelper classes for parsers.\n\"\"\"\nfrom __future__ import absolute_import, unicode_literals\n\nimport datetime\nimport dec"
},
{
"path": "jet_django/deps/rest_framework/utils/field_mapping.py",
"chars": 10979,
"preview": "\"\"\"\nHelper functions for mapping model fields to a dictionary of default\nkeyword arguments that should be used for their"
},
{
"path": "jet_django/deps/rest_framework/utils/formatting.py",
"chars": 2324,
"preview": "\"\"\"\nUtility functions to return a formatted name and description for a given view.\n\"\"\"\nfrom __future__ import unicode_li"
},
{
"path": "jet_django/deps/rest_framework/utils/html.py",
"chars": 2072,
"preview": "\"\"\"\nHelpers for dealing with HTML input.\n\"\"\"\nimport re\n\nfrom django.utils.datastructures import MultiValueDict\n\n\ndef is_"
},
{
"path": "jet_django/deps/rest_framework/utils/humanize_datetime.py",
"chars": 1301,
"preview": "\"\"\"\nHelper functions that convert strftime formats into more readable representations.\n\"\"\"\nfrom jet_django.deps.rest_fra"
},
{
"path": "jet_django/deps/rest_framework/utils/json.py",
"chars": 1068,
"preview": "\"\"\"\nWrapper for the builtin json module that ensures compliance with the JSON spec.\n\nREST framework should always import"
},
{
"path": "jet_django/deps/rest_framework/utils/mediatypes.py",
"chars": 2728,
"preview": "\"\"\"\nHandling of media types, as found in HTTP Content-Type and Accept headers.\n\nSee https://www.w3.org/Protocols/rfc2616"
}
]
// ... and 203 more files (download for full content)
About this extraction
This page contains the full source code of the jet-admin/jet-django GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 403 files (1.9 MB), approximately 557.7k tokens, and a symbol index with 1584 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.