edx-enterprise-data 7.0.0__py3-none-any.whl → 8.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {edx_enterprise_data-7.0.0.dist-info → edx_enterprise_data-8.2.0.dist-info}/METADATA +4 -1
- {edx_enterprise_data-7.0.0.dist-info → edx_enterprise_data-8.2.0.dist-info}/RECORD +35 -21
- {edx_enterprise_data-7.0.0.dist-info → edx_enterprise_data-8.2.0.dist-info}/WHEEL +1 -1
- enterprise_data/__init__.py +1 -1
- enterprise_data/admin_analytics/__init__.py +0 -0
- enterprise_data/admin_analytics/constants.py +15 -0
- enterprise_data/admin_analytics/data_loaders.py +137 -0
- enterprise_data/admin_analytics/database.py +31 -0
- enterprise_data/admin_analytics/utils.py +81 -0
- enterprise_data/api/v1/serializers.py +20 -0
- enterprise_data/api/v1/urls.py +13 -6
- enterprise_data/api/v1/views/__init__.py +0 -0
- enterprise_data/api/v1/views/base.py +26 -0
- enterprise_data/api/v1/views/enterprise_admin.py +109 -0
- enterprise_data/api/v1/{views.py → views/enterprise_learner.py} +5 -114
- enterprise_data/api/v1/views/enterprise_offers.py +41 -0
- enterprise_data/migrations/{0040_auto_20240712_0740.py → 0040_auto_20240718_0536_squashed_0043_alter_enterpriselearnerenrollment_enterprise_enrollment_id.py} +10 -5
- enterprise_data/settings/test.py +8 -9
- enterprise_data/tests/admin_analytics/__init__.py +0 -0
- enterprise_data/tests/admin_analytics/test_data_loaders.py +86 -0
- enterprise_data/tests/admin_analytics/test_utils.py +102 -0
- enterprise_data/tests/api/v1/views/__init__.py +0 -0
- enterprise_data/tests/api/v1/views/test_enterprise_admin.py +82 -0
- enterprise_data/tests/test_filters.py +1 -1
- enterprise_data/tests/test_utils.py +73 -0
- enterprise_data/utils.py +48 -1
- enterprise_reporting/clients/__init__.py +2 -3
- enterprise_reporting/external_resource_link_report.py +3 -3
- enterprise_reporting/tests/test_clients.py +1 -1
- enterprise_reporting/tests/test_enterprise_client.py +2 -5
- enterprise_reporting/tests/test_external_link_report.py +2 -2
- enterprise_reporting/tests/test_utils.py +3 -3
- enterprise_reporting/utils.py +1 -1
- {edx_enterprise_data-7.0.0.dist-info → edx_enterprise_data-8.2.0.dist-info}/LICENSE +0 -0
- {edx_enterprise_data-7.0.0.dist-info → edx_enterprise_data-8.2.0.dist-info}/top_level.txt +0 -0
enterprise_data/utils.py
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
"""
|
2
2
|
Utility functions for Enterprise Data app.
|
3
3
|
"""
|
4
|
-
|
5
4
|
import hashlib
|
6
5
|
import random
|
6
|
+
import time
|
7
|
+
from datetime import timedelta
|
8
|
+
from functools import wraps
|
9
|
+
from logging import getLogger
|
10
|
+
|
11
|
+
LOGGER = getLogger(__name__)
|
7
12
|
|
8
13
|
|
9
14
|
def get_cache_key(**kwargs):
|
@@ -35,3 +40,45 @@ def get_unique_id():
|
|
35
40
|
Return a unique 32 bit integer.
|
36
41
|
"""
|
37
42
|
return random.getrandbits(32)
|
43
|
+
|
44
|
+
|
45
|
+
def subtract_one_month(original_date):
|
46
|
+
"""
|
47
|
+
Return a date exactly one month prior to the passed in date.
|
48
|
+
"""
|
49
|
+
one_day = timedelta(days=1)
|
50
|
+
one_month_earlier = original_date - one_day
|
51
|
+
while one_month_earlier.month == original_date.month or one_month_earlier.day > original_date.day:
|
52
|
+
one_month_earlier -= one_day
|
53
|
+
return one_month_earlier
|
54
|
+
|
55
|
+
|
56
|
+
def timeit(func):
|
57
|
+
"""
|
58
|
+
Measure time taken by a function.
|
59
|
+
"""
|
60
|
+
@wraps(func)
|
61
|
+
def wrapper(*args, **kwargs):
|
62
|
+
start = time.time()
|
63
|
+
result = func(*args, **kwargs)
|
64
|
+
end = time.time()
|
65
|
+
LOGGER.info(f'Time taken by {func.__name__}: {end - start} seconds')
|
66
|
+
return result
|
67
|
+
|
68
|
+
return wrapper
|
69
|
+
|
70
|
+
|
71
|
+
def date_filter(start, end, data_frame, date_column):
|
72
|
+
"""
|
73
|
+
Filter a pandas DataFrame by date range.
|
74
|
+
|
75
|
+
Arguments:
|
76
|
+
start (DatetimeScalar | NaTType | None): The start date.
|
77
|
+
end (DatetimeScalar | NaTType | None): The end date.
|
78
|
+
data_frame (pandas.DataFrame): The DataFrame to filter.
|
79
|
+
date_column (str): The name of the date column.
|
80
|
+
|
81
|
+
Returns:
|
82
|
+
(pandas.DataFrame): The filtered DataFrame.
|
83
|
+
"""
|
84
|
+
return data_frame[(start <= data_frame[date_column]) & (data_frame[date_column] <= end)]
|
@@ -2,18 +2,17 @@
|
|
2
2
|
Clients used to access third party systems.
|
3
3
|
"""
|
4
4
|
|
5
|
+
import logging
|
5
6
|
import os
|
6
7
|
from datetime import datetime, timedelta
|
7
8
|
from functools import wraps
|
8
9
|
from urllib.parse import parse_qs, urljoin, urlparse
|
9
|
-
from edx_rest_api_client.client import get_oauth_access_token
|
10
10
|
|
11
|
-
import logging
|
12
11
|
import requests
|
12
|
+
from edx_rest_api_client.client import get_oauth_access_token
|
13
13
|
|
14
14
|
from enterprise_reporting.utils import retry_on_exception
|
15
15
|
|
16
|
-
|
17
16
|
LOGGER = logging.getLogger(__name__)
|
18
17
|
|
19
18
|
|
@@ -3,13 +3,13 @@ External Resource Link Report Generation Code.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
|
6
|
-
from collections import Counter
|
7
|
-
from datetime import date
|
8
|
-
import operator
|
9
6
|
import logging
|
7
|
+
import operator
|
10
8
|
import os
|
11
9
|
import re
|
12
10
|
import sys
|
11
|
+
from collections import Counter
|
12
|
+
from datetime import date
|
13
13
|
from urllib.parse import urlparse
|
14
14
|
|
15
15
|
from py2neo import Graph
|
@@ -2,14 +2,11 @@
|
|
2
2
|
Test Enterprise client.
|
3
3
|
"""
|
4
4
|
|
5
|
+
import json
|
5
6
|
import os
|
6
7
|
import unittest
|
7
8
|
|
8
|
-
import
|
9
|
-
|
10
|
-
from enterprise_reporting.utils import (
|
11
|
-
extract_catalog_uuids_from_reporting_config,
|
12
|
-
)
|
9
|
+
from enterprise_reporting.utils import extract_catalog_uuids_from_reporting_config
|
13
10
|
|
14
11
|
REPO_DIR = os.getcwd()
|
15
12
|
FIXTURE_DIR = os.path.join(REPO_DIR, 'enterprise_reporting/fixtures')
|
@@ -2,13 +2,13 @@
|
|
2
2
|
Test utils for external link reports.
|
3
3
|
"""
|
4
4
|
|
5
|
-
from collections import OrderedDict
|
6
5
|
import unittest
|
6
|
+
from collections import OrderedDict
|
7
7
|
|
8
8
|
from enterprise_reporting.external_resource_link_report import (
|
9
9
|
AGGREGATE_REPORT_CSV_HEADER_ROW,
|
10
|
-
create_csv_string,
|
11
10
|
create_columns_for_aggregate_report,
|
11
|
+
create_csv_string,
|
12
12
|
process_coursegraph_results,
|
13
13
|
split_up_results,
|
14
14
|
)
|
@@ -3,12 +3,15 @@ Test utilities.
|
|
3
3
|
"""
|
4
4
|
|
5
5
|
|
6
|
+
import datetime
|
6
7
|
import os
|
7
8
|
import tempfile
|
8
9
|
import unittest
|
9
10
|
from collections import OrderedDict
|
11
|
+
|
10
12
|
import ddt
|
11
13
|
import pgpy
|
14
|
+
import pytz
|
12
15
|
from pgpy.constants import CompressionAlgorithm, HashAlgorithm, KeyFlags, PubKeyAlgorithm, SymmetricKeyAlgorithm
|
13
16
|
from pgpy.errors import PGPError
|
14
17
|
|
@@ -16,9 +19,6 @@ from enterprise_reporting import utils
|
|
16
19
|
|
17
20
|
from .utils import create_files, verify_compressed
|
18
21
|
|
19
|
-
import pytz
|
20
|
-
import datetime
|
21
|
-
|
22
22
|
|
23
23
|
@ddt.ddt
|
24
24
|
class TestUtilities(unittest.TestCase):
|
enterprise_reporting/utils.py
CHANGED
@@ -11,6 +11,7 @@ from collections import OrderedDict
|
|
11
11
|
from email.mime.application import MIMEApplication
|
12
12
|
from email.mime.multipart import MIMEMultipart
|
13
13
|
from email.mime.text import MIMEText
|
14
|
+
from urllib.parse import parse_qs, urlparse
|
14
15
|
|
15
16
|
import boto3
|
16
17
|
import pgpy
|
@@ -18,7 +19,6 @@ import pyminizip
|
|
18
19
|
import pytz
|
19
20
|
from cryptography.fernet import Fernet
|
20
21
|
from fernet_fields.hkdf import derive_fernet_key
|
21
|
-
from urllib.parse import parse_qs, urlparse
|
22
22
|
|
23
23
|
from django.utils.encoding import force_str
|
24
24
|
|
File without changes
|
File without changes
|