Skip to content

Commit

Permalink
Merge pull request #3860 from allegro/fix-data-center-asset-export
Browse files Browse the repository at this point in the history
Fix data center asset export + some formatting fix for newer flake
  • Loading branch information
hipek8 authored Nov 4, 2024
2 parents 0aab661 + 9d3e255 commit fb564e8
Show file tree
Hide file tree
Showing 15 changed files with 65 additions and 23 deletions.
2 changes: 1 addition & 1 deletion src/ralph/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ def monkey_options_init(self, meta, app_label):
self._old__init__(meta, app_label)
self.default_permissions = ('add', 'change', 'delete', 'view')

# TODO: create PR to Django - default_permissions from settings

Options._old__init__ = Options.__init__
Options.__init__ = lambda self, meta, app_label=None: monkey_options_init(
self, meta, app_label
Expand Down
28 changes: 14 additions & 14 deletions src/ralph/accounts/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,20 +10,20 @@
from ralph.lib.transitions.models import Transition
from ralph.sim_cards.models import SIMCard

ACCEPTANCE_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_ID'] # noqa: E509
ACCEPTANCE_SIM_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_SIM_ID'] # noqa: E509
ACCEPTANCE_BACK_OFFICE_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_STATUS'] # noqa: E509
ACCEPTANCE_SIMCARD_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['SIMCARD_ACCEPT_STATUS'] # noqa: E509
ACCEPTANCE_LOAN_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['LOAN_TRANSITION_ID'] # noqa: E509
ACCEPTANCE_BACK_OFFICE_ACCEPT_LOAN_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_LOAN_STATUS'] # noqa: E509
ACCEPTANCE_RETURN_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['RETURN_TRANSITION_ID'] # noqa: E509
ACCEPTANCE_BACK_OFFICE_RETURN_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_RETURN_STATUS'] # noqa: E509
ACCEPTANCE_ACCESS_CARD_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_ACCESS_CARD_ID'] # noqa: E509
ACCEPTANCE_ACCESS_CARD_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['ACCESS_CARD_ACCEPT_ACCEPT_STATUS'] # noqa: E509
ACCEPTANCE_BACK_OFFICE_TEAM_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_TEAM_ACCEPT_STATUS'] # noqa: E509
ACCEPTANCE_TEAM_ACCEPT_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_TEAM_ACCEPT_ID'] # noqa: E509
ACCEPTANCE_BACK_OFFICE_TEST_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_TEST_ACCEPT_STATUS'] # noqa: E509
ACCEPTANCE_TEST_ACCEPT_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_TEST_ACCEPT_ID'] # noqa: E509
ACCEPTANCE_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_ID'] # noqa
ACCEPTANCE_SIM_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_SIM_ID'] # noqa
ACCEPTANCE_BACK_OFFICE_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_STATUS'] # noqa
ACCEPTANCE_SIMCARD_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['SIMCARD_ACCEPT_STATUS'] # noqa
ACCEPTANCE_LOAN_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['LOAN_TRANSITION_ID'] # noqa
ACCEPTANCE_BACK_OFFICE_ACCEPT_LOAN_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_LOAN_STATUS'] # noqa
ACCEPTANCE_RETURN_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['RETURN_TRANSITION_ID'] # noqa
ACCEPTANCE_BACK_OFFICE_RETURN_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_ACCEPT_RETURN_STATUS'] # noqa
ACCEPTANCE_ACCESS_CARD_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_ACCESS_CARD_ID'] # noqa
ACCEPTANCE_ACCESS_CARD_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['ACCESS_CARD_ACCEPT_ACCEPT_STATUS'] # noqa
ACCEPTANCE_BACK_OFFICE_TEAM_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_TEAM_ACCEPT_STATUS'] # noqa
ACCEPTANCE_TEAM_ACCEPT_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_TEAM_ACCEPT_ID'] # noqa
ACCEPTANCE_BACK_OFFICE_TEST_ACCEPT_STATUS = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['BACK_OFFICE_TEST_ACCEPT_STATUS'] # noqa
ACCEPTANCE_TEST_ACCEPT_TRANSITION_ID = settings.ACCEPT_ASSETS_FOR_CURRENT_USER_CONFIG['TRANSITION_TEST_ACCEPT_ID'] # noqa


def transition_exists(transition_id):
Expand Down
1 change: 1 addition & 0 deletions src/ralph/accounts/ldap.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ def mirror_groups(self):

self._user.groups.set(existing_groups + new_groups)


_LDAPUser._mirror_groups_original = _LDAPUser._mirror_groups
_LDAPUser._mirror_groups = mirror_groups

Expand Down
3 changes: 0 additions & 3 deletions src/ralph/admin/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -421,9 +421,6 @@ def get_export_queryset(self, request):
)
if resource_prefetch_related:
queryset = queryset.prefetch_related(*resource_prefetch_related)
# cast to list to consider all prefetch_related (django-import-export
# use queryset.iterator() to "save memory", but then for every row
# sql queries are made to fetch all m2m relations)
return list(queryset)

def get_export_resource_class(self):
Expand Down
1 change: 1 addition & 0 deletions src/ralph/api/routers.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,5 @@ def get(self, request, *args, **kwargs):

