Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix data center asset export + some formatting fix for newer flake #3860

Merged
merged 6 commits into from
Nov 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading