Tests / apps/api/tests.py
ProfileUploadTest::test_the_same_upload_twice_changes_nothing
First seen 3 weeks ago in 78a4357
CI
github-actions:test
12 runs
Average
82 ms
median 86 ms
max 121 ms
max 121 ms
Phases
Setup 0.74 ms
Call 81 ms
Teardown 0.19 ms
Categories
Database 53 ms
App code 2 ms
Other (Libraries, Serialization, Unsampled, pytest) 28 ms
68 database queries per run
Needs 47 KB of memory (max 156 KB)
Duration per run
Where the time goes
Latest run in ci:github-actions:test, 16 hours ago ·
open run
call79 ms98.8%
ProfileUploadTest.test_the_same_upload_twice_changes_nothingapps/api/tests.py:860 first = self.upload(document).json()70 ms87.9%
ProfileUploadTest.uploadapps/api/tests.py:49544 ms54.9%
_SharedTaskProxy.__call__potatoq/app.py:76344 ms54.9%
Task.__call__potatoq/task.py:18944 ms54.9%
process_profileapps/api/tasks.py:23930 ms37.3%
process_profile_partapps/projects/profiles.py:36718 ms22.0%
write_snapshotsapps/projects/profiles.py:334 cursor.executemany(SNAPSHOT_UPSERT, batch)9 ms11.0%
CursorWrapper.executemanydjango/db/backends/utils.py:849 ms11.0%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:929 ms11.0%
CursorWrapper._executemanydjango/db/backends/utils.py:1149 ms11.0%
Cursor.executemanypsycopg/cursor.py:1389 ms11.0%
Connection.waitpsycopg/connection.py:4959 ms11.0%
BaseCursor._executemany_gen_pipelinepsycopg/_cursor_base.py:2397 ms8.8%
BasePipeline._communicate_genpsycopg/_pipeline_base.py:1127 ms8.8%
BaseCursor._executemany_gen_pipelinepsycopg/_cursor_base.py:2322 ms2.2%
BaseCursor._convert_querypsycopg/_cursor_base.py:4652 ms2.2%
PostgresClientQuery.convertpsycopg/_queries.py:2842 ms2.2%
write_snapshotsapps/projects/profiles.py:3339 ms11.0%
write_snapshots.<locals>.<genexpr>apps/projects/profiles.py:3319 ms11.0%
write_snapshots.<locals>.rowapps/projects/profiles.py:327 compress(json.dumps(snapshot_document(document, entry), separators=(",", ":")).encode()),5 ms6.6%
compressapps/projects/profiles.py:111 return gzip.compress(data, compresslevel=6)4 ms4.4%
compress<stdlib>/gzip.py:6684 ms4.4%
dumps<stdlib>/json/__init__.py:2372 ms2.2%
write_snapshots.<locals>.rowapps/projects/profiles.py:329 return [field.get_db_prep_save(value, connection) for field, value in zip(fields, values, strict=True)]4 ms4.4%
ForeignKey.get_db_prep_savedjango/db/models/fields/related.py:11892 ms2.2%
Field.get_db_prep_savedjango/db/models/fields/__init__.py:10112 ms2.2%
process_profile_partapps/projects/profiles.py:363 profile = claim_part(part, document)7 ms8.8%
claim_partapps/projects/profiles.py:379 profile = Profile.objects.select_for_update(no_key=True).get(pk=part.profile_id)2 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
claim_partapps/projects/profiles.py:397 project = profile.project2 ms2.2%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms2.2%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
claim_partapps/projects/profiles.py:3992 ms2.2%
get_or_create_environmentapps/projects/environments.py:63 obj, created = Environment.objects.get_or_create(2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.get_or_createdjango/db/models/query.py:9922 ms2.2%
Atomic.__exit__django/db/transaction.py:2472 ms2.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms2.2%
BaseDatabaseWrapper.savepoint_commitdjango/db/backends/base/base.py:4312 ms2.2%
BaseDatabaseWrapper._savepoint_commitdjango/db/backends/base/base.py:3752 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
claim_partapps/projects/profiles.py:404 commit, _ = Commit.objects.get_or_create(2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.get_or_createdjango/db/models/query.py:9922 ms2.2%
Atomic.__enter__django/db/transaction.py:2112 ms2.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms2.2%
BaseDatabaseWrapper.savepointdjango/db/backends/base/base.py:4002 ms2.2%
BaseDatabaseWrapper._savepointdjango/db/backends/base/base.py:3672 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
process_profile_partapps/projects/profiles.py:356 part = ProfilePart.objects.filter(pk=part.pk).first()2 ms2.2%
QuerySet.firstdjango/db/models/query.py:11452 ms2.2%
QuerySet.__iter__django/db/models/query.py:3902 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
process_profile_partapps/projects/profiles.py:359 or ProfilePart.objects.filter(profile_id=part.profile_id, index=part.index, id__gt=part.id).exists()2 ms2.2%
QuerySet.existsdjango/db/models/query.py:13372 ms2.2%
Query.has_resultsdjango/db/models/sql/query.py:6812 ms2.2%
SQLCompiler.has_resultsdjango/db/models/sql/compiler.py:15922 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
process_profile_partapps/projects/profiles.py:368 ProfilePart.objects.filter(pk=part.pk).update(2 ms2.2%
QuerySet.updatedjango/db/models/query.py:13002 ms2.2%
SQLUpdateCompiler.execute_sqldjango/db/models/sql/compiler.py:21112 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
process_profileapps/api/tasks.py:25311 ms13.2%
_SharedTaskProxy.__call__potatoq/app.py:76311 ms13.2%
Task.__call__potatoq/task.py:18911 ms13.2%
finalize_profile_partsapps/api/tasks.py:25911 ms13.2%
finalize_profileapps/projects/profiles.py:5174 ms4.4%
add_perfsapps/projects/rollups.py:30 for perf in perfs:2 ms2.2%
QuerySet.__iter__django/db/models/query.py:3902 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms2.2%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7672 ms2.2%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:862 ms2.2%
SQLCompiler.setup_querydjango/db/models/sql/compiler.py:752 ms2.2%
SQLCompiler.get_selectdjango/db/models/sql/compiler.py:3172 ms2.2%
SQLCompiler.compiledjango/db/models/sql/compiler.py:5782 ms2.2%
Col.as_sqldjango/db/models/expressions.py:13252 ms2.2%
SQLCompiler.quote_name_unless_aliasdjango/db/backends/postgresql/compiler.py:342 ms2.2%
SQLCompiler.quote_name_unless_aliasdjango/db/models/sql/compiler.py:5612 ms2.2%
add_perfsapps/projects/rollups.py:88 TestDailyStats.objects.bulk_create(2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.bulk_createdjango/db/models/query.py:8332 ms2.2%
QuerySet._batched_insertdjango/db/models/query.py:19562 ms2.2%
QuerySet._insertdjango/db/models/query.py:19182 ms2.2%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19252 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
BaseCursor._execute_genpsycopg/_cursor_base.py:2052 ms2.2%
BaseCursor._convert_querypsycopg/_cursor_base.py:4652 ms2.2%
PostgresClientQuery.convertpsycopg/_queries.py:2892 ms2.2%
PostgresClientQuery.dumppsycopg/_queries.py:2992 ms2.2%
PostgresClientQuery.dump.<locals>.<genexpr>psycopg/_queries.py:3002 ms2.2%
Dumper.quotepsycopg/adapt.py:592 ms2.2%
ListDumper.dumppsycopg/types/array.py:1572 ms2.2%
<GC>~2 ms2.2%
finalize_profileapps/projects/profiles.py:504 for part in ProfilePart.objects.filter(profile=profile).defer("document").order_by("index", "id"):2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.filterdjango/db/models/query.py:15422 ms2.2%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms2.2%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms2.2%
Query.add_qdjango/db/models/sql/query.py:16712 ms2.2%
Query._add_qdjango/db/models/sql/query.py:17032 ms2.2%
Query.build_filterdjango/db/models/sql/query.py:15772 ms2.2%
Query.setup_joinsdjango/db/models/sql/query.py:19742 ms2.2%
finalize_profileapps/projects/profiles.py:509 ProfilePart.objects.filter(profile=profile).exclude(pk__in=[part.pk for part in current]).delete()2 ms2.2%
QuerySet.deletedjango/db/models/query.py:12372 ms2.2%
finalize_profileapps/projects/profiles.py:5112 ms2.2%
QuerySet.deletedjango/db/models/query.py:12382 ms2.2%
Collector.deletedjango/db/models/deletion.py:4712 ms2.2%
QuerySet._raw_deletedjango/db/models/query.py:12602 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
Atomic.__exit__django/db/transaction.py:2472 ms2.2%
async_unsafe.<locals>.decorator.<locals>.innerdjango/utils/asyncio.py:262 ms2.2%
BaseDatabaseWrapper.savepoint_commitdjango/db/backends/base/base.py:4312 ms2.2%
BaseDatabaseWrapper._savepoint_commitdjango/db/backends/base/base.py:3752 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1032 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
process_profileapps/api/tasks.py:237 part = ProfilePart.objects.select_related("profile").get(id=part_id)4 ms4.4%
QuerySet.getdjango/db/models/query.py:6252 ms2.2%
QuerySet.filterdjango/db/models/query.py:15422 ms2.2%
QuerySet._filter_or_excludedjango/db/models/query.py:15602 ms2.2%
QuerySet._filter_or_exclude_inplacedjango/db/models/query.py:15702 ms2.2%
Query.add_qdjango/db/models/sql/query.py:16712 ms2.2%
Query._add_qdjango/db/models/sql/query.py:17032 ms2.2%
Query.build_filterdjango/db/models/sql/query.py:15772 ms2.2%
Query.setup_joinsdjango/db/models/sql/query.py:19912 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
ProfileUploadTest.uploadapps/api/tests.py:487 response = self.client.post(26 ms32.9%
Client.postdjango/test/client.py:115326 ms32.9%
RequestFactory.postdjango/test/client.py:49926 ms32.9%
RequestFactory.genericdjango/test/client.py:67126 ms32.9%
Client.requestdjango/test/client.py:108226 ms32.9%
ClientHandler.__call__django/test/client.py:17318 ms22.0%
BaseHandler.load_middlewaredjango/core/handlers/base.py:6218 ms22.0%
__init____init__:-118 ms22.0%
WhiteNoiseMiddleware.__init__whitenoise/middleware.py:10418 ms22.0%
WhiteNoise.add_fileswhitenoise/base.py:10818 ms22.0%
WhiteNoise.update_files_dictionarywhitenoise/base.py:12018 ms22.0%
WhiteNoise.add_file_to_dictionarywhitenoise/base.py:13118 ms22.0%
WhiteNoise.get_static_filewhitenoise/base.py:20811 ms13.2%
StaticFile.__init__whitenoise/responders.py:777 ms8.8%
StaticFile.get_alternativeswhitenoise/responders.py:2072 ms2.2%
Headers.items<stdlib>/wsgiref/headers.py:1312 ms2.2%
<GC>~2 ms2.2%
StaticFile.get_alternativeswhitenoise/responders.py:2032 ms2.2%
StaticFile.get_alternativeswhitenoise/responders.py:2002 ms2.2%
StaticFile.get_alternativeswhitenoise/responders.py:2012 ms2.2%
StaticFile.__init__whitenoise/responders.py:734 ms4.4%
StaticFile.get_headerswhitenoise/responders.py:1762 ms2.2%
formatdate<stdlib>/email/utils.py:2662 ms2.2%
format_datetime<stdlib>/email/utils.py:2842 ms2.2%
StaticFile.get_headerswhitenoise/responders.py:1782 ms2.2%
WhiteNoise.get_static_filewhitenoise/base.py:2024 ms4.4%
WhiteNoise.get_static_filewhitenoise/base.py:2034 ms4.4%
WhiteNoise.add_cache_headerswhitenoise/base.py:2244 ms4.4%
WhiteNoiseMiddleware.immutable_file_testwhitenoise/middleware.py:1764 ms4.4%
WhiteNoiseMiddleware.get_static_urlwhitenoise/middleware.py:1974 ms4.4%
URLMixin.urldebug_toolbar/panels/staticfiles.py:204 ms4.4%
HashedFilesMixin.urldjango/contrib/staticfiles/storage.py:2054 ms4.4%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:1782 ms2.2%
HashedFilesMixin._urldjango/contrib/staticfiles/storage.py:1862 ms2.2%
FileSystemStorage.urldjango/core/files/storage/filesystem.py:2092 ms2.2%
ClientHandler.__call__django/test/client.py:1869 ms11.0%
BaseHandler.get_responsedjango/core/handlers/base.py:1419 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:1309 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:1239 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
MiddlewareMixin.__call__django/utils/deprecation.py:3099 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
AccountMiddleware.<locals>.middlewareallauth/account/middleware.py:349 ms11.0%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:559 ms11.0%
BaseHandler._get_responsedjango/core/handlers/base.py:1989 ms11.0%
csrf_exempt.<locals>._view_wrapperdjango/views/decorators/csrf.py:659 ms11.0%
jsonify_errors.<locals>.wrapped_viewapps/api/urls.py:379 ms11.0%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:649 ms11.0%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:757 ms8.8%
profile_uploadapps/api/urls.py:1504 ms4.4%
get_or_create_numberedapps/projects/models.py:212 ms2.2%
next_numberapps/projects/models.py:35 return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 12 ms2.2%
QuerySet.aggregatedjango/db/models/query.py:5942 ms2.2%
Query.get_aggregationdjango/db/models/sql/query.py:6332 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
get_or_create_numberedapps/projects/models.py:24 return model.objects.create(project=project, number=number, **lookup, **(defaults or {})), True2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.createdjango/db/models/query.py:6692 ms2.2%
Profile.saveapps/projects/models.py:466 super().save(*args, **kwargs)2 ms2.2%
Model.savedjango/db/models/base.py:8742 ms2.2%
Model.save_basedjango/db/models/base.py:9662 ms2.2%
Model._save_tabledjango/db/models/base.py:11672 ms2.2%
Model._do_insertdjango/db/models/base.py:12182 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet._insertdjango/db/models/query.py:19182 ms2.2%
SQLInsertCompiler.execute_sqldjango/db/models/sql/compiler.py:19242 ms2.2%
SQLInsertCompiler.as_sqldjango/db/models/sql/compiler.py:18932 ms2.2%
profile_uploadapps/api/urls.py:154 part = ProfilePart.objects.create(2 ms2.2%
BaseManager._get_queryset_methods.<locals>.create_method.<locals>.manager_methoddjango/db/models/manager.py:872 ms2.2%
QuerySet.createdjango/db/models/query.py:6672 ms2.2%
Model.__init__django/db/models/base.py:5562 ms2.2%
profile_uploadapps/api/urls.py:1632 ms2.2%
Project.urlapps/projects/models.py:59 return reverse(name, args=[self.organization.slug, self.slug, *args])2 ms2.2%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms2.2%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms2.2%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:72 project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))2 ms2.2%
get_object_or_404django/shortcuts.py:902 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
CursorWrapper._executedjango/db/backends/utils.py:1052 ms2.2%
Cursor.executepsycopg/cursor.py:1132 ms2.2%
Connection.waitpsycopg/connection.py:4952 ms2.2%
ProfileUploadTest.test_the_same_upload_twice_changes_nothingapps/api/tests.py:8615 ms6.6%
ProfileUploadTest.uploadapps/api/tests.py:487 response = self.client.post(5 ms6.6%
Client.postdjango/test/client.py:11535 ms6.6%
RequestFactory.postdjango/test/client.py:4995 ms6.6%
RequestFactory.genericdjango/test/client.py:6715 ms6.6%
Client.requestdjango/test/client.py:10825 ms6.6%
ClientHandler.__call__django/test/client.py:1865 ms6.6%
BaseHandler.get_responsedjango/core/handlers/base.py:1415 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
DebugToolbarMiddleware.__call__debug_toolbar/middleware.py:1305 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
WhiteNoiseMiddleware.__call__whitenoise/middleware.py:1235 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
MiddlewareMixin.__call__django/utils/deprecation.py:3095 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
AccountMiddleware.<locals>.middlewareallauth/account/middleware.py:345 ms6.6%
convert_exception_to_response.<locals>.innerdjango/core/handlers/exception.py:555 ms6.6%
BaseHandler._get_responsedjango/core/handlers/base.py:1985 ms6.6%
csrf_exempt.<locals>._view_wrapperdjango/views/decorators/csrf.py:655 ms6.6%
jsonify_errors.<locals>.wrapped_viewapps/api/urls.py:375 ms6.6%
require_http_methods.<locals>.decorator.<locals>.innerdjango/views/decorators/http.py:645 ms6.6%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:754 ms4.4%
profile_uploadapps/api/urls.py:1502 ms2.2%
get_or_create_numberedapps/projects/models.py:18 existing = model.objects.filter(project=project, **lookup).first()2 ms2.2%
QuerySet.firstdjango/db/models/query.py:11452 ms2.2%
QuerySet.__iter__django/db/models/query.py:3902 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms2.2%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7672 ms2.2%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:872 ms2.2%
SQLCompiler.get_order_bydjango/db/models/sql/compiler.py:4912 ms2.2%
SQLCompiler._order_by_pairsdjango/db/models/sql/compiler.py:3592 ms2.2%
profile_uploadapps/api/urls.py:1632 ms2.2%
Project.urlapps/projects/models.py:59 return reverse(name, args=[self.organization.slug, self.slug, *args])2 ms2.2%
ForwardManyToOneDescriptor.__get__django/db/models/fields/related_descriptors.py:2572 ms2.2%
ForwardManyToOneDescriptor.get_objectdjango/db/models/fields/related_descriptors.py:2222 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16112 ms2.2%
SQLCompiler.as_sqldjango/db/models/sql/compiler.py:7672 ms2.2%
SQLCompiler.pre_sql_setupdjango/db/models/sql/compiler.py:882 ms2.2%
WhereNode.split_having_qualifydjango/db/models/sql/where.py:472 ms2.2%
cached_property.__get__django/utils/functional.py:472 ms2.2%
WhereNode.contains_over_clausedjango/db/models/sql/where.py:2642 ms2.2%
api_request.<locals>.decorator.<locals>.wrapped_viewapps/api/urls.py:72 project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))2 ms2.2%
get_object_or_404django/shortcuts.py:902 ms2.2%
QuerySet.getdjango/db/models/query.py:6352 ms2.2%
QuerySet.__len__django/db/models/query.py:3722 ms2.2%
QuerySet._fetch_alldjango/db/models/query.py:20002 ms2.2%
ModelIterable.__iter__django/db/models/query.py:952 ms2.2%
SQLCompiler.execute_sqldjango/db/models/sql/compiler.py:16242 ms2.2%
CursorWrapper.executedjango/db/backends/utils.py:792 ms2.2%
CursorWrapper._execute_with_wrappersdjango/db/backends/utils.py:922 ms2.2%
ProfileUploadTest.test_the_same_upload_twice_changes_nothingapps/api/tests.py:8594 ms4.4%
ProfileUploadTest.documentapps/api/tests.py:5112 ms2.2%
make_profile_documentapps/projects/testing.py:289 "started_at": started_at.strftime("%Y-%m-%dT%H:%M:%SZ"),2 ms2.2%
ProfileUploadTest.uploadapps/api/tests.py:487 response = self.client.post(2 ms2.2%
Client.postdjango/test/client.py:11532 ms2.2%
RequestFactory.postdjango/test/client.py:4992 ms2.2%
RequestFactory.genericdjango/test/client.py:6712 ms2.2%
Client.requestdjango/test/client.py:10822 ms2.2%
ClientHandler.__call__django/test/client.py:1732 ms2.2%
BaseHandler.load_middlewaredjango/core/handlers/base.py:622 ms2.2%
__init____init__:-12 ms2.2%
WhiteNoiseMiddleware.__init__whitenoise/middleware.py:1042 ms2.2%
WhiteNoise.add_fileswhitenoise/base.py:1082 ms2.2%
WhiteNoise.update_files_dictionarywhitenoise/base.py:1152 ms2.2%
scantreewhitenoise/base.py:2622 ms2.2%
scantreewhitenoise/base.py:2622 ms2.2%
scantreewhitenoise/base.py:2642 ms2.2%
Estimated from 45 samples; phase durations are exact. Frames from pytest and pluggy are
hidden
.
Hot lines in your code
|
apps/api/tests.py:487
response = self.client.post(
ProfileUploadTest.upload
· Libraries
|
19 ms |
|
apps/projects/profiles.py:334
cursor.executemany(SNAPSHOT_UPSERT, batch)
write_snapshots
· Database
|
9 ms |
|
apps/projects/profiles.py:111
return gzip.compress(data, compresslevel=6)
compress
· Libraries
|
4 ms |
|
apps/api/urls.py:72
project = get_object_or_404(Project, secrettokens__token=request.headers.get("Authorization"))
api_request.<locals>.decorator.<locals>.wrapped_view
· Database
|
4 ms |
|
apps/projects/models.py:59
return reverse(name, args=[self.organization.slug, self.slug, *args])
Project.url
· Database
|
4 ms |
|
apps/api/tasks.py:237
part = ProfilePart.objects.select_related("profile").get(id=part_id)
process_profile
· Database
|
4 ms |
|
apps/projects/profiles.py:329
return [field.get_db_prep_save(value, connection) for field, value in zip(fields, values, strict=True)]
write_snapshots.<locals>.row
· App code
|
4 ms |
|
apps/projects/testing.py:289
"started_at": started_at.strftime("%Y-%m-%dT%H:%M:%SZ"),
make_profile_document
· App code
|
2 ms |
|
apps/projects/models.py:35
return (model.objects.filter(project_id=project_id).aggregate(last=models.Max("number"))["last"] or 0) + 1
next_number
· Database
|
2 ms |
|
apps/projects/models.py:466
super().save(*args, **kwargs)
Profile.save
· Database
|
2 ms |
Fixtures
Exact setup time| _dj_autoclear_mailbox function | 0.05 ms |
| _django_db_marker function | 0.05 ms |
| _django_set_urlconf function | 0.04 ms |
| _live_server_helper function | 0.04 ms |
| _template_string_if_invalid_marker function | 0.04 ms |
| _django_clear_site_cache function | 0.03 ms |
| monkeypatch function | 0.02 ms |
Database
68 queries · 24 ms
Repeated queries are usually N+1 lookups: fetch them once with select_related / prefetch_related (or selectinload).
5×
SELECT "projects_profilepart"."id", "projects_profilepart"."profile_id", "projects_profilepart"."index", "projects_profilepart"."count", "projects_profilepart"."checksum", "projects_profilepart"."status", "projects_profilepart"."error", "projects_profilepart"."tests_count", "projects_profilepart"."…
4×
SELECT "projects_profile"."id", "projects_profile"."project_id", "projects_profile"."number", "projects_profile"."environment_id", "projects_profile"."session_id", "projects_profile"."run_id", "projects_profile"."commit_id", "projects_profile"."ingest_id", "projects_profile"."external_id", "project…
3×
SELECT "projects_project"."id", "projects_project"."organization_id", "projects_project"."name", "projects_project"."slug", "projects_project"."public", "projects_project"."description", "projects_project"."date_created", "projects_project"."date_updated", "projects_project"."created_by_id" FROM "p…
Biggest pieces of work
|
call test body
apps/api/tests.py:860
|
79 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 | |
|---|---|---|---|---|
| 16 hours ago | CI github-actions:test | passed | 80 ms | Profile |
| 1 week, 5 days ago | CI github-actions:test | passed | 52 ms | Profile |
| 2 weeks, 1 day ago | CI github-actions:test | passed | 112 ms | Profile |
| 2 weeks, 1 day ago | CI github-actions:test | passed | 61 ms | Profile |
| 2 weeks, 1 day ago | CI github-actions:test | passed | 105 ms | Profile |
| 2 weeks, 2 days ago | CI github-actions:test | passed | 58 ms | Profile |
| 2 weeks, 4 days ago | CI github-actions:test | passed | 89 ms | Profile |
| 2 weeks, 6 days ago | CI github-actions:test | passed | 86 ms | Profile |
| 2 weeks, 6 days ago | CI github-actions:test | passed | 86 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 121 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 49 ms | Profile |
| 3 weeks ago | CI github-actions:test | passed | 88 ms | Profile |