return APIRoot.as_view()


router = RalphRouter()
1 change: 1 addition & 0 deletions src/ralph/assets/api/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,7 @@ class Meta:
'parent'
)


# TODO: Is there a better way to make it work since drf 3.5?
del ConfigurationClassSimpleSerializer._declared_fields['tags']

Expand Down
25 changes: 20 additions & 5 deletions src/ralph/data_center/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,14 @@
from ralph.admin.mixins import (
BulkEditChangeListMixin,
RalphAdmin,
RalphAdminImportExportMixin,
RalphTabularInline
)
from ralph.admin.views.extra import RalphDetailViewAdmin
from ralph.admin.views.main import RalphChangeList
from ralph.admin.views.multiadd import MulitiAddAdminMixin
from ralph.assets.invoice_report import AssetInvoiceReportMixin
from ralph.assets.models.base import BaseObject
from ralph.assets.models.base import BaseObject, BaseObjectPolymorphicQuerySet
from ralph.assets.models.components import Ethernet
from ralph.assets.views import ComponentsAdminView
from ralph.attachments.admin import AttachmentsMixin
Expand Down Expand Up @@ -491,11 +492,25 @@ class DataCenterAssetAdmin(
)

def get_export_queryset(self, request):
return DataCenterAsset.polymorphic_objects.select_related(
*self.list_select_related
).polymorphic_prefetch_related(
DataCenterAsset=['tags', 'ethernet_set__ipaddress', 'parent__ethernet_set__ipaddress'],
qs = (
super(RalphAdminImportExportMixin, self)
.get_export_queryset(request)
.select_related(
*self.list_select_related
)
)
if isinstance(qs, BaseObjectPolymorphicQuerySet):
return qs.polymorphic_prefetch_related(
DataCenterAsset=[
'tags',
'ethernet_set__ipaddress',
'parent__ethernet_set__ipaddress'
]
)
else:
return qs.prefetch_related(
'tags', 'ethernet_set__ipaddress', 'parent__ethernet_set__ipaddress'
)

def get_multiadd_fields(self, obj=None):
multiadd_fields = [
Expand Down
8 changes: 8 additions & 0 deletions src/ralph/data_importer/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -306,8 +306,16 @@ class DataCenterAssetResource(ResourceWithPrice, RalphModelResource):
class Meta:
model = physical.DataCenterAsset
select_related = (
'model__manufacturer', 'model__category',
'service_env__service', 'service_env__environment',
'rack__server_room__data_center',
'configuration_path',
'property_of',
'parent',
'budget_info',
)
prefetch_related = (
'tags', 'ethernet_set__ipaddress', 'parent__ethernet_set__ipaddress',
)
exclude = ('content_type', 'asset_ptr', 'baseobject_ptr', 'connections')

Expand Down
10 changes: 10 additions & 0 deletions src/ralph/data_importer/tests/test_export.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,16 @@ def test_data_center_asset_export_queries_count(self):
DataCenterAsset
), max_queries=12)

def test_data_center_asset_export_filtered(self):
self._init(10)
first_id = next(iter(self.data_center_assets_map.keys()))
with CaptureQueriesContext(connections['default']) as cqc:
export_data = self._export(
DataCenterAsset, filters={'id': first_id}
)
queries = len(cqc)
self.assertEqual(len(export_data.dict), 1)
self.assertLessEqual(queries, 12)

class DataCenterAssetExporterTestCaseWithParent(DataCenterAssetExporterTestCase):
def _init(self, num=10):
Expand Down
1 change: 1 addition & 0 deletions src/ralph/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def generate_pdf_response(pdf_data, file_name):
)
return response


CACHE_DEFAULT = object()


Expand Down
1 change: 1 addition & 0 deletions src/ralph/lib/metrics/collector.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ def build_statsd_client(
ipv6=ipv6
)


if settings.COLLECT_METRICS and statsd is None:
statsd = build_statsd_client()

Expand Down
3 changes: 3 additions & 0 deletions src/ralph/lib/mixins/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,9 @@ def deconstruct(self):
def limit_choices_to(self):
return self.limit_choices()

def get_limit_choices_to(self):
return self.limit_choices()

def limit_choices(self):
"""
Add limit_choices_to search by content_type for models
Expand Down
1 change: 1 addition & 0 deletions src/ralph/licences/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ def get_queryset(self):
}
)


LICENCES_RELATED_OBJECTS_PREFETCH_RELATED = [
'users',
# prefetch all baseobjects related with licence; this allows to call
Expand Down
2 changes: 2 additions & 0 deletions src/ralph/networks/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ def get_private_network_filter():
max_ip = int(network.broadcast_address)
filter_ |= Q(min_ip__gte=min_ip, max_ip__lte=max_ip)
return filter_


PRIVATE_NETWORK_FILTER = get_private_network_filter()


Expand Down
1 change: 1 addition & 0 deletions src/ralph/settings/dev.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ def only_true(request):
'''For django debug toolbar.'''
return True


DEBUG = True

INSTALLED_APPS = INSTALLED_APPS + (
Expand Down

0 comments on commit fb564e8

Please sign in to comment.