Tests / starter_packs/tests.py
TestOwnerManagement::test_cannot_remove_last_owner
First seen 3 weeks ago in 0c23747
CI
github-actions:test
11 runs
Average
151 ms
median 138 ms
max 234 ms
max 234 ms
Phases
Setup 2 ms
Call 149 ms
Teardown 0.35 ms
Categories
Database 53 ms
Other (Libraries, Templates, pytest, Unsampled, ...) 98 ms
28 database queries per run
Needs 56 KB of memory (max 212 KB)
Duration per run
Where the time goes
Latest run in ci:github-actions:test, 7 hours ago ·
open run
setup1 ms0.7%
__init____init__:-11 ms0.7%
call171 ms99.1%
TestOwnerManagement.test_cannot_remove_last_ownerstarter_packs/tests.py:628 response = self.client.post(reverse("remove_owner", args=[self.pack.slug, self.owner.id]))136 ms78.8%
Client.postdjango/test/client.py:1162136 ms78.8%
RequestFactory.postdjango/test/client.py:499136 ms78.8%
RequestFactory.genericdjango/test/client.py:671136 ms78.8%
Client.requestdjango/test/client.py:1091136 ms78.8%
ClientHandler.__call__django/test/client.py:173101 ms58.4%
BaseHandler.load_middlewaredjango/core/handlers/base.py:63101 ms58.4%
WhiteNoiseMiddleware.__init__whitenoise/middleware.py:104101 ms58.4%
WhiteNoise.add_fileswhitenoise/base.py:108101 ms58.4%
WhiteNoise.update_files_dictionarywhitenoise/base.py:12088 ms51.2%
WhiteNoise.add_file_to_dictionarywhitenoise/base.py:13188 ms51.2%
WhiteNoise.get_static_filewhitenoise/base.py:21746 ms26.9%
StaticFile.__init__whitenoise/responders.py:7340 ms23.0%
StaticFile.get_headerswhitenoise/responders.py:18139 ms22.3%
Headers.__setitem__<stdlib>/wsgiref/headers.py:6235 ms20.3%
Headers.__delitem__<stdlib>/wsgiref/headers.py:7235 ms20.3%
Headers.__setitem__<stdlib>/wsgiref/headers.py:643 ms2.0%
StaticFile.get_headerswhitenoise/responders.py:1781 ms0.7%
StaticFile.__init__whitenoise/responders.py:767 ms3.9%
StaticFile.get_not_modified_responsewhitenoise/responders.py:1887 ms3.9%
Headers.__contains__<stdlib>/wsgiref/headers.py:877 ms3.9%
Headers.get<stdlib>/wsgiref/headers.py:1047 ms3.9%
Headers._convert_string_type<stdlib>/wsgiref/headers.py:503 ms2.0%
WhiteNoise.get_static_filewhitenoise/base.py:21241 ms23.6%
WhiteNoise.add_cache_headerswhitenoise/base.py:23341 ms23.6%
WhiteNoiseMiddleware.immutable_file_testwhitenoise/middleware.py:17641 ms23.6%
WhiteNoiseMiddleware.get_static_urlwhitenoise/middleware.py:19741 ms23.6%
URLMixin.urldebug_toolbar/panels/staticfiles.py:2041 ms23.6%
HashedFilesMixin.urldjango/contrib/staticfiles/storage.py:23540 ms23.0%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:20840 ms23.0%
WhiteNoise.get_static_filewhitenoise/base.py:2191 ms0.7%
WhiteNoise.update_files_dictionarywhitenoise/base.py:11512 ms7.2%
scantreewhitenoise/base.py:2718 ms4.6%
scantreewhitenoise/base.py:2717 ms3.9%
scantreewhitenoise/base.py:2693 ms2.0%
scantreewhitenoise/base.py:2712 ms1.3%
scantreewhitenoise/base.py:2712 ms1.3%
scantreewhitenoise/base.py:2711 ms0.7%
scantreewhitenoise/base.py:2731 ms0.7%
scantreewhitenoise/base.py:2731 ms0.7%
scantreewhitenoise/base.py:2731 ms0.7%
scantreewhitenoise/base.py:2731 ms0.7%
scantreewhitenoise/base.py:2731 ms0.7%
ClientHandler.__call__django/test/client.py:18635 ms20.3%
BaseHandler.get_responsedjango/core/handlers/base.py:14235 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:12335 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:14535 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
MiddlewareMixin.__call__django/utils/deprecation.py:38035 ms20.3%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:5635 ms20.3%
BaseHandler._get_responsedjango/core/handlers/base.py:19935 ms20.3%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:6335 ms20.3%
user_passes_test.<locals>.decorator.<locals>._view_wrapperdjango/contrib/auth/decorators.py:6235 ms20.3%
remove_ownerstarter_packs/views.py:507 if starter_pack.owners.count() <= 1:23 ms13.1%
create_forward_many_to_many_manager.<locals>.ManyRelatedManager.countdjango/db/models/fields/related_descriptors.py:129623 ms13.1%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:8723 ms13.1%
QuerySet.countdjango/db/models/query.py:67723 ms13.1%
Query.get_countdjango/db/models/sql/query.py:65723 ms13.1%
Query.get_aggregationdjango/db/models/sql/query.py:63923 ms13.1%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:162523 ms13.1%
CursorWrapper.executedjango/db/backends/utils.py:7923 ms13.1%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:9223 ms13.1%
CursorWrapper._executedjango/db/backends/utils.py:10523 ms13.1%
Cursor.executepsycopg/cursor.py:11323 ms13.1%
Connection.waitpsycopg/connection.py:49523 ms13.1%
remove_ownerstarter_packs/views.py:510 return render(request, "owners_updated.html", owners_manager_context(starter_pack, q, error))12 ms7.2%
owners_manager_contextstarter_packs/views.py:417 owners = list(starter_pack.owners.select_related("accountaccess__account").order_by("username"))6 ms3.3%
QuerySet.__iter__django/db/models/query.py:4396 ms3.3%
QuerySet._fetch_alldjango/db/models/query.py:22626 ms3.3%
ModelIterable.__iter__django/db/models/query.py:1036 ms3.3%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16253 ms2.0%
CursorWrapper.executedjango/db/backends/utils.py:793 ms2.0%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:923 ms2.0%
CursorWrapper._executedjango/db/backends/utils.py:1053 ms2.0%
Cursor.executepsycopg/cursor.py:1133 ms2.0%
Connection.waitpsycopg/connection.py:4953 ms2.0%
BaseCursor._execute_genpsycopg/_cursor_base.py:2061 ms0.7%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2861 ms0.7%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:781 ms0.7%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16122 ms1.3%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7932 ms1.3%
SQLCompiler.get_from_clausedjango/db/models/sql/compiler.py:11602 ms1.3%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5792 ms1.3%
Join.as_sqldjango/db/models/sql/datastructures.py:992 ms1.3%
ForeignObjectRel.get_extra_restrictiondjango/db/models/fields/reverse_related.py:1982 ms1.3%
owners_manager_contextstarter_packs/views.py:418 invitations = list(5 ms2.6%
QuerySet.__iter__django/db/models/query.py:4395 ms2.6%
QuerySet._fetch_alldjango/db/models/query.py:22625 ms2.6%
ModelIterable.__iter__django/db/models/query.py:1035 ms2.6%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16255 ms2.6%
CursorWrapper.executedjango/db/backends/utils.py:795 ms2.6%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:925 ms2.6%
CursorWrapper._executedjango/db/backends/utils.py:1055 ms2.6%
Cursor.executepsycopg/cursor.py:1135 ms2.6%
Connection.waitpsycopg/connection.py:4955 ms2.6%
renderdjango/shortcuts.py:272 ms1.3%
render_to_stringdjango/template/loader.py:622 ms1.3%
Template.renderdjango/template/backends/django.py:1072 ms1.3%
Template.renderdjango/template/base.py:1752 ms1.3%
instrumented_test_renderdjango/test/utils.py:1132 ms1.3%
NodeList.renderdjango/template/base.py:11082 ms1.3%
Node.render_annotateddjango/template/base.py:10692 ms1.3%
IncludeNode.renderdjango/template/loader_tags.py:2002 ms1.3%
Engine.select_templatedjango/template/engine.py:2282 ms1.3%
Engine.get_templatedjango/template/engine.py:1862 ms1.3%
Engine.find_templatedjango/template/engine.py:1592 ms1.3%
Loader.get_templatedjango/template/loaders/cached.py:572 ms1.3%
Loader.get_templatedjango/template/loaders/base.py:282 ms1.3%
__init____init__:-12 ms1.3%
Template.__init__django/template/base.py:1582 ms1.3%
Template.compile_nodelistdjango/template/base.py:2001 ms0.7%
Parser.parsedjango/template/base.py:6011 ms0.7%
do_fordjango/template/defaulttags.py:8941 ms0.7%
Parser.parsedjango/template/base.py:6011 ms0.7%
do_ifdjango/template/defaulttags.py:9941 ms0.7%
Parser.parsedjango/template/base.py:6011 ms0.7%
do_ifdjango/template/defaulttags.py:9941 ms0.7%
Parser.parsedjango/template/base.py:6011 ms0.7%
do_translatedjango/templatetags/i18n.py:4031 ms0.7%
Parser.compile_filterdjango/template/base.py:6941 ms0.7%
__init____init__:-11 ms0.7%
FilterExpression.__init__django/template/base.py:7731 ms0.7%
Template.compile_nodelistdjango/template/base.py:1911 ms0.7%
_create_smart_tokenize.<locals>.smart_tokenizedjango_cotton/nested_tag_support.py:401 ms0.7%
DebugLexer.tokenizedjango/template/base.py:4971 ms0.7%
TestOwnerManagement.test_cannot_remove_last_ownerstarter_packs/tests.py:626 self.client.force_login(self.owner)27 ms15.8%
ClientMixin.force_logindjango/test/client.py:85827 ms15.8%
ClientMixin._logindjango/test/client.py:89127 ms15.8%
SessionStore.savedjango/contrib/sessions/backends/db.py:12625 ms14.4%
Atomic.__enter__django/db/transaction.py:22325 ms14.4%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:2625 ms14.4%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:40025 ms14.4%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:36725 ms14.4%
CursorWrapper.executedjango/db/backends/utils.py:7925 ms14.4%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:9225 ms14.4%
CursorWrapper._executedjango/db/backends/utils.py:10325 ms14.4%
Cursor.executepsycopg/cursor.py:11325 ms14.4%
Connection.waitpsycopg/connection.py:49525 ms14.4%
SessionStore.savedjango/contrib/sessions/backends/db.py:1231 ms0.7%
SessionStore.create_model_instancedjango/contrib/sessions/backends/db.py:1021 ms0.7%
SessionBase.encodedjango/contrib/sessions/backends/base.py:1291 ms0.7%
dumpsdjango/core/signing.py:1911 ms0.7%
Signer.sign_objectdjango/core/signing.py:2721 ms0.7%
SessionStore.savedjango/contrib/sessions/backends/db.py:1271 ms0.7%
Model.savedjango/db/models/base.py:9041 ms0.7%
Model.save_basedjango/db/models/base.py:9961 ms0.7%
Model._save_tabledjango/db/models/base.py:11401 ms0.7%
Model._do_updatedjango/db/models/base.py:12441 ms0.7%
QuerySet._updatedjango/db/models/query.py:14481 ms0.7%
SQLUpdateCompiler.execute_returning_sqldjango/db/models/sql/compiler.py:21501 ms0.7%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21211 ms0.7%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16251 ms0.7%
CursorWrapper.executedjango/db/backends/utils.py:791 ms0.7%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms0.7%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms0.7%
Cursor.executepsycopg/cursor.py:1131 ms0.7%
Connection.waitpsycopg/connection.py:4951 ms0.7%
TransactionTestCase._pre_setupdjango/test/testcases.py:1167 cls._fixture_setup()2 ms1.3%
TestCase._fixture_setupdjango/test/testcases.py:14812 ms1.3%
TestCase._enter_atomicsdjango/test/testcases.py:13992 ms1.3%
Atomic.__enter__django/db/transaction.py:2232 ms1.3%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms1.3%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4002 ms1.3%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3671 ms0.7%
CursorWrapper.executedjango/db/backends/utils.py:791 ms0.7%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms0.7%
CursorWrapper._executedjango/db/backends/utils.py:1031 ms0.7%
Cursor.executepsycopg/cursor.py:1131 ms0.7%
Connection.waitpsycopg/connection.py:4951 ms0.7%
TestOwnerManagement.test_cannot_remove_last_ownerstarter_packs/tests.py:627 self.assertEqual(self.pack.owners.count(), 1)2 ms1.3%
create_forward_many_to_many_manager.<locals>.ManyRelatedManager.countdjango/db/models/fields/related_descriptors.py:12962 ms1.3%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms1.3%
QuerySet.countdjango/db/models/query.py:6772 ms1.3%
Query.get_countdjango/db/models/sql/query.py:6572 ms1.3%
Query.get_aggregationdjango/db/models/sql/query.py:4911 ms0.7%
Query.get_aggregationdjango/db/models/sql/query.py:6391 ms0.7%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16251 ms0.7%
CursorWrapper.executedjango/db/backends/utils.py:791 ms0.7%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms0.7%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms0.7%
Cursor.executepsycopg/cursor.py:1131 ms0.7%
Connection.waitpsycopg/connection.py:4951 ms0.7%
TransactionTestCase._post_teardowndjango/test/testcases.py:1243 self._fixture_teardown()2 ms1.3%
TestCase._fixture_teardowndjango/test/testcases.py:14971 ms0.7%
TestCase._should_check_constraintsdjango/test/testcases.py:15061 ms0.7%
DatabaseWrapper.is_usabledjango/db/backends/postgresql/base.py:5041 ms0.7%
Cursor.executepsycopg/cursor.py:1131 ms0.7%
Connection.waitpsycopg/connection.py:4951 ms0.7%
BaseCursor._execute_genpsycopg/_cursor_base.py:2061 ms0.7%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2861 ms0.7%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:781 ms0.7%
TestCase._fixture_teardowndjango/test/testcases.py:14981 ms0.7%
DatabaseWrapper.check_constraintsdjango/db/backends/postgresql/base.py:4951 ms0.7%
CursorWrapper.executedjango/db/backends/utils.py:791 ms0.7%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms0.7%
TestOwnerManagement.test_cannot_remove_last_ownerstarter_packs/tests.py:630 self.assertEqual(self.pack.owners.count(), 1)1 ms0.7%
create_forward_many_to_many_manager.<locals>.ManyRelatedManager.countdjango/db/models/fields/related_descriptors.py:12961 ms0.7%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:871 ms0.7%
QuerySet.countdjango/db/models/query.py:6771 ms0.7%
Query.get_countdjango/db/models/sql/query.py:6571 ms0.7%
Query.get_aggregationdjango/db/models/sql/query.py:6391 ms0.7%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16251 ms0.7%
CursorWrapper.executedjango/db/backends/utils.py:791 ms0.7%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:921 ms0.7%
CursorWrapper._executedjango/db/backends/utils.py:1051 ms0.7%
Cursor.executepsycopg/cursor.py:1131 ms0.7%
Connection.waitpsycopg/connection.py:4951 ms0.7%
BaseCursor._execute_genpsycopg/_cursor_base.py:2061 ms0.7%
BaseCursor._maybe_prepare_genpsycopg/_cursor_base.py:2861 ms0.7%
ClientCursorMixin._execute_sendpsycopg/client_cursor.py:781 ms0.7%
Estimated from 152 samples; phase durations are exact. Frames from pytest and pluggy are
hidden
.
Hot lines in your code
|
starter_packs/tests.py:628
response = self.client.post(reverse("remove_owner", args=[self.pack.slug, self.owner.id]))
TestOwnerManagement.test_cannot_remove_last_owner
· Libraries
|
101 ms |
|
starter_packs/tests.py:626
self.client.force_login(self.owner)
TestOwnerManagement.test_cannot_remove_last_owner
· Database
|
27 ms |
|
starter_packs/views.py:507
if starter_pack.owners.count() <= 1:
remove_owner
· Database
|
23 ms |
|
starter_packs/views.py:417
owners = list(starter_pack.owners.select_related("accountaccess__account").order_by("username"))
owners_manager_context
· Database
|
6 ms |
|
starter_packs/views.py:418
invitations = list(
owners_manager_context
· Database
|
5 ms |
|
starter_packs/tests.py:627
self.assertEqual(self.pack.owners.count(), 1)
TestOwnerManagement.test_cannot_remove_last_owner
· Database
|
2 ms |
|
starter_packs/views.py:510
return render(request, "owners_updated.html", owners_manager_context(starter_pack, q, error))
remove_owner
· Templates
|
2 ms |
|
starter_packs/tests.py:630
self.assertEqual(self.pack.owners.count(), 1)
TestOwnerManagement.test_cannot_remove_last_owner
· Database
|
1 ms |
Fixtures
Exact setup time| _live_server_helper function | 0.08 ms |
| _template_string_if_invalid_marker function | 0.06 ms |
| _dj_autoclear_mailbox function | 0.06 ms |
| _django_db_marker function | 0.06 ms |
| _django_isolate_apps function | 0.05 ms |
| _django_set_urlconf function | 0.05 ms |
| _django_clear_site_cache function | 0.04 ms |
| monkeypatch function | 0.03 ms |
Database
28 queries · 39 ms
Repeated queries are usually N+1 lookups: fetch them once with select_related / prefetch_related (or selectinload).
3×
SELECT COUNT(*) AS "__count" FROM "auth_user" INNER JOIN "starter_packs_starterpack_owners" ON ("auth_user"."id" = "starter_packs_starterpack_owners"."user_id") WHERE "starter_packs_starterpack_owners"."starterpack_id" = %s
Biggest pieces of work
|
call test body
starter_packs/tests.py:628
|
167 ms |
|
call _pre_setup
django/test/testcases.py:1167
|
2 ms |
|
call _post_teardown
django/test/testcases.py:1243
|
2 ms |
|
setup __init__
__init__:-1
|
1 ms |
Reliability
12 results · 0 CI failures · 0 local failuresThis test hasn't failed recently.
History
Latest 12 results, oldest first in the strip| When | Environment | Outcome | Duration | |
|---|---|---|---|---|
| 7 hours ago | CI github-actions:test | passed | 173 ms | Profile |
| 16 hours ago | CI github-actions:test | passed | 74 ms | Profile |
| 22 hours ago | CI github-actions:test | passed | 216 ms | Profile |
| 1 week, 5 days ago | CI github-actions:test | passed | 115 ms | Profile |
| 2 weeks, 2 days ago | CI github-actions:test | passed | 81 ms | Profile |
| 2 weeks, 2 days ago | CI github-actions:test | passed | 138 ms | Profile |
| 2 weeks, 4 days ago | CI github-actions:test | passed | 115 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 85 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 223 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 234 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 205 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 89 ms | Run |