diff --git a/admin/base/settings/defaults.py b/admin/base/settings/defaults.py
index f0647492f67..579b920949e 100644
--- a/admin/base/settings/defaults.py
+++ b/admin/base/settings/defaults.py
@@ -199,22 +199,6 @@
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
NOSE_ARGS = ['--verbosity=2']
-# Keen.io settings in local.py
-KEEN_PROJECT_ID = osf_settings.KEEN['private']['project_id']
-KEEN_READ_KEY = osf_settings.KEEN['private']['read_key']
-KEEN_WRITE_KEY = osf_settings.KEEN['private']['write_key']
-
-KEEN_CREDENTIALS = {
- 'keen_ready': False
-}
-
-if KEEN_CREDENTIALS['keen_ready']:
- KEEN_CREDENTIALS.update({
- 'keen_project_id': KEEN_PROJECT_ID,
- 'keen_read_key': KEEN_READ_KEY,
- 'keen_write_key': KEEN_WRITE_KEY
- })
-
# Set in local.py
DESK_KEY = ''
diff --git a/admin/metrics/views.py b/admin/metrics/views.py
index 3628f8278e4..4255181c7ff 100644
--- a/admin/metrics/views.py
+++ b/admin/metrics/views.py
@@ -2,7 +2,6 @@
from django.contrib.auth.mixins import PermissionRequiredMixin
from admin.base import settings
-from admin.base.settings import KEEN_CREDENTIALS
class MetricsView(PermissionRequiredMixin, TemplateView):
@@ -11,7 +10,6 @@ class MetricsView(PermissionRequiredMixin, TemplateView):
raise_exception = True
def get_context_data(self, **kwargs):
- kwargs.update(KEEN_CREDENTIALS.copy())
api_report_url = f'{settings.API_DOMAIN}_/metrics/reports/'
kwargs.update({'metrics_url': api_report_url})
return super().get_context_data(**kwargs)
diff --git a/admin/nodes/views.py b/admin/nodes/views.py
index 2318778e369..fc16a3b0d05 100644
--- a/admin/nodes/views.py
+++ b/admin/nodes/views.py
@@ -643,7 +643,6 @@ def post(self, request, *args, **kwargs):
node = self.get_object()
node.is_public = False
- node.keenio_read_key = ''
# After set permissions callback
for addon in node.get_addons():
diff --git a/admin/static/css/keen-dashboards.css b/admin/static/css/keen-dashboards.css
old mode 100755
new mode 100644
index b8e7a507681..2b6b8a01b32
--- a/admin/static/css/keen-dashboards.css
+++ b/admin/static/css/keen-dashboards.css
@@ -113,8 +113,4 @@ body.application .return-link:hover,
.hr-menu {
background-color: lightgray;
height: 1px;
-}
-
-#reload-node-logs {
- margin-left: 20px;
-}
+}
\ No newline at end of file
diff --git a/admin/static/js/metrics/metrics.es6.js b/admin/static/js/metrics/metrics.es6.js
index 42da8ffd8ac..10d6281646a 100644
--- a/admin/static/js/metrics/metrics.es6.js
+++ b/admin/static/js/metrics/metrics.es6.js
@@ -5,20 +5,9 @@ require('keen-dataviz/dist/keen-dataviz.min.css');
var c3 = require('c3/c3.js');
-var keen = require('keen-js');
var keenDataviz = require('keen-dataviz');
-var keenAnalysis = require('keen-analysis');
var $ = require('jquery');
-var client = new keenAnalysis({
- projectId: keenProjectId,
- readKey: keenReadKey
-});
-
-var publicClient = new keenAnalysis({
- projectId: keenPublicProjectId,
- readKey: keenPublicReadKey
-});
// Heights and Colors for the below rendered
// Keen and c3 Data visualizations
@@ -423,67 +412,6 @@ var getMetricTitle = function(metric, type) {
return title;
};
-var renderKeenMetric = function(element, type, query, height, colors, keenClient) {
- if (!keenClient) {
- keenClient = client;
- }
-
- var chart = new keenDataviz()
- .el(element)
- .height(height)
- .title(' ')
- .type(type)
- .prepare();
-
- if (colors) {
- chart.colors([colors]);
- }
-
- keenClient
- .run(query)
- .then(function(res){
- var metricChart = chart.data(res);
- metricChart.dataset.sortRows("desc", function(row) {
- return row[1]
- });
- metricChart.render();
- })
- .catch(function(err){
- chart.message(err.message);
- });
-};
-
-var renderNodeLogsForOneUserChart = function(user_id) {
- var chart = new keenDataviz()
- .el('#yesterdays-node-logs-by-user')
- .height(bigMetricHeight)
- .title('Individual Logs for ' + '' + user_id + '')
- .type('line')
- .prepare();
-
- client
- .query('count', {
- event_collection: "node_log_events",
- interval: "hourly",
- group_by: "action",
- filters: [{
- property_name: 'user_id',
- operator: 'eq',
- property_value: user_id
- }],
- timeframe: "previous_1_days",
- timezone: "UTC"
- })
- .then(function(res){
- chart
- .data(res)
- .render();
- })
- .catch(function(err){
- chart.message(err.message);
- });
-};
-
// called from pageview collection
var differenceGrowthBetweenMetrics = function(query1, query2, totalQuery, element, colors) {
@@ -837,46 +765,6 @@ var renderEmailDomainsChart = function() {
});
};
-var NodeLogsPerUser = function() {
- var chart = new keenDataviz()
- .el('#yesterdays-node-logs-by-user')
- .title(' ')
- .height(bigMetricHeight)
- .chartOptions({
- data: {
- onclick: function (d, element) {
- renderNodeLogsForOneUserChart(d.name);
- }
- }
- })
-
- .type('line')
- .prepare();
-
- client
- .query('count', {
- event_collection: 'node_log_events',
- group_by: "user_id",
- timeframe: 'previous_1_days',
- interval: 'hourly'
- })
- .then(function (res) {
- var chartWithData = chart.data(res);
- chartWithData.dataset.filterColumns(function (column, index) {
- var logThreshhold = 25;
- for (var i = 0; i < column.length; i++) {
- if (column[i] > logThreshhold && column[0] != 'null' && column[0] != 'uj57r') {
- return column;
- }
- }
- });
-
- chartWithData.render();
- })
- .catch(function (err) {
- chart.message(err.message);
- });
-};
var renderRawNodeMetrics = function() {
var propertiesAndElements = [
@@ -966,7 +854,6 @@ var UserGainMetrics = function() {
renderMainCounts();
renderWeeklyUserGainMetrics();
renderEmailDomainsChart();
- NodeLogsPerUser();
};
@@ -1084,36 +971,6 @@ function renderPreprintMetrics(timeframe) {
// ><+><+><+<+><+
var DownloadMetrics = function() {
-
- // ********** legacy keen **********
- var totalDownloadsQuery = new keenAnalysis.Query("count", {
- eventCollection: "file_stats",
- timeframe: 'previous_1_days',
- filters: [{
- property_name: 'action.type',
- operator: 'eq',
- property_value: 'download_file',
- timezone: "UTC"
- }]
- });
- renderKeenMetric("#number-of-downloads", "metric", totalDownloadsQuery,
- defaultHeight, defaultColor, publicClient);
-
- // ********** legacy keen **********
- var uniqueDownloadsQuery = new keenAnalysis.Query("count_unique", {
- eventCollection: "file_stats",
- timeframe: 'previous_1_days',
- target_property: 'file.resource',
- filters: [{
- property_name: 'action.type',
- operator: 'eq',
- property_value: 'download_file',
- timezone: "UTC"
- }]
- });
- renderKeenMetric("#number-of-unique-downloads", "metric", uniqueDownloadsQuery,
- defaultHeight, defaultColor, publicClient);
-
renderDownloadMetrics();
};
@@ -1138,13 +995,11 @@ function renderDownloadMetrics(timeframe) {
module.exports = {
UserGainMetrics: UserGainMetrics,
- NodeLogsPerUser: NodeLogsPerUser,
InstitutionMetrics: InstitutionMetrics,
RawNumberMetrics: RawNumberMetrics,
AddonMetrics: AddonMetrics,
PreprintMetrics: PreprintMetrics,
DownloadMetrics: DownloadMetrics,
- KeenRenderMetrics: renderKeenMetric,
RenderPreprintMetrics: renderPreprintMetrics,
RenderDownloadMetrics: renderDownloadMetrics,
};
diff --git a/admin/static/js/pages/metrics-page.js b/admin/static/js/pages/metrics-page.js
index dedd46e0570..50b8d3c1049 100644
--- a/admin/static/js/pages/metrics-page.js
+++ b/admin/static/js/pages/metrics-page.js
@@ -1,19 +1,13 @@
'use strict';
var $ = require('jquery');
-var keenAnalysis = require('keen-analysis');
var Metrics = require('js/metrics/metrics');
-keenAnalysis.ready(function() {
-
+$( document ).ready(function() {
Metrics.UserGainMetrics();
- $('#reload-node-logs')[0].onclick = function() {
- Metrics.NodeLogsPerUser();
- };
-
$('#institution-tab')[0].onclick = function() {
Metrics.InstitutionMetrics();
};
diff --git a/admin/static/js/sales_analytics/dashboard.js b/admin/static/js/sales_analytics/dashboard.js
deleted file mode 100644
index 19eb217c27d..00000000000
--- a/admin/static/js/sales_analytics/dashboard.js
+++ /dev/null
@@ -1,409 +0,0 @@
-require('bootstrap');
-require('jquery');
-require('c3/c3.css');
-
-var c3 = require('c3/c3.js');
-var keen = require('keen-js');
-var ss = require('simple-statistics');
-
-var SalesAnalytics = function() {
- // Metrics and visualization for the analytics dashboard.
- var self = this;
-
- self.keenClient = new keen({
- projectId: keenProjectId,
- readKey : keenReadKey
- });
-
- self.keenFilters = {
- nullUserFilter: {
- property_name: 'user.id',
- operator: 'ne',
- property_value: null
- },
- inactiveUserFilter: {
- property_name: 'user.id',
- operator: 'ne',
- property_value: ''
- }
- };
- self.getAverageUserSessionLength = function () {
- var query = new keen.Query('select_unique', {
- event_collection: 'pageviews',
- timeframe: 'previous_7_days',
- target_property: 'keen.timestamp',
- group_by: ['user.id', 'sessionId'],
- filters: [self.keenFilters.nullUserFilter]
- });
-
- var chart = self.prepareChart('keen-chart-average-session-user');
-
- self.keenClient.run(query, function(error, response) {
- if (error) {
- document.getElementById('keen-chart-average-session-user').innerHTML = 'Keen Query Failure';
- console.log(error);
- }
- else {
- var dataSet = self.extractDataSet(response);
- var result = ss.mean(dataSet);
- self.drawChart(chart, 'metric', 'Minutes', result/1000/60);
- }
- });
- };
-
- self.getAverageMAUSessionLength = function() {
- var query = new keen.Query('select_unique', {
- event_collection: 'pageviews',
- timeframe: 'previous_7_days',
- target_property: 'keen.timestamp',
- group_by: ['user.id', 'sessionId'],
- filters: [self.keenFilters.nullUserFilter, self.keenFilters.inactiveUserFilter]
- });
-
- var chart = self.prepareChart('keen-chart-average-session-mau');
-
- self.keenClient.run(query, function(error, response) {
- if (error) {
- document.getElementById('keen-chart-average-session-mau').innerHTML = 'Keen Query Failure.';
- console.log(error);
- }
- else {
- var dataSet = self.extractDataSet(response);
- var result = ss.mean(dataSet);
- self.drawChart(chart, 'metric', 'Minutes', result/1000/60);
- }
- });
- };
-
- self.getAverageUserSessionHistory = function(init, numberOfWeeks, weekEnd, weekStart, weeklyResult) {
- if (init === true) {
- var date = new Date();
- date.setHours(0, 0, 0, 0);
- date.setDate(date.getDate() - date.getDay());
- weekEnd = new Date(date);
- weekStart = new Date(date.setDate(date.getDate() - 7));
- weeklyResult = [];
- self.getAverageUserSessionHistory(false, numberOfWeeks, weekEnd, weekStart, weeklyResult);
- return;
- }
-
- if (numberOfWeeks === 0) {
- var chart = self.prepareChart('keen-chart-average-session-history');
- chart.attributes({title: 'Average User/MAU Session Length History of Past 12 Weeks', width: '100%', height: 450});
- chart.adapter({chartType: 'columnchart'});
- chart.chartOptions({
- hAxis: {title: 'Week'},
- vAxis: {title: 'Minutes'}
- });
- chart.parseRawData({result: weeklyResult}).render();
- return;
- }
-
- document.getElementById('keen-chart-average-session-history').innerHTML = 'loading ... : ' + (12 - numberOfWeeks) + ' / 12';
- var queryUser = new keen.Query('select_unique', {
- event_collection: 'pageviews',
- timeframe: {
- start: weekStart.toISOString(),
- end: weekEnd.toISOString()
- },
- target_property: 'keen.timestamp',
- group_by: ['user.id', 'sessionId'],
- filters: [self.keenFilters.nullUserFilter]
- });
- var queryMAU = new keen.Query('select_unique', {
- event_collection: 'pageviews',
- timeframe: {
- start: weekStart.toISOString(),
- end: weekEnd.toISOString()
- },
- target_property: 'keen.timestamp',
- group_by: ['user.id', 'sessionId'],
- filters: [self.keenFilters.nullUserFilter, self.keenFilters.inactiveUserFilter]
- });
-
- self.keenClient.run([queryUser, queryMAU], function (error, response) {
- var resultUser;
- var resultMAU;
- if (error) {
- document.getElementById('keen-chart-average-session-history').innerHTML = 'failure ... : ' + (12 - numberOfWeeks) + ' / 12';
- console.log(error);
- resultUser = resultMAU = -1;
- }
- else {
- var dataSetUser = self.extractDataSet(response[0]);
- var dataSetMAU = self.extractDataSet(response[1]);
- resultUser = ss.mean(dataSetUser);
- resultMAU = ss.mean(dataSetMAU);
- }
- var item = {
- timeframe: {
- start: weekStart.toISOString(),
- end: weekEnd.toISOString()
- },
- value: [
- { category: 'User', result: resultUser/1000/60 },
- { category: 'MAU', result: resultMAU/1000/60 }
- ]
- };
- weeklyResult.push(item);
-
- weekEnd = new Date(weekStart);
- weekStart.setDate(weekEnd.getDate() - 7);
- numberOfWeeks--;
- self.getAverageUserSessionHistory(false, numberOfWeeks, weekEnd, weekStart, weeklyResult);
- });
- };
-
- self.getOSFProductUsage = function() {
- var query = new Keen.Query('select_unique', {
- event_collection: 'pageviews',
- timeframe: 'previous_1_months',
- target_property: 'parsedPageUrl.path',
- group_by: ['user.id', 'parsedPageUrl.domain'],
- filters: [self.keenFilters.nullUserFilter, self.keenFilters.inactiveUserFilter]
- });
-
- var chartMoreThanTwo = self.prepareChart('keen-chart-osf-product-usage-mt2');
- var chartMeetings = self.prepareChart('keen-chart-osf-product-usage-mee');
- var chartInstitutions = self.prepareChart('keen-chart-osf-product-usage-ins');
-
- var request = self.keenClient.run(query, function(error, response) {
- if (error) {
- document.getElementById('keen-chart-osf-product-usage-mt2').innerHTML = 'Keen Query Failure';
- }
- else {
- var userProductMap = self.numberOfUsers(response);
- self.drawChart(chartMoreThanTwo, 'piechart', '', [
- {products: 'OSF Only', count: userProductMap.osf.length - userProductMap.moreThanTwo.length},
- {products: '2+ Products', count: userProductMap.moreThanTwo.length}
- ]);
- self.drawChart(chartMeetings, 'piechart', '', [
- {products: 'No Meetings', count: userProductMap.osf.length - userProductMap.meetings.length},
- {products: 'Meetings', count: userProductMap.meetings.length}
- ]);
- self.drawChart(chartInstitutions, 'piechart', '', [
- {products: 'No Institutions', count: userProductMap.osf.length - userProductMap.institutions.length},
- {products: 'Institutions', count: userProductMap.institutions.length}
- ]);
- }
- });
- };
- self.getUserCount = function(userCount) {
- // User count for each peroduct (osf, osf4m, institution)
- var chart = c3.generate({
- bindto: '#db-chart-user-count',
- data: {
- columns: [['Count'].concat(userCount.count)],
- type: 'bar',
- colors: {
- Count: '#ff5a5f',
- }
- },
- axis: {
- x: {
- type: 'category',
- categories: userCount.tags,
- },
- rotated: true
- },
- bar: {
- width: {
- ratio: 0.5 // this makes bar width 50% of length between ticks
- }
- }
- });
- };
-
- self.getUserPercentage = function(userCount) {
- var chart = c3.generate({
- bindto: '#db-chart-user-percent',
- data: {
- columns: [['Percentage'].concat(userCount.percent)],
- type: 'bar',
- colors: {
- Count: '#ff8083',
- }
- },
- axis: {
- x: {
- type: 'category',
- categories: userCount.tags,
- },
- rotated: true
- },
- bar: {
- width: {
- ratio: 0.5 // this makes bar width 50% of length between ticks
- }
- }
- });
- };
-
- self.getMultiProductCountYearly = function(multiProductMetricsYearly) {
- // Number of users that use 2+ products
- var chart = self.drawMetric('db-chart-multi-product-yearly',
- multiProductMetricsYearly.multi_product_count,
- '#e57fc2',
- 'Users');
- };
-
- self.getMultiProductCountMonthly = function(multiProductMetricsMonthly) {
- var chart = self.drawMetric('db-chart-multi-product-monthly',
- multiProductMetricsMonthly.multi_product_count,
- '#e57fc2',
- 'Users');
- };
-
- self.getCrossProductCountYearly = function(multiProductMetricsYearly) {
- // Number of users that use a product different from their entry points.
- var chart = self.drawMetric('db-chart-cross-product-yearly',
- multiProductMetricsYearly.cross_product_count,
- '#6ab975',
- 'Users');
- };
-
- self.getCrossProductCountMonthly = function(multiProductMetricsMonthly) {
- var chart = self.drawMetric('db-chart-cross-product-monthly',
- multiProductMetricsMonthly.cross_product_count,
- '#6ab975',
- 'Users');
- };
-
- self.getMultiActionCountYearly = function(multiProductMetricsYearly) {
- // Number of users that have more than one type of action.
- var chart = self.drawMetric('db-chart-multi-action-yearly',
- multiProductMetricsYearly.multi_action_count,
- '#4C72B7',
- 'Users');
- };
-
- self.getMultiActionCountMonthly = function(multiProductMetricsMonthly) {
- var chart = self.drawMetric('db-chart-multi-action-monthly',
- multiProductMetricsMonthly.multi_action_count,
- '#4C72B7',
- 'Users');
- };
-
- self.getRepeatActionCountMonthly = function(repeatActionUserMonthly) {
- var chart = self.drawMetric('db-chart-repeat-action-monthly',
- repeatActionUserMonthly.repeat_action_count,
- '#b75c4c',
- 'Users');
- };
-
- self.getTotalUserCount = function(userCount) {
- var chart = self.drawMetric('db-chart-total-user',
- userCount.total,
- '#005c66',
- 'Users');
- };
-
- self.prepareChart = function(elementId) {
- var chart = new keen.Dataviz();
- return chart.el(document.getElementById(elementId)).prepare();
- };
-
- self.drawChart = function(chart, type, title, result, color) {
- chart.attributes({title: title, width: '100%'});
- chart.adapter({chartType: type});
- chart.parseRawData({result: result});
- chart.render();
- };
-
- self.drawMetric = function(elementId, result, color, title) {
- var chart = new keen.Dataviz()
- .el(document.getElementById(elementId))
- .parseRawData({ result: result })
- .chartType('metric')
- .colors([color])
- .title(title)
- .render();
- };
-
- self.init = function() {
- console.log('init');
- keen.ready(self.run());
- };
-
- self.run = function() {
- console.log('run');
- self.getOSFProductUsage();
- self.getAverageUserSessionLength();
- self.getAverageMAUSessionLength();
- self.getAverageUserSessionHistory(true, 12, null, null, null);
- self.getUserCount(userCount);
- self.getUserPercentage(userCount);
- self.getMultiProductCountYearly(multiProductMetricsYearly);
- self.getMultiProductCountMonthly(multiProductMetricsMonthly);
- self.getCrossProductCountYearly(multiProductMetricsYearly);
- self.getCrossProductCountMonthly(multiProductMetricsMonthly);
- self.getMultiActionCountYearly(multiProductMetricsYearly);
- self.getMultiActionCountMonthly(multiProductMetricsMonthly);
- self.getRepeatActionCountMonthly(repeatActionUserMonthly);
- self.getTotalUserCount(userCount);
- };
-
- self.extractDataSet = function(keenResult) {
- if (!keenResult) {
- return 0;
- }
-
- var beginTime;
- var endTime;
- var deltaSet = [];
-
- for (var i in keenResult.result) {
- var session = keenResult.result[i];
- if (session.hasOwnProperty('result')) {
- if (session.result.length === 1) {
- // TODO: take care of the situation where there is only one 'keen.timestamp'
- continue;
- }
- beginTime = Date.parse(session.result[0]);
- endTime = Date.parse(session.result[session.result.length-1]);
- deltaSet.push(endTime - beginTime);
- }
- }
- return deltaSet;
- };
-
- self.numberOfUsers = function(keenResult, filters) {
- var userProductMap = {
- 'osf': [],
- 'meetings': [],
- 'institutions': [],
- 'moreThanTwo': []
- };
- for (var i in keenResult.result) {
- var session = keenResult.result[i];
- if (session.hasOwnProperty('result') && session.hasOwnProperty('user.id')) {
- if (session.hasOwnProperty('parsedPageUrl.domain') && session['parsedPageUrl.domain'] === 'staging.osf.io') {
- userProductMap.osf.push(session['user.id']);
- var paths = session.result;
- var numberOfProducts = 0;
- var meetings, institutions;
- meetings = institutions = false;
- for (var j in paths) {
- if (meetings === false && paths[j].startsWith('/meetings/')) {
- userProductMap.meetings.push(session['user.id']);
- meetings = true;
- numberOfProducts ++;
- }
- else if (institutions === false && paths[j].startsWith('/institutions/')) {
- userProductMap.institutions.push(session['user.id']);
- meetings = true;
- numberOfProducts ++;
- }
- }
- if (numberOfProducts > 0) {
- userProductMap.moreThanTwo.push(session['user.id']);
- }
- }
- }
- }
- return userProductMap;
- };
-};
-
-var salesAnalytics = new SalesAnalytics();
-salesAnalytics.init();
diff --git a/admin/templates/base_analytics.html b/admin/templates/base_analytics.html
deleted file mode 100644
index cc89be8c59e..00000000000
--- a/admin/templates/base_analytics.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{% extends 'base.html' %}
-{% load static %}
-
-{% block top_includes %}
-
-
- {% block top_analytics %}
- {% endblock top_analytics %}
-
-{% endblock top_includes %}
-
-{% block title %}
-
OSF Sales Analytics
-{% endblock title %}
-
-
-{% block content %}
-
- {% block topmenu %}
-
- Analytics Dashboard
-
- {% endblock topmenu %}
-
- {% block title_analytics %}
-
- {% endblock title_analytics %}
-
- {% block content_analytics %}
-
- {% endblock content_analytics %}
-
-{% endblock content %}
diff --git a/admin/templates/metrics/osf_metrics.html b/admin/templates/metrics/osf_metrics.html
index f01f0513a7e..3046d7f8103 100644
--- a/admin/templates/metrics/osf_metrics.html
+++ b/admin/templates/metrics/osf_metrics.html
@@ -10,12 +10,6 @@
@@ -196,9 +190,6 @@ User Data
Yesterday's Node logs by user
-
The last day of node logs by user, if a user had over 100 node logs.
diff --git a/admin/templates/sales_analytics/dashboard.html b/admin/templates/sales_analytics/dashboard.html
deleted file mode 100644
index f3218b47a15..00000000000
--- a/admin/templates/sales_analytics/dashboard.html
+++ /dev/null
@@ -1,223 +0,0 @@
-{% extends 'base_analytics.html' %}
-{% load static %}
-{% load filters %}
-
-{% block top_analytics %}
-
-{% endblock top_analytics %}
-
-
-{% block title_analytics %}
- Dashboard
-{% endblock title_analytics %}
-
-{% block content_analytics %}
-
-
- Dashboard
-
-
-
-
-
-
-
-
-
-
-
-
-
- Average User/MAU Session Length History of past 12 weeks
-
-
-
- Notes about this chart
-
-
-
-
-
-
-
-
- User Count by Product
-
-
-
- User count/percentage for each peroduct (osf, osf4m, institution)
-
-
-
-
-
-
-
-
-
-
- OSF Products Users View in the Past Month
-
-
-
- Notes about this chart
-
-
-
-
-
-
- OSF Products Users View in the Past Month
-
-
-
- Notes about this chart
-
-
-
-
-
-
-
-
- Average User Session Length of Previous 7 days
-
-
-
-
-
- Average MAU Session Length of Previous 7 days
-
-
-
-
-
-
-
- Multi-product User Count (Year)
-
-
-
-
-
- Multi-product User Count (Month)
-
-
-
- Number of users that use 2+ products
-
-
-
-
-
-
- Cross-product User Count (Year)
-
-
-
-
-
- Cross-product User Count (Month)
-
-
-
- Number of users that use a product other than their entry points.
-
-
-
-
-
-
- Multi-action User Count (Year)
-
-
-
-
-
- Multi-action User Count (Month)
-
-
-
- Number of users that have more than one type of actions.
-
-
-
-
-
-
- Repetitive actions User Count (Month)
-
-
-
-
-
- Total User Count
-
-
-
- Total number of Users
-
-
-
-
-
-
-
-
-{% endblock content_analytics %}
-
-{% block bottom_js %}
-
-{% endblock %}
diff --git a/admin/webpack.admin.config.js b/admin/webpack.admin.config.js
index e9987f2ed9d..be4bdb6f53d 100644
--- a/admin/webpack.admin.config.js
+++ b/admin/webpack.admin.config.js
@@ -32,7 +32,6 @@ var config = Object.assign({}, common, {
entry: {
'admin-base-page': staticAdminPath('js/pages/base-page.js'),
'admin-registration-edit-page': staticAdminPath('js/pages/admin-registration-edit-page.js'),
- 'dashboard': staticAdminPath('js/sales_analytics/dashboard.js'),
'metrics-page': staticAdminPath('js/pages/metrics-page.js'),
'banners': staticAdminPath('js/banners/banners.js'),
'brands': staticAdminPath('js/brands/brands.js'),
diff --git a/api/nodes/serializers.py b/api/nodes/serializers.py
index 879eff63d49..536357b191b 100644
--- a/api/nodes/serializers.py
+++ b/api/nodes/serializers.py
@@ -274,7 +274,6 @@ class NodeSerializer(TaxonomizableSerializerMixin, JSONAPISerializer):
tags = ValuesListField(attr_name='name', child=ser.CharField(), required=False)
access_requests_enabled = ShowIfVersion(ser.BooleanField(read_only=False, required=False), min_version='2.0', max_version='2.8')
node_license = NodeLicenseSerializer(required=False, source='license')
- analytics_key = ShowIfAdminScopeOrAnonymous(ser.CharField(read_only=True, source='keenio_read_key'))
template_from = ser.CharField(
required=False, allow_blank=False, allow_null=False,
help_text='Specify a node id for a node you would like to use as a template for the '
@@ -284,6 +283,8 @@ class NodeSerializer(TaxonomizableSerializerMixin, JSONAPISerializer):
'and some information will not change. By default, the description will '
'be cleared and the project will be made private.',
)
+ # 'analytics_key' can be removed after another version release.
+ analytics_key = ShowIfAdminScopeOrAnonymous(ser.CharField(read_only=True, default=''))
current_user_can_comment = ser.SerializerMethodField(help_text='Whether the current user is allowed to post comments')
current_user_permissions = ser.SerializerMethodField(
help_text='List of strings representing the permissions '
diff --git a/api_tests/nodes/serializers/test_serializers.py b/api_tests/nodes/serializers/test_serializers.py
index 1d6f7a14da7..d139652796b 100644
--- a/api_tests/nodes/serializers/test_serializers.py
+++ b/api_tests/nodes/serializers/test_serializers.py
@@ -48,7 +48,6 @@ def test_node_serializer(self, user):
assert attributes['registration'] == node.is_registration
assert attributes['fork'] == node.is_fork
assert attributes['collection'] == node.is_collection
- assert attributes['analytics_key'] == node.keenio_read_key
assert attributes['wiki_enabled'] == node.has_addon('wiki')
# Relationships
diff --git a/osf/management/commands/cumulative_plos_metrics.py b/osf/management/commands/cumulative_plos_metrics.py
index 27a6aa8a47e..6c12f1dbb3e 100644
--- a/osf/management/commands/cumulative_plos_metrics.py
+++ b/osf/management/commands/cumulative_plos_metrics.py
@@ -1,22 +1,13 @@
import csv
-import io
-from datetime import datetime
import logging
import requests
import tempfile
-from django.core.management.base import BaseCommand
-from keen import KeenClient
from requests_oauthlib import OAuth2
-from addons.osfstorage.models import OsfStorageFile
-from framework.celery_tasks import app as celery_app
from osf.metrics import PreprintView, PreprintDownload
-from osf.models import Guid, Node, OSFUser, Preprint, \
- Registration, TrashedFile
from osf.utils.fields import ensure_str
from website.settings import (
- KEEN,
PLOS_METRICS_BASE_FOLDER,
PLOS_METRICS_INITIAL_FILE_DOWNLOAD_URL,
PLOS_METRICS_OSF_TOKEN,
@@ -37,15 +28,6 @@
logger = logging.getLogger(__name__)
-keen_client = None
-keen_project = KEEN['public']['project_id']
-keen_key = KEEN['public']['read_key']
-if keen_project and keen_key:
- keen_client = KeenClient(
- project_id=keen_project,
- read_key=keen_key
- )
-
def bearer_token_auth(token):
token_dict = {
'token_type': 'Bearer',
@@ -73,45 +55,6 @@ def parse_base_file():
assert csvr.fieldnames == COL_HEADERS, f'Unexpected headers: expected {COL_HEADERS}, got {csvr.fieldnames}'
return csvr
-def fetch_metric_data_by_guid(guid):
- """return: tuple(
, tuple(, ))
- """
- g = Guid.load(guid)
- if not g:
- logger.error(f'Unable to find Guid {guid}')
- return None, (0, 0)
- obj = Guid.load(guid).referent
- if isinstance(obj, Node):
- return 'node', fetch_node_metric_data(obj)
- elif isinstance(obj, Registration):
- return 'registration', fetch_node_metric_data(obj)
- elif isinstance(obj, Preprint):
- return 'preprint', fetch_preprint_metric_data(obj)
- elif isinstance(obj, OsfStorageFile):
- return 'file', fetch_file_metric_data(obj)
- elif isinstance(obj, TrashedFile):
- return 'trashedfile', fetch_file_metric_data(obj)
- elif isinstance(obj, OSFUser):
- return 'user', (0, 0)
- else:
- logger.error(f'Unknown type for {guid}')
- return 'Unknown', (0, 0)
-
-def fetch_node_metric_data(node):
- """return: tuple(, )
- """
- views = keen_client.count(
- f'pageviews-{node._id[0]}',
- timeframe='this_20_years',
- filters=[{
- 'property_name': 'node.id',
- 'operator': 'eq',
- 'property_value': node._id
- }]
- )
- downs = 0 # AbstractNodes do not download
- return views, downs
-
def fetch_preprint_metric_data(preprint):
"""return: tuple(, )
@@ -126,37 +69,3 @@ def fetch_file_metric_data(file_):
views = file_.get_view_count()
downs = file_.get_download_count()
return views, downs
-
-@celery_app.task(name='osf.management.commands.cumulative_plos_metrics')
-def cumulative_plos_metrics():
- today = datetime.today()
- file_name = f'{today.year}_{today.month}_{today.day}_PLOS_Metrics.csv'
- file_path = f'{TEMP_FOLDER}{file_name}'
- logger.info('Parsing initial file...')
- init_data_iter = parse_base_file()
- output = io.StringIO()
- writer = csv.DictWriter(output, COL_HEADERS)
- writer.writeheader()
- logger.info('Gathering data...')
- for r in init_data_iter:
- r['type'], (r['views'], r['downloads']) = fetch_metric_data_by_guid(r['guid'])
- writer.writerow(r)
- params = {
- 'kind': 'file',
- 'name': file_name
- }
- logger.info('Writing data...')
- with open(file_path, 'w') as writeFile:
- writeFile.write(output.getvalue())
- logger.info('Uploading file...')
- upload_metrics_file(file_path=file_path, params=params)
- logger.info('Done.')
-
-
-class Command(BaseCommand):
- def handle(self, *args, **kwargs):
- start_time = datetime.now()
- logger.info(f'Script start time: {start_time}')
- cumulative_plos_metrics()
- end_time = datetime.now()
- logger.info(f'Script end time: {end_time}')
diff --git a/osf/migrations/0028_remove_abstractnode_keenio_read_key.py b/osf/migrations/0028_remove_abstractnode_keenio_read_key.py
new file mode 100644
index 00000000000..55f472b1af9
--- /dev/null
+++ b/osf/migrations/0028_remove_abstractnode_keenio_read_key.py
@@ -0,0 +1,17 @@
+# Generated by Django 4.2.15 on 2025-02-21 13:08
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('osf', '0027_alter_guidversionsthrough_object_id'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='abstractnode',
+ name='keenio_read_key',
+ ),
+ ]
diff --git a/osf/models/node.py b/osf/models/node.py
index d06af182e47..187f5f3123f 100644
--- a/osf/models/node.py
+++ b/osf/models/node.py
@@ -20,7 +20,6 @@
from django.dispatch import receiver
from django.utils import timezone
from django.utils.functional import cached_property
-from keen import scoped_keys
from psycopg2._psycopg import AsIs
from typedmodels.models import TypedModel, TypedModelManager
from guardian.models import (
@@ -57,7 +56,7 @@
translations as gv_translations,
)
from osf.utils.datetime_aware_jsonfield import DateTimeAwareJSONField
-from osf.utils.fields import NonNaiveDateTimeField, ensure_str
+from osf.utils.fields import NonNaiveDateTimeField
from osf.utils.requests import get_request_and_user_id, string_type_request_headers, get_current_request
from osf.utils.workflows import CollectionSubmissionStates
from osf.utils import sanitize
@@ -479,8 +478,6 @@ def linked_nodes(self):
identifiers = GenericRelation(Identifier, related_query_name='nodes')
- keenio_read_key = models.CharField(max_length=1000, null=True, blank=True)
-
def __init__(self, *args, **kwargs):
self._parent = kwargs.pop('parent', None)
self._is_templated_clone = False
@@ -1260,7 +1257,6 @@ def set_privacy(self, permissions, auth=None, log=True, save=True, meeting_creat
self.request_embargo_termination(auth.user)
return False
self.is_public = True
- self.keenio_read_key = self.generate_keenio_read_key()
elif permissions == 'private' and self.is_public:
if self.is_registration and not self.is_pending_embargo and not force:
raise NodeStateError('Public registrations must be withdrawn, not made private.')
@@ -1268,7 +1264,6 @@ def set_privacy(self, permissions, auth=None, log=True, save=True, meeting_creat
self.check_privacy_change_viability(auth)
self.is_public = False
- self.keenio_read_key = ''
self._remove_from_associated_collections(auth, force=force)
else:
return False
@@ -1305,17 +1300,6 @@ def set_privacy(self, permissions, auth=None, log=True, save=True, meeting_creat
project_signals.privacy_set_public.send(auth.user, node=self, meeting_creation=meeting_creation)
return True
- def generate_keenio_read_key(self):
- encrypted_read_key = scoped_keys.encrypt(settings.KEEN['public']['master_key'], options={
- 'filters': [{
- 'property_name': 'node.id',
- 'operator': 'eq',
- 'property_value': str(self._id)
- }],
- 'allowed_operations': [READ]
- })
- return ensure_str(encrypted_read_key)
-
@property
def private_links_active(self):
if self.is_spammy:
diff --git a/osf_tests/test_node.py b/osf_tests/test_node.py
index 4e88d1c2bf7..4fcd6e542cf 100644
--- a/osf_tests/test_node.py
+++ b/osf_tests/test_node.py
@@ -2254,11 +2254,9 @@ def test_set_privacy(self, node, auth):
assert last_logged_before_method_call != node.last_logged
node.save()
assert bool(node.is_public) is True
- assert node.keenio_read_key != ''
node.set_privacy('private', auth=auth)
node.save()
assert bool(node.is_public) is False
- assert node.keenio_read_key == ''
assert node.logs.first().action == NodeLog.MADE_PRIVATE
assert last_logged_before_method_call != node.last_logged
diff --git a/package.json b/package.json
index 1b289a11468..ce2933621c0 100644
--- a/package.json
+++ b/package.json
@@ -33,9 +33,7 @@
"js-cookie": "3.0.1",
"js-md5": "^0.7.3",
"jstimezonedetect": "^1.0.6",
- "keen-analysis": "^1.1.0",
"keen-dataviz": "^1.0.2",
- "keen-tracking": "1.0.3",
"knockout": "~3.4.2",
"knockout.validation": "^2.0.2",
"less": "^4.1.2",
diff --git a/poetry.lock b/poetry.lock
index e9f17c95c03..27061024317 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -1,141 +1,5 @@
# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand.
-[[package]]
-name = "aiohappyeyeballs"
-version = "2.4.0"
-description = "Happy Eyeballs for asyncio"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "aiohappyeyeballs-2.4.0-py3-none-any.whl", hash = "sha256:7ce92076e249169a13c2f49320d1967425eaf1f407522d707d59cac7628d62bd"},
- {file = "aiohappyeyeballs-2.4.0.tar.gz", hash = "sha256:55a1714f084e63d49639800f95716da97a1f173d46a16dfcfda0016abb93b6b2"},
-]
-
-[[package]]
-name = "aiohttp"
-version = "3.10.5"
-description = "Async http client/server framework (asyncio)"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:18a01eba2574fb9edd5f6e5fb25f66e6ce061da5dab5db75e13fe1558142e0a3"},
- {file = "aiohttp-3.10.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94fac7c6e77ccb1ca91e9eb4cb0ac0270b9fb9b289738654120ba8cebb1189c6"},
- {file = "aiohttp-3.10.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2f1f1c75c395991ce9c94d3e4aa96e5c59c8356a15b1c9231e783865e2772699"},
- {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7acae3cf1a2a2361ec4c8e787eaaa86a94171d2417aae53c0cca6ca3118ff6"},
- {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:94c4381ffba9cc508b37d2e536b418d5ea9cfdc2848b9a7fea6aebad4ec6aac1"},
- {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c31ad0c0c507894e3eaa843415841995bf8de4d6b2d24c6e33099f4bc9fc0d4f"},
- {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0912b8a8fadeb32ff67a3ed44249448c20148397c1ed905d5dac185b4ca547bb"},
- {file = "aiohttp-3.10.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d93400c18596b7dc4794d48a63fb361b01a0d8eb39f28800dc900c8fbdaca91"},
- {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d00f3c5e0d764a5c9aa5a62d99728c56d455310bcc288a79cab10157b3af426f"},
- {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d742c36ed44f2798c8d3f4bc511f479b9ceef2b93f348671184139e7d708042c"},
- {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:814375093edae5f1cb31e3407997cf3eacefb9010f96df10d64829362ae2df69"},
- {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8224f98be68a84b19f48e0bdc14224b5a71339aff3a27df69989fa47d01296f3"},
- {file = "aiohttp-3.10.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d9a487ef090aea982d748b1b0d74fe7c3950b109df967630a20584f9a99c0683"},
- {file = "aiohttp-3.10.5-cp310-cp310-win32.whl", hash = "sha256:d9ef084e3dc690ad50137cc05831c52b6ca428096e6deb3c43e95827f531d5ef"},
- {file = "aiohttp-3.10.5-cp310-cp310-win_amd64.whl", hash = "sha256:66bf9234e08fe561dccd62083bf67400bdbf1c67ba9efdc3dac03650e97c6088"},
- {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c6a4e5e40156d72a40241a25cc226051c0a8d816610097a8e8f517aeacd59a2"},
- {file = "aiohttp-3.10.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c634a3207a5445be65536d38c13791904fda0748b9eabf908d3fe86a52941cf"},
- {file = "aiohttp-3.10.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4aff049b5e629ef9b3e9e617fa6e2dfeda1bf87e01bcfecaf3949af9e210105e"},
- {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1942244f00baaacaa8155eca94dbd9e8cc7017deb69b75ef67c78e89fdad3c77"},
- {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04a1f2a65ad2f93aa20f9ff9f1b672bf912413e5547f60749fa2ef8a644e061"},
- {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7f2bfc0032a00405d4af2ba27f3c429e851d04fad1e5ceee4080a1c570476697"},
- {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:424ae21498790e12eb759040bbb504e5e280cab64693d14775c54269fd1d2bb7"},
- {file = "aiohttp-3.10.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:975218eee0e6d24eb336d0328c768ebc5d617609affaca5dbbd6dd1984f16ed0"},
- {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4120d7fefa1e2d8fb6f650b11489710091788de554e2b6f8347c7a20ceb003f5"},
- {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:b90078989ef3fc45cf9221d3859acd1108af7560c52397ff4ace8ad7052a132e"},
- {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ba5a8b74c2a8af7d862399cdedce1533642fa727def0b8c3e3e02fcb52dca1b1"},
- {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:02594361128f780eecc2a29939d9dfc870e17b45178a867bf61a11b2a4367277"},
- {file = "aiohttp-3.10.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8fb4fc029e135859f533025bc82047334e24b0d489e75513144f25408ecaf058"},
- {file = "aiohttp-3.10.5-cp311-cp311-win32.whl", hash = "sha256:e1ca1ef5ba129718a8fc827b0867f6aa4e893c56eb00003b7367f8a733a9b072"},
- {file = "aiohttp-3.10.5-cp311-cp311-win_amd64.whl", hash = "sha256:349ef8a73a7c5665cca65c88ab24abe75447e28aa3bc4c93ea5093474dfdf0ff"},
- {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:305be5ff2081fa1d283a76113b8df7a14c10d75602a38d9f012935df20731487"},
- {file = "aiohttp-3.10.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3a1c32a19ee6bbde02f1cb189e13a71b321256cc1d431196a9f824050b160d5a"},
- {file = "aiohttp-3.10.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:61645818edd40cc6f455b851277a21bf420ce347baa0b86eaa41d51ef58ba23d"},
- {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c225286f2b13bab5987425558baa5cbdb2bc925b2998038fa028245ef421e75"},
- {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ba01ebc6175e1e6b7275c907a3a36be48a2d487549b656aa90c8a910d9f3178"},
- {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8eaf44ccbc4e35762683078b72bf293f476561d8b68ec8a64f98cf32811c323e"},
- {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1c43eb1ab7cbf411b8e387dc169acb31f0ca0d8c09ba63f9eac67829585b44f"},
- {file = "aiohttp-3.10.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de7a5299827253023c55ea549444e058c0eb496931fa05d693b95140a947cb73"},
- {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4790f0e15f00058f7599dab2b206d3049d7ac464dc2e5eae0e93fa18aee9e7bf"},
- {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:44b324a6b8376a23e6ba25d368726ee3bc281e6ab306db80b5819999c737d820"},
- {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0d277cfb304118079e7044aad0b76685d30ecb86f83a0711fc5fb257ffe832ca"},
- {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:54d9ddea424cd19d3ff6128601a4a4d23d54a421f9b4c0fff740505813739a91"},
- {file = "aiohttp-3.10.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4f1c9866ccf48a6df2b06823e6ae80573529f2af3a0992ec4fe75b1a510df8a6"},
- {file = "aiohttp-3.10.5-cp312-cp312-win32.whl", hash = "sha256:dc4826823121783dccc0871e3f405417ac116055bf184ac04c36f98b75aacd12"},
- {file = "aiohttp-3.10.5-cp312-cp312-win_amd64.whl", hash = "sha256:22c0a23a3b3138a6bf76fc553789cb1a703836da86b0f306b6f0dc1617398abc"},
- {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7f6b639c36734eaa80a6c152a238242bedcee9b953f23bb887e9102976343092"},
- {file = "aiohttp-3.10.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f29930bc2921cef955ba39a3ff87d2c4398a0394ae217f41cb02d5c26c8b1b77"},
- {file = "aiohttp-3.10.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f489a2c9e6455d87eabf907ac0b7d230a9786be43fbe884ad184ddf9e9c1e385"},
- {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:123dd5b16b75b2962d0fff566effb7a065e33cd4538c1692fb31c3bda2bfb972"},
- {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b98e698dc34966e5976e10bbca6d26d6724e6bdea853c7c10162a3235aba6e16"},
- {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3b9162bab7e42f21243effc822652dc5bb5e8ff42a4eb62fe7782bcbcdfacf6"},
- {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1923a5c44061bffd5eebeef58cecf68096e35003907d8201a4d0d6f6e387ccaa"},
- {file = "aiohttp-3.10.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d55f011da0a843c3d3df2c2cf4e537b8070a419f891c930245f05d329c4b0689"},
- {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:afe16a84498441d05e9189a15900640a2d2b5e76cf4efe8cbb088ab4f112ee57"},
- {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8112fb501b1e0567a1251a2fd0747baae60a4ab325a871e975b7bb67e59221f"},
- {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:1e72589da4c90337837fdfe2026ae1952c0f4a6e793adbbfbdd40efed7c63599"},
- {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:4d46c7b4173415d8e583045fbc4daa48b40e31b19ce595b8d92cf639396c15d5"},
- {file = "aiohttp-3.10.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:33e6bc4bab477c772a541f76cd91e11ccb6d2efa2b8d7d7883591dfb523e5987"},
- {file = "aiohttp-3.10.5-cp313-cp313-win32.whl", hash = "sha256:c58c6837a2c2a7cf3133983e64173aec11f9c2cd8e87ec2fdc16ce727bcf1a04"},
- {file = "aiohttp-3.10.5-cp313-cp313-win_amd64.whl", hash = "sha256:38172a70005252b6893088c0f5e8a47d173df7cc2b2bd88650957eb84fcf5022"},
- {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f6f18898ace4bcd2d41a122916475344a87f1dfdec626ecde9ee802a711bc569"},
- {file = "aiohttp-3.10.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5ede29d91a40ba22ac1b922ef510aab871652f6c88ef60b9dcdf773c6d32ad7a"},
- {file = "aiohttp-3.10.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:673f988370f5954df96cc31fd99c7312a3af0a97f09e407399f61583f30da9bc"},
- {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58718e181c56a3c02d25b09d4115eb02aafe1a732ce5714ab70326d9776457c3"},
- {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b38b1570242fbab8d86a84128fb5b5234a2f70c2e32f3070143a6d94bc854cf"},
- {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:074d1bff0163e107e97bd48cad9f928fa5a3eb4b9d33366137ffce08a63e37fe"},
- {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd31f176429cecbc1ba499d4aba31aaccfea488f418d60376b911269d3b883c5"},
- {file = "aiohttp-3.10.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7384d0b87d4635ec38db9263e6a3f1eb609e2e06087f0aa7f63b76833737b471"},
- {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8989f46f3d7ef79585e98fa991e6ded55d2f48ae56d2c9fa5e491a6e4effb589"},
- {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:c83f7a107abb89a227d6c454c613e7606c12a42b9a4ca9c5d7dad25d47c776ae"},
- {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cde98f323d6bf161041e7627a5fd763f9fd829bcfcd089804a5fdce7bb6e1b7d"},
- {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:676f94c5480d8eefd97c0c7e3953315e4d8c2b71f3b49539beb2aa676c58272f"},
- {file = "aiohttp-3.10.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2d21ac12dc943c68135ff858c3a989f2194a709e6e10b4c8977d7fcd67dfd511"},
- {file = "aiohttp-3.10.5-cp38-cp38-win32.whl", hash = "sha256:17e997105bd1a260850272bfb50e2a328e029c941c2708170d9d978d5a30ad9a"},
- {file = "aiohttp-3.10.5-cp38-cp38-win_amd64.whl", hash = "sha256:1c19de68896747a2aa6257ae4cf6ef59d73917a36a35ee9d0a6f48cff0f94db8"},
- {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7e2fe37ac654032db1f3499fe56e77190282534810e2a8e833141a021faaab0e"},
- {file = "aiohttp-3.10.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5bf3ead3cb66ab990ee2561373b009db5bc0e857549b6c9ba84b20bc462e172"},
- {file = "aiohttp-3.10.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1b2c16a919d936ca87a3c5f0e43af12a89a3ce7ccbce59a2d6784caba945b68b"},
- {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad146dae5977c4dd435eb31373b3fe9b0b1bf26858c6fc452bf6af394067e10b"},
- {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c5c6fa16412b35999320f5c9690c0f554392dc222c04e559217e0f9ae244b92"},
- {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:95c4dc6f61d610bc0ee1edc6f29d993f10febfe5b76bb470b486d90bbece6b22"},
- {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da452c2c322e9ce0cfef392e469a26d63d42860f829026a63374fde6b5c5876f"},
- {file = "aiohttp-3.10.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:898715cf566ec2869d5cb4d5fb4be408964704c46c96b4be267442d265390f32"},
- {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:391cc3a9c1527e424c6865e087897e766a917f15dddb360174a70467572ac6ce"},
- {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:380f926b51b92d02a34119d072f178d80bbda334d1a7e10fa22d467a66e494db"},
- {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce91db90dbf37bb6fa0997f26574107e1b9d5ff939315247b7e615baa8ec313b"},
- {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9093a81e18c45227eebe4c16124ebf3e0d893830c6aca7cc310bfca8fe59d857"},
- {file = "aiohttp-3.10.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ee40b40aa753d844162dcc80d0fe256b87cba48ca0054f64e68000453caead11"},
- {file = "aiohttp-3.10.5-cp39-cp39-win32.whl", hash = "sha256:03f2645adbe17f274444953bdea69f8327e9d278d961d85657cb0d06864814c1"},
- {file = "aiohttp-3.10.5-cp39-cp39-win_amd64.whl", hash = "sha256:d17920f18e6ee090bdd3d0bfffd769d9f2cb4c8ffde3eb203777a3895c128862"},
- {file = "aiohttp-3.10.5.tar.gz", hash = "sha256:f071854b47d39591ce9a17981c46790acb30518e2f83dfca8db2dfa091178691"},
-]
-
-[package.dependencies]
-aiohappyeyeballs = ">=2.3.0"
-aiosignal = ">=1.1.2"
-attrs = ">=17.3.0"
-frozenlist = ">=1.1.1"
-multidict = ">=4.5,<7.0"
-yarl = ">=1.0,<2.0"
-
-[package.extras]
-speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"]
-
-[[package]]
-name = "aiosignal"
-version = "1.3.1"
-description = "aiosignal: a list of registered asynchronous callbacks"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"},
- {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"},
-]
-
-[package.dependencies]
-frozenlist = ">=1.1.0"
-
[[package]]
name = "amqp"
version = "5.2.0"
@@ -1249,7 +1113,6 @@ python-versions = "*"
files = [
{file = "django-sendgrid-v5-1.2.3.tar.gz", hash = "sha256:3887aafbb10d5b808efc2c1031dcd96fd357d542eb5affe38fef07cc0f3cfae9"},
{file = "django_sendgrid_v5-1.2.3-py2.py3-none-any.whl", hash = "sha256:2d2fa8a085d21c95e5f97fc60b61f199ccc57a27df8da90cd3f29a5702346dc6"},
- {file = "django_sendgrid_v5-1.2.3-py3-none-any.whl", hash = "sha256:f6a44ee37c1c3cc7d683a43c55ead530417be1849a8a41bde02b158009559d9d"},
]
[package.dependencies]
@@ -1694,92 +1557,6 @@ Werkzeug = ">=3.0.0"
async = ["asgiref (>=3.2)"]
dotenv = ["python-dotenv"]
-[[package]]
-name = "frozenlist"
-version = "1.4.1"
-description = "A list-like structure which implements collections.abc.MutableSequence"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"},
- {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"},
- {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"},
- {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"},
- {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"},
- {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"},
- {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"},
- {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"},
- {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"},
- {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"},
- {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"},
- {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"},
- {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"},
- {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"},
- {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"},
- {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"},
- {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"},
- {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"},
- {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"},
- {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"},
- {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"},
- {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"},
- {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"},
- {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"},
- {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"},
- {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"},
- {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"},
- {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"},
- {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"},
- {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"},
- {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"},
- {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"},
- {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"},
- {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"},
- {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"},
- {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"},
- {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"},
- {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"},
- {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"},
- {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"},
- {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"},
- {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"},
- {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"},
- {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"},
- {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"},
- {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"},
- {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"},
- {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"},
- {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"},
- {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"},
- {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"},
- {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"},
- {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"},
- {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"},
- {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"},
- {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"},
- {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"},
- {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"},
- {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"},
- {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"},
- {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"},
- {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"},
- {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"},
- {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"},
- {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"},
- {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"},
- {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"},
- {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"},
- {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"},
- {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"},
- {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"},
- {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"},
- {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"},
- {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"},
- {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"},
- {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"},
- {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"},
-]
-
[[package]]
name = "furl"
version = "2.1.3"
@@ -1795,22 +1572,6 @@ files = [
orderedmultidict = ">=1.0.1"
six = ">=1.8.0"
-[[package]]
-name = "geoip2"
-version = "4.7.0"
-description = "MaxMind GeoIP2 API"
-optional = false
-python-versions = ">=3.7"
-files = [
- {file = "geoip2-4.7.0-py2.py3-none-any.whl", hash = "sha256:078fcd4cce26ea029b1e3252a0f0ec20a1f42e7ab0f19b7be3864f20f4db2b51"},
- {file = "geoip2-4.7.0.tar.gz", hash = "sha256:3bdde4994f6bc917eafab5b51e772d737b2ae00037a5b85001fb06dc68f779df"},
-]
-
-[package.dependencies]
-aiohttp = ">=3.6.2,<4.0.0"
-maxminddb = ">=2.3.0,<3.0.0"
-requests = ">=2.24.0,<3.0.0"
-
[[package]]
name = "gevent"
version = "24.2.1"
@@ -2450,21 +2211,6 @@ files = [
[package.dependencies]
referencing = ">=0.31.0"
-[[package]]
-name = "keen"
-version = "0.7.0"
-description = "Python Client for Keen IO"
-optional = false
-python-versions = "*"
-files = [
- {file = "keen-0.7.0.tar.gz", hash = "sha256:141fad22abd52dbe9e84a21866a7affcbc8b46f04885a5598618c5992bd6667c"},
-]
-
-[package.dependencies]
-pycryptodome = ">=3.4"
-requests = ">=2.5,<3.0"
-six = ">=1.10,<2.0"
-
[[package]]
name = "kombu"
version = "5.3.5"
@@ -2735,84 +2481,6 @@ files = [
[package.dependencies]
traitlets = "*"
-[[package]]
-name = "maxminddb"
-version = "2.6.2"
-description = "Reader for the MaxMind DB format"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "maxminddb-2.6.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7cfdf5c29a2739610700b9fea7f8d68ce81dcf30bb8016f1a1853ef889a2624b"},
- {file = "maxminddb-2.6.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:05e873eb82281cef6e787bd40bd1d58b2e496a21b3689346f0d0420988b3cbb1"},
- {file = "maxminddb-2.6.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2b85ffc9fb2e192321c2f0b34d0b291b8e82de6e51a6ec7534645663678e835"},
- {file = "maxminddb-2.6.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28a2eaf9769262c05c486e777016771f3367c843b053c43cd5fde1108755753d"},
- {file = "maxminddb-2.6.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:96a1fa38322bce1d587bb6ce39a0e6ca4c1b824f48fbc5739a5ec507f63aa889"},
- {file = "maxminddb-2.6.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:eb534333f5fd7180e35c0207b3d95d621e4b9be3b8c1709995d0feb6c752b6f4"},
- {file = "maxminddb-2.6.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0b281c0eec3601dde1f169a1c04e2615751c66368141aded9f03131fe635450b"},
- {file = "maxminddb-2.6.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a771df92e599ad867c16ae4acb08cc3763c9d1028f4ca772c0571da97f7f86d2"},
- {file = "maxminddb-2.6.2-cp310-cp310-win32.whl", hash = "sha256:f412a54f87ef9083911c334267188d3d1b14f2591eac94b94ca32528f21d5f25"},
- {file = "maxminddb-2.6.2-cp310-cp310-win_amd64.whl", hash = "sha256:7e5a90a1cb0c7fd6226aa44e18a87b26fa85b6eebae36d529d7582f93e8dfbd1"},
- {file = "maxminddb-2.6.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38941a38278491bf95e5ca544969782c7ab33326802f6a93816867289c3f6401"},
- {file = "maxminddb-2.6.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eef1c26210155c7b94c4ca28fef65eb44a5ca1584427b1fbdeec1cd3c81e25c5"},
- {file = "maxminddb-2.6.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4d9cd7ddd02ee123a44d0d7821166d31540ea85352deb06b29d55e802f32781"},
- {file = "maxminddb-2.6.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8101291e5b92bd272a050c25822a5e30860d453dde16b4fffed9d751f0483a82"},
- {file = "maxminddb-2.6.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5c7c520d06d335b288d06a00b786cea9b7e023bd588efb1a6ef485e94ccc7244"},
- {file = "maxminddb-2.6.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:58bfd2c55c96aaaa7c4996c704edabfb1bd369dfc1592cedf8957a24062178b1"},
- {file = "maxminddb-2.6.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:886af3ba4aa26214ff39214565f53152b62a5abdb6ef9e00c76c194dbfd79231"},
- {file = "maxminddb-2.6.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:93691c8b4b4c448babb37bedc6f3d51523a3f06ab11bdd171da7ffc4005a7897"},
- {file = "maxminddb-2.6.2-cp311-cp311-win32.whl", hash = "sha256:e9013076deca5d136c260510cd05e82ec2b4ddb9476d63e2180a13ddfd305c3e"},
- {file = "maxminddb-2.6.2-cp311-cp311-win_amd64.whl", hash = "sha256:47170ec0e1e76787cc5882301c487f495d67f3146318f2f4e2adc281951a96ef"},
- {file = "maxminddb-2.6.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:eacd65e38bdf4efdf42bbc15cfa734b09eb818ecfef76b7b36e64be382be4c83"},
- {file = "maxminddb-2.6.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:20662878bc9514e90b0b4c4eb1a76622ecc7504d012e76bad9cdb7372fc0ef96"},
- {file = "maxminddb-2.6.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7607e45f7eca991fa34d57c03a791a1dfbe774ddd9250d0f35cdcc6f17142a15"},
- {file = "maxminddb-2.6.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0970b661c4fac6624b9128057ed5fe35a2d95aa60359272289cd4c7207c9a6d"},
- {file = "maxminddb-2.6.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12207f0becf3f2bf14e7a4bf86efcaa6e90d665a918915ae228c4e77792d7151"},
- {file = "maxminddb-2.6.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:826a1858b93b193df7fa71e3caca65c3051db20545df0020444f55c02e8ed2c3"},
- {file = "maxminddb-2.6.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e63649a82926f1d93acdd3df5f7be66dc9473653350afe73f365bb25e5b34368"},
- {file = "maxminddb-2.6.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ebf9fdf8a8e55862aabb8b2c34a4af31a8a5b686007288eeb561fa20ef348378"},
- {file = "maxminddb-2.6.2-cp312-cp312-win32.whl", hash = "sha256:2aaefb62f881151960bb67e5aeb302c159a32bd2d623cf72dad688bda1020869"},
- {file = "maxminddb-2.6.2-cp312-cp312-win_amd64.whl", hash = "sha256:78c3aa70c62be68ace23f819e7f23258545f2bfbd92cd6c33ee398cd261f6b84"},
- {file = "maxminddb-2.6.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e1e40449bd278fdca1f351df442f391e72fd3d98b054ccac1672f27d70210642"},
- {file = "maxminddb-2.6.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:80d7f943f6b8bc437eaae5da778a83d8f38e4b7463756fdee04833e1be0bdea2"},
- {file = "maxminddb-2.6.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:058ca89789bc1770fe58d02a88272ca91dabeef9f3fe0011fe506484355f1804"},
- {file = "maxminddb-2.6.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80d20683afe01b4d41bad1c1829f87ab12f3d19c68ec230f83318a2fd13871a7"},
- {file = "maxminddb-2.6.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd90c3798e6c347d48d5d9a9c95dc678b52a5a965f1fb72152067fdf52b994da"},
- {file = "maxminddb-2.6.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:add1e55620033516c5f0734b1d9d03848859192d9f3825aabe720dfa8a783958"},
- {file = "maxminddb-2.6.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:8cb992da535264177b380e7b81943c884d57dcbfad6b3335d7f633967144746e"},
- {file = "maxminddb-2.6.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:86048ff328793599e584bcc2fc8278c2b7c5d3a4005c70403613449ec93817ef"},
- {file = "maxminddb-2.6.2-cp38-cp38-win32.whl", hash = "sha256:f2e326a99eaa924ff2fb09d6e44127983a43016228e7780888f15e9ba171d7b3"},
- {file = "maxminddb-2.6.2-cp38-cp38-win_amd64.whl", hash = "sha256:9a2671e8f4161130803cf226cd9cb8b93ec5c4b2493f83a902986177052d95d3"},
- {file = "maxminddb-2.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a50bc348c699d8f6a5f0aa35e5096515d642ca2f38b944bd71c3dedda3d3588"},
- {file = "maxminddb-2.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc9f1203eb2b139252aa08965960fe13c36cc8b80b536490b94b05c31aa1fca9"},
- {file = "maxminddb-2.6.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ccca5327cb4e706f669456ec6d556badfa92c0fdacd57a15076f3cdc061560"},
- {file = "maxminddb-2.6.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3987e103396e925edebbef4877e94515822f63b3b436027a0b164b500622fccd"},
- {file = "maxminddb-2.6.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b31ecf3083b78c77624783bfdf6177e6ac73ae14684ef182855eb5569bc78e7c"},
- {file = "maxminddb-2.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:cd4530b9604d66cfa5e37eb94c671e54feff87769f8ba7fa997cce959e0cb241"},
- {file = "maxminddb-2.6.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ecce0b2d125691e2311f94dbd564c2d61c36c5033d082919431a21e6c694fa3f"},
- {file = "maxminddb-2.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:34b6e8d667d724f60d52635f3d959f793ab4e5d57d78b27fe66f02752d8c6b08"},
- {file = "maxminddb-2.6.2-cp39-cp39-win32.whl", hash = "sha256:d15414d251513748cb646d284a2829a5f4c69d8c90963a6e6da53a1a6d0accf7"},
- {file = "maxminddb-2.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c1220838ba9b0bcdaa0c5846f9da70a2304df2ac255fe518370f8faf8c18316"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:39eab93ddd75fd02f8d5ad6b1bd3f8d894828d91d6f6c1a96bb9e87c34e94aaa"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:aa8cb54b01a29a23a0ea6659fbb38deec6f35453588c5decdbf8669feb53b624"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c096dfd20926c4de7d7fd5b5e75c756eddd4bdac5ab7aafd4bb67d000b13743"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dc2b511c7255f7cbbb01e8ba01ba82e62e9c1213e382d36f9d9b0ee45c2f6b2"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80d7495565d30260c630afbe74d61522b13dd31ed05b8916003ec5b127109a12"},
- {file = "maxminddb-2.6.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9dccd7a438f81e3df84dfc31a75af4c8d29adefb6082329385bfde604c9ea01b"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b0a3b9cab1a94cc633df3da85c6567f0188f10165e3338ec9a6c421de9fe53b9"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fb38aa94e76a87785b654c035f9f3ee39b74a98e9beea9a10b1aa62abdcc4cbd"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9e9e893f7c0fa44cfdd5ab819a07d93f63ee398c28b792cedd50b94dcfea7c0"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28af9470f28fce2ccb945478235f53fb52d98a505653b1bf4028e34df6149a06"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a74b60cdc61a69b967ec44201c6259fbc48ef2eab2e885fbdc50ec1accaad545"},
- {file = "maxminddb-2.6.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:485c0778f6801e1437c2efd6e3b964a7ae71c8819f063e0b5460c3267d977040"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0b480a31589750da4e36d1ba04b77ee3ac3853ac7b94d63f337b9d4d0403043f"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:85fc9406f42c1311ce8ea9f2c820db5d7ac687a39ab5d932708dc783607378ef"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fd1a612110ff182a559d8010e7615e5d05ef9d2c234b5f7de124ee8fdf1ecb9"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cd7f525eb2331cf05181c5ba562cc3edec3de4b41dbb18a5fee9ad24884b499"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d32266792b349f5507b0369d3277d45318fcd346a16dcc98b484aadc208e4d74"},
- {file = "maxminddb-2.6.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5662386db91872d5505fde9e7bb0b9530b6aab7a6f3ece7df59a2b43a7b45d17"},
- {file = "maxminddb-2.6.2.tar.gz", hash = "sha256:7d842d32e2620abc894b7d79a5a1007a69df2c6cf279a06b94c9c3913f66f264"},
-]
-
[[package]]
name = "mccabe"
version = "0.7.0"
@@ -2929,107 +2597,6 @@ files = [
{file = "msgpack-1.1.0.tar.gz", hash = "sha256:dd432ccc2c72b914e4cb77afce64aab761c1137cc698be3984eee260bcb2896e"},
]
-[[package]]
-name = "multidict"
-version = "6.1.0"
-description = "multidict implementation"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"},
- {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"},
- {file = "multidict-6.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a114d03b938376557927ab23f1e950827c3b893ccb94b62fd95d430fd0e5cf53"},
- {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1c416351ee6271b2f49b56ad7f308072f6f44b37118d69c2cad94f3fa8a40d5"},
- {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6b5d83030255983181005e6cfbac1617ce9746b219bc2aad52201ad121226581"},
- {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3e97b5e938051226dc025ec80980c285b053ffb1e25a3db2a3aa3bc046bf7f56"},
- {file = "multidict-6.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d618649d4e70ac6efcbba75be98b26ef5078faad23592f9b51ca492953012429"},
- {file = "multidict-6.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10524ebd769727ac77ef2278390fb0068d83f3acb7773792a5080f2b0abf7748"},
- {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ff3827aef427c89a25cc96ded1759271a93603aba9fb977a6d264648ebf989db"},
- {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:06809f4f0f7ab7ea2cabf9caca7d79c22c0758b58a71f9d32943ae13c7ace056"},
- {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f179dee3b863ab1c59580ff60f9d99f632f34ccb38bf67a33ec6b3ecadd0fd76"},
- {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:aaed8b0562be4a0876ee3b6946f6869b7bcdb571a5d1496683505944e268b160"},
- {file = "multidict-6.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c8b88a2ccf5493b6c8da9076fb151ba106960a2df90c2633f342f120751a9e7"},
- {file = "multidict-6.1.0-cp310-cp310-win32.whl", hash = "sha256:4a9cb68166a34117d6646c0023c7b759bf197bee5ad4272f420a0141d7eb03a0"},
- {file = "multidict-6.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:20b9b5fbe0b88d0bdef2012ef7dee867f874b72528cf1d08f1d59b0e3850129d"},
- {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:3efe2c2cb5763f2f1b275ad2bf7a287d3f7ebbef35648a9726e3b69284a4f3d6"},
- {file = "multidict-6.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c7053d3b0353a8b9de430a4f4b4268ac9a4fb3481af37dfe49825bf45ca24156"},
- {file = "multidict-6.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27e5fc84ccef8dfaabb09d82b7d179c7cf1a3fbc8a966f8274fcb4ab2eb4cadb"},
- {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e2b90b43e696f25c62656389d32236e049568b39320e2735d51f08fd362761b"},
- {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d83a047959d38a7ff552ff94be767b7fd79b831ad1cd9920662db05fec24fe72"},
- {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1a9dd711d0877a1ece3d2e4fea11a8e75741ca21954c919406b44e7cf971304"},
- {file = "multidict-6.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec2abea24d98246b94913b76a125e855eb5c434f7c46546046372fe60f666351"},
- {file = "multidict-6.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4867cafcbc6585e4b678876c489b9273b13e9fff9f6d6d66add5e15d11d926cb"},
- {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5b48204e8d955c47c55b72779802b219a39acc3ee3d0116d5080c388970b76e3"},
- {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8fff389528cad1618fb4b26b95550327495462cd745d879a8c7c2115248e399"},
- {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a7a9541cd308eed5e30318430a9c74d2132e9a8cb46b901326272d780bf2d423"},
- {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:da1758c76f50c39a2efd5e9859ce7d776317eb1dd34317c8152ac9251fc574a3"},
- {file = "multidict-6.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c943a53e9186688b45b323602298ab727d8865d8c9ee0b17f8d62d14b56f0753"},
- {file = "multidict-6.1.0-cp311-cp311-win32.whl", hash = "sha256:90f8717cb649eea3504091e640a1b8568faad18bd4b9fcd692853a04475a4b80"},
- {file = "multidict-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:82176036e65644a6cc5bd619f65f6f19781e8ec2e5330f51aa9ada7504cc1926"},
- {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b04772ed465fa3cc947db808fa306d79b43e896beb677a56fb2347ca1a49c1fa"},
- {file = "multidict-6.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6180c0ae073bddeb5a97a38c03f30c233e0a4d39cd86166251617d1bbd0af436"},
- {file = "multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761"},
- {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50b3a2710631848991d0bf7de077502e8994c804bb805aeb2925a981de58ec2e"},
- {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b58c621844d55e71c1b7f7c498ce5aa6985d743a1a59034c57a905b3f153c1ef"},
- {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55b6d90641869892caa9ca42ff913f7ff1c5ece06474fbd32fb2cf6834726c95"},
- {file = "multidict-6.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b820514bfc0b98a30e3d85462084779900347e4d49267f747ff54060cc33925"},
- {file = "multidict-6.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10a9b09aba0c5b48c53761b7c720aaaf7cf236d5fe394cd399c7ba662d5f9966"},
- {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1e16bf3e5fc9f44632affb159d30a437bfe286ce9e02754759be5536b169b305"},
- {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:76f364861c3bfc98cbbcbd402d83454ed9e01a5224bb3a28bf70002a230f73e2"},
- {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:820c661588bd01a0aa62a1283f20d2be4281b086f80dad9e955e690c75fb54a2"},
- {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:0e5f362e895bc5b9e67fe6e4ded2492d8124bdf817827f33c5b46c2fe3ffaca6"},
- {file = "multidict-6.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ec660d19bbc671e3a6443325f07263be452c453ac9e512f5eb935e7d4ac28b3"},
- {file = "multidict-6.1.0-cp312-cp312-win32.whl", hash = "sha256:58130ecf8f7b8112cdb841486404f1282b9c86ccb30d3519faf301b2e5659133"},
- {file = "multidict-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:188215fc0aafb8e03341995e7c4797860181562380f81ed0a87ff455b70bf1f1"},
- {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d569388c381b24671589335a3be6e1d45546c2988c2ebe30fdcada8457a31008"},
- {file = "multidict-6.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:052e10d2d37810b99cc170b785945421141bf7bb7d2f8799d431e7db229c385f"},
- {file = "multidict-6.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f90c822a402cb865e396a504f9fc8173ef34212a342d92e362ca498cad308e28"},
- {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b225d95519a5bf73860323e633a664b0d85ad3d5bede6d30d95b35d4dfe8805b"},
- {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:23bfd518810af7de1116313ebd9092cb9aa629beb12f6ed631ad53356ed6b86c"},
- {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c09fcfdccdd0b57867577b719c69e347a436b86cd83747f179dbf0cc0d4c1f3"},
- {file = "multidict-6.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf6bea52ec97e95560af5ae576bdac3aa3aae0b6758c6efa115236d9e07dae44"},
- {file = "multidict-6.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57feec87371dbb3520da6192213c7d6fc892d5589a93db548331954de8248fd2"},
- {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0c3f390dc53279cbc8ba976e5f8035eab997829066756d811616b652b00a23a3"},
- {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:59bfeae4b25ec05b34f1956eaa1cb38032282cd4dfabc5056d0a1ec4d696d3aa"},
- {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b2f59caeaf7632cc633b5cf6fc449372b83bbdf0da4ae04d5be36118e46cc0aa"},
- {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:37bb93b2178e02b7b618893990941900fd25b6b9ac0fa49931a40aecdf083fe4"},
- {file = "multidict-6.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4e9f48f58c2c523d5a06faea47866cd35b32655c46b443f163d08c6d0ddb17d6"},
- {file = "multidict-6.1.0-cp313-cp313-win32.whl", hash = "sha256:3a37ffb35399029b45c6cc33640a92bef403c9fd388acce75cdc88f58bd19a81"},
- {file = "multidict-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e9aa71e15d9d9beaad2c6b9319edcdc0a49a43ef5c0a4c8265ca9ee7d6c67774"},
- {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:db7457bac39421addd0c8449933ac32d8042aae84a14911a757ae6ca3eef1392"},
- {file = "multidict-6.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d094ddec350a2fb899fec68d8353c78233debde9b7d8b4beeafa70825f1c281a"},
- {file = "multidict-6.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5845c1fd4866bb5dd3125d89b90e57ed3138241540897de748cdf19de8a2fca2"},
- {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9079dfc6a70abe341f521f78405b8949f96db48da98aeb43f9907f342f627cdc"},
- {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3914f5aaa0f36d5d60e8ece6a308ee1c9784cd75ec8151062614657a114c4478"},
- {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c08be4f460903e5a9d0f76818db3250f12e9c344e79314d1d570fc69d7f4eae4"},
- {file = "multidict-6.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d093be959277cb7dee84b801eb1af388b6ad3ca6a6b6bf1ed7585895789d027d"},
- {file = "multidict-6.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3702ea6872c5a2a4eeefa6ffd36b042e9773f05b1f37ae3ef7264b1163c2dcf6"},
- {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2090f6a85cafc5b2db085124d752757c9d251548cedabe9bd31afe6363e0aff2"},
- {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:f67f217af4b1ff66c68a87318012de788dd95fcfeb24cc889011f4e1c7454dfd"},
- {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:189f652a87e876098bbc67b4da1049afb5f5dfbaa310dd67c594b01c10388db6"},
- {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:6bb5992037f7a9eff7991ebe4273ea7f51f1c1c511e6a2ce511d0e7bdb754492"},
- {file = "multidict-6.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f4c2b9e770c4e393876e35a7046879d195cd123b4f116d299d442b335bcd"},
- {file = "multidict-6.1.0-cp38-cp38-win32.whl", hash = "sha256:e27bbb6d14416713a8bd7aaa1313c0fc8d44ee48d74497a0ff4c3a1b6ccb5167"},
- {file = "multidict-6.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:22f3105d4fb15c8f57ff3959a58fcab6ce36814486500cd7485651230ad4d4ef"},
- {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4e18b656c5e844539d506a0a06432274d7bd52a7487e6828c63a63d69185626c"},
- {file = "multidict-6.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a185f876e69897a6f3325c3f19f26a297fa058c5e456bfcff8015e9a27e83ae1"},
- {file = "multidict-6.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab7c4ceb38d91570a650dba194e1ca87c2b543488fe9309b4212694174fd539c"},
- {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e617fb6b0b6953fffd762669610c1c4ffd05632c138d61ac7e14ad187870669c"},
- {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16e5f4bf4e603eb1fdd5d8180f1a25f30056f22e55ce51fb3d6ad4ab29f7d96f"},
- {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c035da3f544b1882bac24115f3e2e8760f10a0107614fc9839fd232200b875"},
- {file = "multidict-6.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:957cf8e4b6e123a9eea554fa7ebc85674674b713551de587eb318a2df3e00255"},
- {file = "multidict-6.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:483a6aea59cb89904e1ceabd2b47368b5600fb7de78a6e4a2c2987b2d256cf30"},
- {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:87701f25a2352e5bf7454caa64757642734da9f6b11384c1f9d1a8e699758057"},
- {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:682b987361e5fd7a139ed565e30d81fd81e9629acc7d925a205366877d8c8657"},
- {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce2186a7df133a9c895dea3331ddc5ddad42cdd0d1ea2f0a51e5d161e4762f28"},
- {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9f636b730f7e8cb19feb87094949ba54ee5357440b9658b2a32a5ce4bce53972"},
- {file = "multidict-6.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:73eae06aa53af2ea5270cc066dcaf02cc60d2994bbb2c4ef5764949257d10f43"},
- {file = "multidict-6.1.0-cp39-cp39-win32.whl", hash = "sha256:1ca0083e80e791cffc6efce7660ad24af66c8d4079d2a750b29001b53ff59ada"},
- {file = "multidict-6.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa466da5b15ccea564bdab9c89175c762bc12825f4659c11227f515cee76fa4a"},
- {file = "multidict-6.1.0-py3-none-any.whl", hash = "sha256:48e171e52d1c4d33888e529b999e5900356b9ae588c2f09a52dcefb158b27506"},
- {file = "multidict-6.1.0.tar.gz", hash = "sha256:22ae2ebf9b0c69d206c003e2f6a914ea33f0a932d4aa16f236afc049d9958f4a"},
-]
-
[[package]]
name = "nameparser"
version = "1.1.3"
@@ -3468,47 +3035,6 @@ files = [
{file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"},
]
-[[package]]
-name = "pycryptodome"
-version = "3.20.0"
-description = "Cryptographic library for Python"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-files = [
- {file = "pycryptodome-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690"},
- {file = "pycryptodome-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f"},
- {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091"},
- {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4"},
- {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc"},
- {file = "pycryptodome-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818"},
- {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044"},
- {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a"},
- {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2"},
- {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c"},
- {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25"},
- {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128"},
- {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c"},
- {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4"},
- {file = "pycryptodome-3.20.0-cp35-abi3-win32.whl", hash = "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72"},
- {file = "pycryptodome-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9"},
- {file = "pycryptodome-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a"},
- {file = "pycryptodome-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e"},
- {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04"},
- {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3"},
- {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea"},
- {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b"},
- {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6"},
- {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab"},
- {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5"},
- {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e"},
- {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"},
-]
-
[[package]]
name = "pydevd"
version = "3.0.3"
@@ -4894,111 +4420,6 @@ markupsafe = "*"
[package.extras]
email = ["email-validator"]
-[[package]]
-name = "yarl"
-version = "1.11.1"
-description = "Yet another URL library"
-optional = false
-python-versions = ">=3.8"
-files = [
- {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:400cd42185f92de559d29eeb529e71d80dfbd2f45c36844914a4a34297ca6f00"},
- {file = "yarl-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8258c86f47e080a258993eed877d579c71da7bda26af86ce6c2d2d072c11320d"},
- {file = "yarl-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2164cd9725092761fed26f299e3f276bb4b537ca58e6ff6b252eae9631b5c96e"},
- {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08ea567c16f140af8ddc7cb58e27e9138a1386e3e6e53982abaa6f2377b38cc"},
- {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:768ecc550096b028754ea28bf90fde071c379c62c43afa574edc6f33ee5daaec"},
- {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2909fa3a7d249ef64eeb2faa04b7957e34fefb6ec9966506312349ed8a7e77bf"},
- {file = "yarl-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01a8697ec24f17c349c4f655763c4db70eebc56a5f82995e5e26e837c6eb0e49"},
- {file = "yarl-1.11.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e286580b6511aac7c3268a78cdb861ec739d3e5a2a53b4809faef6b49778eaff"},
- {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4179522dc0305c3fc9782549175c8e8849252fefeb077c92a73889ccbcd508ad"},
- {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:27fcb271a41b746bd0e2a92182df507e1c204759f460ff784ca614e12dd85145"},
- {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:f61db3b7e870914dbd9434b560075e0366771eecbe6d2b5561f5bc7485f39efd"},
- {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:c92261eb2ad367629dc437536463dc934030c9e7caca861cc51990fe6c565f26"},
- {file = "yarl-1.11.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d95b52fbef190ca87d8c42f49e314eace4fc52070f3dfa5f87a6594b0c1c6e46"},
- {file = "yarl-1.11.1-cp310-cp310-win32.whl", hash = "sha256:489fa8bde4f1244ad6c5f6d11bb33e09cf0d1d0367edb197619c3e3fc06f3d91"},
- {file = "yarl-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:476e20c433b356e16e9a141449f25161e6b69984fb4cdbd7cd4bd54c17844998"},
- {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:946eedc12895873891aaceb39bceb484b4977f70373e0122da483f6c38faaa68"},
- {file = "yarl-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:21a7c12321436b066c11ec19c7e3cb9aec18884fe0d5b25d03d756a9e654edfe"},
- {file = "yarl-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c35f493b867912f6fda721a59cc7c4766d382040bdf1ddaeeaa7fa4d072f4675"},
- {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25861303e0be76b60fddc1250ec5986c42f0a5c0c50ff57cc30b1be199c00e63"},
- {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4b53f73077e839b3f89c992223f15b1d2ab314bdbdf502afdc7bb18e95eae27"},
- {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:327c724b01b8641a1bf1ab3b232fb638706e50f76c0b5bf16051ab65c868fac5"},
- {file = "yarl-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4307d9a3417eea87715c9736d050c83e8c1904e9b7aada6ce61b46361b733d92"},
- {file = "yarl-1.11.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:48a28bed68ab8fb7e380775f0029a079f08a17799cb3387a65d14ace16c12e2b"},
- {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:067b961853c8e62725ff2893226fef3d0da060656a9827f3f520fb1d19b2b68a"},
- {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8215f6f21394d1f46e222abeb06316e77ef328d628f593502d8fc2a9117bde83"},
- {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:498442e3af2a860a663baa14fbf23fb04b0dd758039c0e7c8f91cb9279799bff"},
- {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:69721b8effdb588cb055cc22f7c5105ca6fdaa5aeb3ea09021d517882c4a904c"},
- {file = "yarl-1.11.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e969fa4c1e0b1a391f3fcbcb9ec31e84440253325b534519be0d28f4b6b533e"},
- {file = "yarl-1.11.1-cp311-cp311-win32.whl", hash = "sha256:7d51324a04fc4b0e097ff8a153e9276c2593106a811704025bbc1d6916f45ca6"},
- {file = "yarl-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:15061ce6584ece023457fb8b7a7a69ec40bf7114d781a8c4f5dcd68e28b5c53b"},
- {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a4264515f9117be204935cd230fb2a052dd3792789cc94c101c535d349b3dab0"},
- {file = "yarl-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f41fa79114a1d2eddb5eea7b912d6160508f57440bd302ce96eaa384914cd265"},
- {file = "yarl-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:02da8759b47d964f9173c8675710720b468aa1c1693be0c9c64abb9d8d9a4867"},
- {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9361628f28f48dcf8b2f528420d4d68102f593f9c2e592bfc842f5fb337e44fd"},
- {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b91044952da03b6f95fdba398d7993dd983b64d3c31c358a4c89e3c19b6f7aef"},
- {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:74db2ef03b442276d25951749a803ddb6e270d02dda1d1c556f6ae595a0d76a8"},
- {file = "yarl-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e975a2211952a8a083d1b9d9ba26472981ae338e720b419eb50535de3c02870"},
- {file = "yarl-1.11.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aef97ba1dd2138112890ef848e17d8526fe80b21f743b4ee65947ea184f07a2"},
- {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7915ea49b0c113641dc4d9338efa9bd66b6a9a485ffe75b9907e8573ca94b84"},
- {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:504cf0d4c5e4579a51261d6091267f9fd997ef58558c4ffa7a3e1460bd2336fa"},
- {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3de5292f9f0ee285e6bd168b2a77b2a00d74cbcfa420ed078456d3023d2f6dff"},
- {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34e1e30f1774fa35d37202bbeae62423e9a79d78d0874e5556a593479fdf239"},
- {file = "yarl-1.11.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:66b63c504d2ca43bf7221a1f72fbe981ff56ecb39004c70a94485d13e37ebf45"},
- {file = "yarl-1.11.1-cp312-cp312-win32.whl", hash = "sha256:a28b70c9e2213de425d9cba5ab2e7f7a1c8ca23a99c4b5159bf77b9c31251447"},
- {file = "yarl-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:17b5a386d0d36fb828e2fb3ef08c8829c1ebf977eef88e5367d1c8c94b454639"},
- {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:1fa2e7a406fbd45b61b4433e3aa254a2c3e14c4b3186f6e952d08a730807fa0c"},
- {file = "yarl-1.11.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:750f656832d7d3cb0c76be137ee79405cc17e792f31e0a01eee390e383b2936e"},
- {file = "yarl-1.11.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0b8486f322d8f6a38539136a22c55f94d269addb24db5cb6f61adc61eabc9d93"},
- {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fce4da3703ee6048ad4138fe74619c50874afe98b1ad87b2698ef95bf92c96d"},
- {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed653638ef669e0efc6fe2acb792275cb419bf9cb5c5049399f3556995f23c7"},
- {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18ac56c9dd70941ecad42b5a906820824ca72ff84ad6fa18db33c2537ae2e089"},
- {file = "yarl-1.11.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:688654f8507464745ab563b041d1fb7dab5d9912ca6b06e61d1c4708366832f5"},
- {file = "yarl-1.11.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4973eac1e2ff63cf187073cd4e1f1148dcd119314ab79b88e1b3fad74a18c9d5"},
- {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:964a428132227edff96d6f3cf261573cb0f1a60c9a764ce28cda9525f18f7786"},
- {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6d23754b9939cbab02c63434776df1170e43b09c6a517585c7ce2b3d449b7318"},
- {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c2dc4250fe94d8cd864d66018f8344d4af50e3758e9d725e94fecfa27588ff82"},
- {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09696438cb43ea6f9492ef237761b043f9179f455f405279e609f2bc9100212a"},
- {file = "yarl-1.11.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:999bfee0a5b7385a0af5ffb606393509cfde70ecca4f01c36985be6d33e336da"},
- {file = "yarl-1.11.1-cp313-cp313-win32.whl", hash = "sha256:ce928c9c6409c79e10f39604a7e214b3cb69552952fbda8d836c052832e6a979"},
- {file = "yarl-1.11.1-cp313-cp313-win_amd64.whl", hash = "sha256:501c503eed2bb306638ccb60c174f856cc3246c861829ff40eaa80e2f0330367"},
- {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:dae7bd0daeb33aa3e79e72877d3d51052e8b19c9025ecf0374f542ea8ec120e4"},
- {file = "yarl-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3ff6b1617aa39279fe18a76c8d165469c48b159931d9b48239065767ee455b2b"},
- {file = "yarl-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3257978c870728a52dcce8c2902bf01f6c53b65094b457bf87b2644ee6238ddc"},
- {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f351fa31234699d6084ff98283cb1e852270fe9e250a3b3bf7804eb493bd937"},
- {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8aef1b64da41d18026632d99a06b3fefe1d08e85dd81d849fa7c96301ed22f1b"},
- {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7175a87ab8f7fbde37160a15e58e138ba3b2b0e05492d7351314a250d61b1591"},
- {file = "yarl-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba444bdd4caa2a94456ef67a2f383710928820dd0117aae6650a4d17029fa25e"},
- {file = "yarl-1.11.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0ea9682124fc062e3d931c6911934a678cb28453f957ddccf51f568c2f2b5e05"},
- {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8418c053aeb236b20b0ab8fa6bacfc2feaaf7d4683dd96528610989c99723d5f"},
- {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:61a5f2c14d0a1adfdd82258f756b23a550c13ba4c86c84106be4c111a3a4e413"},
- {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f3a6d90cab0bdf07df8f176eae3a07127daafcf7457b997b2bf46776da2c7eb7"},
- {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:077da604852be488c9a05a524068cdae1e972b7dc02438161c32420fb4ec5e14"},
- {file = "yarl-1.11.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:15439f3c5c72686b6c3ff235279630d08936ace67d0fe5c8d5bbc3ef06f5a420"},
- {file = "yarl-1.11.1-cp38-cp38-win32.whl", hash = "sha256:238a21849dd7554cb4d25a14ffbfa0ef380bb7ba201f45b144a14454a72ffa5a"},
- {file = "yarl-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:67459cf8cf31da0e2cbdb4b040507e535d25cfbb1604ca76396a3a66b8ba37a6"},
- {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:884eab2ce97cbaf89f264372eae58388862c33c4f551c15680dd80f53c89a269"},
- {file = "yarl-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a336eaa7ee7e87cdece3cedb395c9657d227bfceb6781295cf56abcd3386a26"},
- {file = "yarl-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87f020d010ba80a247c4abc335fc13421037800ca20b42af5ae40e5fd75e7909"},
- {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:637c7ddb585a62d4469f843dac221f23eec3cbad31693b23abbc2c366ad41ff4"},
- {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48dfd117ab93f0129084577a07287376cc69c08138694396f305636e229caa1a"},
- {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e0ae31fb5ccab6eda09ba1494e87eb226dcbd2372dae96b87800e1dcc98804"},
- {file = "yarl-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f46f81501160c28d0c0b7333b4f7be8983dbbc161983b6fb814024d1b4952f79"},
- {file = "yarl-1.11.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:04293941646647b3bfb1719d1d11ff1028e9c30199509a844da3c0f5919dc520"},
- {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:250e888fa62d73e721f3041e3a9abf427788a1934b426b45e1b92f62c1f68366"},
- {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e8f63904df26d1a66aabc141bfd258bf738b9bc7bc6bdef22713b4f5ef789a4c"},
- {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:aac44097d838dda26526cffb63bdd8737a2dbdf5f2c68efb72ad83aec6673c7e"},
- {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:267b24f891e74eccbdff42241c5fb4f974de2d6271dcc7d7e0c9ae1079a560d9"},
- {file = "yarl-1.11.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6907daa4b9d7a688063ed098c472f96e8181733c525e03e866fb5db480a424df"},
- {file = "yarl-1.11.1-cp39-cp39-win32.whl", hash = "sha256:14438dfc5015661f75f85bc5adad0743678eefee266ff0c9a8e32969d5d69f74"},
- {file = "yarl-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:94d0caaa912bfcdc702a4204cd5e2bb01eb917fc4f5ea2315aa23962549561b0"},
- {file = "yarl-1.11.1-py3-none-any.whl", hash = "sha256:72bf26f66456baa0584eff63e44545c9f0eaed9b73cb6601b647c91f14c11f38"},
- {file = "yarl-1.11.1.tar.gz", hash = "sha256:1bb2d9e212fb7449b8fb73bc461b51eaa17cc8430b4a87d87be7b25052d92f53"},
-]
-
-[package.dependencies]
-idna = ">=2.0"
-multidict = ">=4.0"
-
[[package]]
name = "zope-event"
version = "5.0"
@@ -5071,4 +4492,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"]
[metadata]
lock-version = "2.0"
python-versions = "^3.12"
-content-hash = "26b5234a40ced450784309969babc41b8cd042e2c6eccda2958d93e978cb5dc6"
+content-hash = "81b3fc071f1be070d1072d4cfe1a45c8c44815e803c4ba17cf6da85a6b7b3894"
diff --git a/pyproject.toml b/pyproject.toml
index 51805194f39..5e74a6defb3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -75,9 +75,6 @@ django-guardian = "2.4.0"
django-webpack-loader = {git = "https://github.com/CenterForOpenScience/django-webpack-loader.git", rev = "6b62fef7d6bc9d25d7b7b7a303f4580ad24831a6"} # branch is feature/v1-webpack-stats
django-sendgrid-v5 = "1.2.3" # metadata says python 3.10 not supported, but tests pass
-# Analytics requirements
-keen = "0.7.0"
-geoip2 = "4.7.0"
# OSF models
django-typed-models = "0.14.0"
django-storages = "1.14.3"
diff --git a/scripts/tests/test_populate_popular_projects_and_registrations.py b/scripts/tests/test_populate_popular_projects_and_registrations.py
deleted file mode 100644
index b1cf38c651d..00000000000
--- a/scripts/tests/test_populate_popular_projects_and_registrations.py
+++ /dev/null
@@ -1,95 +0,0 @@
-from unittest import mock
-
-from tests.base import OsfTestCase
-from osf_tests.factories import ProjectFactory, RegistrationFactory
-
-from website.settings import POPULAR_LINKS_NODE, POPULAR_LINKS_REGISTRATIONS, NEW_AND_NOTEWORTHY_LINKS_NODE
-
-from scripts import populate_popular_projects_and_registrations as script
-
-
-class TestPopulateNewAndNoteworthy(OsfTestCase):
-
- def setUp(self):
- super().setUp()
- self.pop1 = ProjectFactory(is_public=True)
- self.pop2 = ProjectFactory(is_public=True)
-
- self.popreg1 = RegistrationFactory(is_public=True)
- self.popreg2 = RegistrationFactory(is_public=True)
-
- def tearDown(self):
- super().tearDown()
-
- @mock.patch('website.project.utils.get_keen_activity')
- def test_populate_popular_nodes_and_registrations(self, mock_client):
-
- # only for setup, not used
- self.new_noteworthy_node = ProjectFactory()
- self.new_noteworthy_node._id = NEW_AND_NOTEWORTHY_LINKS_NODE
- self.new_noteworthy_node.save()
-
- self.popular_links_node = ProjectFactory()
- self.popular_links_node._id = POPULAR_LINKS_NODE
- self.popular_links_node.save()
-
- self.popular_links_registrations = ProjectFactory()
- self.popular_links_registrations._id = POPULAR_LINKS_REGISTRATIONS
- self.popular_links_registrations.save()
-
- popular_nodes = [self.pop1, self.pop2]
- popular_registrations = [self.popreg1, self.popreg2]
-
- node_pageviews = [
- {
- 'result': 5,
- 'node.id': self.pop1._id
- },
- {
- 'result': 5,
- 'node.id': self.pop2._id
- },
- {
- 'result': 5,
- 'node.id': self.popreg1._id
- },
- {
- 'result': 5,
- 'node.id': self.popreg2._id
- }
- ]
-
- node_visits = [
- {
- 'result': 2,
- 'node.id': self.pop1._id
- },
- {
- 'result': 2,
- 'node.id': self.pop2._id
- },
- {
- 'result': 2,
- 'node.id': self.popreg1._id
- },
- {
- 'result': 2,
- 'node.id': self.popreg2._id
- }
- ]
-
- mock_client.return_value = {'node_pageviews': node_pageviews, 'node_visits': node_visits}
-
- assert len(self.popular_links_node.nodes) == 0
- assert len(self.popular_links_registrations.nodes) == 0
-
- script.main(dry_run=False)
-
- self.popular_links_node.reload()
- self.popular_links_registrations.reload()
-
- assert len(self.popular_links_node.nodes) == 2
- assert len(self.popular_links_registrations.nodes) == 2
-
- assert popular_nodes == self.popular_links_node.nodes
- assert popular_registrations == self.popular_links_registrations.nodes
diff --git a/website/project/utils.py b/website/project/utils.py
index 173219d5558..e8eb0eaf526 100644
--- a/website/project/utils.py
+++ b/website/project/utils.py
@@ -1,14 +1,8 @@
"""Various node-related utilities."""
-from string import ascii_lowercase, digits
-
from django.apps import apps
from django.db.models import Q
from website import settings
-
-from keen import KeenClient
-
-
# Alias the project serializer
def serialize_node(*args, **kwargs):
@@ -28,47 +22,6 @@ def recent_public_registrations(n=10):
).get_roots().order_by('-registered_date')[:n]
-def get_keen_activity():
- client = KeenClient(
- project_id=settings.KEEN['public']['project_id'],
- read_key=settings.KEEN['public']['read_key'],
- )
-
- node_pageviews = []
- node_visits = []
- for character in list(digits + ascii_lowercase):
- partial_node_pageviews = client.count(
- event_collection=f'pageviews-{character}',
- timeframe='this_7_days',
- group_by='node.id',
- filters=[
- {
- 'property_name': 'node.id',
- 'operator': 'exists',
- 'property_value': True
- }
- ]
- )
- node_pageviews += partial_node_pageviews
-
- partial_node_visits = client.count_unique(
- event_collection=f'pageviews-{character}',
- target_property='anon.id',
- timeframe='this_7_days',
- group_by='node.id',
- filters=[
- {
- 'property_name': 'node.id',
- 'operator': 'exists',
- 'property_value': True
- }
- ]
- )
- node_visits += partial_node_visits
-
- return {'node_pageviews': node_pageviews, 'node_visits': node_visits}
-
-
def activity():
"""Generate analytics for most popular public projects and registrations.
Called by `scripts/update_populate_projects_and_registrations`
@@ -76,33 +29,8 @@ def activity():
Node = apps.get_model('osf.AbstractNode')
popular_public_projects = []
popular_public_registrations = []
- max_projects_to_display = settings.MAX_POPULAR_PROJECTS
-
- if settings.KEEN['public']['read_key']:
- keen_activity = get_keen_activity()
- node_visits = keen_activity['node_visits']
-
- node_data = [{'node': x['node.id'], 'views': x['result']} for x in node_visits]
- node_data.sort(key=lambda datum: datum['views'], reverse=True)
-
- node_data = [node_dict['node'] for node_dict in node_data]
-
- for nid in node_data:
- node = Node.load(nid)
- if node is None:
- continue
- if node.is_public and not node.is_registration and not node.is_deleted:
- if len(popular_public_projects) < max_projects_to_display:
- popular_public_projects.append(node)
- elif node.is_public and node.is_registration and not node.is_deleted and not node.is_retracted:
- if len(popular_public_registrations) < max_projects_to_display:
- popular_public_registrations.append(node)
- if len(popular_public_projects) >= max_projects_to_display and len(popular_public_registrations) >= max_projects_to_display:
- break
-
# New and Noteworthy projects are updated manually
new_and_noteworthy_projects = list(Node.objects.get(guids___id=settings.NEW_AND_NOTEWORTHY_LINKS_NODE, guids___id__isnull=False).nodes_pointer)
-
return {
'new_and_noteworthy_projects': new_and_noteworthy_projects,
'recent_public_registrations': recent_public_registrations(),
@@ -110,7 +38,6 @@ def activity():
'popular_public_registrations': popular_public_registrations
}
-
# Credit to https://gist.github.com/cizixs/be41bbede49a772791c08491801c396f
def sizeof_fmt(num, suffix='B'):
for unit in ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z']:
diff --git a/website/routes.py b/website/routes.py
index 227d68302e3..f6144b09f50 100644
--- a/website/routes.py
+++ b/website/routes.py
@@ -15,8 +15,6 @@
from django.conf import settings as api_settings
from django.utils.encoding import smart_str
from werkzeug.http import dump_cookie
-from geoip2.database import Reader
-from geoip2.errors import AddressNotFoundError
from framework import status
from framework import sentry
@@ -89,11 +87,6 @@ def get_globals():
user = _get_current_user()
set_status_message(user)
user_institutions = [{'id': inst._id, 'name': inst.name, 'logo_path': inst.logo_path_rounded_corners} for inst in user.get_affiliated_institutions()] if user else []
- try:
- location = Reader('GeoLite2-City.mmdb').city(request.remote_addr)
- # TODO: replace with adequate error handling during keen removal
- except (FileNotFoundError, AddressNotFoundError):
- location = None
if request.host_url != settings.DOMAIN:
try:
@@ -118,10 +111,6 @@ def get_globals():
'user_entry_point': metrics.get_entry_point(user) if user else '',
'user_institutions': user_institutions if user else None,
'display_name': user.fullname if user else '',
- 'anon': {
- 'continent': (location or {}).get('continent', {}).get('code', None),
- 'country': (location or {}).get('country', {}).get('iso_code', None),
- },
'use_cdn': settings.USE_CDN_FOR_CLIENT_LIBS,
'sentry_dsn_js': settings.SENTRY_DSN_JS if sentry.enabled else None,
'dev_mode': settings.DEV_MODE,
@@ -150,16 +139,6 @@ def get_globals():
'profile_url': cas.get_profile_url(),
'enable_institutions': settings.ENABLE_INSTITUTIONS,
'page_route_name': request.url_rule.endpoint.replace('__', '.'),
- 'keen': {
- 'public': {
- 'project_id': settings.KEEN['public']['project_id'],
- 'write_key': settings.KEEN['public']['write_key'],
- },
- 'private': {
- 'project_id': settings.KEEN['private']['project_id'],
- 'write_key': settings.KEEN['private']['write_key'],
- },
- },
'institutional_landing_flag': flag_is_active(request, features.INSTITUTIONAL_LANDING_FLAG),
'maintenance': maintenance.get_maintenance(),
'recaptcha_site_key': settings.RECAPTCHA_SITE_KEY,
diff --git a/website/settings/defaults.py b/website/settings/defaults.py
index 70867dd901e..412b43fd7ca 100644
--- a/website/settings/defaults.py
+++ b/website/settings/defaults.py
@@ -275,20 +275,6 @@ def parent_dir(path):
'node': [],
}
-KEEN = {
- 'public': {
- 'project_id': None,
- 'master_key': 'changeme',
- 'write_key': '',
- 'read_key': '',
- },
- 'private': {
- 'project_id': '',
- 'write_key': '',
- 'read_key': '',
- },
-}
-
SENTRY_DSN = None
SENTRY_DSN_JS = None
@@ -450,7 +436,6 @@ class CeleryConfig:
'osf.management.commands.sync_datacite_doi_metadata',
'osf.management.commands.update_institution_project_counts',
'osf.management.commands.populate_branched_from',
- 'osf.management.commands.cumulative_plos_metrics',
'osf.management.commands.spam_metrics',
'osf.management.commands.daily_reporters_go',
'osf.management.commands.monthly_reporters_go',
@@ -555,7 +540,6 @@ class CeleryConfig:
'osf.management.commands.delete_legacy_quickfiles_nodes',
'osf.management.commands.fix_quickfiles_waterbutler_logs',
'osf.management.commands.sync_doi_metadata',
- 'osf.management.commands.cumulative_plos_metrics',
'api.providers.tasks',
'osf.management.commands.daily_reporters_go',
'osf.management.commands.monthly_reporters_go',
diff --git a/website/settings/local-ci.py b/website/settings/local-ci.py
index 582541525a9..7264be22ff5 100644
--- a/website/settings/local-ci.py
+++ b/website/settings/local-ci.py
@@ -82,20 +82,6 @@ class CeleryConfig(defaults.CeleryConfig):
# if ENABLE_VARNISH isn't set in python read it from the env var and set it
locals().setdefault('ENABLE_VARNISH', os.environ.get('ENABLE_VARNISH') == 'True')
-KEEN = {
- 'public': {
- 'project_id': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- 'master_key': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- 'write_key': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- 'read_key': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- },
- 'private': {
- 'project_id': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- 'write_key': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- 'read_key': '123456789abcdef101112131415161718191a1b1c1d1e1f20212223242526272',
- },
-}
-
NEW_AND_NOTEWORTHY_LINKS_NODE = 'helloo'
POPULAR_LINKS_NODE = 'hiyah'
POPULAR_LINKS_REGISTRATIONS = 'woooo'
diff --git a/website/static/js/keen.js b/website/static/js/keen.js
deleted file mode 100644
index b716bc84c79..00000000000
--- a/website/static/js/keen.js
+++ /dev/null
@@ -1,275 +0,0 @@
-'use strict';
-
-
-var $ = require('jquery');
-var md5 = require('js-md5');
-var Raven = require('raven-js');
-var Cookie = require('js-cookie');
-var lodashGet = require('lodash.get');
-var keenTracking = require('keen-tracking');
-var $osf = require('js/osfHelpers');
-
-var KeenTracker = (function() {
-
- function _nowUTC() {
- var now = new Date();
- return new Date(
- now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(),
- now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()
- );
- }
-
- function _createOrUpdateKeenSession() {
- var expDate = new Date();
- var expiresInMinutes = 25;
- expDate.setTime(expDate.getTime() + (expiresInMinutes * 60 * 1000));
- var currentSessionId = Cookie.get('keenSessionId') || keenTracking.helpers.getUniqueId();
- Cookie.set('keenSessionId', currentSessionId, {expires: expDate, path: '/'});
- return currentSessionId;
- }
-
- function _getOrCreateKeenId() {
- if (!Cookie.get('keenUserId')) {
- Cookie.set('keenUserId', keenTracking.helpers.getUniqueId(), {expires: 365, path: '/'});
- }
- return Cookie.get('keenUserId');
- }
-
-
- function _defaultKeenPayload() {
- _createOrUpdateKeenSession();
-
- var user = window.contextVars.currentUser;
- var node = window.contextVars.node;
- var pageMeta = lodashGet(window, 'contextVars.analyticsMeta.pageMeta', {});
- return {
- page: {
- title: document.title,
- url: document.URL,
- meta: pageMeta,
- info: {},
- },
- referrer: {
- url: document.referrer,
- info: {},
- },
- time: {
- local: keenTracking.helpers.getDatetimeIndex(),
- utc: keenTracking.helpers.getDatetimeIndex(_nowUTC()),
- },
- node: {
- id: lodashGet(node, 'id'),
- title: lodashGet(node, 'title'),
- type: lodashGet(node, 'category'),
- tags: lodashGet(node, 'tags'),
- },
- anon: {
- id: md5(Cookie.get('keenSessionId')),
- continent: user.anon.continent,
- country: user.anon.country,
- },
- meta: {
- epoch: 1, // version of pageview event schema
- },
- keen: {
- addons: [
- {
- name: 'keen:url_parser',
- input: {
- url: 'page.url',
- },
- output: 'page.info',
- },
- {
- name: 'keen:url_parser',
- input: {
- url: 'referrer.url',
- },
- output: 'referrer.info',
- },
- {
- name: 'keen:referrer_parser',
- input: {
- referrer_url: 'referrer.url',
- page_url: 'page.url',
- },
- output: 'referrer.info',
- },
- ]
- },
- };
- } // end _defaultKeenPayload
-
- function _trackCustomEvent(client, collection, eventData) {
- if (client === null) {
- return;
- }
- client.recordEvent(collection, eventData, function (err) {
- if (err) {
- // If google analytics is inaccessible keen will throw errors
- var adBlockError = document.getElementsByTagName('iframe').item(0) === null;
- var uselessError = 'An error occurred!' === err;
- if(!adBlockError || !uselessError) {
- Raven.captureMessage('Error sending Keen data to ' + collection + ': <' + err + '>', {
- extra: {payload: eventData}
- });
- }
- }
- });
- }
-
- function _pageIsPublic() {
- return Boolean(
- lodashGet(window, 'contextVars.node.isPublic', false) &&
- lodashGet(window, 'contextVars.analyticsMeta.pageMeta.public', false)
- );
- }
-
- function _getActionLabels() {
- const actionLabelMap = {
- 'web': true,
- 'view': Boolean(lodashGet(window, 'contextVars.analyticsMeta.itemGuid')),
- 'search': Boolean(lodashGet(window, 'contextVars.analyticsMeta.searchProviderId')),
- };
- return (
- Object.keys(actionLabelMap)
- .filter(label => Boolean(actionLabelMap[label]))
- );
- }
-
- function _logPageview() {
- const url = new URL('/_/metrics/events/counted_usage/', window.contextVars.apiV2Domain);
- const sessionId = _createOrUpdateKeenSession();
- const data = {
- type: 'counted-usage',
- attributes: {
- client_session_id: sessionId ? md5(sessionId) : null,
- provider_id: lodashGet(window, 'contextVars.analyticsMeta.searchProviderId'),
- item_guid: lodashGet(window, 'contextVars.analyticsMeta.itemGuid'),
- item_public: _pageIsPublic(),
- action_labels: _getActionLabels(),
- pageview_info: {
- referer_url: document.referrer,
- page_url: document.URL,
- page_title: document.title,
- route_name: lodashGet(window, 'contextVars.analyticsMeta.pageMeta.routeName'),
- },
- },
- };
-
- $osf.ajaxJSON('POST', url.toString(), {
- isCors: true,
- data: {data},
- });
- }
-
- function KeenTracker() {
- if (instance) {
- throw new Error('Cannot instantiate another KeenTracker instance.');
- } else {
- var self = this;
-
- self._publicClient = null;
- self._privateClient = null;
-
- self.init = function _initKeentracker(params) {
- var self = this;
-
- if (params === undefined) {
- return self;
- }
-
- self._publicClient = new keenTracking({
- projectId: params.public.projectId,
- writeKey: params.public.writeKey,
- });
- self._publicClient.extendEvents(_defaultPublicKeenPayload);
-
- self._privateClient = new keenTracking({
- projectId: params.private.projectId,
- writeKey: params.private.writeKey,
- });
- self._privateClient.extendEvents(_defaultPrivateKeenPayload);
-
- return self;
- };
-
- var _defaultPublicKeenPayload = function() { return _defaultKeenPayload(); };
- var _defaultPrivateKeenPayload = function() {
- var payload = _defaultKeenPayload();
- var user = window.contextVars.currentUser;
- payload.visitor = {
- id: _getOrCreateKeenId(),
- session: Cookie.get('keenSessionId'),
- returning: Boolean(Cookie.get('keenUserId')),
- };
- payload.tech = {
- browser: keenTracking.helpers.getBrowserProfile(),
- ua: '${keen.user_agent}',
- ip: '${keen.ip}',
- info: {},
- };
- payload.user = {
- id: user.id,
- entry_point: user.entryPoint,
- institutions: user.institutions,
- locale: user.locale,
- timezone: user.timezone,
- };
- payload.keen.addons.push({
- name: 'keen:ip_to_geo',
- input: {
- ip: 'tech.ip',
- remove_ip_property: true
- },
- output: 'geo',
- });
- payload.keen.addons.push({
- name: 'keen:ua_parser',
- input: {
- ua_string: 'tech.ua'
- },
- output: 'tech.info',
- });
-
- return payload;
- };
-
- self.trackPageView = function () {
- _logPageview();
-
- var self = this;
- var guid;
- if (_pageIsPublic()) {
- guid = lodashGet(window, 'contextVars.node.id', null);
- if (guid) {
- var partitioned_collection = 'pageviews-' + guid.charAt(0);
- self.trackPublicEvent(partitioned_collection, {});
- }
- }
- self.trackPrivateEvent('pageviews', {});
- };
-
- self.trackPrivateEvent = function(collection, event) {
- return _trackCustomEvent(self._privateClient, collection, event);
- };
-
- self.trackPublicEvent = function(collection, event) {
- return _trackCustomEvent(self._publicClient, collection, event);
- };
- }
- }
-
- var instance = null;
- return {
- getInstance: function() {
- if (!instance) {
- instance = new KeenTracker();
- instance.init(window.contextVars.keen);
- }
- return instance;
- }
- };
-})();
-
-module.exports = KeenTracker;
diff --git a/website/static/js/metrics.js b/website/static/js/metrics.js
new file mode 100644
index 00000000000..80f0d5c3418
--- /dev/null
+++ b/website/static/js/metrics.js
@@ -0,0 +1,103 @@
+'use strict';
+
+
+var md5 = require('js-md5');
+var Cookie = require('js-cookie');
+var lodashGet = require('lodash.get');
+var $osf = require('js/osfHelpers');
+
+var MetricsTracker = (function() {
+ function getUniqueId() {
+ if (typeof window.crypto !== 'undefined' && window.crypto.getRandomValues) {
+ return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
+ (c ^ window.crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
+ );
+ } else {
+ let str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
+ return str.replace(/[xy]/g, function(c) {
+ let r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
+ return v.toString(16);
+ });
+ }
+ }
+
+ function _createOrUpdateMetricsSession() {
+ var expDate = new Date();
+ var expiresInMinutes = 25;
+ expDate.setTime(expDate.getTime() + (expiresInMinutes * 60 * 1000));
+ var currentSessionId = Cookie.get('osfMetricsSessionId') || getUniqueId();
+ Cookie.set('osfMetricsSessionId', currentSessionId, {expires: expDate, path: '/'});
+ return currentSessionId;
+ }
+
+
+ function _pageIsPublic() {
+ return Boolean(
+ lodashGet(window, 'contextVars.node.isPublic', false) &&
+ lodashGet(window, 'contextVars.analyticsMeta.pageMeta.public', false)
+ );
+ }
+
+ function _getActionLabels() {
+ const actionLabelMap = {
+ 'web': true,
+ 'view': Boolean(lodashGet(window, 'contextVars.analyticsMeta.itemGuid')),
+ 'search': Boolean(lodashGet(window, 'contextVars.analyticsMeta.searchProviderId')),
+ };
+ return (
+ Object.keys(actionLabelMap)
+ .filter(label => Boolean(actionLabelMap[label]))
+ );
+ }
+
+ function _logPageview() {
+ const url = new URL('/_/metrics/events/counted_usage/', window.contextVars.apiV2Domain);
+ const sessionId = _createOrUpdateMetricsSession();
+ const data = {
+ type: 'counted-usage',
+ attributes: {
+ client_session_id: sessionId ? md5(sessionId) : null,
+ provider_id: lodashGet(window, 'contextVars.analyticsMeta.searchProviderId'),
+ item_guid: lodashGet(window, 'contextVars.analyticsMeta.itemGuid'),
+ item_public: _pageIsPublic(),
+ action_labels: _getActionLabels(),
+ pageview_info: {
+ referer_url: document.referrer,
+ page_url: document.URL,
+ page_title: document.title,
+ route_name: lodashGet(window, 'contextVars.analyticsMeta.pageMeta.routeName'),
+ },
+ },
+ };
+
+ $osf.ajaxJSON('POST', url.toString(), {
+ isCors: true,
+ data: {data},
+ });
+ }
+
+ function MetricsTracker() {
+ if (instance) {
+ throw new Error('Cannot instantiate another MetricsTracker instance.');
+ } else {
+ var self = this;
+
+ self.trackPageView = function () {
+ _logPageview();
+ };
+
+ }
+ }
+
+ var instance = null;
+ return {
+ getInstance: function() {
+ if (!instance) {
+ instance = new MetricsTracker();
+ }
+ return instance;
+ }
+ };
+})();
+
+module.exports = MetricsTracker;
diff --git a/website/static/js/pages/base-page.js b/website/static/js/pages/base-page.js
index 079e0f9a74e..877239bd271 100644
--- a/website/static/js/pages/base-page.js
+++ b/website/static/js/pages/base-page.js
@@ -19,7 +19,7 @@ var NavbarControl = require('js/navbarControl');
var AlertManager = require('js/alertsManager');
var Raven = require('raven-js');
var moment = require('moment');
-var KeenTracker = require('js/keen');
+var MetricsTracker = require('js/metrics');
var DevModeControls = require('js/devModeControls');
var bootbox = require('bootbox');
@@ -252,9 +252,9 @@ $(function() {
}
}
- //Don't track PhantomJS visits with KeenIO
+ //Don't track PhantomJS visits with metrics
if (!(/PhantomJS/.test(navigator.userAgent))){
- KeenTracker.getInstance().trackPageView();
+ MetricsTracker.getInstance().trackPageView();
}
confirmEmails(window.contextVars.currentUser.emailsToAdd);
diff --git a/website/templates/base.mako b/website/templates/base.mako
index fceb1842931..2561d2da961 100644
--- a/website/templates/base.mako
+++ b/website/templates/base.mako
@@ -258,7 +258,6 @@
entryPoint: ${ user_entry_point | sjson, n },
institutions: ${ user_institutions | sjson, n},
emailsToAdd: ${ user_email_verifications | sjson, n },
- anon: ${ anon | sjson, n },
},
maintenance: ${ maintenance | sjson, n},
analyticsMeta: {
@@ -271,23 +270,6 @@
});
- % if keen['public']['project_id']:
-
- % endif
-
% if settings.DATACITE_TRACKER_REPO_ID:
% endif
-
${self.javascript_bottom()}