Merge ~d0ugal/maas:super3 into maas:master
- Git
- lp:~d0ugal/maas
- super3
- Merge into master
Proposed by
Dougal Matthews
Status: | Merged |
---|---|
Approved by: | Dougal Matthews |
Approved revision: | 7988be8eafe24ae33b384ee460f1d290a8e60e92 |
Merge reported by: | MAAS Lander |
Merged at revision: | not available |
Proposed branch: | ~d0ugal/maas:super3 |
Merge into: | maas:master |
Diff against target: |
7182 lines (+691/-775) 279 files modified
src/apiclient/maas_client.py (+1/-5) src/apiclient/testing/django.py (+2/-2) src/maascli/api.py (+1/-1) src/maascli/cli.py (+2/-2) src/maascli/command.py (+1/-1) src/maascli/parser.py (+1/-1) src/maascli/snappy.py (+3/-3) src/maascli/tests/test_snappy.py (+3/-3) src/maasserver/api/auth.py (+1/-1) src/maasserver/api/support.py (+4/-8) src/maasserver/api/tests/test_api.py (+1/-1) src/maasserver/api/tests/test_boot_source_selections.py (+2/-2) src/maasserver/api/tests/test_boot_sources.py (+2/-2) src/maasserver/api/tests/test_doc.py (+2/-2) src/maasserver/api/tests/test_machine.py (+2/-2) src/maasserver/api/tests/test_machines.py (+2/-2) src/maasserver/api/tests/test_node.py (+1/-1) src/maasserver/bootresources.py (+3/-7) src/maasserver/clusterrpc/boot_images.py (+1/-1) src/maasserver/clusterrpc/tests/test_boot_images.py (+5/-5) src/maasserver/config_forms.py (+1/-1) src/maasserver/dns/tests/test_config.py (+3/-3) src/maasserver/dns/tests/test_zonegenerator.py (+1/-1) src/maasserver/dns/zonegenerator.py (+1/-1) src/maasserver/eventloop.py (+1/-1) src/maasserver/exceptions.py (+2/-4) src/maasserver/fields.py (+17/-19) src/maasserver/fields_storage.py (+2/-2) src/maasserver/forms/__init__.py (+70/-78) src/maasserver/forms/dhcpsnippet.py (+1/-1) src/maasserver/forms/filesystem.py (+5/-5) src/maasserver/forms/interface.py (+8/-8) src/maasserver/forms/interface_link.py (+5/-5) src/maasserver/forms/packagerepository.py (+1/-1) src/maasserver/forms/pods.py (+6/-6) src/maasserver/forms/script.py (+1/-1) src/maasserver/forms/settings.py (+1/-1) src/maasserver/forms/staticroute.py (+1/-1) src/maasserver/forms/subnet.py (+2/-2) src/maasserver/forms/tests/test_bootsource.py (+1/-1) src/maasserver/forms/tests/test_bootsourceselection.py (+1/-1) src/maasserver/forms/tests/test_helpers.py (+1/-1) src/maasserver/forms/vlan.py (+3/-3) src/maasserver/ipc.py (+7/-7) src/maasserver/json.py (+1/-1) src/maasserver/listener.py (+2/-2) src/maasserver/macaroon_auth.py (+1/-1) src/maasserver/management/commands/_config.py (+3/-3) src/maasserver/management/commands/db_vacuum_lobjects.py (+1/-1) src/maasserver/management/commands/dbupgrade.py (+1/-1) src/maasserver/management/commands/edit_named_options.py (+1/-1) src/maasserver/management/commands/runserver.py (+2/-2) src/maasserver/management/commands/tests/test_dbupgrade.py (+1/-1) src/maasserver/models/blockdevice.py (+1/-1) src/maasserver/models/bmc.py (+3/-3) src/maasserver/models/bootresource.py (+1/-3) src/maasserver/models/bootsource.py (+1/-1) src/maasserver/models/cleansave.py (+10/-10) src/maasserver/models/config.py (+1/-1) src/maasserver/models/dhcpsnippet.py (+1/-1) src/maasserver/models/discovery.py (+1/-1) src/maasserver/models/dnsresource.py (+2/-2) src/maasserver/models/domain.py (+4/-4) src/maasserver/models/fabric.py (+3/-3) src/maasserver/models/fannetwork.py (+1/-1) src/maasserver/models/filesystem.py (+2/-2) src/maasserver/models/filesystemgroup.py (+7/-11) src/maasserver/models/interface.py (+12/-14) src/maasserver/models/iprange.py (+1/-1) src/maasserver/models/iscsiblockdevice.py (+1/-1) src/maasserver/models/largefile.py (+1/-1) src/maasserver/models/licensekey.py (+1/-3) src/maasserver/models/neighbour.py (+1/-1) src/maasserver/models/node.py (+8/-14) src/maasserver/models/nodemetadata.py (+1/-1) src/maasserver/models/notification.py (+1/-1) src/maasserver/models/packagerepository.py (+1/-1) src/maasserver/models/partition.py (+3/-3) src/maasserver/models/partitiontable.py (+1/-1) src/maasserver/models/physicalblockdevice.py (+1/-1) src/maasserver/models/resourcepool.py (+1/-1) src/maasserver/models/signals/testing.py (+2/-2) src/maasserver/models/signals/tests/test_events.py (+1/-1) src/maasserver/models/signals/tests/test_nodes.py (+2/-2) src/maasserver/models/space.py (+2/-2) src/maasserver/models/sslkey.py (+1/-3) src/maasserver/models/staticipaddress.py (+1/-1) src/maasserver/models/subnet.py (+1/-1) src/maasserver/models/switch.py (+1/-1) src/maasserver/models/tag.py (+2/-2) src/maasserver/models/testing.py (+4/-4) src/maasserver/models/tests/test_bootresource.py (+1/-1) src/maasserver/models/tests/test_bootsource.py (+1/-1) src/maasserver/models/tests/test_bootsourcecache.py (+1/-1) src/maasserver/models/tests/test_bootsourceselection.py (+1/-1) src/maasserver/models/tests/test_config.py (+1/-1) src/maasserver/models/tests/test_dnspublication.py (+1/-1) src/maasserver/models/tests/test_node.py (+4/-4) src/maasserver/models/tests/test_rbacsync.py (+1/-1) src/maasserver/models/timestampedmodel.py (+1/-1) src/maasserver/models/userprofile.py (+1/-1) src/maasserver/models/virtualblockdevice.py (+2/-2) src/maasserver/models/vlan.py (+2/-2) src/maasserver/models/zone.py (+1/-1) src/maasserver/node_action.py (+2/-2) src/maasserver/node_constraint_filter_forms.py (+2/-2) src/maasserver/nonces_cleanup.py (+1/-3) src/maasserver/preseed.py (+1/-1) src/maasserver/prometheus/stats.py (+1/-1) src/maasserver/rack_controller.py (+3/-3) src/maasserver/region_controller.py (+3/-3) src/maasserver/regiondservices/service_monitor_service.py (+1/-3) src/maasserver/regiondservices/tests/test_ntp.py (+1/-1) src/maasserver/regiondservices/tests/test_syslog.py (+1/-1) src/maasserver/rpc/regionservice.py (+8/-8) src/maasserver/rpc/testing/fixtures.py (+6/-6) src/maasserver/rpc/testing/mixins.py (+1/-1) src/maasserver/rpc/tests/test_boot.py (+1/-1) src/maasserver/rpc/tests/test_configuration.py (+1/-1) src/maasserver/rpc/tests/test_rackcontrollers.py (+1/-1) src/maasserver/rpc/tests/test_regionservice_calls.py (+4/-4) src/maasserver/sequence.py (+1/-1) src/maasserver/stats.py (+1/-1) src/maasserver/status_monitor.py (+1/-3) src/maasserver/storage_layouts.py (+7/-13) src/maasserver/testing/api.py (+2/-2) src/maasserver/testing/database.py (+2/-2) src/maasserver/testing/eventloop.py (+3/-3) src/maasserver/testing/fixtures.py (+1/-1) src/maasserver/testing/matchers.py (+2/-2) src/maasserver/testing/orm.py (+2/-2) src/maasserver/testing/resources.py (+1/-1) src/maasserver/testing/testcase.py (+12/-12) src/maasserver/testing/testclient.py (+6/-6) src/maasserver/tests/test_bootresources.py (+3/-3) src/maasserver/tests/test_bootsources.py (+5/-5) src/maasserver/tests/test_commands_edit_named_options.py (+1/-1) src/maasserver/tests/test_ipc.py (+1/-1) src/maasserver/tests/test_ntp.py (+3/-3) src/maasserver/tests/test_plugin.py (+2/-2) src/maasserver/tests/test_preseed.py (+1/-1) src/maasserver/tests/test_proxyconfig.py (+1/-1) src/maasserver/tests/test_start_up.py (+3/-3) src/maasserver/tests/test_webapp.py (+1/-1) src/maasserver/triggers/tests/test_websocket_listener.py (+1/-1) src/maasserver/utils/asynchronous.py (+1/-1) src/maasserver/utils/dblocks.py (+2/-2) src/maasserver/utils/dbtasks.py (+3/-3) src/maasserver/utils/orm.py (+2/-2) src/maasserver/utils/signals.py (+1/-1) src/maasserver/utils/tests/test_dblocks.py (+1/-1) src/maasserver/utils/tests/test_keys.py (+1/-1) src/maasserver/utils/tests/test_orm.py (+3/-3) src/maasserver/utils/tests/test_utils.py (+1/-1) src/maasserver/utils/tests/test_views.py (+1/-1) src/maasserver/utils/views.py (+4/-6) src/maasserver/views/tests/test_rpc.py (+1/-1) src/maasserver/webapp.py (+6/-8) src/maasserver/websockets/base.py (+1/-3) src/maasserver/websockets/handlers/device.py (+2/-2) src/maasserver/websockets/handlers/discovery.py (+1/-1) src/maasserver/websockets/handlers/event.py (+1/-1) src/maasserver/websockets/handlers/pod.py (+1/-1) src/maasserver/websockets/handlers/sshkey.py (+1/-3) src/maasserver/websockets/handlers/sslkey.py (+1/-3) src/maasserver/websockets/handlers/staticroute.py (+3/-3) src/maasserver/websockets/handlers/switch.py (+1/-1) src/maasserver/websockets/handlers/tests/test_bootresource.py (+3/-3) src/maasserver/websockets/handlers/timestampedmodel.py (+1/-1) src/maasserver/websockets/handlers/token.py (+1/-3) src/maasserver/websockets/handlers/user.py (+1/-1) src/maasserver/websockets/handlers/vlan.py (+2/-2) src/maasserver/websockets/tests/test_websockets.py (+3/-3) src/maasserver/workers.py (+3/-3) src/maastesting/crochet.py (+1/-1) src/maastesting/djangoloader.py (+2/-2) src/maastesting/djangotestcase.py (+2/-2) src/maastesting/doubles.py (+1/-1) src/maastesting/fixtures.py (+10/-10) src/maastesting/httpd.py (+2/-2) src/maastesting/matchers.py (+7/-7) src/maastesting/noseplug.py (+11/-11) src/maastesting/parallel.py (+2/-2) src/maastesting/runtest.py (+3/-3) src/maastesting/scenarios.py (+1/-1) src/maastesting/testcase.py (+6/-6) src/maastesting/tests/test_fixtures.py (+1/-1) src/maastesting/tests/test_httpd.py (+1/-1) src/maastesting/tests/test_parallel.py (+3/-3) src/maastesting/twisted.py (+2/-2) src/maastesting/typecheck.py (+2/-2) src/metadataserver/api_twisted.py (+1/-3) src/metadataserver/fields.py (+1/-1) src/metadataserver/migrations/0009_remove_noderesult_schema.py (+1/-1) src/metadataserver/tests/test_api.py (+5/-5) src/metadataserver/user_data/templates/snippets/tests/test_maas_wipe.py (+1/-1) src/provisioningserver/boot/__init__.py (+2/-2) src/provisioningserver/boot/pxe.py (+1/-1) src/provisioningserver/boot/tests/test_tftppath.py (+1/-1) src/provisioningserver/boot/tests/test_windows.py (+1/-1) src/provisioningserver/config.py (+5/-5) src/provisioningserver/dhcp/__init__.py (+1/-1) src/provisioningserver/dns/tests/test_actions.py (+1/-1) src/provisioningserver/dns/zoneconfig.py (+2/-4) src/provisioningserver/drivers/hardware/seamicro.py (+1/-1) src/provisioningserver/drivers/hardware/tests/test_vmware.py (+2/-2) src/provisioningserver/drivers/hardware/ucsm.py (+1/-1) src/provisioningserver/drivers/hardware/virsh.py (+1/-1) src/provisioningserver/drivers/hardware/vmware.py (+1/-1) src/provisioningserver/drivers/nos/__init__.py (+1/-1) src/provisioningserver/drivers/nos/tests/test_base.py (+2/-2) src/provisioningserver/drivers/nos/tests/test_registry.py (+1/-1) src/provisioningserver/drivers/osystem/tests/test_base.py (+1/-1) src/provisioningserver/drivers/pod/__init__.py (+1/-1) src/provisioningserver/drivers/pod/tests/test_base.py (+1/-1) src/provisioningserver/drivers/pod/tests/test_lxd.py (+2/-2) src/provisioningserver/drivers/pod/tests/test_registry.py (+1/-1) src/provisioningserver/drivers/pod/virsh.py (+1/-1) src/provisioningserver/drivers/power/__init__.py (+1/-1) src/provisioningserver/drivers/power/tests/test_amt.py (+1/-1) src/provisioningserver/drivers/power/tests/test_base.py (+3/-3) src/provisioningserver/drivers/tests/test_base.py (+1/-1) src/provisioningserver/events.py (+1/-1) src/provisioningserver/import_images/download_descriptions.py (+2/-2) src/provisioningserver/import_images/download_resources.py (+1/-1) src/provisioningserver/import_images/tests/test_boot_resources.py (+1/-1) src/provisioningserver/logger/_twisted.py (+1/-1) src/provisioningserver/logger/tests/test__twisted.py (+1/-1) src/provisioningserver/ntp/tests/test_config.py (+1/-1) src/provisioningserver/proxy/tests/test_config.py (+1/-1) src/provisioningserver/rackdservices/dhcp_probe_service.py (+1/-3) src/provisioningserver/rackdservices/image_download_service.py (+1/-3) src/provisioningserver/rackdservices/lease_socket_service.py (+2/-2) src/provisioningserver/rackdservices/networks_monitoring_service.py (+1/-1) src/provisioningserver/rackdservices/node_power_monitor_service.py (+1/-3) src/provisioningserver/rackdservices/service_monitor_service.py (+1/-3) src/provisioningserver/rackdservices/tests/test_service_monitor_service.py (+1/-1) src/provisioningserver/rackdservices/tests/test_tftp.py (+1/-1) src/provisioningserver/rackdservices/tftp.py (+3/-5) src/provisioningserver/rackdservices/tftp_offload.py (+3/-5) src/provisioningserver/rpc/arguments.py (+12/-12) src/provisioningserver/rpc/clusterservice.py (+6/-8) src/provisioningserver/rpc/common.py (+9/-9) src/provisioningserver/rpc/exceptions.py (+1/-1) src/provisioningserver/rpc/testing/__init__.py (+5/-5) src/provisioningserver/rpc/testing/doubles.py (+1/-1) src/provisioningserver/rpc/tests/test_boot_images.py (+1/-1) src/provisioningserver/rpc/tests/test_clusterservice.py (+2/-2) src/provisioningserver/rpc/tests/test_dhcp.py (+2/-2) src/provisioningserver/rpc/tests/test_power.py (+5/-5) src/provisioningserver/rpc/tests/test_tags.py (+1/-1) src/provisioningserver/syslog/tests/test_config.py (+1/-1) src/provisioningserver/testing/bindfixture.py (+6/-6) src/provisioningserver/testing/config.py (+5/-5) src/provisioningserver/testing/events.py (+1/-1) src/provisioningserver/testing/nginxfixture.py (+6/-6) src/provisioningserver/tests/test_cluster_config_command.py (+1/-1) src/provisioningserver/tests/test_monkey.py (+1/-1) src/provisioningserver/tests/test_plugin.py (+1/-1) src/provisioningserver/tests/test_register_command.py (+1/-1) src/provisioningserver/tests/test_support_dump.py (+1/-1) src/provisioningserver/tests/test_tags.py (+5/-5) src/provisioningserver/utils/__init__.py (+1/-1) src/provisioningserver/utils/config.py (+1/-1) src/provisioningserver/utils/fs.py (+4/-4) src/provisioningserver/utils/network.py (+1/-1) src/provisioningserver/utils/script.py (+1/-1) src/provisioningserver/utils/service_monitor.py (+1/-1) src/provisioningserver/utils/testing.py (+3/-3) src/provisioningserver/utils/tests/test_config.py (+1/-1) src/provisioningserver/utils/tests/test_env.py (+1/-1) src/provisioningserver/utils/tests/test_fs.py (+2/-2) src/provisioningserver/utils/tests/test_registry.py (+1/-1) src/provisioningserver/utils/tests/test_script.py (+1/-1) src/provisioningserver/utils/tests/test_services.py (+1/-1) src/provisioningserver/utils/tests/test_twisted.py (+5/-5) src/provisioningserver/utils/tests/test_version.py (+1/-1) src/provisioningserver/utils/tests/test_xpath.py (+1/-1) src/provisioningserver/utils/twisted.py (+8/-8) |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Adam Collard (community) | Approve | ||
MAAS Lander | Approve | ||
Review via email: mp+386103@code.launchpad.net |
Commit message
Use Python 3 super calls where possible
Description of the change
To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
LANDING
-b super3 lp:~d0ugal/maas/+git/maas into -b master lp:~maas-committers/maas
STATUS: FAILED BUILD
LOG: http://
Revision history for this message
MAAS Lander (maas-lander) wrote : | # |
LANDING
-b super3 lp:~d0ugal/maas/+git/maas into -b master lp:~maas-committers/maas
STATUS: FAILED BUILD
LOG: http://
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/src/apiclient/maas_client.py b/src/apiclient/maas_client.py |
2 | index 89e2a3b..fd4b2d8 100644 |
3 | --- a/src/apiclient/maas_client.py |
4 | +++ b/src/apiclient/maas_client.py |
5 | @@ -75,11 +75,7 @@ class RequestWithMethod(urllib.request.Request): |
6 | urllib.request.Request.__init__(self, *args, **kwargs) |
7 | |
8 | def get_method(self): |
9 | - return ( |
10 | - self._method |
11 | - if self._method |
12 | - else super(RequestWithMethod, self).get_method() |
13 | - ) |
14 | + return self._method if self._method else super().get_method() |
15 | |
16 | |
17 | class MAASDispatcher: |
18 | diff --git a/src/apiclient/testing/django.py b/src/apiclient/testing/django.py |
19 | index 41fcdb7..3a7cf9c 100644 |
20 | --- a/src/apiclient/testing/django.py |
21 | +++ b/src/apiclient/testing/django.py |
22 | @@ -23,7 +23,7 @@ class APIClientTestCase(MAASTestCase): |
23 | """ |
24 | |
25 | def setUp(self): |
26 | - super(APIClientTestCase, self).setUp() |
27 | + super().setUp() |
28 | # Django 1.8 and 1.11 need to be configured before we can use |
29 | # WSGIRequest and MultiPartParser. |
30 | if not django.conf.settings.configured: |
31 | @@ -33,7 +33,7 @@ class APIClientTestCase(MAASTestCase): |
32 | # Reset django settings after each test since configuring Django breaks |
33 | # tests for maascli commands which attempt to really load Django. |
34 | django.conf.settings = django.conf.LazySettings() |
35 | - super(APIClientTestCase, self).tearDown() |
36 | + super().tearDown() |
37 | |
38 | @classmethod |
39 | def parse_headers_and_body_with_django(cls, headers, body): |
40 | diff --git a/src/maascli/api.py b/src/maascli/api.py |
41 | index 6f7ffd2..a0bd96a 100644 |
42 | --- a/src/maascli/api.py |
43 | +++ b/src/maascli/api.py |
44 | @@ -92,7 +92,7 @@ class Action(Command): |
45 | op = property(lambda self: self.action["op"]) |
46 | |
47 | def __init__(self, parser): |
48 | - super(Action, self).__init__(parser) |
49 | + super().__init__(parser) |
50 | for param in self.handler["params"]: |
51 | parser.add_argument(param) |
52 | parser.add_argument("data", type=self.name_value_pair, nargs="*") |
53 | diff --git a/src/maascli/cli.py b/src/maascli/cli.py |
54 | index 673e93c..44f2c41 100644 |
55 | --- a/src/maascli/cli.py |
56 | +++ b/src/maascli/cli.py |
57 | @@ -37,7 +37,7 @@ class cmd_login(Command): |
58 | """ |
59 | |
60 | def __init__(self, parser): |
61 | - super(cmd_login, self).__init__(parser) |
62 | + super().__init__(parser) |
63 | parser.add_argument( |
64 | "profile_name", |
65 | metavar="profile-name", |
66 | @@ -150,7 +150,7 @@ class cmd_logout(Command): |
67 | """ |
68 | |
69 | def __init__(self, parser): |
70 | - super(cmd_logout, self).__init__(parser) |
71 | + super().__init__(parser) |
72 | parser.add_argument( |
73 | "profile_name", |
74 | metavar="profile-name", |
75 | diff --git a/src/maascli/command.py b/src/maascli/command.py |
76 | index 4c3372f..82c9629 100644 |
77 | --- a/src/maascli/command.py |
78 | +++ b/src/maascli/command.py |
79 | @@ -21,7 +21,7 @@ class Command(metaclass=ABCMeta): |
80 | hidden = False |
81 | |
82 | def __init__(self, parser): |
83 | - super(Command, self).__init__() |
84 | + super().__init__() |
85 | self.parser = parser |
86 | |
87 | @abstractmethod |
88 | diff --git a/src/maascli/parser.py b/src/maascli/parser.py |
89 | index 36abc16..7eef93b 100644 |
90 | --- a/src/maascli/parser.py |
91 | +++ b/src/maascli/parser.py |
92 | @@ -35,7 +35,7 @@ class ArgumentParser(argparse.ArgumentParser): |
93 | kwargs.setdefault( |
94 | "formatter_class", argparse.RawDescriptionHelpFormatter |
95 | ) |
96 | - super(ArgumentParser, self).__init__(*args, **kwargs) |
97 | + super().__init__(*args, **kwargs) |
98 | |
99 | def add_subparsers(self, title="drill down", metavar="COMMAND", **kwargs): |
100 | assert ( |
101 | diff --git a/src/maascli/snappy.py b/src/maascli/snappy.py |
102 | index 848ad68..fced691 100644 |
103 | --- a/src/maascli/snappy.py |
104 | +++ b/src/maascli/snappy.py |
105 | @@ -848,7 +848,7 @@ class cmd_init(SnappyCommand): |
106 | """ |
107 | |
108 | def __init__(self, parser): |
109 | - super(cmd_init, self).__init__(parser) |
110 | + super().__init__(parser) |
111 | monkey_patch_for_all_mode_bw_compatability(parser) |
112 | subparsers = parser.add_subparsers( |
113 | metavar=None, title="run modes", dest="run_mode" |
114 | @@ -1116,7 +1116,7 @@ class cmd_config(SnappyCommand): |
115 | } |
116 | |
117 | def __init__(self, parser): |
118 | - super(cmd_config, self).__init__(parser) |
119 | + super().__init__(parser) |
120 | parser.add_argument( |
121 | "--show", |
122 | action="store_true", |
123 | @@ -1298,7 +1298,7 @@ class cmd_migrate(SnappyCommand): |
124 | """Perform migrations on connected database.""" |
125 | |
126 | def __init__(self, parser): |
127 | - super(cmd_migrate, self).__init__(parser) |
128 | + super().__init__(parser) |
129 | # '--configure' is hidden and only called from snap hooks to update the |
130 | # database when running in "all" mode |
131 | parser.add_argument( |
132 | diff --git a/src/maascli/tests/test_snappy.py b/src/maascli/tests/test_snappy.py |
133 | index 4e892d2..ed0aaf7 100644 |
134 | --- a/src/maascli/tests/test_snappy.py |
135 | +++ b/src/maascli/tests/test_snappy.py |
136 | @@ -26,7 +26,7 @@ from maastesting.testcase import MAASTestCase |
137 | |
138 | class TestHelpers(MAASTestCase): |
139 | def setUp(self): |
140 | - super(TestHelpers, self).setUp() |
141 | + super().setUp() |
142 | snap_common = self.make_dir() |
143 | snap_data = self.make_dir() |
144 | self.environ = {"SNAP_COMMON": snap_common, "SNAP_DATA": snap_data} |
145 | @@ -197,7 +197,7 @@ class TestRenderSupervisord(MAASTestCase): |
146 | ) |
147 | |
148 | def setUp(self): |
149 | - super(TestRenderSupervisord, self).setUp() |
150 | + super().setUp() |
151 | snap = self.make_dir() |
152 | maas_share = os.path.join(snap, "usr", "share", "maas") |
153 | os.makedirs(maas_share) |
154 | @@ -304,7 +304,7 @@ class TestSupervisordHelpers(MAASTestCase): |
155 | |
156 | class TestConfigHelpers(MAASTestCase): |
157 | def setUp(self): |
158 | - super(TestConfigHelpers, self).setUp() |
159 | + super().setUp() |
160 | snap_data = self.make_dir() |
161 | self.environ = {"SNAP_DATA": snap_data} |
162 | self.regiond_path = os.path.join(snap_data, "regiond.conf") |
163 | diff --git a/src/maasserver/api/auth.py b/src/maasserver/api/auth.py |
164 | index 5e862e2..5bab847 100644 |
165 | --- a/src/maasserver/api/auth.py |
166 | +++ b/src/maasserver/api/auth.py |
167 | @@ -23,7 +23,7 @@ class OAuthUnauthorized(Unauthorized): |
168 | """Unauthorized error for OAuth signed requests with invalid tokens.""" |
169 | |
170 | def __init__(self, error): |
171 | - super(OAuthUnauthorized, self).__init__() |
172 | + super().__init__() |
173 | self.error = error |
174 | # When the error is an authentication error, use a more |
175 | # user-friendly error message. |
176 | diff --git a/src/maasserver/api/support.py b/src/maasserver/api/support.py |
177 | index 134298d..ba0729f 100644 |
178 | --- a/src/maasserver/api/support.py |
179 | +++ b/src/maasserver/api/support.py |
180 | @@ -53,7 +53,7 @@ class OperationsResource(Resource): |
181 | return False |
182 | |
183 | def __call__(self, request, *args, **kwargs): |
184 | - upcall = super(OperationsResource, self).__call__ |
185 | + upcall = super().__call__ |
186 | response = upcall(request, *args, **kwargs) |
187 | response["X-MAAS-API-Hash"] = get_api_description_hash() |
188 | return response |
189 | @@ -96,14 +96,12 @@ class RestrictedResource(OperationsResource): |
190 | handler = RestrictedResource(HandlerClass, authentication=[]) |
191 | |
192 | """ |
193 | - super(RestrictedResource, self).__init__(handler, authentication) |
194 | + super().__init__(handler, authentication) |
195 | if not self.is_authentication_attempted: |
196 | raise AssertionError("Authentication must be attempted.") |
197 | |
198 | def authenticate(self, request, rm): |
199 | - actor, anonymous = super(RestrictedResource, self).authenticate( |
200 | - request, rm |
201 | - ) |
202 | + actor, anonymous = super().authenticate(request, rm) |
203 | if not anonymous and not request.user.is_active: |
204 | raise PermissionDenied("User is not allowed access to this API.") |
205 | else: |
206 | @@ -114,9 +112,7 @@ class AdminRestrictedResource(RestrictedResource): |
207 | """A resource that's restricted to administrators.""" |
208 | |
209 | def authenticate(self, request, rm): |
210 | - actor, anonymous = super(AdminRestrictedResource, self).authenticate( |
211 | - request, rm |
212 | - ) |
213 | + actor, anonymous = super().authenticate(request, rm) |
214 | if anonymous or not request.user.is_superuser: |
215 | raise PermissionDenied("User is not allowed access to this API.") |
216 | else: |
217 | diff --git a/src/maasserver/api/tests/test_api.py b/src/maasserver/api/tests/test_api.py |
218 | index 3957cc2..50464ec 100644 |
219 | --- a/src/maasserver/api/tests/test_api.py |
220 | +++ b/src/maasserver/api/tests/test_api.py |
221 | @@ -148,7 +148,7 @@ class TestStoreNodeParameters(APITestCase.ForUser): |
222 | """Tests for `store_node_power_parameters`.""" |
223 | |
224 | def setUp(self): |
225 | - super(TestStoreNodeParameters, self).setUp() |
226 | + super().setUp() |
227 | self.node = factory.make_Node() |
228 | self.save = self.patch(self.node, "save") |
229 | self.request = Mock() |
230 | diff --git a/src/maasserver/api/tests/test_boot_source_selections.py b/src/maasserver/api/tests/test_boot_source_selections.py |
231 | index fd882c8..6a35df6 100644 |
232 | --- a/src/maasserver/api/tests/test_boot_source_selections.py |
233 | +++ b/src/maasserver/api/tests/test_boot_source_selections.py |
234 | @@ -32,7 +32,7 @@ def get_boot_source_selection_uri(boot_source_selection): |
235 | |
236 | class TestBootSourceSelectionAPI(APITestCase.ForUser): |
237 | def setUp(self): |
238 | - super(TestBootSourceSelectionAPI, self).setUp() |
239 | + super().setUp() |
240 | # Disable boot source cache signals. |
241 | self.addCleanup(bootsources.signals.enable) |
242 | bootsources.signals.disable() |
243 | @@ -138,7 +138,7 @@ class TestBootSourceSelectionsAPI(APITestCase.ForUser): |
244 | """Test the the boot source selections API.""" |
245 | |
246 | def setUp(self): |
247 | - super(TestBootSourceSelectionsAPI, self).setUp() |
248 | + super().setUp() |
249 | # Disable boot source cache signals. |
250 | self.addCleanup(bootsources.signals.enable) |
251 | bootsources.signals.disable() |
252 | diff --git a/src/maasserver/api/tests/test_boot_sources.py b/src/maasserver/api/tests/test_boot_sources.py |
253 | index 1a0bf8e..c16d8ca 100644 |
254 | --- a/src/maasserver/api/tests/test_boot_sources.py |
255 | +++ b/src/maasserver/api/tests/test_boot_sources.py |
256 | @@ -27,7 +27,7 @@ def get_boot_source_uri(boot_source): |
257 | |
258 | class TestBootSourceAPI(APITestCase.ForUser): |
259 | def setUp(self): |
260 | - super(TestBootSourceAPI, self).setUp() |
261 | + super().setUp() |
262 | # Disable boot source cache signals. |
263 | self.addCleanup(bootsources.signals.enable) |
264 | bootsources.signals.disable() |
265 | @@ -116,7 +116,7 @@ class TestBootSourcesAPI(APITestCase.ForUser): |
266 | """Test the the boot source API.""" |
267 | |
268 | def setUp(self): |
269 | - super(TestBootSourcesAPI, self).setUp() |
270 | + super().setUp() |
271 | # Disable boot source cache signals. |
272 | self.addCleanup(bootsources.signals.enable) |
273 | bootsources.signals.disable() |
274 | diff --git a/src/maasserver/api/tests/test_doc.py b/src/maasserver/api/tests/test_doc.py |
275 | index 8e5bca0..770730b 100644 |
276 | --- a/src/maasserver/api/tests/test_doc.py |
277 | +++ b/src/maasserver/api/tests/test_doc.py |
278 | @@ -275,7 +275,7 @@ class TestDescribingAPI(MAASTestCase): |
279 | """Tests for functions that describe a Piston API.""" |
280 | |
281 | def setUp(self): |
282 | - super(TestDescribingAPI, self).setUp() |
283 | + super().setUp() |
284 | # Override config maas url so that it's stable for testing. |
285 | self.useFixture( |
286 | RegionConfigurationFixture(maas_url="http://example.com/") |
287 | @@ -625,7 +625,7 @@ class TestGetAPIDescriptionHash(MAASTestCase): |
288 | """Tests for `get_api_description_hash`.""" |
289 | |
290 | def setUp(self): |
291 | - super(TestGetAPIDescriptionHash, self).setUp() |
292 | + super().setUp() |
293 | self.addCleanup(self.clear_hash_cache) |
294 | self.clear_hash_cache() |
295 | |
296 | diff --git a/src/maasserver/api/tests/test_machine.py b/src/maasserver/api/tests/test_machine.py |
297 | index 242c82c..f95def4 100644 |
298 | --- a/src/maasserver/api/tests/test_machine.py |
299 | +++ b/src/maasserver/api/tests/test_machine.py |
300 | @@ -94,7 +94,7 @@ class MachinesAPILoggedInTest(APITestCase.ForUserAndAdmin): |
301 | """A logged-in user can access the API.""" |
302 | |
303 | def setUp(self): |
304 | - super(MachinesAPILoggedInTest, self).setUp() |
305 | + super().setUp() |
306 | self.patch(node_module, "wait_for_power_command") |
307 | self.patch(node_module.Node, "_start") |
308 | |
309 | @@ -121,7 +121,7 @@ class TestMachineAPI(APITestCase.ForUser): |
310 | clientfactories = {"oauth": MAASSensibleOAuthClient} |
311 | |
312 | def setUp(self): |
313 | - super(TestMachineAPI, self).setUp() |
314 | + super().setUp() |
315 | self.patch(node_module.Node, "_pc_power_control_node") |
316 | |
317 | def test_handler_path(self): |
318 | diff --git a/src/maasserver/api/tests/test_machines.py b/src/maasserver/api/tests/test_machines.py |
319 | index f232844..a914b03 100644 |
320 | --- a/src/maasserver/api/tests/test_machines.py |
321 | +++ b/src/maasserver/api/tests/test_machines.py |
322 | @@ -815,7 +815,7 @@ class TestMachinesAPI(APITestCase.ForUser): |
323 | |
324 | def __init__(self, *args, **kwargs): |
325 | passed_pods.extend(kwargs["pods"]) |
326 | - super(FakeComposer, self).__init__(*args, **kwargs) |
327 | + super().__init__(*args, **kwargs) |
328 | |
329 | def compose(self): |
330 | return factory.make_Node( |
331 | @@ -3529,7 +3529,7 @@ class TestMachinesAPI(APITestCase.ForUser): |
332 | |
333 | class TestPowerState(APITransactionTestCase.ForUser): |
334 | def setUp(self): |
335 | - super(TestPowerState, self).setUp() |
336 | + super().setUp() |
337 | self.useFixture(RegionEventLoopFixture("database-tasks", "rpc")) |
338 | self.useFixture(RunningEventLoopFixture()) |
339 | |
340 | diff --git a/src/maasserver/api/tests/test_node.py b/src/maasserver/api/tests/test_node.py |
341 | index 72b419b..c49b4ab 100644 |
342 | --- a/src/maasserver/api/tests/test_node.py |
343 | +++ b/src/maasserver/api/tests/test_node.py |
344 | @@ -69,7 +69,7 @@ class NodesAPILoggedInTest(APITestCase.ForUserAndAdmin): |
345 | """A logged-in user can access the API.""" |
346 | |
347 | def setUp(self): |
348 | - super(NodesAPILoggedInTest, self).setUp() |
349 | + super().setUp() |
350 | self.patch(node_module, "wait_for_power_command") |
351 | |
352 | def test_nodes_GET_logged_in(self): |
353 | diff --git a/src/maasserver/bootresources.py b/src/maasserver/bootresources.py |
354 | index 3cf6c30..fb4447b 100644 |
355 | --- a/src/maasserver/bootresources.py |
356 | +++ b/src/maasserver/bootresources.py |
357 | @@ -1090,7 +1090,7 @@ class BootResourceRepoWriter(BasicMirrorWriter): |
358 | assert isinstance(store, BootResourceStore) |
359 | self.store = store |
360 | self.product_mapping = product_mapping |
361 | - super(BootResourceRepoWriter, self).__init__( |
362 | + super().__init__( |
363 | config={ |
364 | # Only download the latest version. Without this all versions |
365 | # will be downloaded from simplestreams. |
366 | @@ -1507,9 +1507,7 @@ class ImportResourcesService(TimerService, object): |
367 | """ |
368 | |
369 | def __init__(self, interval=IMPORT_RESOURCES_SERVICE_PERIOD): |
370 | - super(ImportResourcesService, self).__init__( |
371 | - interval.total_seconds(), self.maybe_import_resources |
372 | - ) |
373 | + super().__init__(interval.total_seconds(), self.maybe_import_resources) |
374 | |
375 | def maybe_import_resources(self): |
376 | def determine_auto(): |
377 | @@ -1543,9 +1541,7 @@ class ImportResourcesProgressService(TimerService, object): |
378 | """Service to periodically check on the progress of boot imports.""" |
379 | |
380 | def __init__(self, interval=timedelta(minutes=3)): |
381 | - super(ImportResourcesProgressService, self).__init__( |
382 | - interval.total_seconds(), self.try_check_boot_images |
383 | - ) |
384 | + super().__init__(interval.total_seconds(), self.try_check_boot_images) |
385 | |
386 | def try_check_boot_images(self): |
387 | return self.check_boot_images().addErrback( |
388 | diff --git a/src/maasserver/clusterrpc/boot_images.py b/src/maasserver/clusterrpc/boot_images.py |
389 | index de7f570..68fe1db 100644 |
390 | --- a/src/maasserver/clusterrpc/boot_images.py |
391 | +++ b/src/maasserver/clusterrpc/boot_images.py |
392 | @@ -262,7 +262,7 @@ class RackControllersImporter: |
393 | :param proxy: The HTTP/HTTPS proxy to use, or `None` |
394 | :type proxy: :class:`urlparse.ParseResult` or string |
395 | """ |
396 | - super(RackControllersImporter, self).__init__() |
397 | + super().__init__() |
398 | self.system_ids = tuple(flatten(system_ids)) |
399 | if isinstance(sources, Sequence): |
400 | self.sources = sources |
401 | diff --git a/src/maasserver/clusterrpc/tests/test_boot_images.py b/src/maasserver/clusterrpc/tests/test_boot_images.py |
402 | index f557025..399fee4 100644 |
403 | --- a/src/maasserver/clusterrpc/tests/test_boot_images.py |
404 | +++ b/src/maasserver/clusterrpc/tests/test_boot_images.py |
405 | @@ -156,7 +156,7 @@ class TestGetBootImages(MAASServerTestCase): |
406 | """Tests for `get_boot_images`.""" |
407 | |
408 | def setUp(self): |
409 | - super(TestGetBootImages, self).setUp() |
410 | + super().setUp() |
411 | prepare_tftp_root(self) # Sets self.tftp_root. |
412 | |
413 | def test_calls_ListBootImagesV2_before_ListBootImages(self): |
414 | @@ -189,7 +189,7 @@ class TestGetBootImagesTxn(MAASTransactionServerTestCase): |
415 | """Transactional tests for `get_boot_images`.""" |
416 | |
417 | def setUp(self): |
418 | - super(TestGetBootImagesTxn, self).setUp() |
419 | + super().setUp() |
420 | prepare_tftp_root(self) # Sets self.tftp_root. |
421 | |
422 | def test_returns_boot_images(self): |
423 | @@ -227,7 +227,7 @@ class TestGetAvailableBootImages(MAASTransactionServerTestCase): |
424 | ) |
425 | |
426 | def setUp(self): |
427 | - super(TestGetAvailableBootImages, self).setUp() |
428 | + super().setUp() |
429 | prepare_tftp_root(self) # Sets self.tftp_root. |
430 | |
431 | def test_returns_boot_images_for_one_cluster(self): |
432 | @@ -337,7 +337,7 @@ class TestGetBootImagesFor(MAASTransactionServerTestCase): |
433 | """Tests for `get_boot_images_for`.""" |
434 | |
435 | def setUp(self): |
436 | - super(TestGetBootImagesFor, self).setUp() |
437 | + super().setUp() |
438 | prepare_tftp_root(self) # Sets self.tftp_root. |
439 | |
440 | def make_boot_images(self): |
441 | @@ -564,7 +564,7 @@ class TestRackControllersImporterInAction(MAASTransactionServerTestCase): |
442 | """Live tests for `RackControllersImporter`.""" |
443 | |
444 | def setUp(self): |
445 | - super(TestRackControllersImporterInAction, self).setUp() |
446 | + super().setUp() |
447 | # Limit the region's event loop to only the "rpc" service. |
448 | self.useFixture(RegionEventLoopFixture("rpc")) |
449 | # Now start the region's event loop. |
450 | diff --git a/src/maasserver/config_forms.py b/src/maasserver/config_forms.py |
451 | index fc2953b..155e4cd 100644 |
452 | --- a/src/maasserver/config_forms.py |
453 | +++ b/src/maasserver/config_forms.py |
454 | @@ -275,7 +275,7 @@ class DictCharWidget(forms.widgets.MultiWidget): |
455 | self.initials = initials |
456 | self.labels = labels |
457 | self.skip_check = skip_check |
458 | - super(DictCharWidget, self).__init__(widgets, attrs) |
459 | + super().__init__(widgets, attrs) |
460 | |
461 | def render(self, name, value, attrs=None): |
462 | # value is a list of values, each corresponding to a widget |
463 | diff --git a/src/maasserver/dns/tests/test_config.py b/src/maasserver/dns/tests/test_config.py |
464 | index 3d955c7..2e23102 100644 |
465 | --- a/src/maasserver/dns/tests/test_config.py |
466 | +++ b/src/maasserver/dns/tests/test_config.py |
467 | @@ -91,7 +91,7 @@ class TestDNSServer(MAASServerTestCase): |
468 | """ |
469 | |
470 | def setUp(self): |
471 | - super(TestDNSServer, self).setUp() |
472 | + super().setUp() |
473 | # Ensure there's an initial DNS publication. Outside of tests this is |
474 | # guaranteed by a migration. |
475 | DNSPublication(source="Initial").save() |
476 | @@ -482,7 +482,7 @@ class TestGetTrustedAcls(MAASServerTestCase): |
477 | """Test for maasserver/dns/config.py:get_trusted_acls()""" |
478 | |
479 | def setUp(self): |
480 | - super(TestGetTrustedAcls, self).setUp() |
481 | + super().setUp() |
482 | self.useFixture(RegionConfigurationFixture()) |
483 | |
484 | def test_returns_empty_string_if_no_networks(self): |
485 | @@ -511,7 +511,7 @@ class TestGetTrustedNetworks(MAASServerTestCase): |
486 | """Test for maasserver/dns/config.py:get_trusted_networks()""" |
487 | |
488 | def setUp(self): |
489 | - super(TestGetTrustedNetworks, self).setUp() |
490 | + super().setUp() |
491 | self.useFixture(RegionConfigurationFixture()) |
492 | |
493 | def test_returns_empty_string_if_no_networks(self): |
494 | diff --git a/src/maasserver/dns/tests/test_zonegenerator.py b/src/maasserver/dns/tests/test_zonegenerator.py |
495 | index f47f7d1..0d48710 100644 |
496 | --- a/src/maasserver/dns/tests/test_zonegenerator.py |
497 | +++ b/src/maasserver/dns/tests/test_zonegenerator.py |
498 | @@ -329,7 +329,7 @@ class TestZoneGenerator(MAASServerTestCase): |
499 | """Tests for :class:`ZoneGenerator`.""" |
500 | |
501 | def setUp(self): |
502 | - super(TestZoneGenerator, self).setUp() |
503 | + super().setUp() |
504 | self.useFixture(RegionConfigurationFixture()) |
505 | |
506 | def test_empty_yields_nothing(self): |
507 | diff --git a/src/maasserver/dns/zonegenerator.py b/src/maasserver/dns/zonegenerator.py |
508 | index cda8222..7decc8d 100644 |
509 | --- a/src/maasserver/dns/zonegenerator.py |
510 | +++ b/src/maasserver/dns/zonegenerator.py |
511 | @@ -39,7 +39,7 @@ class lazydict(dict): |
512 | __slots__ = ("factory",) |
513 | |
514 | def __init__(self, factory): |
515 | - super(lazydict, self).__init__() |
516 | + super().__init__() |
517 | self.factory = factory |
518 | |
519 | def __missing__(self, key): |
520 | diff --git a/src/maasserver/eventloop.py b/src/maasserver/eventloop.py |
521 | index fa18ba6..f5b3e4c 100644 |
522 | --- a/src/maasserver/eventloop.py |
523 | +++ b/src/maasserver/eventloop.py |
524 | @@ -392,7 +392,7 @@ class RegionEventLoop: |
525 | } |
526 | |
527 | def __init__(self): |
528 | - super(RegionEventLoop, self).__init__() |
529 | + super().__init__() |
530 | self.services = MAASServices(self) |
531 | self.handle = None |
532 | self.master = False |
533 | diff --git a/src/maasserver/exceptions.py b/src/maasserver/exceptions.py |
534 | index 8aceaab..e449790 100644 |
535 | --- a/src/maasserver/exceptions.py |
536 | +++ b/src/maasserver/exceptions.py |
537 | @@ -189,11 +189,9 @@ class NodeActionError(MAASException): |
538 | from maasserver.clusterrpc.utils import get_error_message_for_exception |
539 | |
540 | if isinstance(error, Exception): |
541 | - super(NodeActionError, self).__init__( |
542 | - get_error_message_for_exception(error) |
543 | - ) |
544 | + super().__init__(get_error_message_for_exception(error)) |
545 | else: |
546 | - super(NodeActionError, self).__init__(error) |
547 | + super().__init__(error) |
548 | |
549 | |
550 | class UnresolvableHost(MAASException): |
551 | diff --git a/src/maasserver/fields.py b/src/maasserver/fields.py |
552 | index 8aed123..4623422 100644 |
553 | --- a/src/maasserver/fields.py |
554 | +++ b/src/maasserver/fields.py |
555 | @@ -56,7 +56,7 @@ class Field(_BrokenField): |
556 | |
557 | def __init__(self, *args, validators=None, **kwargs): |
558 | kwargs["validators"] = [] if validators is None else validators |
559 | - super(Field, self).__init__(*args, **kwargs) |
560 | + super().__init__(*args, **kwargs) |
561 | |
562 | |
563 | MAC_RE = re.compile( |
564 | @@ -105,7 +105,7 @@ class StrippedCharField(forms.CharField): |
565 | |
566 | def clean(self, value): |
567 | value = self.to_python(value).strip() |
568 | - return super(StrippedCharField, self).clean(value) |
569 | + return super().clean(value) |
570 | |
571 | |
572 | class UnstrippedCharField(forms.CharField): |
573 | @@ -119,7 +119,7 @@ class UnstrippedCharField(forms.CharField): |
574 | def __init__(self, *args, **kwargs): |
575 | # Instead of relying on a version check, we check for CharField |
576 | # constructor having a strip kwarg instead. |
577 | - parent_init = super(UnstrippedCharField, self).__init__ |
578 | + parent_init = super().__init__ |
579 | if "strip" in parent_init.__code__.co_varnames: |
580 | parent_init(*args, strip=False, **kwargs) |
581 | else: |
582 | @@ -135,7 +135,7 @@ class VerboseRegexField(forms.CharField): |
583 | :param regex: Either a string or a compiled regular expression object. |
584 | :param message: Error message to use when the validation fails. |
585 | """ |
586 | - super(VerboseRegexField, self).__init__(*args, **kwargs) |
587 | + super().__init__(*args, **kwargs) |
588 | self.validators.append( |
589 | VerboseRegexValidator(regex=regex, message=message) |
590 | ) |
591 | @@ -145,9 +145,7 @@ class MACAddressFormField(VerboseRegexField): |
592 | """Form field type: MAC address.""" |
593 | |
594 | def __init__(self, *args, **kwargs): |
595 | - super(MACAddressFormField, self).__init__( |
596 | - regex=MAC_RE, message=MAC_ERROR_MSG, *args, **kwargs |
597 | - ) |
598 | + super().__init__(regex=MAC_RE, message=MAC_ERROR_MSG, *args, **kwargs) |
599 | |
600 | |
601 | class MACAddressField(Field): |
602 | @@ -167,7 +165,7 @@ class MACAddressField(Field): |
603 | return MAC(value) |
604 | |
605 | def get_prep_value(self, value): |
606 | - value = super(MACAddressField, self).get_prep_value(value) |
607 | + value = super().get_prep_value(value) |
608 | # Convert empty string to None. |
609 | if not value: |
610 | return None |
611 | @@ -188,9 +186,9 @@ class MAC: |
612 | if value is None: |
613 | return None |
614 | elif isinstance(value, (bytes, str)): |
615 | - return None if len(value) == 0 else super(MAC, cls).__new__(cls) |
616 | + return None if len(value) == 0 else super().__new__(cls) |
617 | else: |
618 | - return super(MAC, cls).__new__(cls) |
619 | + return super().__new__(cls) |
620 | |
621 | def __init__(self, value): |
622 | """Wrap a MAC address, or None, into a `MAC`. |
623 | @@ -362,7 +360,7 @@ class EditableBinaryField(BinaryField): |
624 | """ |
625 | |
626 | def __init__(self, *args, **kwargs): |
627 | - super(EditableBinaryField, self).__init__(*args, **kwargs) |
628 | + super().__init__(*args, **kwargs) |
629 | self.editable = True |
630 | |
631 | def deconstruct(self): |
632 | @@ -493,7 +491,7 @@ class LargeObjectField(IntegerField): |
633 | |
634 | def __init__(self, *args, **kwargs): |
635 | self.block_size = kwargs.pop("block_size", 1 << 16) |
636 | - super(LargeObjectField, self).__init__(*args, **kwargs) |
637 | + super().__init__(*args, **kwargs) |
638 | |
639 | @property |
640 | def validators(self): |
641 | @@ -508,7 +506,7 @@ class LargeObjectField(IntegerField): |
642 | |
643 | def contribute_to_class(self, cls, name): |
644 | """Set the descriptor for the large object.""" |
645 | - super(LargeObjectField, self).contribute_to_class(cls, name) |
646 | + super().contribute_to_class(cls, name) |
647 | setattr(cls, self.name, LargeObjectDescriptor(self)) |
648 | |
649 | def get_db_prep_value(self, value, connection=None, prepared=False): |
650 | @@ -574,7 +572,7 @@ class CIDRField(Field): |
651 | def formfield(self, **kwargs): |
652 | defaults = {"form_class": forms.CharField} |
653 | defaults.update(kwargs) |
654 | - return super(CIDRField, self).formfield(**defaults) |
655 | + return super().formfield(**defaults) |
656 | |
657 | |
658 | class IPv4CIDRField(CIDRField): |
659 | @@ -750,7 +748,7 @@ class CaseInsensitiveChoiceField(forms.ChoiceField): |
660 | def to_python(self, value): |
661 | if value not in self.empty_values: |
662 | value = value.lower() |
663 | - return super(CaseInsensitiveChoiceField, self).to_python(value) |
664 | + return super().to_python(value) |
665 | |
666 | |
667 | class SpecifierOrModelChoiceField(forms.ModelChoiceField): |
668 | @@ -760,7 +758,7 @@ class SpecifierOrModelChoiceField(forms.ModelChoiceField): |
669 | |
670 | def to_python(self, value): |
671 | try: |
672 | - return super(SpecifierOrModelChoiceField, self).to_python(value) |
673 | + return super().to_python(value) |
674 | except ValidationError as e: |
675 | if isinstance(value, str): |
676 | object_id = self.queryset.get_object_id(value) |
677 | @@ -794,10 +792,10 @@ class DomainNameField(CharField): |
678 | validators = kwargs.pop("validators", []) |
679 | validators.append(validate_domain_name) |
680 | kwargs["validators"] = validators |
681 | - super(DomainNameField, self).__init__(*args, **kwargs) |
682 | + super().__init__(*args, **kwargs) |
683 | |
684 | def deconstruct(self): |
685 | - name, path, args, kwargs = super(DomainNameField, self).deconstruct() |
686 | + name, path, args, kwargs = super().deconstruct() |
687 | del kwargs["validators"] |
688 | return name, path, args, kwargs |
689 | |
690 | @@ -808,7 +806,7 @@ class DomainNameField(CharField): |
691 | # https://docs.djangoproject.com/en/1.6/ref/forms/validation/ |
692 | # https://code.djangoproject.com/ticket/6362 |
693 | def to_python(self, value): |
694 | - value = super(DomainNameField, self).to_python(value) |
695 | + value = super().to_python(value) |
696 | if value is None: |
697 | return None |
698 | value = value.strip().rstrip(".") |
699 | diff --git a/src/maasserver/fields_storage.py b/src/maasserver/fields_storage.py |
700 | index f010b9f..65b7875 100644 |
701 | --- a/src/maasserver/fields_storage.py |
702 | +++ b/src/maasserver/fields_storage.py |
703 | @@ -38,7 +38,7 @@ class BytesOrPercentageField(forms.RegexField): |
704 | self.min_value = kwargs.pop("min_value", None) |
705 | self.max_value = kwargs.pop("max_value", None) |
706 | regex = r"^(%s|%s)$" % (PERCENTAGE_REGEX, BYTES_REGEX) |
707 | - super(BytesOrPercentageField, self).__init__(regex, *args, **kwargs) |
708 | + super().__init__(regex, *args, **kwargs) |
709 | |
710 | def to_python(self, value): |
711 | if value is not None: |
712 | @@ -47,7 +47,7 @@ class BytesOrPercentageField(forms.RegexField): |
713 | return value |
714 | |
715 | def clean(self, value): |
716 | - value = super(BytesOrPercentageField, self).clean(value) |
717 | + value = super().clean(value) |
718 | if value is not None: |
719 | # Exit early if this is percentage value. |
720 | if is_percentage(value): |
721 | diff --git a/src/maasserver/forms/__init__.py b/src/maasserver/forms/__init__.py |
722 | index 62e1ecd..3a95695 100644 |
723 | --- a/src/maasserver/forms/__init__.py |
724 | +++ b/src/maasserver/forms/__init__.py |
725 | @@ -210,7 +210,7 @@ class APIEditMixin: |
726 | self.data = get_overridden_query_dict( |
727 | self.initial, self.data, self.fields |
728 | ) |
729 | - super(APIEditMixin, self).full_clean() |
730 | + super().full_clean() |
731 | |
732 | def _post_clean(self): |
733 | """Override Django's private hook _post_save to remove None values |
734 | @@ -221,7 +221,7 @@ class APIEditMixin: |
735 | before that. |
736 | """ |
737 | self.cleaned_data = remove_None_values(self.cleaned_data) |
738 | - super(APIEditMixin, self)._post_clean() |
739 | + super()._post_clean() |
740 | |
741 | |
742 | class WithPowerTypeMixin: |
743 | @@ -232,7 +232,7 @@ class WithPowerTypeMixin: |
744 | """ |
745 | |
746 | def __init__(self, *args, **kwargs): |
747 | - super(WithPowerTypeMixin, self).__init__(*args, **kwargs) |
748 | + super().__init__(*args, **kwargs) |
749 | self.data = self.data.copy() |
750 | WithPowerTypeMixin.set_up_power_fields(self, self.data) |
751 | |
752 | @@ -377,12 +377,12 @@ class WithPowerTypeMixin: |
753 | ) |
754 | |
755 | def clean(self): |
756 | - cleaned_data = super(WithPowerTypeMixin, self).clean() |
757 | + cleaned_data = super().clean() |
758 | return WithPowerTypeMixin.check_driver(self, cleaned_data) |
759 | |
760 | def save(self, *args, **kwargs): |
761 | """Persist the node into the database.""" |
762 | - node = super(WithPowerTypeMixin, self).save() |
763 | + node = super().save() |
764 | WithPowerTypeMixin.set_values(self, node) |
765 | node.save() |
766 | return node |
767 | @@ -423,7 +423,7 @@ class MAASModelForm( |
768 | """ |
769 | |
770 | def __init__(self, data=None, files=None, ui_submission=False, **kwargs): |
771 | - super(MAASModelForm, self).__init__(data=data, files=files, **kwargs) |
772 | + super().__init__(data=data, files=files, **kwargs) |
773 | self.is_update = bool(kwargs.get("instance", None)) |
774 | if ui_submission: |
775 | # Add the ui_submission field. Insert it before the other fields, |
776 | @@ -448,7 +448,7 @@ class MAASModelForm( |
777 | error_dict = errors |
778 | else: |
779 | error_dict = ValidationError({NON_FIELD_ERRORS: errors}) |
780 | - super(MAASModelForm, self)._update_errors(error_dict) |
781 | + super()._update_errors(error_dict) |
782 | |
783 | def use_perms(self): |
784 | """Return True if the form should use permissions.""" |
785 | @@ -607,7 +607,7 @@ class CheckboxInputTrueDefault(CheckboxInput): |
786 | |
787 | class NodeForm(MAASModelForm): |
788 | def __init__(self, request=None, *args, **kwargs): |
789 | - super(NodeForm, self).__init__(*args, **kwargs) |
790 | + super().__init__(*args, **kwargs) |
791 | |
792 | # Even though it doesn't need it and doesn't use it, this form accepts |
793 | # a parameter named 'request' because it is used interchangingly |
794 | @@ -711,7 +711,7 @@ class NodeForm(MAASModelForm): |
795 | |
796 | class MachineForm(NodeForm): |
797 | def __init__(self, request=None, requires_arch=False, *args, **kwargs): |
798 | - super(MachineForm, self).__init__(*args, **kwargs) |
799 | + super().__init__(*args, **kwargs) |
800 | |
801 | # Even though it doesn't need it and doesn't use it, this form accepts |
802 | # a parameter named 'request' because it is used interchangingly |
803 | @@ -817,7 +817,7 @@ class MachineForm(NodeForm): |
804 | return validate_min_hwe_kernel(min_hwe_kernel) |
805 | |
806 | def clean(self): |
807 | - cleaned_data = super(MachineForm, self).clean() |
808 | + cleaned_data = super().clean() |
809 | |
810 | if not self.instance.hwe_kernel: |
811 | osystem = cleaned_data.get("osystem") |
812 | @@ -838,7 +838,7 @@ class MachineForm(NodeForm): |
813 | return cleaned_data |
814 | |
815 | def is_valid(self): |
816 | - is_valid = super(MachineForm, self).is_valid() |
817 | + is_valid = super().is_valid() |
818 | if not is_valid: |
819 | return False |
820 | if len(list_all_usable_architectures()) == 0: |
821 | @@ -922,7 +922,7 @@ class MachineForm(NodeForm): |
822 | commission = not self.instance.id and self.cleaned_data["commission"] |
823 | if commission: |
824 | self.instance.status = NODE_STATUS.COMMISSIONING |
825 | - machine = super(MachineForm, self).save(*args, **kwargs) |
826 | + machine = super().save(*args, **kwargs) |
827 | # For a ScriptSet to be created it must be associated with a Node |
828 | # object in the database. |
829 | if commission: |
830 | @@ -975,7 +975,7 @@ class DeviceForm(NodeForm): |
831 | fields = NodeForm.Meta.fields + ("description", "parent", "zone") |
832 | |
833 | def __init__(self, request=None, *args, **kwargs): |
834 | - super(DeviceForm, self).__init__(*args, **kwargs) |
835 | + super().__init__(*args, **kwargs) |
836 | self.request = request |
837 | |
838 | instance = kwargs.get("instance") |
839 | @@ -988,7 +988,7 @@ class DeviceForm(NodeForm): |
840 | return user.has_perm(NodePermission.view) |
841 | |
842 | def save(self, commit=True): |
843 | - device = super(DeviceForm, self).save(commit=False) |
844 | + device = super().save(commit=False) |
845 | device.node_type = NODE_TYPE.DEVICE |
846 | if self.new_node: |
847 | # Set the owner: devices are owned by their creator. |
848 | @@ -1032,21 +1032,19 @@ class ControllerForm(MAASModelForm, WithPowerTypeMixin): |
849 | ) |
850 | |
851 | def __init__(self, data=None, instance=None, request=None, **kwargs): |
852 | - super(ControllerForm, self).__init__( |
853 | - data=data, instance=instance, **kwargs |
854 | - ) |
855 | + super().__init__(data=data, instance=instance, **kwargs) |
856 | WithPowerTypeMixin.set_up_power_fields(self, data, instance) |
857 | if instance is not None: |
858 | self.initial["zone"] = instance.zone.name |
859 | self.initial["domain"] = instance.domain.name |
860 | |
861 | def clean(self): |
862 | - cleaned_data = super(ControllerForm, self).clean() |
863 | + cleaned_data = super().clean() |
864 | return WithPowerTypeMixin.check_driver(self, cleaned_data) |
865 | |
866 | def save(self, *args, **kwargs): |
867 | """Persist the node into the database.""" |
868 | - controller = super(ControllerForm, self).save(commit=False) |
869 | + controller = super().save(commit=False) |
870 | zone = self.cleaned_data.get("zone") |
871 | if zone: |
872 | controller.zone = zone |
873 | @@ -1094,9 +1092,7 @@ class AdminNodeForm(NodeForm): |
874 | fields = NodeForm.Meta.fields + ("cpu_count", "description", "memory") |
875 | |
876 | def __init__(self, data=None, instance=None, request=None, **kwargs): |
877 | - super(AdminNodeForm, self).__init__( |
878 | - data=data, instance=instance, **kwargs |
879 | - ) |
880 | + super().__init__(data=data, instance=instance, **kwargs) |
881 | self.request = request |
882 | self.set_up_initial_zone(instance) |
883 | # The zone field is not required because we want to be able |
884 | @@ -1119,7 +1115,7 @@ class AdminNodeForm(NodeForm): |
885 | |
886 | def save(self, *args, **kwargs): |
887 | """Persist the node into the database.""" |
888 | - node = super(AdminNodeForm, self).save(commit=False) |
889 | + node = super().save(commit=False) |
890 | zone = self.cleaned_data.get("zone") |
891 | if zone: |
892 | node.zone = zone |
893 | @@ -1145,18 +1141,16 @@ class AdminMachineForm(MachineForm, AdminNodeForm, WithPowerTypeMixin): |
894 | ) |
895 | |
896 | def __init__(self, data=None, instance=None, request=None, **kwargs): |
897 | - super(AdminMachineForm, self).__init__( |
898 | - data=data, instance=instance, **kwargs |
899 | - ) |
900 | + super().__init__(data=data, instance=instance, **kwargs) |
901 | WithPowerTypeMixin.set_up_power_fields(self, data, instance) |
902 | |
903 | def clean(self): |
904 | - cleaned_data = super(AdminMachineForm, self).clean() |
905 | + cleaned_data = super().clean() |
906 | return WithPowerTypeMixin.check_driver(self, cleaned_data) |
907 | |
908 | def save(self, *args, **kwargs): |
909 | """Persist the node into the database.""" |
910 | - machine = super(AdminMachineForm, self).save(commit=False) |
911 | + machine = super().save(commit=False) |
912 | zone = self.cleaned_data.get("zone") |
913 | if zone: |
914 | machine.zone = zone |
915 | @@ -1188,7 +1182,7 @@ class KeyForm(MAASModelForm): |
916 | """Base class for `SSHKeyForm` and `SSLKeyForm`.""" |
917 | |
918 | def __init__(self, user, *args, **kwargs): |
919 | - super(KeyForm, self).__init__(*args, **kwargs) |
920 | + super().__init__(*args, **kwargs) |
921 | self.user = user |
922 | |
923 | def validate_unique(self): |
924 | @@ -1233,7 +1227,7 @@ class SSHKeyForm(MAASModelForm): |
925 | self.instance.user = user |
926 | |
927 | def save(self, endpoint, request): |
928 | - sshkey = super(SSHKeyForm, self).save() |
929 | + sshkey = super().save() |
930 | if self.instance.user is request.user: |
931 | description = "Created SSH key." |
932 | else: |
933 | @@ -1260,7 +1254,7 @@ class SSLKeyForm(KeyForm): |
934 | fields = ["key"] |
935 | |
936 | def save(self, endpoint, request): |
937 | - sslkey = super(SSLKeyForm, self).save() |
938 | + sslkey = super().save() |
939 | create_audit_event( |
940 | EVENT_TYPES.AUTHORISATION, |
941 | endpoint, |
942 | @@ -1274,7 +1268,7 @@ class SSLKeyForm(KeyForm): |
943 | class MultipleMACAddressField(forms.MultiValueField): |
944 | def __init__(self, nb_macs=1, *args, **kwargs): |
945 | fields = [MACAddressFormField() for _ in range(nb_macs)] |
946 | - super(MultipleMACAddressField, self).__init__(fields, *args, **kwargs) |
947 | + super().__init__(fields, *args, **kwargs) |
948 | |
949 | def compress(self, data_list): |
950 | if data_list: |
951 | @@ -1326,7 +1320,7 @@ class WithMACAddressesMixin: |
952 | """ |
953 | |
954 | def __init__(self, *args, **kwargs): |
955 | - super(WithMACAddressesMixin, self).__init__(*args, **kwargs) |
956 | + super().__init__(*args, **kwargs) |
957 | # This is a workaround for a Django bug in which self.data (which is |
958 | # supposed to be a QueryDict) ends up being a normal Python dict. |
959 | # This class requires a QueryDict (which it seems like Django should |
960 | @@ -1344,7 +1338,7 @@ class WithMACAddressesMixin: |
961 | self.data["mac_addresses"] = macs |
962 | |
963 | def is_valid(self): |
964 | - valid = super(WithMACAddressesMixin, self).is_valid() |
965 | + valid = super().is_valid() |
966 | # If the number of MAC address fields is > 1, provide a unified |
967 | # error message if the validation has failed. |
968 | reformat_mac_address_error = ( |
969 | @@ -1396,7 +1390,7 @@ class WithMACAddressesMixin: |
970 | |
971 | This implementation of `save` does not support the `commit` argument. |
972 | """ |
973 | - node = super(WithMACAddressesMixin, self).save() |
974 | + node = super().save() |
975 | architecture = self.cleaned_data.get("architecture") |
976 | power_type = self.cleaned_data.get("power_type") |
977 | # If a new node with an IPMI BMC is created the user doesn't have |
978 | @@ -1516,7 +1510,7 @@ class NewUserCreationForm(UserCreationForm): |
979 | self.cleaned_data["password2"] = None |
980 | |
981 | def save(self, commit=True): |
982 | - user = super(NewUserCreationForm, self).save(commit=False) |
983 | + user = super().save(commit=False) |
984 | if self.cleaned_data.get("is_superuser", False): |
985 | user.is_superuser = True |
986 | new_last_name = self.cleaned_data.get("last_name", None) |
987 | @@ -1555,7 +1549,7 @@ class EditUserForm(UserChangeForm): |
988 | fields = ("username", "last_name", "email", "is_superuser") |
989 | |
990 | def __init__(self, *args, **kwargs): |
991 | - super(EditUserForm, self).__init__(*args, **kwargs) |
992 | + super().__init__(*args, **kwargs) |
993 | # Django 1.4 overrides the field 'password' thus adding it |
994 | # post-facto to the list of the selected fields (Meta.fields). |
995 | # Here we don't want to use this form to edit the password. |
996 | @@ -1583,7 +1577,7 @@ class ConfigForm(Form): |
997 | config_fields = None |
998 | |
999 | def __init__(self, *args, **kwargs): |
1000 | - super(ConfigForm, self).__init__(*args, **kwargs) |
1001 | + super().__init__(*args, **kwargs) |
1002 | if "initial" not in kwargs: |
1003 | self._load_initials() |
1004 | |
1005 | @@ -1757,7 +1751,7 @@ class DeployForm(ConfigForm): |
1006 | return field |
1007 | |
1008 | def _load_initials(self): |
1009 | - super(DeployForm, self)._load_initials() |
1010 | + super()._load_initials() |
1011 | initial_os = self.fields["default_osystem"].initial |
1012 | initial_series = self.fields["default_distro_series"].initial |
1013 | self.initial["default_distro_series"] = "%s/%s" % ( |
1014 | @@ -1792,7 +1786,7 @@ class UbuntuForm(Form): |
1015 | ) |
1016 | |
1017 | def __init__(self, *args, **kwargs): |
1018 | - super(UbuntuForm, self).__init__(*args, **kwargs) |
1019 | + super().__init__(*args, **kwargs) |
1020 | self._load_initials() |
1021 | |
1022 | def _load_initials(self): |
1023 | @@ -1912,7 +1906,7 @@ class ValidatorMultipleChoiceField(MultipleChoiceField): |
1024 | """A MultipleChoiceField validating each given choice with a validator.""" |
1025 | |
1026 | def __init__(self, validator, **kwargs): |
1027 | - super(ValidatorMultipleChoiceField, self).__init__(**kwargs) |
1028 | + super().__init__(**kwargs) |
1029 | self.validator = validator |
1030 | |
1031 | def validate(self, values): |
1032 | @@ -1950,7 +1944,7 @@ class InstanceListField(UnconstrainedMultipleChoiceField): |
1033 | the names that didn't correspond to a valid instance |
1034 | respectively. |
1035 | """ |
1036 | - super(InstanceListField, self).__init__(*args, **kwargs) |
1037 | + super().__init__(*args, **kwargs) |
1038 | self.model_class = model_class |
1039 | self.field_name = field_name |
1040 | if text_for_invalid_object is None: |
1041 | @@ -1989,7 +1983,7 @@ class BulkNodeSetZoneForm(Form): |
1042 | system_id = UnconstrainedMultipleChoiceField() |
1043 | |
1044 | def __init__(self, user, request=None, *args, **kwargs): |
1045 | - super(BulkNodeSetZoneForm, self).__init__(*args, **kwargs) |
1046 | + super().__init__(*args, **kwargs) |
1047 | self.user = user |
1048 | self.request = request |
1049 | self.fields["zone"] = forms.ModelChoiceField( |
1050 | @@ -2114,7 +2108,7 @@ class BootSourceForm(MAASModelForm): |
1051 | ) |
1052 | |
1053 | def __init__(self, **kwargs): |
1054 | - super(BootSourceForm, self).__init__(**kwargs) |
1055 | + super().__init__(**kwargs) |
1056 | |
1057 | def clean_keyring_data(self): |
1058 | """Process 'keyring_data' field. |
1059 | @@ -2144,14 +2138,14 @@ class BootSourceSelectionForm(MAASModelForm): |
1060 | labels = UnconstrainedMultipleChoiceField(label="Label list") |
1061 | |
1062 | def __init__(self, boot_source=None, **kwargs): |
1063 | - super(BootSourceSelectionForm, self).__init__(**kwargs) |
1064 | + super().__init__(**kwargs) |
1065 | if "instance" in kwargs: |
1066 | self.boot_source = kwargs["instance"].boot_source |
1067 | else: |
1068 | self.boot_source = boot_source |
1069 | |
1070 | def clean(self): |
1071 | - cleaned_data = super(BootSourceSelectionForm, self).clean() |
1072 | + cleaned_data = super().clean() |
1073 | |
1074 | # Don't filter on OS if not provided. This is to maintain |
1075 | # backwards compatibility for when OS didn't exist in the API. |
1076 | @@ -2216,9 +2210,7 @@ class BootSourceSelectionForm(MAASModelForm): |
1077 | return cleaned_data |
1078 | |
1079 | def save(self, *args, **kwargs): |
1080 | - boot_source_selection = super(BootSourceSelectionForm, self).save( |
1081 | - commit=False |
1082 | - ) |
1083 | + boot_source_selection = super().save(commit=False) |
1084 | boot_source_selection.boot_source = self.boot_source |
1085 | if kwargs.get("commit", True): |
1086 | boot_source_selection.save() |
1087 | @@ -2233,7 +2225,7 @@ class LicenseKeyForm(MAASModelForm): |
1088 | fields = ("osystem", "distro_series", "license_key") |
1089 | |
1090 | def __init__(self, *args, **kwargs): |
1091 | - super(LicenseKeyForm, self).__init__(*args, **kwargs) |
1092 | + super().__init__(*args, **kwargs) |
1093 | self.set_up_osystem_and_distro_series_fields(kwargs.get("instance")) |
1094 | |
1095 | def set_up_osystem_and_distro_series_fields(self, instance): |
1096 | @@ -2286,7 +2278,7 @@ class LicenseKeyForm(MAASModelForm): |
1097 | for selected operating system and series.""" |
1098 | # Get the clean_data, check that all of the fields we need are |
1099 | # present. If not then the form will error, so no reason to continue. |
1100 | - cleaned_data = super(LicenseKeyForm, self).clean() |
1101 | + cleaned_data = super().clean() |
1102 | required_fields = ["license_key", "osystem", "distro_series"] |
1103 | for field in required_fields: |
1104 | if field not in cleaned_data: |
1105 | @@ -2357,7 +2349,7 @@ class BootResourceForm(MAASModelForm): |
1106 | keep_old = forms.BooleanField(required=False) |
1107 | |
1108 | def __init__(self, *args, **kwargs): |
1109 | - super(BootResourceForm, self).__init__(*args, **kwargs) |
1110 | + super().__init__(*args, **kwargs) |
1111 | self.set_up_architecture_field() |
1112 | |
1113 | def set_up_architecture_field(self): |
1114 | @@ -2502,7 +2494,7 @@ class BootResourceForm(MAASModelForm): |
1115 | |
1116 | This implementation of `save` does not support the `commit` argument. |
1117 | """ |
1118 | - resource = super(BootResourceForm, self).save(commit=False) |
1119 | + resource = super().save(commit=False) |
1120 | resource.rtype = BOOT_RESOURCE_TYPE.UPLOADED |
1121 | resource = self.get_existing_resource(resource) |
1122 | resource.extra = {"subarches": resource.architecture.split("/")[1]} |
1123 | @@ -2546,7 +2538,7 @@ class BootResourceNoContentForm(BootResourceForm): |
1124 | size = forms.IntegerField(label="Size", required=True) |
1125 | |
1126 | def __init__(self, *args, **kwargs): |
1127 | - super(BootResourceNoContentForm, self).__init__(*args, **kwargs) |
1128 | + super().__init__(*args, **kwargs) |
1129 | # Remove content field, as this form does not use it |
1130 | del self.fields["content"] |
1131 | |
1132 | @@ -2609,7 +2601,7 @@ class UUID4Field(forms.RegexField): |
1133 | ) |
1134 | kwargs["min_length"] = 32 |
1135 | kwargs["max_length"] = 36 |
1136 | - super(UUID4Field, self).__init__(regex, *args, **kwargs) |
1137 | + super().__init__(regex, *args, **kwargs) |
1138 | |
1139 | |
1140 | class AbsolutePathField(forms.RegexField): |
1141 | @@ -2632,7 +2624,7 @@ class AbsolutePathField(forms.RegexField): |
1142 | # large. |
1143 | # |
1144 | kwargs["max_length"] = 4095 |
1145 | - super(AbsolutePathField, self).__init__(regex, *args, **kwargs) |
1146 | + super().__init__(regex, *args, **kwargs) |
1147 | |
1148 | |
1149 | class BytesField(forms.RegexField): |
1150 | @@ -2648,7 +2640,7 @@ class BytesField(forms.RegexField): |
1151 | else: |
1152 | self.max_value = None |
1153 | regex = r"^-?[0-9]+([KkMmGgTtPpEe]{1})?$" |
1154 | - super(BytesField, self).__init__(regex, *args, **kwargs) |
1155 | + super().__init__(regex, *args, **kwargs) |
1156 | |
1157 | def to_python(self, value): |
1158 | if value is not None: |
1159 | @@ -2657,7 +2649,7 @@ class BytesField(forms.RegexField): |
1160 | return value |
1161 | |
1162 | def clean(self, value): |
1163 | - value = super(BytesField, self).clean(value) |
1164 | + value = super().clean(value) |
1165 | if value is not None: |
1166 | value = machine_readable_bytes(value) |
1167 | |
1168 | @@ -2683,7 +2675,7 @@ class FormatBlockDeviceForm(Form): |
1169 | label = forms.CharField(required=False) |
1170 | |
1171 | def __init__(self, block_device, *args, **kwargs): |
1172 | - super(FormatBlockDeviceForm, self).__init__(*args, **kwargs) |
1173 | + super().__init__(*args, **kwargs) |
1174 | self.block_device = block_device |
1175 | self.node = block_device.get_node() |
1176 | |
1177 | @@ -2691,7 +2683,7 @@ class FormatBlockDeviceForm(Form): |
1178 | """Validate block device doesn't have a partition table.""" |
1179 | # Get the clean_data, check that all of the fields we need are |
1180 | # present. If not then the form will error, so no reason to continue. |
1181 | - cleaned_data = super(FormatBlockDeviceForm, self).clean() |
1182 | + cleaned_data = super().clean() |
1183 | if "fstype" not in cleaned_data: |
1184 | return cleaned_data |
1185 | partition_table = PartitionTable.objects.filter( |
1186 | @@ -2743,7 +2735,7 @@ class AddPartitionForm(Form): |
1187 | uuid = UUID4Field(required=False) |
1188 | |
1189 | def __init__(self, block_device, *args, **kwargs): |
1190 | - super(AddPartitionForm, self).__init__(*args, **kwargs) |
1191 | + super().__init__(*args, **kwargs) |
1192 | self.block_device = block_device |
1193 | self.set_up_fields() |
1194 | |
1195 | @@ -2779,7 +2771,7 @@ class FormatPartitionForm(Form): |
1196 | label = forms.CharField(required=False) |
1197 | |
1198 | def __init__(self, partition, *args, **kwargs): |
1199 | - super(FormatPartitionForm, self).__init__(*args, **kwargs) |
1200 | + super().__init__(*args, **kwargs) |
1201 | self.partition = partition |
1202 | self.node = partition.get_node() |
1203 | |
1204 | @@ -3001,7 +2993,7 @@ class UpdateVirtualBlockDeviceForm( |
1205 | fields = ["name", "uuid", "size"] |
1206 | |
1207 | def clean(self): |
1208 | - cleaned_data = super(UpdateVirtualBlockDeviceForm, self).clean() |
1209 | + cleaned_data = super().clean() |
1210 | is_logical_volume = self.instance.filesystem_group.is_lvm() |
1211 | size_has_changed = ( |
1212 | "size" in self.cleaned_data |
1213 | @@ -3158,12 +3150,12 @@ class CreateCacheSetForm(Form): |
1214 | clean_cache_partition = clean_partition_name_to_id("cache_partition") |
1215 | |
1216 | def __init__(self, node, *args, **kwargs): |
1217 | - super(CreateCacheSetForm, self).__init__(*args, **kwargs) |
1218 | + super().__init__(*args, **kwargs) |
1219 | self.node = node |
1220 | self._set_up_field_choices() |
1221 | |
1222 | def clean(self): |
1223 | - cleaned_data = super(CreateCacheSetForm, self).clean() |
1224 | + cleaned_data = super().clean() |
1225 | cache_device = self.cleaned_data.get("cache_device") |
1226 | cache_partition = self.cleaned_data.get("cache_partition") |
1227 | if cache_device and cache_partition: |
1228 | @@ -3234,13 +3226,13 @@ class UpdateCacheSetForm(Form): |
1229 | clean_cache_partition = clean_partition_name_to_id("cache_partition") |
1230 | |
1231 | def __init__(self, cache_set, *args, **kwargs): |
1232 | - super(UpdateCacheSetForm, self).__init__(*args, **kwargs) |
1233 | + super().__init__(*args, **kwargs) |
1234 | self.cache_set = cache_set |
1235 | self.node = cache_set.get_node() |
1236 | self._set_up_field_choices() |
1237 | |
1238 | def clean(self): |
1239 | - cleaned_data = super(UpdateCacheSetForm, self).clean() |
1240 | + cleaned_data = super().clean() |
1241 | if self.cleaned_data.get("cache_device") and self.cleaned_data.get( |
1242 | "cache_partition" |
1243 | ): |
1244 | @@ -3321,13 +3313,13 @@ class CreateBcacheForm(Form): |
1245 | clean_cache_set = clean_cache_set_name_to_id("cache_set") |
1246 | |
1247 | def __init__(self, node, *args, **kwargs): |
1248 | - super(CreateBcacheForm, self).__init__(*args, **kwargs) |
1249 | + super().__init__(*args, **kwargs) |
1250 | self.node = node |
1251 | self._set_up_field_choices() |
1252 | |
1253 | def clean(self): |
1254 | """Makes sure the Bcache is sensible.""" |
1255 | - cleaned_data = super(CreateBcacheForm, self).clean() |
1256 | + cleaned_data = super().clean() |
1257 | Bcache.objects.validate_bcache_creation_parameters( |
1258 | cache_set=self.cleaned_data.get("cache_set"), |
1259 | cache_mode=self.cleaned_data.get("cache_mode"), |
1260 | @@ -3407,7 +3399,7 @@ class UpdateBcacheForm(Form): |
1261 | clean_cache_set = clean_cache_set_name_to_id("cache_set") |
1262 | |
1263 | def __init__(self, bcache, *args, **kwargs): |
1264 | - super(UpdateBcacheForm, self).__init__(*args, **kwargs) |
1265 | + super().__init__(*args, **kwargs) |
1266 | self.bcache = bcache |
1267 | self.node = bcache.get_node() |
1268 | self._set_up_field_choices() |
1269 | @@ -3572,12 +3564,12 @@ class CreateRaidForm(Form): |
1270 | self.fields["spare_partitions"].choices = partition_choices |
1271 | |
1272 | def __init__(self, node, *args, **kwargs): |
1273 | - super(CreateRaidForm, self).__init__(*args, **kwargs) |
1274 | + super().__init__(*args, **kwargs) |
1275 | self.node = node |
1276 | self._set_up_field_choices() |
1277 | |
1278 | def clean(self): |
1279 | - cleaned_data = super(CreateRaidForm, self).clean() |
1280 | + cleaned_data = super().clean() |
1281 | # It is not possible to create a RAID without any devices or |
1282 | # partitions, but we catch this situation here in order to provide a |
1283 | # clearer error message. |
1284 | @@ -3678,7 +3670,7 @@ class UpdateRaidForm(Form): |
1285 | ) |
1286 | |
1287 | def __init__(self, raid, *args, **kwargs): |
1288 | - super(UpdateRaidForm, self).__init__(*args, **kwargs) |
1289 | + super().__init__(*args, **kwargs) |
1290 | self.raid = raid |
1291 | self.set_up_field_choices() |
1292 | |
1293 | @@ -3858,7 +3850,7 @@ class CreateVolumeGroupForm(Form): |
1294 | clean_partitions = clean_partition_names_to_ids("partitions") |
1295 | |
1296 | def __init__(self, node, *args, **kwargs): |
1297 | - super(CreateVolumeGroupForm, self).__init__(*args, **kwargs) |
1298 | + super().__init__(*args, **kwargs) |
1299 | self.node = node |
1300 | self.set_up_choice_fields() |
1301 | |
1302 | @@ -3885,7 +3877,7 @@ class CreateVolumeGroupForm(Form): |
1303 | |
1304 | def clean(self): |
1305 | """Validate that at least one block device or partition is given.""" |
1306 | - cleaned_data = super(CreateVolumeGroupForm, self).clean() |
1307 | + cleaned_data = super().clean() |
1308 | if "name" not in cleaned_data: |
1309 | return cleaned_data |
1310 | has_block_devices = ( |
1311 | @@ -3951,7 +3943,7 @@ class UpdateVolumeGroupForm(Form): |
1312 | clean_remove_partitions = clean_partition_names_to_ids("remove_partitions") |
1313 | |
1314 | def __init__(self, volume_group, *args, **kwargs): |
1315 | - super(UpdateVolumeGroupForm, self).__init__(*args, **kwargs) |
1316 | + super().__init__(*args, **kwargs) |
1317 | self.volume_group = volume_group |
1318 | self.set_up_choice_fields() |
1319 | |
1320 | @@ -4047,7 +4039,7 @@ class CreateLogicalVolumeForm(Form): |
1321 | uuid = UUID4Field(required=False) |
1322 | |
1323 | def __init__(self, volume_group, *args, **kwargs): |
1324 | - super(CreateLogicalVolumeForm, self).__init__(*args, **kwargs) |
1325 | + super().__init__(*args, **kwargs) |
1326 | self.volume_group = volume_group |
1327 | self.set_up_fields() |
1328 | |
1329 | @@ -4064,7 +4056,7 @@ class CreateLogicalVolumeForm(Form): |
1330 | |
1331 | def clean(self): |
1332 | """Validate that at least one block device or partition is given.""" |
1333 | - cleaned_data = super(CreateLogicalVolumeForm, self).clean() |
1334 | + cleaned_data = super().clean() |
1335 | if self.volume_group.get_lvm_free_space() < MIN_BLOCK_DEVICE_SIZE: |
1336 | # Remove the size errors. They are confusing because the |
1337 | # minimum is larger than the maximum. |
1338 | diff --git a/src/maasserver/forms/dhcpsnippet.py b/src/maasserver/forms/dhcpsnippet.py |
1339 | index 725af9f..b5e3cd0 100644 |
1340 | --- a/src/maasserver/forms/dhcpsnippet.py |
1341 | +++ b/src/maasserver/forms/dhcpsnippet.py |
1342 | @@ -134,7 +134,7 @@ class DHCPSnippetForm(MAASModelForm): |
1343 | return valid |
1344 | |
1345 | def save(self, endpoint, request): |
1346 | - dhcp_snippet = super(DHCPSnippetForm, self).save() |
1347 | + dhcp_snippet = super().save() |
1348 | create_audit_event( |
1349 | EVENT_TYPES.SETTINGS, |
1350 | endpoint, |
1351 | diff --git a/src/maasserver/forms/filesystem.py b/src/maasserver/forms/filesystem.py |
1352 | index c347e2e..b91eca6 100644 |
1353 | --- a/src/maasserver/forms/filesystem.py |
1354 | +++ b/src/maasserver/forms/filesystem.py |
1355 | @@ -25,7 +25,7 @@ class MountFilesystemForm(Form): |
1356 | |
1357 | @typed |
1358 | def __init__(self, filesystem: Optional[Filesystem], *args, **kwargs): |
1359 | - super(MountFilesystemForm, self).__init__(*args, **kwargs) |
1360 | + super().__init__(*args, **kwargs) |
1361 | self.filesystem = filesystem |
1362 | self.setup() |
1363 | |
1364 | @@ -36,7 +36,7 @@ class MountFilesystemForm(Form): |
1365 | self.fields["mount_options"] = StrippedCharField(required=False) |
1366 | |
1367 | def clean(self): |
1368 | - cleaned_data = super(MountFilesystemForm, self).clean() |
1369 | + cleaned_data = super().clean() |
1370 | if self.filesystem is None: |
1371 | self.add_error( |
1372 | None, |
1373 | @@ -76,7 +76,7 @@ class MountNonStorageFilesystemForm(Form): |
1374 | |
1375 | @typed |
1376 | def __init__(self, node: Node, *args, **kwargs): |
1377 | - super(MountNonStorageFilesystemForm, self).__init__(*args, **kwargs) |
1378 | + super().__init__(*args, **kwargs) |
1379 | self.node = node |
1380 | |
1381 | @typed |
1382 | @@ -99,11 +99,11 @@ class UnmountNonStorageFilesystemForm(Form): |
1383 | |
1384 | @typed |
1385 | def __init__(self, node: Node, *args, **kwargs): |
1386 | - super(UnmountNonStorageFilesystemForm, self).__init__(*args, **kwargs) |
1387 | + super().__init__(*args, **kwargs) |
1388 | self.node = node |
1389 | |
1390 | def clean(self): |
1391 | - cleaned_data = super(UnmountNonStorageFilesystemForm, self).clean() |
1392 | + cleaned_data = super().clean() |
1393 | if "mount_point" in cleaned_data: |
1394 | try: |
1395 | self.filesystem = Filesystem.objects.get( |
1396 | diff --git a/src/maasserver/forms/interface.py b/src/maasserver/forms/interface.py |
1397 | index 4397a18..c29b041 100644 |
1398 | --- a/src/maasserver/forms/interface.py |
1399 | +++ b/src/maasserver/forms/interface.py |
1400 | @@ -92,7 +92,7 @@ class InterfaceForm(MAASModelForm): |
1401 | |
1402 | def __init__(self, *args, **kwargs): |
1403 | self.node = kwargs.pop("node", None) |
1404 | - super(InterfaceForm, self).__init__(*args, **kwargs) |
1405 | + super().__init__(*args, **kwargs) |
1406 | instance = kwargs.get("instance") |
1407 | if instance is not None: |
1408 | self.node = instance.get_node() |
1409 | @@ -109,12 +109,12 @@ class InterfaceForm(MAASModelForm): |
1410 | # get the validation to pass on a newly created interface is to set the |
1411 | # node in the interface here. |
1412 | self.instance.node = self.node |
1413 | - return super(InterfaceForm, self)._get_validation_exclusions() |
1414 | + return super()._get_validation_exclusions() |
1415 | |
1416 | def save(self, *args, **kwargs): |
1417 | """Persist the interface into the database.""" |
1418 | created = self.instance.id is None |
1419 | - interface = super(InterfaceForm, self).save(commit=True) |
1420 | + interface = super().save(commit=True) |
1421 | if "parents" in self.data: |
1422 | parents = self.cleaned_data.get("parents") |
1423 | existing_parents = set(interface.parents.all()) |
1424 | @@ -194,7 +194,7 @@ class InterfaceForm(MAASModelForm): |
1425 | ) |
1426 | |
1427 | def clean(self): |
1428 | - cleaned_data = super(InterfaceForm, self).clean() |
1429 | + cleaned_data = super().clean() |
1430 | self.clean_parents_all_same_node(cleaned_data.get("parents")) |
1431 | if self.node.node_type == NODE_TYPE.DEVICE: |
1432 | cleaned_data = self.clean_device(cleaned_data) |
1433 | @@ -235,14 +235,14 @@ class ControllerInterfaceForm(MAASModelForm): |
1434 | fields = ("vlan", "link_connected", "interface_speed", "link_speed") |
1435 | |
1436 | def __init__(self, *args, **kwargs): |
1437 | - super(ControllerInterfaceForm, self).__init__(*args, **kwargs) |
1438 | + super().__init__(*args, **kwargs) |
1439 | instance = kwargs.get("instance") |
1440 | if instance is not None: |
1441 | self.link_connected = instance.link_connected |
1442 | |
1443 | def save(self, *args, **kwargs): |
1444 | """Persist the interface into the database.""" |
1445 | - interface = super(ControllerInterfaceForm, self).save(commit=False) |
1446 | + interface = super().save(commit=False) |
1447 | # Allow setting the VLAN to None. |
1448 | new_vlan = self.cleaned_data.get("vlan") |
1449 | vlan_was_set = "vlan" in self.data |
1450 | @@ -285,7 +285,7 @@ class DeployedInterfaceForm(MAASModelForm): |
1451 | ) |
1452 | |
1453 | def __init__(self, *args, **kwargs): |
1454 | - super(DeployedInterfaceForm, self).__init__(*args, **kwargs) |
1455 | + super().__init__(*args, **kwargs) |
1456 | instance = kwargs.get("instance") |
1457 | if instance is not None: |
1458 | self.link_connected = instance.link_connected |
1459 | @@ -400,7 +400,7 @@ class VLANInterfaceForm(InterfaceForm): |
1460 | return new_vlan |
1461 | |
1462 | def clean(self): |
1463 | - cleaned_data = super(VLANInterfaceForm, self).clean() |
1464 | + cleaned_data = super().clean() |
1465 | if self.fields_ok(["vlan", "parents"]): |
1466 | new_vlan = self.cleaned_data.get("vlan") |
1467 | if new_vlan: |
1468 | diff --git a/src/maasserver/forms/interface_link.py b/src/maasserver/forms/interface_link.py |
1469 | index 71365ce..e6042b1 100644 |
1470 | --- a/src/maasserver/forms/interface_link.py |
1471 | +++ b/src/maasserver/forms/interface_link.py |
1472 | @@ -57,7 +57,7 @@ class InterfaceLinkForm(forms.Form): |
1473 | ] |
1474 | |
1475 | self.instance = kwargs.pop("instance") |
1476 | - super(InterfaceLinkForm, self).__init__(*args, **kwargs) |
1477 | + super().__init__(*args, **kwargs) |
1478 | |
1479 | # Create the mode field and setup the queryset on the subnet. |
1480 | self.fields["mode"] = CaseInsensitiveChoiceField( |
1481 | @@ -87,7 +87,7 @@ class InterfaceLinkForm(forms.Form): |
1482 | "bond(%s)." % (self.instance.name, interface_set.name) |
1483 | ), |
1484 | ) |
1485 | - cleaned_data = super(InterfaceLinkForm, self).clean() |
1486 | + cleaned_data = super().clean() |
1487 | mode = cleaned_data.get("mode", None) |
1488 | if mode is None: |
1489 | return cleaned_data |
1490 | @@ -240,7 +240,7 @@ class InterfaceUnlinkForm(forms.Form): |
1491 | |
1492 | def __init__(self, *args, **kwargs): |
1493 | self.instance = kwargs.pop("instance") |
1494 | - super(InterfaceUnlinkForm, self).__init__(*args, **kwargs) |
1495 | + super().__init__(*args, **kwargs) |
1496 | self.set_up_id_field() |
1497 | |
1498 | def set_up_id_field(self): |
1499 | @@ -266,7 +266,7 @@ class InterfaceSetDefaultGatwayForm(forms.Form): |
1500 | |
1501 | def __init__(self, *args, **kwargs): |
1502 | self.instance = kwargs.pop("instance") |
1503 | - super(InterfaceSetDefaultGatwayForm, self).__init__(*args, **kwargs) |
1504 | + super().__init__(*args, **kwargs) |
1505 | self.links = self.get_valid_links() |
1506 | self.set_up_link_id_field() |
1507 | |
1508 | @@ -327,7 +327,7 @@ class InterfaceSetDefaultGatwayForm(forms.Form): |
1509 | |
1510 | def clean(self): |
1511 | self._clean_has_gateways() |
1512 | - cleaned_data = super(InterfaceSetDefaultGatwayForm, self).clean() |
1513 | + cleaned_data = super().clean() |
1514 | link_id = cleaned_data.get("link_id", None) |
1515 | if not link_id: |
1516 | self._clean_ipv4_and_ipv6_gateways() |
1517 | diff --git a/src/maasserver/forms/packagerepository.py b/src/maasserver/forms/packagerepository.py |
1518 | index 795726f..20ad1f7 100644 |
1519 | --- a/src/maasserver/forms/packagerepository.py |
1520 | +++ b/src/maasserver/forms/packagerepository.py |
1521 | @@ -176,7 +176,7 @@ class PackageRepositoryForm(MAASModelForm): |
1522 | return values |
1523 | |
1524 | def save(self, endpoint, request): |
1525 | - package_repository = super(PackageRepositoryForm, self).save() |
1526 | + package_repository = super().save() |
1527 | create_audit_event( |
1528 | EVENT_TYPES.SETTINGS, |
1529 | endpoint, |
1530 | diff --git a/src/maasserver/forms/pods.py b/src/maasserver/forms/pods.py |
1531 | index 03a62e3..a9ad673 100644 |
1532 | --- a/src/maasserver/forms/pods.py |
1533 | +++ b/src/maasserver/forms/pods.py |
1534 | @@ -211,7 +211,7 @@ class PodForm(MAASModelForm): |
1535 | self.is_new = instance is None |
1536 | self.request = request |
1537 | self.user = user |
1538 | - super(PodForm, self).__init__(data=data, instance=instance, **kwargs) |
1539 | + super().__init__(data=data, instance=instance, **kwargs) |
1540 | if data is None: |
1541 | data = {} |
1542 | type_value = data.get("type", self.initial.get("type")) |
1543 | @@ -253,7 +253,7 @@ class PodForm(MAASModelForm): |
1544 | """Override to dynamically add fields based on the value of `type` |
1545 | field.""" |
1546 | # Process the built-in fields first. |
1547 | - super(PodForm, self)._clean_fields() |
1548 | + super()._clean_fields() |
1549 | # If no errors then we re-process with the fields required by the |
1550 | # selected type for the pod. |
1551 | if len(self.errors) == 0: |
1552 | @@ -268,10 +268,10 @@ class PodForm(MAASModelForm): |
1553 | for key, value in self.instance.power_parameters.items(): |
1554 | if key not in self.data: |
1555 | self.data[key] = value |
1556 | - super(PodForm, self)._clean_fields() |
1557 | + super()._clean_fields() |
1558 | |
1559 | def clean(self): |
1560 | - cleaned_data = super(PodForm, self).clean() |
1561 | + cleaned_data = super().clean() |
1562 | if len(self.drivers) == 0: |
1563 | set_form_error( |
1564 | self, |
1565 | @@ -508,7 +508,7 @@ class ComposeMachineForm(forms.Form): |
1566 | self.pod = kwargs.pop("pod", None) |
1567 | if self.pod is None: |
1568 | raise ValueError("'pod' kwargs is required.") |
1569 | - super(ComposeMachineForm, self).__init__(*args, **kwargs) |
1570 | + super().__init__(*args, **kwargs) |
1571 | |
1572 | # Build the fields based on the pod and current pod hints. |
1573 | self.fields["cores"] = IntegerField( |
1574 | @@ -858,7 +858,7 @@ class ComposeMachineForPodsForm(forms.Form): |
1575 | self.pods = kwargs.pop("pods", None) |
1576 | if self.pods is None: |
1577 | raise ValueError("'pods' kwargs is required.") |
1578 | - super(ComposeMachineForPodsForm, self).__init__(*args, **kwargs) |
1579 | + super().__init__(*args, **kwargs) |
1580 | self.pod_forms = [ |
1581 | ComposeMachineForm(request=self.request, data=self.data, pod=pod) |
1582 | for pod in self.pods |
1583 | diff --git a/src/maasserver/forms/script.py b/src/maasserver/forms/script.py |
1584 | index e8f3504..a01cc7b 100644 |
1585 | --- a/src/maasserver/forms/script.py |
1586 | +++ b/src/maasserver/forms/script.py |
1587 | @@ -536,7 +536,7 @@ class ScriptForm(ModelForm): |
1588 | def save(self, *args, **kwargs): |
1589 | request = kwargs.pop("request", None) |
1590 | endpoint = kwargs.pop("endpoint", None) |
1591 | - script = super(ScriptForm, self).save(*args, **kwargs) |
1592 | + script = super().save(*args, **kwargs) |
1593 | |
1594 | # Create audit event log if endpoint and request supplied. |
1595 | if request is not None and endpoint is not None: |
1596 | diff --git a/src/maasserver/forms/settings.py b/src/maasserver/forms/settings.py |
1597 | index 49d47c6..f03eb04 100644 |
1598 | --- a/src/maasserver/forms/settings.py |
1599 | +++ b/src/maasserver/forms/settings.py |
1600 | @@ -267,7 +267,7 @@ class RemoteSyslogField(forms.CharField): |
1601 | """ |
1602 | |
1603 | def clean(self, value): |
1604 | - value = super(RemoteSyslogField, self).clean(value) |
1605 | + value = super().clean(value) |
1606 | if not value: |
1607 | return None |
1608 | host, port = splithost(value) |
1609 | diff --git a/src/maasserver/forms/staticroute.py b/src/maasserver/forms/staticroute.py |
1610 | index fa95a9b..10d45ec 100644 |
1611 | --- a/src/maasserver/forms/staticroute.py |
1612 | +++ b/src/maasserver/forms/staticroute.py |
1613 | @@ -36,7 +36,7 @@ class StaticRouteForm(MAASModelForm): |
1614 | fields = ("source", "destination", "gateway_ip", "metric") |
1615 | |
1616 | def __init__(self, *args, **kwargs): |
1617 | - super(StaticRouteForm, self).__init__(*args, **kwargs) |
1618 | + super().__init__(*args, **kwargs) |
1619 | # Metric field is not a required field, but is required in the model. |
1620 | self.fields["metric"].required = False |
1621 | |
1622 | diff --git a/src/maasserver/forms/subnet.py b/src/maasserver/forms/subnet.py |
1623 | index 7fd8f57..6c8a941 100644 |
1624 | --- a/src/maasserver/forms/subnet.py |
1625 | +++ b/src/maasserver/forms/subnet.py |
1626 | @@ -57,11 +57,11 @@ class SubnetForm(MAASModelForm): |
1627 | ) |
1628 | |
1629 | def __init__(self, *args, **kwargs): |
1630 | - super(SubnetForm, self).__init__(*args, **kwargs) |
1631 | + super().__init__(*args, **kwargs) |
1632 | self.fields["name"].required = False |
1633 | |
1634 | def clean(self): |
1635 | - cleaned_data = super(SubnetForm, self).clean() |
1636 | + cleaned_data = super().clean() |
1637 | if "space" in self.data: |
1638 | set_form_error( |
1639 | self, |
1640 | diff --git a/src/maasserver/forms/tests/test_bootsource.py b/src/maasserver/forms/tests/test_bootsource.py |
1641 | index c739c06..2a1d683 100644 |
1642 | --- a/src/maasserver/forms/tests/test_bootsource.py |
1643 | +++ b/src/maasserver/forms/tests/test_bootsource.py |
1644 | @@ -21,7 +21,7 @@ class TestBootSourceForm(MAASServerTestCase): |
1645 | """Tests for `BootSourceForm`.""" |
1646 | |
1647 | def setUp(self): |
1648 | - super(TestBootSourceForm, self).setUp() |
1649 | + super().setUp() |
1650 | # Disable boot source cache signals. |
1651 | self.addCleanup(bootsources.signals.enable) |
1652 | bootsources.signals.disable() |
1653 | diff --git a/src/maasserver/forms/tests/test_bootsourceselection.py b/src/maasserver/forms/tests/test_bootsourceselection.py |
1654 | index ca6a0c2..e77bf44 100644 |
1655 | --- a/src/maasserver/forms/tests/test_bootsourceselection.py |
1656 | +++ b/src/maasserver/forms/tests/test_bootsourceselection.py |
1657 | @@ -18,7 +18,7 @@ class TestBootSourceSelectionForm(MAASServerTestCase): |
1658 | """Tests for `BootSourceSelectionForm`.""" |
1659 | |
1660 | def setUp(self): |
1661 | - super(TestBootSourceSelectionForm, self).setUp() |
1662 | + super().setUp() |
1663 | # Disable boot source cache signals. |
1664 | self.addCleanup(bootsources.signals.enable) |
1665 | bootsources.signals.disable() |
1666 | diff --git a/src/maasserver/forms/tests/test_helpers.py b/src/maasserver/forms/tests/test_helpers.py |
1667 | index 92347b6..33ee0ab 100644 |
1668 | --- a/src/maasserver/forms/tests/test_helpers.py |
1669 | +++ b/src/maasserver/forms/tests/test_helpers.py |
1670 | @@ -170,7 +170,7 @@ class TestMAASModelForm(MAASLegacyTransactionServerTestCase): |
1671 | """ |
1672 | |
1673 | def __init__(self, *args, **kwargs): |
1674 | - super(EarlyFieldMixin, self).__init__(*args, **kwargs) |
1675 | + super().__init__(*args, **kwargs) |
1676 | self.fields["early_field"] = CharField(required=False) |
1677 | |
1678 | class TestForm(EarlyFieldMixin, MAASModelForm): |
1679 | diff --git a/src/maasserver/forms/vlan.py b/src/maasserver/forms/vlan.py |
1680 | index 5c1f67e..80c49b5 100644 |
1681 | --- a/src/maasserver/forms/vlan.py |
1682 | +++ b/src/maasserver/forms/vlan.py |
1683 | @@ -46,7 +46,7 @@ class VLANForm(MAASModelForm): |
1684 | |
1685 | def __init__(self, *args, **kwargs): |
1686 | self.fabric = kwargs.pop("fabric", None) |
1687 | - super(VLANForm, self).__init__(*args, **kwargs) |
1688 | + super().__init__(*args, **kwargs) |
1689 | instance = kwargs.get("instance") |
1690 | if instance is None and self.fabric is None: |
1691 | raise ValueError("Form requires either a instance or a fabric.") |
1692 | @@ -99,7 +99,7 @@ class VLANForm(MAASModelForm): |
1693 | ) |
1694 | |
1695 | def clean(self): |
1696 | - cleaned_data = super(VLANForm, self).clean() |
1697 | + cleaned_data = super().clean() |
1698 | # Automatically promote the secondary rack controller to the primary |
1699 | # if the primary is removed. |
1700 | if ( |
1701 | @@ -199,7 +199,7 @@ class VLANForm(MAASModelForm): |
1702 | |
1703 | def save(self): |
1704 | """Persist the VLAN into the database.""" |
1705 | - vlan = super(VLANForm, self).save(commit=False) |
1706 | + vlan = super().save(commit=False) |
1707 | if self.fabric is not None: |
1708 | vlan.fabric = self.fabric |
1709 | if "space" in self.data and not self.cleaned_data.get("space"): |
1710 | diff --git a/src/maasserver/ipc.py b/src/maasserver/ipc.py |
1711 | index 6f1ae13..7e59a97 100644 |
1712 | --- a/src/maasserver/ipc.py |
1713 | +++ b/src/maasserver/ipc.py |
1714 | @@ -146,7 +146,7 @@ class IPCMasterService(service.Service, object): |
1715 | connections = None |
1716 | |
1717 | def __init__(self, reactor, workers=None, socket_path=None): |
1718 | - super(IPCMasterService, self).__init__() |
1719 | + super().__init__() |
1720 | self.reactor = reactor |
1721 | self.workers = workers |
1722 | self.socket_path = socket_path |
1723 | @@ -164,7 +164,7 @@ class IPCMasterService(service.Service, object): |
1724 | @asynchronous |
1725 | def startService(self): |
1726 | """Start listening on UNIX socket and create the region controller.""" |
1727 | - super(IPCMasterService, self).startService() |
1728 | + super().startService() |
1729 | self.starting = self.endpoint.listen(self.factory) |
1730 | |
1731 | def save_port(port): |
1732 | @@ -221,7 +221,7 @@ class IPCMasterService(service.Service, object): |
1733 | |
1734 | yield deferToDatabase(delete_all_processes) |
1735 | yield stop_update_loop() |
1736 | - yield super(IPCMasterService, self).stopService() |
1737 | + yield super().stopService() |
1738 | |
1739 | @asynchronous |
1740 | def registerWorker(self, pid, conn): |
1741 | @@ -612,7 +612,7 @@ class IPCWorker(RPCProtocol): |
1742 | """The IPC client side of the protocol.""" |
1743 | |
1744 | def connectionMade(self): |
1745 | - super(IPCWorker, self).connectionMade() |
1746 | + super().connectionMade() |
1747 | |
1748 | # Identify with the master process. |
1749 | d = self.callRemote(WorkerIdentify, pid=os.getpid()) |
1750 | @@ -635,7 +635,7 @@ class IPCWorkerService(service.Service, object): |
1751 | """ |
1752 | |
1753 | def __init__(self, reactor, socket_path=None): |
1754 | - super(IPCWorkerService, self).__init__() |
1755 | + super().__init__() |
1756 | self.reactor = reactor |
1757 | self.socket_path = socket_path |
1758 | if self.socket_path is None: |
1759 | @@ -648,7 +648,7 @@ class IPCWorkerService(service.Service, object): |
1760 | @asynchronous |
1761 | def startService(self): |
1762 | """Connect to UNIX socket.""" |
1763 | - super(IPCWorkerService, self).startService() |
1764 | + super().startService() |
1765 | protocol = IPCWorker() |
1766 | protocol.service = self |
1767 | self.starting = connectProtocol(self.endpoint, protocol) |
1768 | @@ -681,7 +681,7 @@ class IPCWorkerService(service.Service, object): |
1769 | self._protocol, protocol = None, self._protocol |
1770 | if protocol.transport: |
1771 | protocol.transport.loseConnection() |
1772 | - return super(IPCWorkerService, self).stopService() |
1773 | + return super().stopService() |
1774 | |
1775 | @asynchronous |
1776 | def rpcPublish(self, port): |
1777 | diff --git a/src/maasserver/json.py b/src/maasserver/json.py |
1778 | index 671faa7..e6ba065 100644 |
1779 | --- a/src/maasserver/json.py |
1780 | +++ b/src/maasserver/json.py |
1781 | @@ -27,7 +27,7 @@ class MAASJSONEncoder(django.core.serializers.json.DjangoJSONEncoder): |
1782 | if isinstance(value, MAC): |
1783 | return value.get_raw() |
1784 | else: |
1785 | - return super(MAASJSONEncoder, self).default(value) |
1786 | + return super().default(value) |
1787 | |
1788 | |
1789 | class Serializer(django.core.serializers.json.Serializer): |
1790 | diff --git a/src/maasserver/listener.py b/src/maasserver/listener.py |
1791 | index 2797fc8..4bd0116 100644 |
1792 | --- a/src/maasserver/listener.py |
1793 | +++ b/src/maasserver/listener.py |
1794 | @@ -97,13 +97,13 @@ class PostgresListenerService(Service, object): |
1795 | |
1796 | def startService(self): |
1797 | """Start the listener.""" |
1798 | - super(PostgresListenerService, self).startService() |
1799 | + super().startService() |
1800 | self.autoReconnect = True |
1801 | return self.tryConnection() |
1802 | |
1803 | def stopService(self): |
1804 | """Stop the listener.""" |
1805 | - super(PostgresListenerService, self).stopService() |
1806 | + super().stopService() |
1807 | self.autoReconnect = False |
1808 | return self.loseConnection() |
1809 | |
1810 | diff --git a/src/maasserver/macaroon_auth.py b/src/maasserver/macaroon_auth.py |
1811 | index 90e8c64..069a2a0 100644 |
1812 | --- a/src/maasserver/macaroon_auth.py |
1813 | +++ b/src/maasserver/macaroon_auth.py |
1814 | @@ -301,7 +301,7 @@ class CandidClient(MacaroonClient): |
1815 | if auth_info is None: |
1816 | auth_info = get_auth_info() |
1817 | url = auth_info.agents[0].url |
1818 | - super(CandidClient, self).__init__(url, auth_info) |
1819 | + super().__init__(url, auth_info) |
1820 | |
1821 | def get_user_details(self, username: str) -> UserDetails: |
1822 | """Return details about a user.""" |
1823 | diff --git a/src/maasserver/management/commands/_config.py b/src/maasserver/management/commands/_config.py |
1824 | index df4ce51..e4933e1 100644 |
1825 | --- a/src/maasserver/management/commands/_config.py |
1826 | +++ b/src/maasserver/management/commands/_config.py |
1827 | @@ -153,7 +153,7 @@ class GetCommand(LocalConfigCommand): |
1828 | # output. |
1829 | |
1830 | def add_arguments(self, parser): |
1831 | - super(GetCommand, self).add_arguments(parser) |
1832 | + super().add_arguments(parser) |
1833 | |
1834 | for option_name, kwargs in gen_configuration_options_for_getting(): |
1835 | parser.add_argument(option_name, **kwargs) |
1836 | @@ -203,7 +203,7 @@ class GetCommand(LocalConfigCommand): |
1837 | |
1838 | class ResetCommand(LocalConfigCommand): |
1839 | def add_arguments(self, parser): |
1840 | - super(ResetCommand, self).add_arguments(parser) |
1841 | + super().add_arguments(parser) |
1842 | |
1843 | for option_name, kwargs in gen_configuration_options_for_resetting(): |
1844 | parser.add_argument(option_name, **kwargs) |
1845 | @@ -222,7 +222,7 @@ class SetCommand(LocalConfigCommand): |
1846 | help = "Set local configuration for the MAAS region controller." |
1847 | |
1848 | def add_arguments(self, parser): |
1849 | - super(SetCommand, self).add_arguments(parser) |
1850 | + super().add_arguments(parser) |
1851 | |
1852 | for option_name, kwargs in gen_configuration_options_for_setting(): |
1853 | parser.add_argument(option_name, **kwargs) |
1854 | diff --git a/src/maasserver/management/commands/db_vacuum_lobjects.py b/src/maasserver/management/commands/db_vacuum_lobjects.py |
1855 | index e52b6c6..86d9e1e 100644 |
1856 | --- a/src/maasserver/management/commands/db_vacuum_lobjects.py |
1857 | +++ b/src/maasserver/management/commands/db_vacuum_lobjects.py |
1858 | @@ -57,7 +57,7 @@ class Command(BaseCommand): |
1859 | ) |
1860 | |
1861 | def add_arguments(self, parser): |
1862 | - super(Command, self).add_arguments(parser) |
1863 | + super().add_arguments(parser) |
1864 | |
1865 | parser.add_argument( |
1866 | "--database", |
1867 | diff --git a/src/maasserver/management/commands/dbupgrade.py b/src/maasserver/management/commands/dbupgrade.py |
1868 | index 8f6c438..1c8860d 100644 |
1869 | --- a/src/maasserver/management/commands/dbupgrade.py |
1870 | +++ b/src/maasserver/management/commands/dbupgrade.py |
1871 | @@ -19,7 +19,7 @@ class Command(BaseCommand): |
1872 | help = "Upgrades database schema for MAAS regiond." |
1873 | |
1874 | def add_arguments(self, parser): |
1875 | - super(Command, self).add_arguments(parser) |
1876 | + super().add_arguments(parser) |
1877 | parser.add_argument( |
1878 | "--database", |
1879 | action="store", |
1880 | diff --git a/src/maasserver/management/commands/edit_named_options.py b/src/maasserver/management/commands/edit_named_options.py |
1881 | index 977e81c..0c5423c 100644 |
1882 | --- a/src/maasserver/management/commands/edit_named_options.py |
1883 | +++ b/src/maasserver/management/commands/edit_named_options.py |
1884 | @@ -37,7 +37,7 @@ class Command(BaseCommand): |
1885 | ) |
1886 | |
1887 | def add_arguments(self, parser): |
1888 | - super(Command, self).add_arguments(parser) |
1889 | + super().add_arguments(parser) |
1890 | add_arguments(parser) |
1891 | parser.add_argument( |
1892 | "--migrate-conflicting-options", |
1893 | diff --git a/src/maasserver/management/commands/runserver.py b/src/maasserver/management/commands/runserver.py |
1894 | index f41488f..a3cf0a3 100644 |
1895 | --- a/src/maasserver/management/commands/runserver.py |
1896 | +++ b/src/maasserver/management/commands/runserver.py |
1897 | @@ -18,7 +18,7 @@ class Command(BaseRunserverCommand): |
1898 | """Customized "runserver" command that wraps the WSGI handler.""" |
1899 | |
1900 | def add_arguments(self, parser): |
1901 | - super(Command, self).add_arguments(parser) |
1902 | + super().add_arguments(parser) |
1903 | |
1904 | parser.add_argument( |
1905 | "--threading", |
1906 | @@ -40,4 +40,4 @@ class Command(BaseRunserverCommand): |
1907 | setattr(basehttp, "WSGIServer", ThreadedWSGIServer) |
1908 | |
1909 | start_up() |
1910 | - return super(Command, self).run(*args, **options) |
1911 | + return super().run(*args, **options) |
1912 | diff --git a/src/maasserver/management/commands/tests/test_dbupgrade.py b/src/maasserver/management/commands/tests/test_dbupgrade.py |
1913 | index 3b58fa1..fb23b7c 100644 |
1914 | --- a/src/maasserver/management/commands/tests/test_dbupgrade.py |
1915 | +++ b/src/maasserver/management/commands/tests/test_dbupgrade.py |
1916 | @@ -66,7 +66,7 @@ class TestDBUpgrade(MAASTestCase): |
1917 | |
1918 | def setUp(self): |
1919 | """Setup a special database cluster to perform the tests.""" |
1920 | - super(TestDBUpgrade, self).setUp() |
1921 | + super().setUp() |
1922 | self.datadir = self.useFixture(TempDirectory()).path |
1923 | self.cluster = self.useFixture(ClusterFixture(self.datadir)) |
1924 | self.useFixture( |
1925 | diff --git a/src/maasserver/models/blockdevice.py b/src/maasserver/models/blockdevice.py |
1926 | index f219b44..7b642e6 100644 |
1927 | --- a/src/maasserver/models/blockdevice.py |
1928 | +++ b/src/maasserver/models/blockdevice.py |
1929 | @@ -320,7 +320,7 @@ class BlockDevice(CleanSave, TimestampedModel): |
1930 | "Cannot delete block device because its part of " |
1931 | "a %s." % filesystem_group.get_nice_name() |
1932 | ) |
1933 | - super(BlockDevice, self).delete() |
1934 | + super().delete() |
1935 | |
1936 | @staticmethod |
1937 | def _get_block_name_from_idx(idx, prefix="sd"): |
1938 | diff --git a/src/maasserver/models/bmc.py b/src/maasserver/models/bmc.py |
1939 | index 0951875..aa8981c 100644 |
1940 | --- a/src/maasserver/models/bmc.py |
1941 | +++ b/src/maasserver/models/bmc.py |
1942 | @@ -298,11 +298,11 @@ class BMC(CleanSave, TimestampedModel): |
1943 | def delete(self): |
1944 | """Delete this BMC.""" |
1945 | maaslog.info("%s: Deleting BMC", self) |
1946 | - super(BMC, self).delete() |
1947 | + super().delete() |
1948 | |
1949 | def save(self, *args, **kwargs): |
1950 | """Save this BMC.""" |
1951 | - super(BMC, self).save(*args, **kwargs) |
1952 | + super().save(*args, **kwargs) |
1953 | # We let name be blank for the initial save, but fix it before the |
1954 | # save completes. This is because set_random_name() operates by |
1955 | # trying to re-save the BMC with a random hostname, and retrying until |
1956 | @@ -635,7 +635,7 @@ class Pod(BMC): |
1957 | def __init__(self, *args, **kwargs): |
1958 | if "pool" not in kwargs: |
1959 | kwargs["pool"] = ResourcePool.objects.get_default_resource_pool() |
1960 | - super(Pod, self).__init__(bmc_type=BMC_TYPE.POD, *args, **kwargs) |
1961 | + super().__init__(bmc_type=BMC_TYPE.POD, *args, **kwargs) |
1962 | |
1963 | def clean(self): |
1964 | super().clean() |
1965 | diff --git a/src/maasserver/models/bootresource.py b/src/maasserver/models/bootresource.py |
1966 | index 6dcc65e..592861d 100644 |
1967 | --- a/src/maasserver/models/bootresource.py |
1968 | +++ b/src/maasserver/models/bootresource.py |
1969 | @@ -530,9 +530,7 @@ class BootResource(CleanSave, TimestampedModel): |
1970 | def unique_error_message(self, model_class, unique_check): |
1971 | if unique_check == ("name", "architecture"): |
1972 | return "Boot resource of name, and architecture already " "exists." |
1973 | - return super(BootResource, self).unique_error_message( |
1974 | - model_class, unique_check |
1975 | - ) |
1976 | + return super().unique_error_message(model_class, unique_check) |
1977 | |
1978 | def get_latest_set(self): |
1979 | """Return latest `BootResourceSet`.""" |
1980 | diff --git a/src/maasserver/models/bootsource.py b/src/maasserver/models/bootsource.py |
1981 | index 1a2717c..358b98b 100644 |
1982 | --- a/src/maasserver/models/bootsource.py |
1983 | +++ b/src/maasserver/models/bootsource.py |
1984 | @@ -37,7 +37,7 @@ class BootSource(CleanSave, TimestampedModel): |
1985 | ) |
1986 | |
1987 | def clean(self, *args, **kwargs): |
1988 | - super(BootSource, self).clean(*args, **kwargs) |
1989 | + super().clean(*args, **kwargs) |
1990 | |
1991 | # You have to specify one of {keyring_data, keyring_filename}. |
1992 | if len(self.keyring_filename) == 0 and len(self.keyring_data) == 0: |
1993 | diff --git a/src/maasserver/models/cleansave.py b/src/maasserver/models/cleansave.py |
1994 | index ab7a4c3..1f92a2f 100644 |
1995 | --- a/src/maasserver/models/cleansave.py |
1996 | +++ b/src/maasserver/models/cleansave.py |
1997 | @@ -18,7 +18,7 @@ class CleanSaveModelState(ModelState): |
1998 | """Provides helpers on `_state` attribute on a model.""" |
1999 | |
2000 | def __init__(self, db=None): |
2001 | - super(CleanSaveModelState, self).__init__(db=db) |
2002 | + super().__init__(db=db) |
2003 | self._changed_fields = {} |
2004 | |
2005 | def get_changed(self): |
2006 | @@ -64,7 +64,7 @@ class CleanSave: |
2007 | |
2008 | @classmethod |
2009 | def from_db(cls, db, field_names, values): |
2010 | - new = super(CleanSave, cls).from_db(db, field_names, values) |
2011 | + new = super().from_db(db, field_names, values) |
2012 | new._state._changed_fields = {} |
2013 | return new |
2014 | |
2015 | @@ -104,9 +104,9 @@ class CleanSave: |
2016 | # if a field has changed. |
2017 | value.__class__ = CleanSaveModelState |
2018 | value._changed_fields = {} |
2019 | - return super(CleanSave, self).__setattr__(name, value) |
2020 | + return super().__setattr__(name, value) |
2021 | if not hasattr(self, "_state"): |
2022 | - return super(CleanSave, self).__setattr__(name, value) |
2023 | + return super().__setattr__(name, value) |
2024 | |
2025 | try: |
2026 | field = self._meta.get_field(name) |
2027 | @@ -117,7 +117,7 @@ class CleanSave: |
2028 | raise AttributeError("can't set attribute") |
2029 | prop_obj.fset(self, value) |
2030 | else: |
2031 | - super(CleanSave, self).__setattr__(name, value) |
2032 | + super().__setattr__(name, value) |
2033 | else: |
2034 | |
2035 | def _wrap_setattr(): |
2036 | @@ -149,13 +149,13 @@ class CleanSave: |
2037 | # Field that holds the actual referenced objects. Ignore |
2038 | # tracking because the related descriptor will set the |
2039 | # related primary key for the field. |
2040 | - super(CleanSave, self).__setattr__(name, value) |
2041 | + super().__setattr__(name, value) |
2042 | else: |
2043 | raise AttributeError( |
2044 | "Unknown field(%s) for: %s" % (name, field) |
2045 | ) |
2046 | else: |
2047 | - super(CleanSave, self).__setattr__(name, value) |
2048 | + super().__setattr__(name, value) |
2049 | |
2050 | def save(self, *args, **kwargs): |
2051 | """Perform `full_clean` before save and only save changed fields.""" |
2052 | @@ -185,7 +185,7 @@ class CleanSave: |
2053 | exclude=exclude_clean_fields, validate_unique=False |
2054 | ) |
2055 | self.validate_unique(exclude=[self._meta.pk.name]) |
2056 | - return super(CleanSave, self).save(*args, **kwargs) |
2057 | + return super().save(*args, **kwargs) |
2058 | elif self._state._changed_fields: |
2059 | # This is the new path where saving only updates the fields |
2060 | # that have actually changed. |
2061 | @@ -223,7 +223,7 @@ class CleanSave: |
2062 | for key, value in self._state._changed_fields.items() |
2063 | if value is not FieldUnset |
2064 | } |
2065 | - return super(CleanSave, self).save(*args, **kwargs) |
2066 | + return super().save(*args, **kwargs) |
2067 | else: |
2068 | # Nothing changed so nothing needs to be saved. |
2069 | return self |
2070 | @@ -254,7 +254,7 @@ class CleanSave: |
2071 | } |
2072 | ) |
2073 | update_fields = frozenset(update_fields) |
2074 | - res = super(CleanSave, self)._save_table( |
2075 | + res = super()._save_table( |
2076 | raw=raw, |
2077 | cls=cls, |
2078 | force_insert=force_insert, |
2079 | diff --git a/src/maasserver/models/config.py b/src/maasserver/models/config.py |
2080 | index b83e34d..2aa381d 100644 |
2081 | --- a/src/maasserver/models/config.py |
2082 | +++ b/src/maasserver/models/config.py |
2083 | @@ -147,7 +147,7 @@ class ConfigManager(Manager): |
2084 | """ |
2085 | |
2086 | def __init__(self): |
2087 | - super(ConfigManager, self).__init__() |
2088 | + super().__init__() |
2089 | self._config_changed_connections = defaultdict(set) |
2090 | |
2091 | def get_config(self, name, default=None): |
2092 | diff --git a/src/maasserver/models/dhcpsnippet.py b/src/maasserver/models/dhcpsnippet.py |
2093 | index a904637..417a640 100644 |
2094 | --- a/src/maasserver/models/dhcpsnippet.py |
2095 | +++ b/src/maasserver/models/dhcpsnippet.py |
2096 | @@ -32,7 +32,7 @@ class DHCPSnippetQueriesMixin(MAASQueriesMixin): |
2097 | "id": "__id", |
2098 | "name": "__name", |
2099 | } |
2100 | - return super(DHCPSnippetQueriesMixin, self).get_specifiers_q( |
2101 | + return super().get_specifiers_q( |
2102 | specifiers, |
2103 | specifier_types=specifier_types, |
2104 | separator=separator, |
2105 | diff --git a/src/maasserver/models/discovery.py b/src/maasserver/models/discovery.py |
2106 | index f8a5b2a..91c59aa 100644 |
2107 | --- a/src/maasserver/models/discovery.py |
2108 | +++ b/src/maasserver/models/discovery.py |
2109 | @@ -42,7 +42,7 @@ class DiscoveryQueriesMixin(MAASQueriesMixin): |
2110 | "ip": "__ip", |
2111 | "mac": "__mac_address", |
2112 | } |
2113 | - return super(DiscoveryQueriesMixin, self).get_specifiers_q( |
2114 | + return super().get_specifiers_q( |
2115 | specifiers, |
2116 | specifier_types=specifier_types, |
2117 | separator=separator, |
2118 | diff --git a/src/maasserver/models/dnsresource.py b/src/maasserver/models/dnsresource.py |
2119 | index 835d68b..fef9712 100644 |
2120 | --- a/src/maasserver/models/dnsresource.py |
2121 | +++ b/src/maasserver/models/dnsresource.py |
2122 | @@ -112,7 +112,7 @@ class DNSResourceQueriesMixin(MAASQueriesMixin): |
2123 | "name": "__name", |
2124 | "domain": (Domain.objects, "domain"), |
2125 | } |
2126 | - return super(DNSResourceQueriesMixin, self).get_specifiers_q( |
2127 | + return super().get_specifiers_q( |
2128 | specifiers, |
2129 | specifier_types=specifier_types, |
2130 | separator=separator, |
2131 | @@ -340,7 +340,7 @@ class DNSResource(CleanSave, TimestampedModel): |
2132 | ).count() |
2133 | if num_cname > 0: |
2134 | raise ValidationError("Cannot add address: CNAME present.") |
2135 | - super(DNSResource, self).clean(*args, **kwargs) |
2136 | + super().clean(*args, **kwargs) |
2137 | |
2138 | def render_json(self, system_id): |
2139 | """Render json. System_id is the system_id for the node, if one |
2140 | diff --git a/src/maasserver/models/domain.py b/src/maasserver/models/domain.py |
2141 | index b1082a1..a131a5b 100644 |
2142 | --- a/src/maasserver/models/domain.py |
2143 | +++ b/src/maasserver/models/domain.py |
2144 | @@ -68,7 +68,7 @@ class DomainQueriesMixin(MAASQueriesMixin): |
2145 | "name": "__name", |
2146 | "id": "__id", |
2147 | } |
2148 | - return super(DomainQueriesMixin, self).get_specifiers_q( |
2149 | + return super().get_specifiers_q( |
2150 | specifiers, |
2151 | specifier_types=specifier_types, |
2152 | separator=separator, |
2153 | @@ -344,11 +344,11 @@ class Domain(CleanSave, TimestampedModel): |
2154 | raise ValidationError( |
2155 | "This domain is the default domain, it cannot be deleted." |
2156 | ) |
2157 | - super(Domain, self).delete() |
2158 | + super().delete() |
2159 | |
2160 | def save(self, *args, **kwargs): |
2161 | created = self.id is None |
2162 | - super(Domain, self).save(*args, **kwargs) |
2163 | + super().save(*args, **kwargs) |
2164 | if created: |
2165 | self.update_kms_srv() |
2166 | # If there is a DNSResource in our parent domain that matches this |
2167 | @@ -367,7 +367,7 @@ class Domain(CleanSave, TimestampedModel): |
2168 | self.name = self.name[:-1] |
2169 | |
2170 | def clean(self, *args, **kwargs): |
2171 | - super(Domain, self).clean(*args, **kwargs) |
2172 | + super().clean(*args, **kwargs) |
2173 | self.clean_name() |
2174 | |
2175 | def render_json_for_related_rrdata( |
2176 | diff --git a/src/maasserver/models/fabric.py b/src/maasserver/models/fabric.py |
2177 | index 9e2b212..87dafab 100644 |
2178 | --- a/src/maasserver/models/fabric.py |
2179 | +++ b/src/maasserver/models/fabric.py |
2180 | @@ -45,7 +45,7 @@ class FabricQueriesMixin(MAASQueriesMixin): |
2181 | "name": "__name", |
2182 | "class": "__class_type", |
2183 | } |
2184 | - return super(FabricQueriesMixin, self).get_specifiers_q( |
2185 | + return super().get_specifiers_q( |
2186 | specifiers, |
2187 | specifier_types=specifier_types, |
2188 | separator=separator, |
2189 | @@ -208,7 +208,7 @@ class Fabric(CleanSave, TimestampedModel): |
2190 | "Can't delete fabric; the following interfaces are " |
2191 | "still connected: %s" % (", ".join(descriptions)) |
2192 | ) |
2193 | - super(Fabric, self).delete() |
2194 | + super().delete() |
2195 | |
2196 | def _create_default_vlan(self): |
2197 | # Circular imports. |
2198 | @@ -222,7 +222,7 @@ class Fabric(CleanSave, TimestampedModel): |
2199 | # Name will get set by clean_name() if None or empty, and there is an |
2200 | # id. We just need to handle names here for creation. |
2201 | created = self.id is None |
2202 | - super(Fabric, self).save(*args, **kwargs) |
2203 | + super().save(*args, **kwargs) |
2204 | if self.name is None or self.name == "": |
2205 | # If we got here, then we have a newly created fabric that needs a |
2206 | # default name. |
2207 | diff --git a/src/maasserver/models/fannetwork.py b/src/maasserver/models/fannetwork.py |
2208 | index be6941a..3227676 100644 |
2209 | --- a/src/maasserver/models/fannetwork.py |
2210 | +++ b/src/maasserver/models/fannetwork.py |
2211 | @@ -160,6 +160,6 @@ class FanNetwork(CleanSave, TimestampedModel): |
2212 | ) |
2213 | |
2214 | def clean(self, *args, **kwargs): |
2215 | - super(FanNetwork, self).clean(*args, **kwargs) |
2216 | + super().clean(*args, **kwargs) |
2217 | self.clean_overlay() |
2218 | self.clean_host_reserve() |
2219 | diff --git a/src/maasserver/models/filesystem.py b/src/maasserver/models/filesystem.py |
2220 | index e868197..86feef5 100644 |
2221 | --- a/src/maasserver/models/filesystem.py |
2222 | +++ b/src/maasserver/models/filesystem.py |
2223 | @@ -248,7 +248,7 @@ class Filesystem(CleanSave, TimestampedModel): |
2224 | return self.fstype in self.TYPES_REQUIRING_STORAGE |
2225 | |
2226 | def clean(self, *args, **kwargs): |
2227 | - super(Filesystem, self).clean(*args, **kwargs) |
2228 | + super().clean(*args, **kwargs) |
2229 | parents = self.partition, self.block_device, self.node |
2230 | |
2231 | # You have to specify either a partition, block device, or node. |
2232 | @@ -337,4 +337,4 @@ class Filesystem(CleanSave, TimestampedModel): |
2233 | def save(self, *args, **kwargs): |
2234 | if not self.uuid: |
2235 | self.uuid = uuid4() |
2236 | - super(Filesystem, self).save(*args, **kwargs) |
2237 | + super().save(*args, **kwargs) |
2238 | diff --git a/src/maasserver/models/filesystemgroup.py b/src/maasserver/models/filesystemgroup.py |
2239 | index c3b9bb3..c8afb6e 100644 |
2240 | --- a/src/maasserver/models/filesystemgroup.py |
2241 | +++ b/src/maasserver/models/filesystemgroup.py |
2242 | @@ -42,11 +42,7 @@ class BaseFilesystemGroupManager(Manager): |
2243 | extra_filters = {} |
2244 | |
2245 | def get_queryset(self): |
2246 | - return ( |
2247 | - super(BaseFilesystemGroupManager, self) |
2248 | - .get_queryset() |
2249 | - .filter(**self.extra_filters) |
2250 | - ) |
2251 | + return super().get_queryset().filter(**self.extra_filters) |
2252 | |
2253 | def get_object_or_404(self, system_id, filesystem_group_id, user, perm): |
2254 | """Fetch a `FilesystemGroup` by its `Node`'s system_id and its id. |
2255 | @@ -559,7 +555,7 @@ class FilesystemGroup(CleanSave, TimestampedModel): |
2256 | ) |
2257 | |
2258 | def clean(self, *args, **kwargs): |
2259 | - super(FilesystemGroup, self).clean(*args, **kwargs) |
2260 | + super().clean(*args, **kwargs) |
2261 | |
2262 | # We allow the initial save to skip model validation, any |
2263 | # additional saves required filesystems linked. This is because the |
2264 | @@ -751,7 +747,7 @@ class FilesystemGroup(CleanSave, TimestampedModel): |
2265 | self.name = FilesystemGroup.objects.get_available_name_for(self) |
2266 | if not self.uuid: |
2267 | self.uuid = uuid4() |
2268 | - super(FilesystemGroup, self).save(*args, **kwargs) |
2269 | + super().save(*args, **kwargs) |
2270 | |
2271 | # Update or create the virtual block device when the filesystem group |
2272 | # is saved. Does nothing if group_type is LVM_VG. Virtual block device |
2273 | @@ -791,7 +787,7 @@ class FilesystemGroup(CleanSave, TimestampedModel): |
2274 | # Possible that the virtual block device has already deleted the |
2275 | # filesystem group. Skip the call if no id is set. |
2276 | if self.id is not None: |
2277 | - super(FilesystemGroup, self).delete() |
2278 | + super().delete() |
2279 | |
2280 | def get_nice_name(self): |
2281 | """Return the nice name for the filesystem group. |
2282 | @@ -856,7 +852,7 @@ class VolumeGroup(FilesystemGroup): |
2283 | proxy = True |
2284 | |
2285 | def __init__(self, *args, **kwargs): |
2286 | - super(VolumeGroup, self).__init__( |
2287 | + super().__init__( |
2288 | group_type=FILESYSTEM_GROUP_TYPE.LVM_VG, *args, **kwargs |
2289 | ) |
2290 | |
2291 | @@ -934,7 +930,7 @@ class RAID(FilesystemGroup): |
2292 | proxy = True |
2293 | |
2294 | def __init__(self, *args, **kwargs): |
2295 | - super(RAID, self).__init__(*args, **kwargs) |
2296 | + super().__init__(*args, **kwargs) |
2297 | if self.group_type not in FILESYSTEM_GROUP_RAID_TYPES: |
2298 | raise ValueError("group_type must be a valid RAID type.") |
2299 | |
2300 | @@ -1039,7 +1035,7 @@ class Bcache(FilesystemGroup): |
2301 | proxy = True |
2302 | |
2303 | def __init__(self, *args, **kwargs): |
2304 | - super(Bcache, self).__init__( |
2305 | + super().__init__( |
2306 | group_type=FILESYSTEM_GROUP_TYPE.BCACHE, *args, **kwargs |
2307 | ) |
2308 | |
2309 | diff --git a/src/maasserver/models/interface.py b/src/maasserver/models/interface.py |
2310 | index 14a2b62..471ad4d 100644 |
2311 | --- a/src/maasserver/models/interface.py |
2312 | +++ b/src/maasserver/models/interface.py |
2313 | @@ -107,7 +107,7 @@ class InterfaceQueriesMixin(MAASQueriesMixin): |
2314 | "tag": self._add_tag_query, |
2315 | "link_speed": "__link_speed__gte", |
2316 | } |
2317 | - return super(InterfaceQueriesMixin, self).get_specifiers_q( |
2318 | + return super().get_specifiers_q( |
2319 | specifiers, |
2320 | specifier_types=specifier_types, |
2321 | separator=separator, |
2322 | @@ -202,7 +202,7 @@ class InterfaceQueriesMixin(MAASQueriesMixin): |
2323 | :returns: tuple (set, dict) |
2324 | |
2325 | """ |
2326 | - return super(InterfaceQueriesMixin, self).get_matching_object_map( |
2327 | + return super().get_matching_object_map( |
2328 | specifiers, "node__id", include_filter=include_filter |
2329 | ) |
2330 | |
2331 | @@ -428,9 +428,7 @@ class InterfaceManager(Manager, InterfaceQueriesMixin): |
2332 | if matches(rel.child): |
2333 | return rel.child, False |
2334 | |
2335 | - interface, created = super(InterfaceManager, self).get_or_create( |
2336 | - *args, **kwargs |
2337 | - ) |
2338 | + interface, created = super().get_or_create(*args, **kwargs) |
2339 | |
2340 | if created: |
2341 | for parent in parents: |
2342 | @@ -627,7 +625,7 @@ class Interface(CleanSave, TimestampedModel): |
2343 | type = kwargs.get("type", self.get_type()) |
2344 | kwargs["type"] = type |
2345 | # Derive the concrete class from the interface's type. |
2346 | - super(Interface, self).__init__(*args, **kwargs) |
2347 | + super().__init__(*args, **kwargs) |
2348 | klass = INTERFACE_TYPE_MAPPING.get(self.type) |
2349 | if klass: |
2350 | self.__class__ = klass |
2351 | @@ -1462,7 +1460,7 @@ class Interface(CleanSave, TimestampedModel): |
2352 | return all_related |
2353 | |
2354 | def clean(self): |
2355 | - super(Interface, self).clean() |
2356 | + super().clean() |
2357 | |
2358 | # Verify that the MAC address is legal if it is not empty. |
2359 | if self.mac_address: |
2360 | @@ -1483,7 +1481,7 @@ class Interface(CleanSave, TimestampedModel): |
2361 | # lease then. |
2362 | if not remove_ip_address: |
2363 | self._skip_ip_address_removal = True |
2364 | - super(Interface, self).delete() |
2365 | + super().delete() |
2366 | |
2367 | def add_tag(self, tag): |
2368 | """Add tag to interface.""" |
2369 | @@ -1658,7 +1656,7 @@ class PhysicalInterface(Interface): |
2370 | return INTERFACE_TYPE.PHYSICAL |
2371 | |
2372 | def clean(self): |
2373 | - super(PhysicalInterface, self).clean() |
2374 | + super().clean() |
2375 | # Node and MAC address is always required for a physical interface. |
2376 | validation_errors = {} |
2377 | if self.node is None: |
2378 | @@ -1845,7 +1843,7 @@ class BondInterface(ChildInterface): |
2379 | return INTERFACE_TYPE.BOND |
2380 | |
2381 | def clean(self): |
2382 | - super(BondInterface, self).clean() |
2383 | + super().clean() |
2384 | # Validate that the MAC address is not None. |
2385 | if not self.mac_address: |
2386 | raise ValidationError( |
2387 | @@ -1867,7 +1865,7 @@ class BondInterface(ChildInterface): |
2388 | self.node = self.get_node() |
2389 | # Set the enabled status based on its parents. |
2390 | self.enabled = self.is_enabled() |
2391 | - super(BondInterface, self).save(*args, **kwargs) |
2392 | + super().save(*args, **kwargs) |
2393 | |
2394 | |
2395 | def build_vlan_interface_name(parent, vlan): |
2396 | @@ -1933,7 +1931,7 @@ class VLANInterface(ChildInterface): |
2397 | return "vlan%s" % vid |
2398 | |
2399 | def clean(self): |
2400 | - super(VLANInterface, self).clean() |
2401 | + super().clean() |
2402 | if self.id is not None: |
2403 | # Use the precache here instead of the count() method. |
2404 | parents = self.parents.all() |
2405 | @@ -2002,7 +2000,7 @@ class VLANInterface(ChildInterface): |
2406 | new_name = self.get_name() |
2407 | if self.name != new_name: |
2408 | self.name = new_name |
2409 | - return super(VLANInterface, self).save(*args, **kwargs) |
2410 | + return super().save(*args, **kwargs) |
2411 | |
2412 | |
2413 | class UnknownInterface(Interface): |
2414 | @@ -2019,7 +2017,7 @@ class UnknownInterface(Interface): |
2415 | return None |
2416 | |
2417 | def clean(self): |
2418 | - super(UnknownInterface, self).clean() |
2419 | + super().clean() |
2420 | if self.node is not None: |
2421 | raise ValidationError({"node": ["This field must be blank."]}) |
2422 | |
2423 | diff --git a/src/maasserver/models/iprange.py b/src/maasserver/models/iprange.py |
2424 | index 2f4ec90..e8d1777 100644 |
2425 | --- a/src/maasserver/models/iprange.py |
2426 | +++ b/src/maasserver/models/iprange.py |
2427 | @@ -45,7 +45,7 @@ class IPRangeQueriesMixin(MAASQueriesMixin): |
2428 | "start_ip": "__start_ip", |
2429 | "end_ip": "__end_ip", |
2430 | } |
2431 | - return super(IPRangeQueriesMixin, self).get_specifiers_q( |
2432 | + return super().get_specifiers_q( |
2433 | specifiers, |
2434 | specifier_types=specifier_types, |
2435 | separator=separator, |
2436 | diff --git a/src/maasserver/models/iscsiblockdevice.py b/src/maasserver/models/iscsiblockdevice.py |
2437 | index 8aaf6e9..ccb01a6 100644 |
2438 | --- a/src/maasserver/models/iscsiblockdevice.py |
2439 | +++ b/src/maasserver/models/iscsiblockdevice.py |
2440 | @@ -66,4 +66,4 @@ class ISCSIBlockDevice(BlockDevice): |
2441 | def save(self, *args, **kwargs): |
2442 | # Normilize the target to always include a 'iscsi:' at the start. |
2443 | self.target = get_iscsi_target(self.target) |
2444 | - return super(ISCSIBlockDevice, self).save(*args, **kwargs) |
2445 | + return super().save(*args, **kwargs) |
2446 | diff --git a/src/maasserver/models/largefile.py b/src/maasserver/models/largefile.py |
2447 | index 5d0a24d..90b2c78 100644 |
2448 | --- a/src/maasserver/models/largefile.py |
2449 | +++ b/src/maasserver/models/largefile.py |
2450 | @@ -146,7 +146,7 @@ class LargeFile(CleanSave, TimestampedModel): |
2451 | for link in links: |
2452 | if getattr(self, link).exists(): |
2453 | return |
2454 | - super(LargeFile, self).delete(*args, **kwargs) |
2455 | + super().delete(*args, **kwargs) |
2456 | |
2457 | |
2458 | @asynchronous(timeout=FOREVER) |
2459 | diff --git a/src/maasserver/models/licensekey.py b/src/maasserver/models/licensekey.py |
2460 | index 54559bf..83da5ef 100644 |
2461 | --- a/src/maasserver/models/licensekey.py |
2462 | +++ b/src/maasserver/models/licensekey.py |
2463 | @@ -76,6 +76,4 @@ class LicenseKey(TimestampedModel): |
2464 | "License key with this operating system and distro series", |
2465 | "already exists.", |
2466 | ) |
2467 | - return super(LicenseKey, self).unique_error_message( |
2468 | - model_class, unique_check |
2469 | - ) |
2470 | + return super().unique_error_message(model_class, unique_check) |
2471 | diff --git a/src/maasserver/models/neighbour.py b/src/maasserver/models/neighbour.py |
2472 | index fef3e18..3065c3e 100644 |
2473 | --- a/src/maasserver/models/neighbour.py |
2474 | +++ b/src/maasserver/models/neighbour.py |
2475 | @@ -30,7 +30,7 @@ class NeighbourQueriesMixin(MAASQueriesMixin): |
2476 | "ip": "__ip", |
2477 | "mac": "__mac_address", |
2478 | } |
2479 | - return super(NeighbourQueriesMixin, self).get_specifiers_q( |
2480 | + return super().get_specifiers_q( |
2481 | specifiers, |
2482 | specifier_types=specifier_types, |
2483 | separator=separator, |
2484 | diff --git a/src/maasserver/models/node.py b/src/maasserver/models/node.py |
2485 | index 7e867cd..c226dae 100644 |
2486 | --- a/src/maasserver/models/node.py |
2487 | +++ b/src/maasserver/models/node.py |
2488 | @@ -1898,7 +1898,7 @@ class Node(CleanSave, TimestampedModel): |
2489 | ) |
2490 | |
2491 | def clean(self, *args, **kwargs): |
2492 | - super(Node, self).clean(*args, **kwargs) |
2493 | + super().clean(*args, **kwargs) |
2494 | self.prev_bmc_id = self._state.get_old_value("bmc_id") |
2495 | if self._state.has_changed("hostname"): |
2496 | self.clean_hostname_domain() |
2497 | @@ -1951,7 +1951,7 @@ class Node(CleanSave, TimestampedModel): |
2498 | ): |
2499 | kwargs["update_fields"].append("status_expires") |
2500 | |
2501 | - super(Node, self).save(*args, **kwargs) |
2502 | + super().save(*args, **kwargs) |
2503 | |
2504 | # We let hostname be blank for the initial save, but fix it before the |
2505 | # save completes. This is because set_random_hostname() operates by |
2506 | @@ -2949,7 +2949,7 @@ class Node(CleanSave, TimestampedModel): |
2507 | ) |
2508 | self.bmc.delete() |
2509 | |
2510 | - super(Node, self).delete(*args, **kwargs) |
2511 | + super().delete(*args, **kwargs) |
2512 | |
2513 | def set_random_hostname(self): |
2514 | """Set a random `hostname`.""" |
2515 | @@ -6082,9 +6082,7 @@ class Machine(Node): |
2516 | proxy = True |
2517 | |
2518 | def __init__(self, *args, **kwargs): |
2519 | - super(Machine, self).__init__( |
2520 | - node_type=NODE_TYPE.MACHINE, *args, **kwargs |
2521 | - ) |
2522 | + super().__init__(node_type=NODE_TYPE.MACHINE, *args, **kwargs) |
2523 | |
2524 | def delete(self, force=False): |
2525 | """Deletes this Machine. |
2526 | @@ -6107,7 +6105,7 @@ class Controller(Node): |
2527 | proxy = True |
2528 | |
2529 | def __init__(self, *args, **kwargs): |
2530 | - super(Controller, self).__init__(*args, **kwargs) |
2531 | + super().__init__(*args, **kwargs) |
2532 | |
2533 | def _was_probably_machine(self): |
2534 | """Best guess if a rack was a machine. |
2535 | @@ -6941,9 +6939,7 @@ class RackController(Controller): |
2536 | proxy = True |
2537 | |
2538 | def __init__(self, *args, **kwargs): |
2539 | - super(RackController, self).__init__( |
2540 | - node_type=NODE_TYPE.RACK_CONTROLLER, *args, **kwargs |
2541 | - ) |
2542 | + super().__init__(node_type=NODE_TYPE.RACK_CONTROLLER, *args, **kwargs) |
2543 | |
2544 | @inlineCallbacks |
2545 | def refresh(self): |
2546 | @@ -7307,7 +7303,7 @@ class RegionController(Controller): |
2547 | proxy = True |
2548 | |
2549 | def __init__(self, *args, **kwargs): |
2550 | - super(RegionController, self).__init__( |
2551 | + super().__init__( |
2552 | node_type=NODE_TYPE.REGION_CONTROLLER, *args, **kwargs |
2553 | ) |
2554 | |
2555 | @@ -7378,9 +7374,7 @@ class Device(Node): |
2556 | proxy = True |
2557 | |
2558 | def __init__(self, *args, **kwargs): |
2559 | - super(Device, self).__init__( |
2560 | - node_type=NODE_TYPE.DEVICE, *args, **kwargs |
2561 | - ) |
2562 | + super().__init__(node_type=NODE_TYPE.DEVICE, *args, **kwargs) |
2563 | |
2564 | |
2565 | class NodeGroupToRackController(CleanSave, Model): |
2566 | diff --git a/src/maasserver/models/nodemetadata.py b/src/maasserver/models/nodemetadata.py |
2567 | index 7b13926..fdc3ccd 100644 |
2568 | --- a/src/maasserver/models/nodemetadata.py |
2569 | +++ b/src/maasserver/models/nodemetadata.py |
2570 | @@ -64,4 +64,4 @@ class NodeMetadata(CleanSave, TimestampedModel): |
2571 | def delete(self): |
2572 | """Delete this node metadata entry.""" |
2573 | maaslog.info("%s: deleting key '%s'.", self, self.key) |
2574 | - super(NodeMetadata, self).delete() |
2575 | + super().delete() |
2576 | diff --git a/src/maasserver/models/notification.py b/src/maasserver/models/notification.py |
2577 | index dba7383..ad862ba 100644 |
2578 | --- a/src/maasserver/models/notification.py |
2579 | +++ b/src/maasserver/models/notification.py |
2580 | @@ -236,7 +236,7 @@ class Notification(CleanSave, TimestampedModel): |
2581 | ) |
2582 | |
2583 | def clean(self): |
2584 | - super(Notification, self).clean() |
2585 | + super().clean() |
2586 | # Elementary cleaning that Django can't seem to do for us, mainly |
2587 | # because setting blank=False causes any number of problems. |
2588 | if self.ident == "": |
2589 | diff --git a/src/maasserver/models/packagerepository.py b/src/maasserver/models/packagerepository.py |
2590 | index 446e231..4c45787 100644 |
2591 | --- a/src/maasserver/models/packagerepository.py |
2592 | +++ b/src/maasserver/models/packagerepository.py |
2593 | @@ -32,7 +32,7 @@ class PackageRepositoryQueriesMixin(MAASQueriesMixin): |
2594 | "id": "__id", |
2595 | "name": "__name", |
2596 | } |
2597 | - return super(PackageRepositoryQueriesMixin, self).get_specifiers_q( |
2598 | + return super().get_specifiers_q( |
2599 | specifiers, |
2600 | specifier_types=specifier_types, |
2601 | separator=separator, |
2602 | diff --git a/src/maasserver/models/partition.py b/src/maasserver/models/partition.py |
2603 | index 021b471..109c7bb 100644 |
2604 | --- a/src/maasserver/models/partition.py |
2605 | +++ b/src/maasserver/models/partition.py |
2606 | @@ -261,12 +261,12 @@ class Partition(CleanSave, TimestampedModel): |
2607 | """Save partition.""" |
2608 | if not self.uuid: |
2609 | self.uuid = uuid4() |
2610 | - return super(Partition, self).save(*args, **kwargs) |
2611 | + return super().save(*args, **kwargs) |
2612 | |
2613 | def clean(self, *args, **kwargs): |
2614 | self._round_size() |
2615 | self._validate_enough_space() |
2616 | - super(Partition, self).clean(*args, **kwargs) |
2617 | + super().clean(*args, **kwargs) |
2618 | |
2619 | def __str__(self): |
2620 | return "{size} partition on {bd}".format( |
2621 | @@ -379,7 +379,7 @@ class Partition(CleanSave, TimestampedModel): |
2622 | "VMware ESXi partitions may not be removed. To remove select " |
2623 | "a different storage layout." |
2624 | ) |
2625 | - super(Partition, self).delete() |
2626 | + super().delete() |
2627 | |
2628 | def add_tag(self, tag): |
2629 | """Add tag to partition.""" |
2630 | diff --git a/src/maasserver/models/partitiontable.py b/src/maasserver/models/partitiontable.py |
2631 | index b238c4b..5c65ee6 100644 |
2632 | --- a/src/maasserver/models/partitiontable.py |
2633 | +++ b/src/maasserver/models/partitiontable.py |
2634 | @@ -145,7 +145,7 @@ class PartitionTable(CleanSave, TimestampedModel): |
2635 | return "Partition table for {bd}".format(bd=self.block_device) |
2636 | |
2637 | def clean(self, *args, **kwargs): |
2638 | - super(PartitionTable, self).clean(*args, **kwargs) |
2639 | + super().clean(*args, **kwargs) |
2640 | # Circular imports. |
2641 | from maasserver.models.virtualblockdevice import VirtualBlockDevice |
2642 | |
2643 | diff --git a/src/maasserver/models/physicalblockdevice.py b/src/maasserver/models/physicalblockdevice.py |
2644 | index e9d28f9..4a1a841 100644 |
2645 | --- a/src/maasserver/models/physicalblockdevice.py |
2646 | +++ b/src/maasserver/models/physicalblockdevice.py |
2647 | @@ -91,7 +91,7 @@ class PhysicalBlockDevice(BlockDevice): |
2648 | raise ValidationError( |
2649 | "serial/model are required if id_path is not provided." |
2650 | ) |
2651 | - super(PhysicalBlockDevice, self).clean() |
2652 | + super().clean() |
2653 | |
2654 | def __str__(self): |
2655 | return "{model} S/N {serial} {size} attached to {node}".format( |
2656 | diff --git a/src/maasserver/models/resourcepool.py b/src/maasserver/models/resourcepool.py |
2657 | index 0bc1673..f910a86 100644 |
2658 | --- a/src/maasserver/models/resourcepool.py |
2659 | +++ b/src/maasserver/models/resourcepool.py |
2660 | @@ -31,7 +31,7 @@ class ResourcePoolQueriesMixin(MAASQueriesMixin): |
2661 | "name": "__name", |
2662 | "id": "__id", |
2663 | } |
2664 | - return super(ResourcePoolQueriesMixin, self).get_specifiers_q( |
2665 | + return super().get_specifiers_q( |
2666 | specifiers, |
2667 | specifier_types=specifier_types, |
2668 | separator=separator, |
2669 | diff --git a/src/maasserver/models/signals/testing.py b/src/maasserver/models/signals/testing.py |
2670 | index 0dfaea3..898cdeb 100644 |
2671 | --- a/src/maasserver/models/signals/testing.py |
2672 | +++ b/src/maasserver/models/signals/testing.py |
2673 | @@ -29,7 +29,7 @@ class SignalsDisabled(Fixture): |
2674 | are specified, ALL managers will be disabled. If the manager is |
2675 | already disabled it will not be enabled at clean-up. |
2676 | """ |
2677 | - super(SignalsDisabled, self).__init__() |
2678 | + super().__init__() |
2679 | if len(disable) == 0: |
2680 | self.disable = self.managers.values() |
2681 | else: |
2682 | @@ -38,7 +38,7 @@ class SignalsDisabled(Fixture): |
2683 | } |
2684 | |
2685 | def setUp(self): |
2686 | - super(SignalsDisabled, self).setUp() |
2687 | + super().setUp() |
2688 | for manager in self.disable: |
2689 | if manager.enabled: |
2690 | self.addCleanup(manager.enable) |
2691 | diff --git a/src/maasserver/models/signals/tests/test_events.py b/src/maasserver/models/signals/tests/test_events.py |
2692 | index b3a63c2..7e8466e 100644 |
2693 | --- a/src/maasserver/models/signals/tests/test_events.py |
2694 | +++ b/src/maasserver/models/signals/tests/test_events.py |
2695 | @@ -17,7 +17,7 @@ from provisioningserver.events import EVENT_DETAILS, EVENT_TYPES |
2696 | |
2697 | class TestStatusTransitionEvent(MAASServerTestCase): |
2698 | def setUp(self): |
2699 | - super(TestStatusTransitionEvent, self).setUp() |
2700 | + super().setUp() |
2701 | # Circular imports. |
2702 | from maasserver.models import signals |
2703 | |
2704 | diff --git a/src/maasserver/models/signals/tests/test_nodes.py b/src/maasserver/models/signals/tests/test_nodes.py |
2705 | index 1eb382a..5521afc 100644 |
2706 | --- a/src/maasserver/models/signals/tests/test_nodes.py |
2707 | +++ b/src/maasserver/models/signals/tests/test_nodes.py |
2708 | @@ -52,7 +52,7 @@ class TestNodePreviousStatus(MAASServerTestCase): |
2709 | """Test that `previous_status` is set when the status is changed.""" |
2710 | |
2711 | def setUp(self): |
2712 | - super(TestNodePreviousStatus, self).setUp() |
2713 | + super().setUp() |
2714 | # Disable power signals: some status transitions prompt a power check. |
2715 | self.addCleanup(power.signals.enable) |
2716 | power.signals.disable() |
2717 | @@ -97,7 +97,7 @@ class TestNodeClearsOwnerNEWOrREADYStatus(MAASServerTestCase): |
2718 | """ |
2719 | |
2720 | def setUp(self): |
2721 | - super(TestNodeClearsOwnerNEWOrREADYStatus, self).setUp() |
2722 | + super().setUp() |
2723 | # Disable power signals: some status transitions prompt a power check. |
2724 | self.addCleanup(power.signals.enable) |
2725 | power.signals.disable() |
2726 | diff --git a/src/maasserver/models/space.py b/src/maasserver/models/space.py |
2727 | index 416affb..dee76eb 100644 |
2728 | --- a/src/maasserver/models/space.py |
2729 | +++ b/src/maasserver/models/space.py |
2730 | @@ -44,7 +44,7 @@ class SpaceQueriesMixin(MAASQueriesMixin): |
2731 | "name": "__name", |
2732 | "subnet": (Subnet.objects, "vlan__space"), |
2733 | } |
2734 | - return super(SpaceQueriesMixin, self).get_specifiers_q( |
2735 | + return super().get_specifiers_q( |
2736 | specifiers, |
2737 | specifier_types=specifier_types, |
2738 | separator=separator, |
2739 | @@ -170,7 +170,7 @@ class Space(CleanSave, TimestampedModel): |
2740 | self.save() |
2741 | |
2742 | def clean(self, *args, **kwargs): |
2743 | - super(Space, self).clean(*args, **kwargs) |
2744 | + super().clean(*args, **kwargs) |
2745 | self.clean_name() |
2746 | |
2747 | @property |
2748 | diff --git a/src/maasserver/models/sslkey.py b/src/maasserver/models/sslkey.py |
2749 | index 92fe957..384a4d8 100644 |
2750 | --- a/src/maasserver/models/sslkey.py |
2751 | +++ b/src/maasserver/models/sslkey.py |
2752 | @@ -91,9 +91,7 @@ class SSLKey(CleanSave, TimestampedModel): |
2753 | def unique_error_message(self, model_class, unique_check): |
2754 | if unique_check == ("user", "key"): |
2755 | return "This key has already been added for this user." |
2756 | - return super(SSLKey, self).unique_error_message( |
2757 | - model_class, unique_check |
2758 | - ) |
2759 | + return super().unique_error_message(model_class, unique_check) |
2760 | |
2761 | def __str__(self): |
2762 | return self.key |
2763 | diff --git a/src/maasserver/models/staticipaddress.py b/src/maasserver/models/staticipaddress.py |
2764 | index a2bbc6c..36512c8 100644 |
2765 | --- a/src/maasserver/models/staticipaddress.py |
2766 | +++ b/src/maasserver/models/staticipaddress.py |
2767 | @@ -993,7 +993,7 @@ class StaticIPAddress(CleanSave, TimestampedModel): |
2768 | ) |
2769 | |
2770 | def clean(self, *args, **kwargs): |
2771 | - super(StaticIPAddress, self).clean(*args, **kwargs) |
2772 | + super().clean(*args, **kwargs) |
2773 | self.clean_subnet_and_ip_consistent() |
2774 | |
2775 | def validate_unique(self, exclude=None): |
2776 | diff --git a/src/maasserver/models/subnet.py b/src/maasserver/models/subnet.py |
2777 | index d4d0798..ac10f0f 100644 |
2778 | --- a/src/maasserver/models/subnet.py |
2779 | +++ b/src/maasserver/models/subnet.py |
2780 | @@ -197,7 +197,7 @@ class SubnetQueriesMixin(MAASQueriesMixin): |
2781 | "vid": self._add_vlan_vid_query, |
2782 | "vlan": (VLAN.objects, "subnet"), |
2783 | } |
2784 | - return super(SubnetQueriesMixin, self).get_specifiers_q( |
2785 | + return super().get_specifiers_q( |
2786 | specifiers, |
2787 | specifier_types=specifier_types, |
2788 | separator=separator, |
2789 | diff --git a/src/maasserver/models/switch.py b/src/maasserver/models/switch.py |
2790 | index 73a1684..b415886 100644 |
2791 | --- a/src/maasserver/models/switch.py |
2792 | +++ b/src/maasserver/models/switch.py |
2793 | @@ -55,4 +55,4 @@ class Switch(CleanSave, TimestampedModel): |
2794 | def delete(self): |
2795 | """Delete this switch.""" |
2796 | maaslog.info("%s: Deleting switch", self) |
2797 | - super(Switch, self).delete() |
2798 | + super().delete() |
2799 | diff --git a/src/maasserver/models/tag.py b/src/maasserver/models/tag.py |
2800 | index d01d263..9dc5449 100644 |
2801 | --- a/src/maasserver/models/tag.py |
2802 | +++ b/src/maasserver/models/tag.py |
2803 | @@ -77,7 +77,7 @@ class Tag(CleanSave, TimestampedModel): |
2804 | objects = TagManager() |
2805 | |
2806 | def __init__(self, *args, **kwargs): |
2807 | - super(Tag, self).__init__(*args, **kwargs) |
2808 | + super().__init__(*args, **kwargs) |
2809 | # Track what the original definition is, so we can detect when it |
2810 | # changes and we need to repopulate the node<=>tag mapping. |
2811 | # We have to check for self.id, otherwise we don't see the creation of |
2812 | @@ -145,7 +145,7 @@ class Tag(CleanSave, TimestampedModel): |
2813 | :param populate: Whether or not to call `populate_nodes` if the |
2814 | definition has changed. |
2815 | """ |
2816 | - super(Tag, self).save(*args, **kwargs) |
2817 | + super().save(*args, **kwargs) |
2818 | if populate and (self.definition != self._original_definition): |
2819 | self.populate_nodes() |
2820 | self._original_definition = self.definition |
2821 | diff --git a/src/maasserver/models/testing.py b/src/maasserver/models/testing.py |
2822 | index 24daf49..9e24e2d 100644 |
2823 | --- a/src/maasserver/models/testing.py |
2824 | +++ b/src/maasserver/models/testing.py |
2825 | @@ -17,7 +17,7 @@ class SignalDisconnected(fixtures.Fixture): # DEPRECATED |
2826 | def __init__( |
2827 | self, signal, receiver, sender=None, weak=True, dispatch_uid=None |
2828 | ): |
2829 | - super(SignalDisconnected, self).__init__() |
2830 | + super().__init__() |
2831 | self.signal = signal |
2832 | self.receiver = receiver |
2833 | self.sender = sender |
2834 | @@ -25,7 +25,7 @@ class SignalDisconnected(fixtures.Fixture): # DEPRECATED |
2835 | self.dispatch_uid = dispatch_uid |
2836 | |
2837 | def setUp(self): |
2838 | - super(SignalDisconnected, self).setUp() |
2839 | + super().setUp() |
2840 | self.addCleanup( |
2841 | self.signal.connect, |
2842 | receiver=self.receiver, |
2843 | @@ -49,11 +49,11 @@ class SignalsDisconnected(fixtures.Fixture): # DEPRECATED |
2844 | """ |
2845 | |
2846 | def __init__(self, *signals): |
2847 | - super(SignalsDisconnected, self).__init__() |
2848 | + super().__init__() |
2849 | self.signals = signals |
2850 | |
2851 | def setUp(self): |
2852 | - super(SignalsDisconnected, self).setUp() |
2853 | + super().setUp() |
2854 | |
2855 | def restore(signal, receivers): |
2856 | with signal.lock: |
2857 | diff --git a/src/maasserver/models/tests/test_bootresource.py b/src/maasserver/models/tests/test_bootresource.py |
2858 | index c7f747d..825bbec 100644 |
2859 | --- a/src/maasserver/models/tests/test_bootresource.py |
2860 | +++ b/src/maasserver/models/tests/test_bootresource.py |
2861 | @@ -348,7 +348,7 @@ class TestBootResourceManager(MAASServerTestCase): |
2862 | |
2863 | class TestGetAvailableCommissioningResources(MAASServerTestCase): |
2864 | def setUp(self): |
2865 | - super(TestGetAvailableCommissioningResources, self).setUp() |
2866 | + super().setUp() |
2867 | # Disable boot source cache signals. |
2868 | self.addCleanup(bootsources.signals.enable) |
2869 | bootsources.signals.disable() |
2870 | diff --git a/src/maasserver/models/tests/test_bootsource.py b/src/maasserver/models/tests/test_bootsource.py |
2871 | index 9b82fd8..12425cd 100644 |
2872 | --- a/src/maasserver/models/tests/test_bootsource.py |
2873 | +++ b/src/maasserver/models/tests/test_bootsource.py |
2874 | @@ -24,7 +24,7 @@ class TestBootSource(MAASServerTestCase): |
2875 | """Tests for the `BootSource` model.""" |
2876 | |
2877 | def setUp(self): |
2878 | - super(TestBootSource, self).setUp() |
2879 | + super().setUp() |
2880 | # Disable boot source cache signals. |
2881 | self.addCleanup(bootsources.signals.enable) |
2882 | bootsources.signals.disable() |
2883 | diff --git a/src/maasserver/models/tests/test_bootsourcecache.py b/src/maasserver/models/tests/test_bootsourcecache.py |
2884 | index dd61bd9..9e2143a 100644 |
2885 | --- a/src/maasserver/models/tests/test_bootsourcecache.py |
2886 | +++ b/src/maasserver/models/tests/test_bootsourcecache.py |
2887 | @@ -13,7 +13,7 @@ from maasserver.testing.testcase import MAASServerTestCase |
2888 | |
2889 | class TestBootSourceCache(MAASServerTestCase): |
2890 | def setUp(self): |
2891 | - super(TestBootSourceCache, self).setUp() |
2892 | + super().setUp() |
2893 | # Disable boot source cache signals. |
2894 | self.addCleanup(bootsources.signals.enable) |
2895 | bootsources.signals.disable() |
2896 | diff --git a/src/maasserver/models/tests/test_bootsourceselection.py b/src/maasserver/models/tests/test_bootsourceselection.py |
2897 | index d5df0c1..7e2995b 100644 |
2898 | --- a/src/maasserver/models/tests/test_bootsourceselection.py |
2899 | +++ b/src/maasserver/models/tests/test_bootsourceselection.py |
2900 | @@ -17,7 +17,7 @@ class TestBootSourceSelection(MAASServerTestCase): |
2901 | """Tests for the `BootSourceSelection` model.""" |
2902 | |
2903 | def setUp(self): |
2904 | - super(TestBootSourceSelection, self).setUp() |
2905 | + super().setUp() |
2906 | # Disable boot source cache signals. |
2907 | self.addCleanup(bootsources.signals.enable) |
2908 | bootsources.signals.disable() |
2909 | diff --git a/src/maasserver/models/tests/test_config.py b/src/maasserver/models/tests/test_config.py |
2910 | index 11ad067..e33a14e 100644 |
2911 | --- a/src/maasserver/models/tests/test_config.py |
2912 | +++ b/src/maasserver/models/tests/test_config.py |
2913 | @@ -236,7 +236,7 @@ class SettingConfigTest(MAASServerTestCase): |
2914 | scenarios = tuple((name, {"name": name}) for name in get_default_config()) |
2915 | |
2916 | def setUp(self): |
2917 | - super(SettingConfigTest, self).setUp() |
2918 | + super().setUp() |
2919 | # Some of these setting we have to be careful about. |
2920 | if self.name in {"enable_http_proxy", "http_proxy"}: |
2921 | manager = signals.bootsources.signals |
2922 | diff --git a/src/maasserver/models/tests/test_dnspublication.py b/src/maasserver/models/tests/test_dnspublication.py |
2923 | index 3930196..62d5975 100644 |
2924 | --- a/src/maasserver/models/tests/test_dnspublication.py |
2925 | +++ b/src/maasserver/models/tests/test_dnspublication.py |
2926 | @@ -92,7 +92,7 @@ class TestDNSPublicationManager(MAASServerTestCase): |
2927 | """Test `DNSPublicationManager`.""" |
2928 | |
2929 | def setUp(self): |
2930 | - super(TestDNSPublicationManager, self).setUp() |
2931 | + super().setUp() |
2932 | # These tests expect the DNSPublication table to be empty. |
2933 | DNSPublication.objects.all().delete() |
2934 | |
2935 | diff --git a/src/maasserver/models/tests/test_node.py b/src/maasserver/models/tests/test_node.py |
2936 | index 3b9a6fb..642c5c6 100644 |
2937 | --- a/src/maasserver/models/tests/test_node.py |
2938 | +++ b/src/maasserver/models/tests/test_node.py |
2939 | @@ -978,7 +978,7 @@ class TestDeviceManager(MAASServerTestCase): |
2940 | |
2941 | class TestNode(MAASServerTestCase): |
2942 | def setUp(self): |
2943 | - super(TestNode, self).setUp() |
2944 | + super().setUp() |
2945 | self.patch_autospec(node_module, "power_driver_check") |
2946 | |
2947 | def disable_node_query(self): |
2948 | @@ -5612,7 +5612,7 @@ class TestNode(MAASServerTestCase): |
2949 | |
2950 | class TestNodePowerParameters(MAASServerTestCase): |
2951 | def setUp(self): |
2952 | - super(TestNodePowerParameters, self).setUp() |
2953 | + super().setUp() |
2954 | self.patch_autospec(node_module, "power_driver_check") |
2955 | |
2956 | def test_power_parameters_are_stored(self): |
2957 | @@ -8137,7 +8137,7 @@ class TestNode_Start(MAASTransactionServerTestCase): |
2958 | """Tests for Node.start().""" |
2959 | |
2960 | def setUp(self): |
2961 | - super(TestNode_Start, self).setUp() |
2962 | + super().setUp() |
2963 | self.patch_autospec(node_module, "power_driver_check") |
2964 | |
2965 | def make_acquired_node_with_interface( |
2966 | @@ -9051,7 +9051,7 @@ class TestNode_Stop(MAASServerTestCase): |
2967 | """Tests for Node.stop().""" |
2968 | |
2969 | def setUp(self): |
2970 | - super(TestNode_Stop, self).setUp() |
2971 | + super().setUp() |
2972 | self.patch_autospec(node_module, "power_driver_check") |
2973 | |
2974 | def make_acquired_node_with_interface( |
2975 | diff --git a/src/maasserver/models/tests/test_rbacsync.py b/src/maasserver/models/tests/test_rbacsync.py |
2976 | index fc4df87..8835a7c 100644 |
2977 | --- a/src/maasserver/models/tests/test_rbacsync.py |
2978 | +++ b/src/maasserver/models/tests/test_rbacsync.py |
2979 | @@ -15,7 +15,7 @@ class TestRBACSync(MAASServerTestCase): |
2980 | """Test `RBACSync`.""" |
2981 | |
2982 | def setUp(self): |
2983 | - super(TestRBACSync, self).setUp() |
2984 | + super().setUp() |
2985 | # These tests expect the RBACSync table to be empty. |
2986 | RBACSync.objects.all().delete() |
2987 | |
2988 | diff --git a/src/maasserver/models/timestampedmodel.py b/src/maasserver/models/timestampedmodel.py |
2989 | index b13ec00..80b96a7 100644 |
2990 | --- a/src/maasserver/models/timestampedmodel.py |
2991 | +++ b/src/maasserver/models/timestampedmodel.py |
2992 | @@ -82,4 +82,4 @@ class TimestampedModel(Model, object): |
2993 | kwargs["update_fields"].add("created") |
2994 | if update_updated: |
2995 | kwargs["update_fields"].add("updated") |
2996 | - return super(TimestampedModel, self).save(*args, **kwargs) |
2997 | + return super().save(*args, **kwargs) |
2998 | diff --git a/src/maasserver/models/userprofile.py b/src/maasserver/models/userprofile.py |
2999 | index 75e2b6f..68c7c00 100644 |
3000 | --- a/src/maasserver/models/userprofile.py |
3001 | +++ b/src/maasserver/models/userprofile.py |
3002 | @@ -93,7 +93,7 @@ class UserProfile(CleanSave, Model): |
3003 | self.user.filestorage_set.all().delete() |
3004 | self.user.consumers.all().delete() |
3005 | self.user.delete() |
3006 | - super(UserProfile, self).delete() |
3007 | + super().delete() |
3008 | |
3009 | def transfer_resources(self, new_owner): |
3010 | """Transfer owned resources to another user. |
3011 | diff --git a/src/maasserver/models/virtualblockdevice.py b/src/maasserver/models/virtualblockdevice.py |
3012 | index b59be68..8c49d1d 100644 |
3013 | --- a/src/maasserver/models/virtualblockdevice.py |
3014 | +++ b/src/maasserver/models/virtualblockdevice.py |
3015 | @@ -82,7 +82,7 @@ class VirtualBlockDevice(BlockDevice): |
3016 | return self.name |
3017 | |
3018 | def clean(self, *args, **kwargs): |
3019 | - super(VirtualBlockDevice, self).clean(*args, **kwargs) |
3020 | + super().clean(*args, **kwargs) |
3021 | |
3022 | # First time called the node might not be set, so we handle the |
3023 | # DoesNotExist exception accordingly. |
3024 | @@ -131,7 +131,7 @@ class VirtualBlockDevice(BlockDevice): |
3025 | def save(self, *args, **kwargs): |
3026 | if not self.uuid: |
3027 | self.uuid = uuid4() |
3028 | - return super(VirtualBlockDevice, self).save(*args, **kwargs) |
3029 | + return super().save(*args, **kwargs) |
3030 | |
3031 | def get_parents(self): |
3032 | """Return the blockdevices and partition which make up this device.""" |
3033 | diff --git a/src/maasserver/models/vlan.py b/src/maasserver/models/vlan.py |
3034 | index 0450364..8df99b0 100644 |
3035 | --- a/src/maasserver/models/vlan.py |
3036 | +++ b/src/maasserver/models/vlan.py |
3037 | @@ -63,7 +63,7 @@ class VLANQueriesMixin(MAASQueriesMixin): |
3038 | "space": (Space.objects, "vlan"), |
3039 | "vid": self._add_vid_query, |
3040 | } |
3041 | - return super(VLANQueriesMixin, self).get_specifiers_q( |
3042 | + return super().get_specifiers_q( |
3043 | specifiers, |
3044 | specifier_types=specifier_types, |
3045 | separator=separator, |
3046 | @@ -274,7 +274,7 @@ class VLAN(CleanSave, TimestampedModel): |
3047 | ) |
3048 | self.manage_connected_interfaces() |
3049 | self.manage_connected_subnets() |
3050 | - super(VLAN, self).delete() |
3051 | + super().delete() |
3052 | |
3053 | def save(self, *args, **kwargs): |
3054 | # Bug 1555759: Raise a Notification if there are no VLANs with DHCP |
3055 | diff --git a/src/maasserver/models/zone.py b/src/maasserver/models/zone.py |
3056 | index 151e46c..1cf3bf9 100644 |
3057 | --- a/src/maasserver/models/zone.py |
3058 | +++ b/src/maasserver/models/zone.py |
3059 | @@ -80,7 +80,7 @@ class Zone(CleanSave, TimestampedModel): |
3060 | raise ValidationError( |
3061 | "This zone is the default zone, it cannot be deleted." |
3062 | ) |
3063 | - super(Zone, self).delete() |
3064 | + super().delete() |
3065 | |
3066 | @property |
3067 | def node_only_set(self): |
3068 | diff --git a/src/maasserver/node_action.py b/src/maasserver/node_action.py |
3069 | index a09f42e..417e680 100644 |
3070 | --- a/src/maasserver/node_action.py |
3071 | +++ b/src/maasserver/node_action.py |
3072 | @@ -627,7 +627,7 @@ class PowerOff(NodeAction): |
3073 | raise NodeActionError(exception) |
3074 | |
3075 | def is_actionable(self): |
3076 | - is_actionable = super(PowerOff, self).is_actionable() |
3077 | + is_actionable = super().is_actionable() |
3078 | return is_actionable and (self.node.power_state != POWER_STATE.OFF) |
3079 | |
3080 | |
3081 | @@ -699,7 +699,7 @@ class MarkBroken(NodeAction): |
3082 | |
3083 | def is_permitted(self): |
3084 | """Must also be owned to mark it broken.""" |
3085 | - permitted = super(MarkBroken, self).is_permitted() |
3086 | + permitted = super().is_permitted() |
3087 | return permitted and self.node.owner_id == self.user.id |
3088 | |
3089 | |
3090 | diff --git a/src/maasserver/node_constraint_filter_forms.py b/src/maasserver/node_constraint_filter_forms.py |
3091 | index bf33269..19fe00a 100644 |
3092 | --- a/src/maasserver/node_constraint_filter_forms.py |
3093 | +++ b/src/maasserver/node_constraint_filter_forms.py |
3094 | @@ -221,7 +221,7 @@ JUJU_ACQUIRE_FORM_FIELDS_MAPPING = { |
3095 | # XXX JeroenVermeulen 2014-02-06: Can we document this please? |
3096 | class RenamableFieldsForm(forms.Form): |
3097 | def __init__(self, *args, **kwargs): |
3098 | - super(RenamableFieldsForm, self).__init__(*args, **kwargs) |
3099 | + super().__init__(*args, **kwargs) |
3100 | self.field_mapping = {name: name for name in self.fields} |
3101 | |
3102 | def get_field_name(self, name): |
3103 | @@ -599,7 +599,7 @@ def nodes_by_interface( |
3104 | |
3105 | class LabeledConstraintMapField(Field): |
3106 | def __init__(self, *args, **kwargs): |
3107 | - super(LabeledConstraintMapField, self).__init__(*args, **kwargs) |
3108 | + super().__init__(*args, **kwargs) |
3109 | self.validators.insert( |
3110 | 0, |
3111 | lambda constraint_map: constraint_map.validate( |
3112 | diff --git a/src/maasserver/nonces_cleanup.py b/src/maasserver/nonces_cleanup.py |
3113 | index 9103314..99af8a7 100644 |
3114 | --- a/src/maasserver/nonces_cleanup.py |
3115 | +++ b/src/maasserver/nonces_cleanup.py |
3116 | @@ -102,6 +102,4 @@ class NonceCleanupService(TimerService, object): |
3117 | |
3118 | def __init__(self, interval=(24 * 60 * 60)): |
3119 | cleanup = synchronous(transactional(cleanup_old_nonces)) |
3120 | - super(NonceCleanupService, self).__init__( |
3121 | - interval, deferToDatabase, cleanup |
3122 | - ) |
3123 | + super().__init__(interval, deferToDatabase, cleanup) |
3124 | diff --git a/src/maasserver/preseed.py b/src/maasserver/preseed.py |
3125 | index 36c6567..b165401 100644 |
3126 | --- a/src/maasserver/preseed.py |
3127 | +++ b/src/maasserver/preseed.py |
3128 | @@ -761,7 +761,7 @@ class TemplateNotFoundError(Exception): |
3129 | """The template has not been found.""" |
3130 | |
3131 | def __init__(self, name): |
3132 | - super(TemplateNotFoundError, self).__init__(name) |
3133 | + super().__init__(name) |
3134 | self.name = name |
3135 | |
3136 | |
3137 | diff --git a/src/maasserver/prometheus/stats.py b/src/maasserver/prometheus/stats.py |
3138 | index 3d5a5ea..865241f 100644 |
3139 | --- a/src/maasserver/prometheus/stats.py |
3140 | +++ b/src/maasserver/prometheus/stats.py |
3141 | @@ -252,7 +252,7 @@ class PrometheusService(TimerService, object): |
3142 | """ |
3143 | |
3144 | def __init__(self, interval=PROMETHEUS_SERVICE_PERIOD): |
3145 | - super(PrometheusService, self).__init__( |
3146 | + super().__init__( |
3147 | interval.total_seconds(), self.maybe_push_prometheus_stats |
3148 | ) |
3149 | |
3150 | diff --git a/src/maasserver/rack_controller.py b/src/maasserver/rack_controller.py |
3151 | index 453b751..b275e6e 100644 |
3152 | --- a/src/maasserver/rack_controller.py |
3153 | +++ b/src/maasserver/rack_controller.py |
3154 | @@ -69,7 +69,7 @@ class RackControllerService(Service): |
3155 | :param postgresListener: The `PostgresListenerService` that is running |
3156 | in this regiond process. |
3157 | """ |
3158 | - super(RackControllerService, self).__init__() |
3159 | + super().__init__() |
3160 | self.clock = clock |
3161 | self.starting = None |
3162 | self.processing = LoopingCall(self.process) |
3163 | @@ -83,7 +83,7 @@ class RackControllerService(Service): |
3164 | @asynchronous(timeout=FOREVER) |
3165 | def startService(self): |
3166 | """Start listening for messages.""" |
3167 | - super(RackControllerService, self).startService() |
3168 | + super().startService() |
3169 | |
3170 | def cb_registerWithPostgres(processId): |
3171 | # Register the coreHandler with postgres. |
3172 | @@ -135,7 +135,7 @@ class RackControllerService(Service): |
3173 | @asynchronous(timeout=FOREVER) |
3174 | def stopService(self): |
3175 | """Close the controller.""" |
3176 | - super(RackControllerService, self).stopService() |
3177 | + super().stopService() |
3178 | |
3179 | def cleanUp(): |
3180 | # Unregister the core handler. |
3181 | diff --git a/src/maasserver/region_controller.py b/src/maasserver/region_controller.py |
3182 | index eb232fb..bd073d6 100644 |
3183 | --- a/src/maasserver/region_controller.py |
3184 | +++ b/src/maasserver/region_controller.py |
3185 | @@ -79,7 +79,7 @@ class RegionControllerService(Service): |
3186 | :param postgresListener: The `PostgresListenerService` that is running |
3187 | in this regiond process. |
3188 | """ |
3189 | - super(RegionControllerService, self).__init__() |
3190 | + super().__init__() |
3191 | self.clock = clock |
3192 | self.retryOnFailure = retryOnFailure |
3193 | self.rbacRetryOnFailureDelay = rbacRetryOnFailureDelay |
3194 | @@ -103,7 +103,7 @@ class RegionControllerService(Service): |
3195 | @asynchronous(timeout=FOREVER) |
3196 | def startService(self): |
3197 | """Start listening for messages.""" |
3198 | - super(RegionControllerService, self).startService() |
3199 | + super().startService() |
3200 | self.postgresListener.register("sys_dns", self.markDNSForUpdate) |
3201 | self.postgresListener.register("sys_proxy", self.markProxyForUpdate) |
3202 | self.postgresListener.register("sys_rbac", self.markRBACForUpdate) |
3203 | @@ -114,7 +114,7 @@ class RegionControllerService(Service): |
3204 | @asynchronous(timeout=FOREVER) |
3205 | def stopService(self): |
3206 | """Close the controller.""" |
3207 | - super(RegionControllerService, self).stopService() |
3208 | + super().stopService() |
3209 | self.postgresListener.events.connected.unregisterHandler( |
3210 | self.markAllForUpdate |
3211 | ) |
3212 | diff --git a/src/maasserver/regiondservices/service_monitor_service.py b/src/maasserver/regiondservices/service_monitor_service.py |
3213 | index 1424555..fb33692 100644 |
3214 | --- a/src/maasserver/regiondservices/service_monitor_service.py |
3215 | +++ b/src/maasserver/regiondservices/service_monitor_service.py |
3216 | @@ -29,9 +29,7 @@ class ServiceMonitorService(TimerService, object): |
3217 | |
3218 | def __init__(self, clock=reactor): |
3219 | # Call self.monitorServices() every self.check_interval. |
3220 | - super(ServiceMonitorService, self).__init__( |
3221 | - self.check_interval, self.monitorServices |
3222 | - ) |
3223 | + super().__init__(self.check_interval, self.monitorServices) |
3224 | self.clock = clock |
3225 | |
3226 | def monitorServices(self): |
3227 | diff --git a/src/maasserver/regiondservices/tests/test_ntp.py b/src/maasserver/regiondservices/tests/test_ntp.py |
3228 | index 1f15b7f..2e0fdff 100644 |
3229 | --- a/src/maasserver/regiondservices/tests/test_ntp.py |
3230 | +++ b/src/maasserver/regiondservices/tests/test_ntp.py |
3231 | @@ -63,7 +63,7 @@ class TestRegionNetworkTimeProtocolService(MAASTransactionServerTestCase): |
3232 | """Tests for `RegionNetworkTimeProtocolService`.""" |
3233 | |
3234 | def setUp(self): |
3235 | - super(TestRegionNetworkTimeProtocolService, self).setUp() |
3236 | + super().setUp() |
3237 | self.useFixture(MAASRootFixture()) |
3238 | |
3239 | @transactional |
3240 | diff --git a/src/maasserver/regiondservices/tests/test_syslog.py b/src/maasserver/regiondservices/tests/test_syslog.py |
3241 | index 5cc46a9..2fe3bcd 100644 |
3242 | --- a/src/maasserver/regiondservices/tests/test_syslog.py |
3243 | +++ b/src/maasserver/regiondservices/tests/test_syslog.py |
3244 | @@ -69,7 +69,7 @@ class TestRegionSyslogService(MAASTransactionServerTestCase): |
3245 | """Tests for `RegionSyslogService`.""" |
3246 | |
3247 | def setUp(self): |
3248 | - super(TestRegionSyslogService, self).setUp() |
3249 | + super().setUp() |
3250 | self.useFixture(MAASRootFixture()) |
3251 | |
3252 | @transactional |
3253 | diff --git a/src/maasserver/rpc/regionservice.py b/src/maasserver/rpc/regionservice.py |
3254 | index dde6640..552efe6 100644 |
3255 | --- a/src/maasserver/rpc/regionservice.py |
3256 | +++ b/src/maasserver/rpc/regionservice.py |
3257 | @@ -807,7 +807,7 @@ class RegionServer(Region): |
3258 | return |
3259 | |
3260 | def connectionMade(self): |
3261 | - super(RegionServer, self).connectionMade() |
3262 | + super().connectionMade() |
3263 | self.connid = str(uuid.uuid4()) |
3264 | if self.factory.service.running: |
3265 | return self.performHandshake().addErrback(self.handshakeFailed) |
3266 | @@ -824,7 +824,7 @@ class RegionServer(Region): |
3267 | ) |
3268 | self.factory.service._removeConnectionFor(self.ident, self) |
3269 | log.msg("Rack controller '%s' disconnected." % self.ident) |
3270 | - super(RegionServer, self).connectionLost(reason) |
3271 | + super().connectionLost(reason) |
3272 | |
3273 | |
3274 | def _get_call_latency_metric_labels(client, cmd, *args, **kwargs): |
3275 | @@ -841,7 +841,7 @@ class RackClient(common.Client): |
3276 | cache_calls = [cluster.DescribePowerTypes, cluster.DescribeNOSTypes] |
3277 | |
3278 | def __init__(self, connection, cache): |
3279 | - super(RackClient, self).__init__(connection) |
3280 | + super().__init__(connection) |
3281 | self.cache = cache |
3282 | |
3283 | def _getCallCache(self): |
3284 | @@ -866,7 +866,7 @@ class RackClient(common.Client): |
3285 | """ |
3286 | call_cache = self._getCallCache() |
3287 | if cmd not in self.cache_calls: |
3288 | - return super(RackClient, self).__call__(cmd, *args, **kwargs) |
3289 | + return super().__call__(cmd, *args, **kwargs) |
3290 | if cmd in call_cache: |
3291 | # Call has already been made over this connection, just return |
3292 | # the original result. |
3293 | @@ -880,7 +880,7 @@ class RackClient(common.Client): |
3294 | call_cache[cmd] = result |
3295 | return result |
3296 | |
3297 | - d = super(RackClient, self).__call__(cmd, *args, **kwargs) |
3298 | + d = super().__call__(cmd, *args, **kwargs) |
3299 | d.addCallback(cb_cache) |
3300 | return d |
3301 | |
3302 | @@ -907,7 +907,7 @@ class RegionService(service.Service, object): |
3303 | starting = None |
3304 | |
3305 | def __init__(self, ipcWorker): |
3306 | - super(RegionService, self).__init__() |
3307 | + super().__init__() |
3308 | self.ipcWorker = ipcWorker |
3309 | self.endpoints = [ |
3310 | [TCP6ServerEndpoint(reactor, port) for port in range(5250, 5260)] |
3311 | @@ -1031,7 +1031,7 @@ class RegionService(service.Service, object): |
3312 | @asynchronous |
3313 | def startService(self): |
3314 | """Start listening on an ephemeral port.""" |
3315 | - super(RegionService, self).startService() |
3316 | + super().startService() |
3317 | self.starting = defer.DeferredList( |
3318 | ( |
3319 | self._bindFirst(endpoint_options, self.factory) |
3320 | @@ -1076,7 +1076,7 @@ class RegionService(service.Service, object): |
3321 | yield conn.transport.loseConnection() |
3322 | except Exception: |
3323 | log.err(None, "Failure when closing RPC connection.") |
3324 | - yield super(RegionService, self).stopService() |
3325 | + yield super().stopService() |
3326 | |
3327 | @asynchronous(timeout=FOREVER) |
3328 | def getPort(self): |
3329 | diff --git a/src/maasserver/rpc/testing/fixtures.py b/src/maasserver/rpc/testing/fixtures.py |
3330 | index 4f33771..49fcfe6 100644 |
3331 | --- a/src/maasserver/rpc/testing/fixtures.py |
3332 | +++ b/src/maasserver/rpc/testing/fixtures.py |
3333 | @@ -50,7 +50,7 @@ def get_service_in_eventloop(name): |
3334 | @implementer(IConnection) |
3335 | class FakeConnection: |
3336 | def __init__(self, ident): |
3337 | - super(FakeConnection, self).__init__() |
3338 | + super().__init__() |
3339 | self.protocol = clusterservice.Cluster() |
3340 | self.ident = ident |
3341 | |
3342 | @@ -72,7 +72,7 @@ class ClusterRPCFixture(fixtures.Fixture): |
3343 | """ |
3344 | |
3345 | def __init__(self): |
3346 | - super(ClusterRPCFixture, self).__init__() |
3347 | + super().__init__() |
3348 | warn( |
3349 | ( |
3350 | "ClusterRPCFixture is deprecated; use " |
3351 | @@ -82,7 +82,7 @@ class ClusterRPCFixture(fixtures.Fixture): |
3352 | ) |
3353 | |
3354 | def setUp(self): |
3355 | - super(ClusterRPCFixture, self).setUp() |
3356 | + super().setUp() |
3357 | # We need the event-loop up and running. |
3358 | if not eventloop.loop.running: |
3359 | raise RuntimeError( |
3360 | @@ -110,7 +110,7 @@ class RunningClusterRPCFixture(fixtures.Fixture): |
3361 | """ |
3362 | |
3363 | def setUp(self): |
3364 | - super(RunningClusterRPCFixture, self).setUp() |
3365 | + super().setUp() |
3366 | self.useFixture(RegionEventLoopFixture("rpc")) |
3367 | self.useFixture(RunningEventLoopFixture()) |
3368 | self.useFixture(ClusterRPCFixture()) |
3369 | @@ -148,7 +148,7 @@ class MockRegionToClusterRPCFixture(fixtures.Fixture): |
3370 | """ |
3371 | |
3372 | def setUp(self): |
3373 | - super(MockRegionToClusterRPCFixture, self).setUp() |
3374 | + super().setUp() |
3375 | # Ensure there's a shared-secret. |
3376 | self.secret = security.get_shared_secret() |
3377 | # We need the event-loop up and running. |
3378 | @@ -277,7 +277,7 @@ class MockLiveRegionToClusterRPCFixture(fixtures.Fixture): |
3379 | self.rpc.startService().wait(10) |
3380 | |
3381 | def setUp(self): |
3382 | - super(MockLiveRegionToClusterRPCFixture, self).setUp() |
3383 | + super().setUp() |
3384 | self.monkey = MonkeyPatcher() |
3385 | # We need the event-loop up and running. |
3386 | if not eventloop.loop.running: |
3387 | diff --git a/src/maasserver/rpc/testing/mixins.py b/src/maasserver/rpc/testing/mixins.py |
3388 | index e2bc881..baa5797 100644 |
3389 | --- a/src/maasserver/rpc/testing/mixins.py |
3390 | +++ b/src/maasserver/rpc/testing/mixins.py |
3391 | @@ -28,7 +28,7 @@ class PreseedRPCMixin: |
3392 | """ |
3393 | |
3394 | def setUp(self): |
3395 | - super(PreseedRPCMixin, self).setUp() |
3396 | + super().setUp() |
3397 | self.useFixture(RegionEventLoopFixture("rpc")) |
3398 | self.useFixture(RunningEventLoopFixture()) |
3399 | self.rpc_fixture = MockLiveRegionToClusterRPCFixture() |
3400 | diff --git a/src/maasserver/rpc/tests/test_boot.py b/src/maasserver/rpc/tests/test_boot.py |
3401 | index 1c91b7a..8795f1d 100644 |
3402 | --- a/src/maasserver/rpc/tests/test_boot.py |
3403 | +++ b/src/maasserver/rpc/tests/test_boot.py |
3404 | @@ -82,7 +82,7 @@ class TestKparamsMerge(MAASServerTestCase): |
3405 | |
3406 | class TestGetConfig(MAASServerTestCase): |
3407 | def setUp(self): |
3408 | - super(TestGetConfig, self).setUp() |
3409 | + super().setUp() |
3410 | self.useFixture(RegionConfigurationFixture()) |
3411 | |
3412 | def tearDown(self): |
3413 | diff --git a/src/maasserver/rpc/tests/test_configuration.py b/src/maasserver/rpc/tests/test_configuration.py |
3414 | index a6fb19d..7788fdd 100644 |
3415 | --- a/src/maasserver/rpc/tests/test_configuration.py |
3416 | +++ b/src/maasserver/rpc/tests/test_configuration.py |
3417 | @@ -16,7 +16,7 @@ from maastesting.factory import factory |
3418 | |
3419 | class TestGetProxies(MAASServerTestCase): |
3420 | def setUp(self): |
3421 | - super(TestGetProxies, self).setUp() |
3422 | + super().setUp() |
3423 | # Disable boot source cache signals. |
3424 | self.addCleanup(bootsources.signals.enable) |
3425 | bootsources.signals.disable() |
3426 | diff --git a/src/maasserver/rpc/tests/test_rackcontrollers.py b/src/maasserver/rpc/tests/test_rackcontrollers.py |
3427 | index 482013d..429f04d 100644 |
3428 | --- a/src/maasserver/rpc/tests/test_rackcontrollers.py |
3429 | +++ b/src/maasserver/rpc/tests/test_rackcontrollers.py |
3430 | @@ -107,7 +107,7 @@ class TestHandleUpgrade(MAASServerTestCase): |
3431 | |
3432 | class TestRegisterRackController(MAASServerTestCase): |
3433 | def setUp(self): |
3434 | - super(TestRegisterRackController, self).setUp() |
3435 | + super().setUp() |
3436 | self.this_region = factory.make_RegionController() |
3437 | mock_running = self.patch( |
3438 | RegionController.objects, "get_running_controller" |
3439 | diff --git a/src/maasserver/rpc/tests/test_regionservice_calls.py b/src/maasserver/rpc/tests/test_regionservice_calls.py |
3440 | index 01ce0ff..72cddd1 100644 |
3441 | --- a/src/maasserver/rpc/tests/test_regionservice_calls.py |
3442 | +++ b/src/maasserver/rpc/tests/test_regionservice_calls.py |
3443 | @@ -239,7 +239,7 @@ class TestRegionProtocol_ReportBootImages(MAASTestCase): |
3444 | |
3445 | class TestRegionProtocol_UpdateLease(MAASTransactionServerTestCase): |
3446 | def setUp(self): |
3447 | - super(TestRegionProtocol_UpdateLease, self).setUp() |
3448 | + super().setUp() |
3449 | self.useFixture(RegionEventLoopFixture("database-tasks")) |
3450 | |
3451 | def test_update_lease_is_registered(self): |
3452 | @@ -714,7 +714,7 @@ class TestRegionProtocol_RegisterEventType(MAASTransactionServerTestCase): |
3453 | |
3454 | class TestRegionProtocol_SendEvent(MAASTransactionServerTestCase): |
3455 | def setUp(self): |
3456 | - super(TestRegionProtocol_SendEvent, self).setUp() |
3457 | + super().setUp() |
3458 | self.useFixture(RegionEventLoopFixture("database-tasks")) |
3459 | |
3460 | def test_send_event_is_registered(self): |
3461 | @@ -881,7 +881,7 @@ class TestRegionProtocol_SendEvent(MAASTransactionServerTestCase): |
3462 | |
3463 | class TestRegionProtocol_SendEventMACAddress(MAASTransactionServerTestCase): |
3464 | def setUp(self): |
3465 | - super(TestRegionProtocol_SendEventMACAddress, self).setUp() |
3466 | + super().setUp() |
3467 | self.useFixture(RegionEventLoopFixture("database-tasks")) |
3468 | |
3469 | def test_send_event_mac_address_is_registered(self): |
3470 | @@ -1050,7 +1050,7 @@ class TestRegionProtocol_SendEventMACAddress(MAASTransactionServerTestCase): |
3471 | |
3472 | class TestRegionProtocol_UpdateServices(MAASTransactionServerTestCase): |
3473 | def setUp(self): |
3474 | - super(TestRegionProtocol_UpdateServices, self).setUp() |
3475 | + super().setUp() |
3476 | self.useFixture(RegionEventLoopFixture("database-tasks")) |
3477 | |
3478 | def test_update_services_is_registered(self): |
3479 | diff --git a/src/maasserver/sequence.py b/src/maasserver/sequence.py |
3480 | index 9777065..a9f8b59 100644 |
3481 | --- a/src/maasserver/sequence.py |
3482 | +++ b/src/maasserver/sequence.py |
3483 | @@ -55,7 +55,7 @@ class Sequence: |
3484 | :param cycle: If this sequence should cycle or not. |
3485 | :param owner: The table.column that owns this sequence. |
3486 | """ |
3487 | - super(Sequence, self).__init__() |
3488 | + super().__init__() |
3489 | self.name = name |
3490 | self.increment = increment |
3491 | self.minvalue = minvalue |
3492 | diff --git a/src/maasserver/stats.py b/src/maasserver/stats.py |
3493 | index 0466d13..3c8eb4e 100644 |
3494 | --- a/src/maasserver/stats.py |
3495 | +++ b/src/maasserver/stats.py |
3496 | @@ -266,7 +266,7 @@ class StatsService(TimerService, object): |
3497 | """ |
3498 | |
3499 | def __init__(self, interval=STATS_SERVICE_PERIOD): |
3500 | - super(StatsService, self).__init__( |
3501 | + super().__init__( |
3502 | interval.total_seconds(), self.maybe_make_stats_request |
3503 | ) |
3504 | |
3505 | diff --git a/src/maasserver/status_monitor.py b/src/maasserver/status_monitor.py |
3506 | index 11c77e5..a599621 100644 |
3507 | --- a/src/maasserver/status_monitor.py |
3508 | +++ b/src/maasserver/status_monitor.py |
3509 | @@ -220,6 +220,4 @@ class StatusMonitorService(TimerService, object): |
3510 | """ |
3511 | |
3512 | def __init__(self, interval=60): |
3513 | - super(StatusMonitorService, self).__init__( |
3514 | - interval, deferToDatabase, check_status |
3515 | - ) |
3516 | + super().__init__(interval, deferToDatabase, check_status) |
3517 | diff --git a/src/maasserver/storage_layouts.py b/src/maasserver/storage_layouts.py |
3518 | index 98d86bd..8bb191d 100644 |
3519 | --- a/src/maasserver/storage_layouts.py |
3520 | +++ b/src/maasserver/storage_layouts.py |
3521 | @@ -54,9 +54,7 @@ class StorageLayoutBase(Form): |
3522 | root_size = BytesOrPercentageField(required=False) |
3523 | |
3524 | def __init__(self, node, params: dict = None): |
3525 | - super(StorageLayoutBase, self).__init__( |
3526 | - data=({} if params is None else params) |
3527 | - ) |
3528 | + super().__init__(data=({} if params is None else params)) |
3529 | self.node = node |
3530 | self.block_devices = self._load_physical_block_devices() |
3531 | self.boot_disk = node.get_boot_disk() |
3532 | @@ -141,7 +139,7 @@ class StorageLayoutBase(Form): |
3533 | |
3534 | def clean(self): |
3535 | """Validate the data.""" |
3536 | - cleaned_data = super(StorageLayoutBase, self).clean() |
3537 | + cleaned_data = super().clean() |
3538 | if len(self.block_devices) == 0: |
3539 | raise StorageLayoutMissingBootDiskError( |
3540 | "Node doesn't have any storage devices to configure." |
3541 | @@ -425,7 +423,7 @@ class LVMStorageLayout(StorageLayoutBase): |
3542 | |
3543 | def clean(self): |
3544 | """Validate the lv_size.""" |
3545 | - cleaned_data = super(LVMStorageLayout, self).clean() |
3546 | + cleaned_data = super().clean() |
3547 | lv_size = self.get_lv_size() |
3548 | if lv_size is not None: |
3549 | root_size = self.get_root_size() |
3550 | @@ -634,7 +632,7 @@ class BcacheStorageLayoutBase(StorageLayoutBase): |
3551 | # Circular imports. |
3552 | from maasserver.models.blockdevice import MIN_BLOCK_DEVICE_SIZE |
3553 | |
3554 | - cleaned_data = super(BcacheStorageLayoutBase, self).clean() |
3555 | + cleaned_data = super().clean() |
3556 | cache_device = self.get_cache_device() |
3557 | cache_size = self.get_cache_size() |
3558 | cache_no_part = self.get_cache_no_part() |
3559 | @@ -680,9 +678,7 @@ class BcacheStorageLayout(FlatStorageLayout, BcacheStorageLayoutBase): |
3560 | """ |
3561 | |
3562 | def __init__(self, node, params: dict = None): |
3563 | - super(BcacheStorageLayout, self).__init__( |
3564 | - node, params=({} if params is None else params) |
3565 | - ) |
3566 | + super().__init__(node, params=({} if params is None else params)) |
3567 | self.setup_cache_device_field() |
3568 | |
3569 | def configure_storage(self, allow_fallback): |
3570 | @@ -695,9 +691,7 @@ class BcacheStorageLayout(FlatStorageLayout, BcacheStorageLayoutBase): |
3571 | if cache_block_device is None: |
3572 | if allow_fallback: |
3573 | # No cache device so just configure using the flat layout. |
3574 | - return super(BcacheStorageLayout, self).configure_storage( |
3575 | - allow_fallback |
3576 | - ) |
3577 | + return super().configure_storage(allow_fallback) |
3578 | else: |
3579 | raise StorageLayoutError( |
3580 | "Node doesn't have an available cache device to " |
3581 | @@ -958,7 +952,7 @@ class StorageLayoutForm(Form): |
3582 | |
3583 | def __init__(self, *args, **kwargs): |
3584 | required = kwargs.pop("required", False) |
3585 | - super(StorageLayoutForm, self).__init__(*args, **kwargs) |
3586 | + super().__init__(*args, **kwargs) |
3587 | self.setup_field(required=required) |
3588 | |
3589 | def setup_field(self, required=False): |
3590 | diff --git a/src/maasserver/testing/api.py b/src/maasserver/testing/api.py |
3591 | index c09cd3f..9cd5f39 100644 |
3592 | --- a/src/maasserver/testing/api.py |
3593 | +++ b/src/maasserver/testing/api.py |
3594 | @@ -136,7 +136,7 @@ class APITestCaseBase(MAASTestCase, metaclass=APITestType): |
3595 | client = None |
3596 | |
3597 | def __init__(self, *args, **kwargs): |
3598 | - super(APITestCaseBase, self).__init__(*args, **kwargs) |
3599 | + super().__init__(*args, **kwargs) |
3600 | # Create scenarios for userfactories and clientfactories. |
3601 | scenarios_users = tuple( |
3602 | ("user=%s" % name, {"userfactory": self.userfactories[name]}) |
3603 | @@ -172,7 +172,7 @@ class APITestCaseBase(MAASTestCase, metaclass=APITestType): |
3604 | raise AssertionError( |
3605 | "Do not set client; set clientfactory instead." |
3606 | ) |
3607 | - super(APITestCaseBase, self).setUp() |
3608 | + super().setUp() |
3609 | self.user = self.userfactory() |
3610 | self.client = self.clientfactory() |
3611 | self.client.login(user=self.user) |
3612 | diff --git a/src/maasserver/testing/database.py b/src/maasserver/testing/database.py |
3613 | index 582de9b..6e54002 100644 |
3614 | --- a/src/maasserver/testing/database.py |
3615 | +++ b/src/maasserver/testing/database.py |
3616 | @@ -19,7 +19,7 @@ class MAASClusterFixture(ClusterFixture): |
3617 | self.connection = connections[ |
3618 | DEFAULT_DB_ALIAS if database is None else database |
3619 | ] |
3620 | - super(MAASClusterFixture, self).__init__( |
3621 | + super().__init__( |
3622 | datadir=self.connection.settings_dict["HOST"], preserve=True |
3623 | ) |
3624 | |
3625 | @@ -28,5 +28,5 @@ class MAASClusterFixture(ClusterFixture): |
3626 | return self.connection.settings_dict["NAME"] |
3627 | |
3628 | def setUp(self): |
3629 | - super(MAASClusterFixture, self).setUp() |
3630 | + super().setUp() |
3631 | self.createdb(self.dbname) |
3632 | diff --git a/src/maasserver/testing/eventloop.py b/src/maasserver/testing/eventloop.py |
3633 | index 7355d35..ef8278d 100644 |
3634 | --- a/src/maasserver/testing/eventloop.py |
3635 | +++ b/src/maasserver/testing/eventloop.py |
3636 | @@ -27,7 +27,7 @@ class RegionEventLoopFixture(Fixture): |
3637 | """ |
3638 | |
3639 | def __init__(self, *services): |
3640 | - super(RegionEventLoopFixture, self).__init__() |
3641 | + super().__init__() |
3642 | self.services = services |
3643 | |
3644 | def checkEventLoopClean(self): |
3645 | @@ -52,7 +52,7 @@ class RegionEventLoopFixture(Fixture): |
3646 | eventloop.loop.services._set_globals = self.original_set_globals |
3647 | |
3648 | def setUp(self): |
3649 | - super(RegionEventLoopFixture, self).setUp() |
3650 | + super().setUp() |
3651 | # Patch start_up in the eventloop. |
3652 | self.original_prepare = eventloop.loop.prepare |
3653 | self.original_set_globals = eventloop.loop.services._set_globals |
3654 | @@ -108,7 +108,7 @@ class RunningEventLoopFixture(Fixture): |
3655 | eventloop.loop.services._set_globals = self.original_set_globals |
3656 | |
3657 | def setUp(self): |
3658 | - super(RunningEventLoopFixture, self).setUp() |
3659 | + super().setUp() |
3660 | # Patch start_up in the eventloop. |
3661 | self.original_prepare = eventloop.loop.prepare |
3662 | self.original_set_globals = eventloop.loop.services._set_globals |
3663 | diff --git a/src/maasserver/testing/fixtures.py b/src/maasserver/testing/fixtures.py |
3664 | index e8a720a..1350fd8 100644 |
3665 | --- a/src/maasserver/testing/fixtures.py |
3666 | +++ b/src/maasserver/testing/fixtures.py |
3667 | @@ -55,7 +55,7 @@ class LogSQL(fixtures.Fixture): |
3668 | """ |
3669 | |
3670 | def __init__(self, include_stacktrace=False): |
3671 | - super(LogSQL, self).__init__() |
3672 | + super().__init__() |
3673 | self.include_stacktrace = include_stacktrace |
3674 | |
3675 | def _setUp(self): |
3676 | diff --git a/src/maasserver/testing/matchers.py b/src/maasserver/testing/matchers.py |
3677 | index f92d40d..27725d3 100644 |
3678 | --- a/src/maasserver/testing/matchers.py |
3679 | +++ b/src/maasserver/testing/matchers.py |
3680 | @@ -33,7 +33,7 @@ class HasStatusCode(Matcher): |
3681 | """ |
3682 | |
3683 | def __init__(self, status_code): |
3684 | - super(HasStatusCode, self).__init__() |
3685 | + super().__init__() |
3686 | self.status_code = status_code |
3687 | |
3688 | def match(self, response): |
3689 | @@ -70,4 +70,4 @@ class MatchesSetwiseWithAll(MatchesSetwise): |
3690 | """ |
3691 | |
3692 | def match(self, observed): |
3693 | - return super(MatchesSetwiseWithAll, self).match(observed.all()) |
3694 | + return super().match(observed.all()) |
3695 | diff --git a/src/maasserver/testing/orm.py b/src/maasserver/testing/orm.py |
3696 | index 077bc63..74f4fde 100644 |
3697 | --- a/src/maasserver/testing/orm.py |
3698 | +++ b/src/maasserver/testing/orm.py |
3699 | @@ -44,7 +44,7 @@ class PostCommitHooksTestMixin(testtools.TestCase): |
3700 | |
3701 | def setUp(self): |
3702 | try: |
3703 | - super(PostCommitHooksTestMixin, self).setUp() |
3704 | + super().setUp() |
3705 | description_of_hooks = "\n".join( |
3706 | gen_description_of_hooks(post_commit_hooks.hooks) |
3707 | ) |
3708 | @@ -71,7 +71,7 @@ class PostCommitHooksTestMixin(testtools.TestCase): |
3709 | "One or more post-commit tasks were present at the end of " |
3710 | "this test.\n" + description_of_hooks, |
3711 | ) |
3712 | - super(PostCommitHooksTestMixin, self).tearDown() |
3713 | + super().tearDown() |
3714 | finally: |
3715 | # By this point we will have reported the leaked post-commit |
3716 | # tasks, so always reset them; we don't want to report them again, |
3717 | diff --git a/src/maasserver/testing/resources.py b/src/maasserver/testing/resources.py |
3718 | index ad15d71..550f4b7 100644 |
3719 | --- a/src/maasserver/testing/resources.py |
3720 | +++ b/src/maasserver/testing/resources.py |
3721 | @@ -186,7 +186,7 @@ class DjangoDatabasesManager(TestResourceManager): |
3722 | resources = (("templates", DjangoPristineDatabaseManager()),) |
3723 | |
3724 | def __init__(self, assume_dirty=True): |
3725 | - super(DjangoDatabasesManager, self).__init__() |
3726 | + super().__init__() |
3727 | self._count = count(1) |
3728 | self.dirty = assume_dirty |
3729 | |
3730 | diff --git a/src/maasserver/testing/testcase.py b/src/maasserver/testing/testcase.py |
3731 | index bde2559..6931d44 100644 |
3732 | --- a/src/maasserver/testing/testcase.py |
3733 | +++ b/src/maasserver/testing/testcase.py |
3734 | @@ -70,12 +70,12 @@ class MAASRegionTestCaseBase(PostCommitHooksTestMixin): |
3735 | |
3736 | @classmethod |
3737 | def setUpClass(cls): |
3738 | - super(MAASRegionTestCaseBase, cls).setUpClass() |
3739 | + super().setUpClass() |
3740 | register_mac_type(connection.cursor()) |
3741 | |
3742 | def setUp(self): |
3743 | reset_queries() # Formerly this was handled by... Django? |
3744 | - super(MAASRegionTestCaseBase, self).setUp() |
3745 | + super().setUp() |
3746 | |
3747 | def setUpFixtures(self): |
3748 | """This should be called by a subclass once other set-up is done.""" |
3749 | @@ -106,11 +106,11 @@ class MAASLegacyServerTestCase(MAASRegionTestCaseBase, DjangoTestCase): |
3750 | """ |
3751 | |
3752 | def setUp(self): |
3753 | - super(MAASLegacyServerTestCase, self).setUp() |
3754 | + super().setUp() |
3755 | self.setUpFixtures() |
3756 | |
3757 | def setUpFixtures(self): |
3758 | - super(MAASLegacyServerTestCase, self).setUpFixtures() |
3759 | + super().setUpFixtures() |
3760 | # XXX: allenap bug=1427628 2015-03-03: This should not be here. |
3761 | self.useFixture(PackageRepositoryFixture()) |
3762 | |
3763 | @@ -124,11 +124,11 @@ class MAASLegacyTransactionServerTestCase( |
3764 | """ |
3765 | |
3766 | def setUp(self): |
3767 | - super(MAASLegacyTransactionServerTestCase, self).setUp() |
3768 | + super().setUp() |
3769 | self.setUpFixtures() |
3770 | |
3771 | def setUpFixtures(self): |
3772 | - super(MAASLegacyTransactionServerTestCase, self).setUpFixtures() |
3773 | + super().setUpFixtures() |
3774 | # XXX: allenap bug=1427628 2015-03-03: This should not be here. |
3775 | self.useFixture(PackageRepositoryFixture()) |
3776 | |
3777 | @@ -142,7 +142,7 @@ class MAASServerTestCase(MAASRegionTestCaseBase, MAASTestCase): |
3778 | database_use_permitted = True |
3779 | |
3780 | def setUp(self): |
3781 | - super(MAASServerTestCase, self).setUp() |
3782 | + super().setUp() |
3783 | self.beginTransaction() |
3784 | self.addCleanup(self.endTransaction) |
3785 | self.setUpFixtures() |
3786 | @@ -179,7 +179,7 @@ class MAASTransactionServerTestCase(MAASRegionTestCaseBase, MAASTestCase): |
3787 | database_use_permitted = True |
3788 | |
3789 | def setUp(self): |
3790 | - super(MAASTransactionServerTestCase, self).setUp() |
3791 | + super().setUp() |
3792 | self.assertNotInTransaction() |
3793 | self.addCleanup(self.assertNotInTransaction) |
3794 | self.setUpFixtures() |
3795 | @@ -197,7 +197,7 @@ class SerializationFailureTestCase( |
3796 | cursor.execute("DROP TABLE IF EXISTS stest") |
3797 | |
3798 | def setUp(self): |
3799 | - super(SerializationFailureTestCase, self).setUp() |
3800 | + super().setUp() |
3801 | self.create_stest_table() |
3802 | # Put something into the stest table upon which to trigger a |
3803 | # serialization failure. |
3804 | @@ -206,7 +206,7 @@ class SerializationFailureTestCase( |
3805 | cursor.execute("INSERT INTO stest VALUES (1)") |
3806 | |
3807 | def tearDown(self): |
3808 | - super(SerializationFailureTestCase, self).tearDown() |
3809 | + super().tearDown() |
3810 | self.drop_stest_table() |
3811 | |
3812 | def cause_serialization_failure(self): |
3813 | @@ -282,12 +282,12 @@ class UniqueViolationTestCase( |
3814 | cursor.execute("DROP TABLE IF EXISTS uvtest") |
3815 | |
3816 | def setUp(self): |
3817 | - super(UniqueViolationTestCase, self).setUp() |
3818 | + super().setUp() |
3819 | self.conflicting_values = count(1) |
3820 | self.create_uvtest_table() |
3821 | |
3822 | def tearDown(self): |
3823 | - super(UniqueViolationTestCase, self).tearDown() |
3824 | + super().tearDown() |
3825 | self.drop_uvtest_table() |
3826 | |
3827 | def cause_unique_violation(self): |
3828 | diff --git a/src/maasserver/testing/testclient.py b/src/maasserver/testing/testclient.py |
3829 | index 5fa4e8f..3905430 100644 |
3830 | --- a/src/maasserver/testing/testclient.py |
3831 | +++ b/src/maasserver/testing/testclient.py |
3832 | @@ -39,7 +39,7 @@ class MAASSensibleGetPathMixin: |
3833 | script_path = settings.FORCE_SCRIPT_NAME.rstrip("/") |
3834 | if parsed.path.startswith(script_path): |
3835 | parsed = parsed._replace(path=parsed.path[len(script_path) :]) |
3836 | - return super(MAASSensibleGetPathMixin, self)._get_path(parsed) |
3837 | + return super()._get_path(parsed) |
3838 | |
3839 | |
3840 | class MAASSensibleRequestFactory(MAASSensibleGetPathMixin, RequestFactory): |
3841 | @@ -60,7 +60,7 @@ class MAASSensibleClient(MAASSensibleGetPathMixin, SensibleClient): |
3842 | # Make sure that requests are done within a transaction. Some kinds of |
3843 | # tests will already have a transaction in progress, in which case |
3844 | # this will act like a sub-transaction, but that's fine. |
3845 | - upcall = transactional(super(MAASSensibleClient, self).request) |
3846 | + upcall = transactional(super().request) |
3847 | # If we're outside of a transaction right now then the transactional() |
3848 | # wrapper above will ensure that post-commit hooks are run or reset on |
3849 | # return from the request. However, we want to ensure that post-commit |
3850 | @@ -71,7 +71,7 @@ class MAASSensibleClient(MAASSensibleGetPathMixin, SensibleClient): |
3851 | @transactional |
3852 | def login(self, *, user=None, **credentials): |
3853 | if user is None: |
3854 | - return super(MAASSensibleClient, self).login(**credentials) |
3855 | + return super().login(**credentials) |
3856 | elif user.is_anonymous: |
3857 | self.logout() |
3858 | return False |
3859 | @@ -80,7 +80,7 @@ class MAASSensibleClient(MAASSensibleGetPathMixin, SensibleClient): |
3860 | credentials["username"] = user.username |
3861 | user.set_password(password) |
3862 | user.save() |
3863 | - return super(MAASSensibleClient, self).login(**credentials) |
3864 | + return super().login(**credentials) |
3865 | |
3866 | |
3867 | class MAASSensibleOAuthClient(MAASSensibleClient): |
3868 | @@ -95,7 +95,7 @@ class MAASSensibleOAuthClient(MAASSensibleClient): |
3869 | no `token` is given, the user's first token will be used. |
3870 | :type token: oauth.oauth.OAuthToken |
3871 | """ |
3872 | - super(MAASSensibleOAuthClient, self).__init__() |
3873 | + super().__init__() |
3874 | if user is not None or token is not None: |
3875 | self.login(user=user, token=token) |
3876 | else: |
3877 | @@ -158,4 +158,4 @@ class MAASSensibleOAuthClient(MAASSensibleClient): |
3878 | url = self._compose_url(kwargs["PATH_INFO"]) |
3879 | if self.consumer is not None: |
3880 | kwargs.update(self._compose_auth_header(url)) |
3881 | - return super(MAASSensibleOAuthClient, self).request(**kwargs) |
3882 | + return super().request(**kwargs) |
3883 | diff --git a/src/maasserver/tests/test_bootresources.py b/src/maasserver/tests/test_bootresources.py |
3884 | index 10d6e1f..c0129c5 100644 |
3885 | --- a/src/maasserver/tests/test_bootresources.py |
3886 | +++ b/src/maasserver/tests/test_bootresources.py |
3887 | @@ -133,7 +133,7 @@ class SimplestreamsEnvFixture(Fixture): |
3888 | simplestreams.""" |
3889 | |
3890 | def setUp(self): |
3891 | - super(SimplestreamsEnvFixture, self).setUp() |
3892 | + super().setUp() |
3893 | prior_env = {} |
3894 | for key in ["GNUPGHOME", "http_proxy", "https_proxy"]: |
3895 | prior_env[key] = os.environ.get(key, "") |
3896 | @@ -565,7 +565,7 @@ class TestConnectionWrapper(MAASTransactionServerTestCase): |
3897 | |
3898 | class AssertConnectionWrapper(bootresources.ConnectionWrapper): |
3899 | def _set_up(self): |
3900 | - super(AssertConnectionWrapper, self)._set_up() |
3901 | + super()._set_up() |
3902 | # Capture the created connection |
3903 | AssertConnectionWrapper.connection = self._connection |
3904 | |
3905 | @@ -1603,7 +1603,7 @@ class TestSetGlobalDefaultReleases(MAASServerTestCase): |
3906 | |
3907 | class TestImportImages(MAASTransactionServerTestCase): |
3908 | def setUp(self): |
3909 | - super(TestImportImages, self).setUp() |
3910 | + super().setUp() |
3911 | self.useFixture(SimplestreamsEnvFixture()) |
3912 | # Don't create the gnupg home directory. |
3913 | self.patch_autospec(bootresources, "create_gnupg_home") |
3914 | diff --git a/src/maasserver/tests/test_bootsources.py b/src/maasserver/tests/test_bootsources.py |
3915 | index 69e3fe3..797efeb 100644 |
3916 | --- a/src/maasserver/tests/test_bootsources.py |
3917 | +++ b/src/maasserver/tests/test_bootsources.py |
3918 | @@ -99,7 +99,7 @@ def make_boot_image_mapping(image_specs=None): |
3919 | |
3920 | class TestHelpers(MAASServerTestCase): |
3921 | def setUp(self): |
3922 | - super(TestHelpers, self).setUp() |
3923 | + super().setUp() |
3924 | # Disable boot source cache signals. |
3925 | self.addCleanup(bootsources_signals.enable) |
3926 | bootsources_signals.disable() |
3927 | @@ -224,7 +224,7 @@ class TestHelpers(MAASServerTestCase): |
3928 | |
3929 | class TestGetOSInfoFromBootSources(MAASServerTestCase): |
3930 | def setUp(self): |
3931 | - super(TestGetOSInfoFromBootSources, self).setUp() |
3932 | + super().setUp() |
3933 | # Disable boot source cache signals. |
3934 | self.addCleanup(bootsources_signals.enable) |
3935 | bootsources_signals.disable() |
3936 | @@ -265,7 +265,7 @@ class TestGetOSInfoFromBootSources(MAASServerTestCase): |
3937 | |
3938 | class TestPrivateUpdateCache(MAASServerTestCase): |
3939 | def setUp(self): |
3940 | - super(TestPrivateUpdateCache, self).setUp() |
3941 | + super().setUp() |
3942 | self.useFixture(SimplestreamsEnvFixture()) |
3943 | # Disable boot source cache signals. |
3944 | self.addCleanup(bootsources_signals.enable) |
3945 | @@ -344,7 +344,7 @@ class TestPrivateUpdateCache(MAASServerTestCase): |
3946 | |
3947 | class TestPrivateCacheBootSources(MAASTransactionServerTestCase): |
3948 | def setUp(self): |
3949 | - super(TestPrivateCacheBootSources, self).setUp() |
3950 | + super().setUp() |
3951 | self.useFixture(SimplestreamsEnvFixture()) |
3952 | # Disable boot source cache signals. |
3953 | self.addCleanup(bootsources_signals.enable) |
3954 | @@ -553,7 +553,7 @@ class TestPrivateCacheBootSources(MAASTransactionServerTestCase): |
3955 | |
3956 | class TestBadConnectionHandling(MAASTransactionServerTestCase): |
3957 | def setUp(self): |
3958 | - super(TestBadConnectionHandling, self).setUp() |
3959 | + super().setUp() |
3960 | self.useFixture(SimplestreamsEnvFixture()) |
3961 | # Disable boot source cache signals. |
3962 | self.addCleanup(bootsources_signals.enable) |
3963 | diff --git a/src/maasserver/tests/test_commands_edit_named_options.py b/src/maasserver/tests/test_commands_edit_named_options.py |
3964 | index 20e2c41..23c256f 100644 |
3965 | --- a/src/maasserver/tests/test_commands_edit_named_options.py |
3966 | +++ b/src/maasserver/tests/test_commands_edit_named_options.py |
3967 | @@ -86,7 +86,7 @@ OPTIONS_FILE_WITH_EXTRA_AND_DUP_FORWARDER = textwrap.dedent( |
3968 | |
3969 | class TestEditNamedOptionsCommand(MAASServerTestCase): |
3970 | def setUp(self): |
3971 | - super(TestEditNamedOptionsCommand, self).setUp() |
3972 | + super().setUp() |
3973 | self.stdout = StringIO() |
3974 | |
3975 | def assertFailsWithMessage(self, config_path, message): |
3976 | diff --git a/src/maasserver/tests/test_ipc.py b/src/maasserver/tests/test_ipc.py |
3977 | index 568b4f2..f46cf67 100644 |
3978 | --- a/src/maasserver/tests/test_ipc.py |
3979 | +++ b/src/maasserver/tests/test_ipc.py |
3980 | @@ -75,7 +75,7 @@ class TestIPCCommunication(MAASTransactionServerTestCase): |
3981 | run_tests_with = MAASCrochetRunTest |
3982 | |
3983 | def setUp(self): |
3984 | - super(TestIPCCommunication, self).setUp() |
3985 | + super().setUp() |
3986 | self.ipc_path = os.path.join( |
3987 | self.useFixture(TempDirectory()).path, "maas-regiond.sock" |
3988 | ) |
3989 | diff --git a/src/maasserver/tests/test_ntp.py b/src/maasserver/tests/test_ntp.py |
3990 | index 9bd20ca..8670bbf 100644 |
3991 | --- a/src/maasserver/tests/test_ntp.py |
3992 | +++ b/src/maasserver/tests/test_ntp.py |
3993 | @@ -57,7 +57,7 @@ class TestGetServersFor_ExternalOnly(MAASServerTestCase): |
3994 | ) |
3995 | |
3996 | def setUp(self): |
3997 | - super(TestGetServersFor_ExternalOnly, self).setUp() |
3998 | + super().setUp() |
3999 | Config.objects.set_config("ntp_external_only", True) |
4000 | |
4001 | def test_yields_nothing_when_no_ntp_servers_defined(self): |
4002 | @@ -79,7 +79,7 @@ class TestGetServersFor_Common(MAASServerTestCase): |
4003 | """ |
4004 | |
4005 | def setUp(self): |
4006 | - super(TestGetServersFor_Common, self).setUp() |
4007 | + super().setUp() |
4008 | Config.objects.set_config("ntp_external_only", False) |
4009 | |
4010 | |
4011 | @@ -259,7 +259,7 @@ class TestGetServersFor_Selection(MAASServerTestCase): |
4012 | ) |
4013 | |
4014 | def setUp(self): |
4015 | - super(TestGetServersFor_Selection, self).setUp() |
4016 | + super().setUp() |
4017 | Config.objects.set_config("ntp_external_only", False) |
4018 | |
4019 | def test_prefers_closest_addresses(self): |
4020 | diff --git a/src/maasserver/tests/test_plugin.py b/src/maasserver/tests/test_plugin.py |
4021 | index c39017d..cfe7225 100644 |
4022 | --- a/src/maasserver/tests/test_plugin.py |
4023 | +++ b/src/maasserver/tests/test_plugin.py |
4024 | @@ -64,7 +64,7 @@ class TestServiceMaker(MAASTestCase): |
4025 | """Mixin with helpers for all the service marker tests.""" |
4026 | |
4027 | def setUp(self): |
4028 | - super(TestServiceMaker, self).setUp() |
4029 | + super().setUp() |
4030 | self.patch(eventloop.loop, "services", MultiService()) |
4031 | # Prevent setting the pdeathsig in tests. |
4032 | self.patch_autospec(RegionWorkerServiceMaker, "_set_pdeathsig") |
4033 | @@ -75,7 +75,7 @@ class TestServiceMaker(MAASTestCase): |
4034 | import_websocket_handlers() |
4035 | |
4036 | def tearDown(self): |
4037 | - super(TestServiceMaker, self).tearDown() |
4038 | + super().tearDown() |
4039 | # Disable database access in the reactor again. |
4040 | asynchronous(disable_all_database_connections, timeout=5)() |
4041 | |
4042 | diff --git a/src/maasserver/tests/test_preseed.py b/src/maasserver/tests/test_preseed.py |
4043 | index b2708ed..3bd1ccd 100644 |
4044 | --- a/src/maasserver/tests/test_preseed.py |
4045 | +++ b/src/maasserver/tests/test_preseed.py |
4046 | @@ -334,7 +334,7 @@ class TestLoadPreseedTemplate(MAASServerTestCase): |
4047 | """Tests for `load_preseed_template`.""" |
4048 | |
4049 | def setUp(self): |
4050 | - super(TestLoadPreseedTemplate, self).setUp() |
4051 | + super().setUp() |
4052 | self.location = self.make_dir() |
4053 | self.patch(settings, "PRESEED_TEMPLATE_LOCATIONS", [self.location]) |
4054 | |
4055 | diff --git a/src/maasserver/tests/test_proxyconfig.py b/src/maasserver/tests/test_proxyconfig.py |
4056 | index ed834b6..7528e53 100644 |
4057 | --- a/src/maasserver/tests/test_proxyconfig.py |
4058 | +++ b/src/maasserver/tests/test_proxyconfig.py |
4059 | @@ -32,7 +32,7 @@ class TestProxyUpdateConfig(MAASTransactionServerTestCase): |
4060 | """Tests for `maasserver.proxyconfig`.""" |
4061 | |
4062 | def setUp(self): |
4063 | - super(TestProxyUpdateConfig, self).setUp() |
4064 | + super().setUp() |
4065 | self.tmpdir = self.make_dir() |
4066 | self.proxy_path = Path(self.tmpdir) / config.MAAS_PROXY_CONF_NAME |
4067 | self.service_monitor = self.patch(proxyconfig, "service_monitor") |
4068 | diff --git a/src/maasserver/tests/test_start_up.py b/src/maasserver/tests/test_start_up.py |
4069 | index 9c28f3c..ea173df 100644 |
4070 | --- a/src/maasserver/tests/test_start_up.py |
4071 | +++ b/src/maasserver/tests/test_start_up.py |
4072 | @@ -47,11 +47,11 @@ class TestStartUp(MAASTransactionServerTestCase): |
4073 | """ |
4074 | |
4075 | def setUp(self): |
4076 | - super(TestStartUp, self).setUp() |
4077 | + super().setUp() |
4078 | self.useFixture(RegionEventLoopFixture()) |
4079 | |
4080 | def tearDown(self): |
4081 | - super(TestStartUp, self).tearDown() |
4082 | + super().tearDown() |
4083 | # start_up starts the Twisted event loop, so we need to stop it. |
4084 | eventloop.reset().wait(5) |
4085 | |
4086 | @@ -93,7 +93,7 @@ class TestInnerStartUp(MAASServerTestCase): |
4087 | """Tests for the actual work done in `inner_start_up`.""" |
4088 | |
4089 | def setUp(self): |
4090 | - super(TestInnerStartUp, self).setUp() |
4091 | + super().setUp() |
4092 | self.useFixture(MAASIDFixture(None)) |
4093 | self.patch_autospec(start_up, "dns_kms_setting_changed") |
4094 | self.patch_autospec(start_up, "load_builtin_scripts") |
4095 | diff --git a/src/maasserver/tests/test_webapp.py b/src/maasserver/tests/test_webapp.py |
4096 | index 1e7b959..04121d2 100644 |
4097 | --- a/src/maasserver/tests/test_webapp.py |
4098 | +++ b/src/maasserver/tests/test_webapp.py |
4099 | @@ -175,7 +175,7 @@ class TestResourceOverlay(MAASTestCase): |
4100 | |
4101 | class TestWebApplicationService(MAASTestCase): |
4102 | def setUp(self): |
4103 | - super(TestWebApplicationService, self).setUp() |
4104 | + super().setUp() |
4105 | # Patch the getServiceNamed so the WebSocketFactory does not |
4106 | # error trying to register for events from the RPC service. In this |
4107 | # test the RPC service is not started. |
4108 | diff --git a/src/maasserver/triggers/tests/test_websocket_listener.py b/src/maasserver/triggers/tests/test_websocket_listener.py |
4109 | index 42d50bd..c9a981f 100644 |
4110 | --- a/src/maasserver/triggers/tests/test_websocket_listener.py |
4111 | +++ b/src/maasserver/triggers/tests/test_websocket_listener.py |
4112 | @@ -3610,7 +3610,7 @@ class TestMachineFilesystemListener( |
4113 | ) |
4114 | |
4115 | def setUp(self): |
4116 | - super(TestMachineFilesystemListener, self).setUp() |
4117 | + super().setUp() |
4118 | register_websocket_triggers() |
4119 | |
4120 | def test_calls_handler_with_update_on_create_fs_on_partition(self): |
4121 | diff --git a/src/maasserver/utils/asynchronous.py b/src/maasserver/utils/asynchronous.py |
4122 | index 455a1f0..b4dde3e 100644 |
4123 | --- a/src/maasserver/utils/asynchronous.py |
4124 | +++ b/src/maasserver/utils/asynchronous.py |
4125 | @@ -165,7 +165,7 @@ class DeferredHooks(threading.local): |
4126 | """ |
4127 | |
4128 | def __init__(self): |
4129 | - super(DeferredHooks, self).__init__() |
4130 | + super().__init__() |
4131 | self.hooks = deque() |
4132 | |
4133 | @synchronous |
4134 | diff --git a/src/maasserver/utils/dblocks.py b/src/maasserver/utils/dblocks.py |
4135 | index 965e9ca..ad5e683 100644 |
4136 | --- a/src/maasserver/utils/dblocks.py |
4137 | +++ b/src/maasserver/utils/dblocks.py |
4138 | @@ -121,10 +121,10 @@ class DatabaseLockBase(tuple): |
4139 | objid = property(itemgetter(1)) |
4140 | |
4141 | def __new__(cls, objid, mode=None): |
4142 | - return super(DatabaseLockBase, cls).__new__(cls, (classid, objid)) |
4143 | + return super().__new__(cls, (classid, objid)) |
4144 | |
4145 | def __init__(self, objid, mode=None): |
4146 | - super(DatabaseLockBase, self).__init__() |
4147 | + super().__init__() |
4148 | if mode is None: |
4149 | self.lock, self.unlock = self.MODE_DEFAULT |
4150 | elif mode in self.MODE_CHOICES: |
4151 | diff --git a/src/maasserver/utils/dbtasks.py b/src/maasserver/utils/dbtasks.py |
4152 | index 164d08d..089a3a3 100644 |
4153 | --- a/src/maasserver/utils/dbtasks.py |
4154 | +++ b/src/maasserver/utils/dbtasks.py |
4155 | @@ -47,7 +47,7 @@ class DatabaseTasksService(Service, object): |
4156 | |
4157 | def __init__(self): |
4158 | """Initialise a new `DatabaseTasksService`.""" |
4159 | - super(DatabaseTasksService, self).__init__() |
4160 | + super().__init__() |
4161 | # Start with a queue that rejects puts. |
4162 | self.queue = DeferredQueue(size=0, backlog=1) |
4163 | |
4164 | @@ -122,7 +122,7 @@ class DatabaseTasksService(Service, object): |
4165 | |
4166 | :return: `None` |
4167 | """ |
4168 | - super(DatabaseTasksService, self).startService() |
4169 | + super().startService() |
4170 | self.queue.size = None # Open queue to puts. |
4171 | self.coop = cooperate(self._generateTasks()) |
4172 | |
4173 | @@ -132,7 +132,7 @@ class DatabaseTasksService(Service, object): |
4174 | |
4175 | :return: :class:`Deferred` which fires once all tasks have been run. |
4176 | """ |
4177 | - super(DatabaseTasksService, self).stopService() |
4178 | + super().stopService() |
4179 | # Feed the cooperative task so that it can shutdown. |
4180 | self.queue.put(self.sentinel) # See _generateTasks. |
4181 | self.queue.size = 0 # Now close queue to puts. |
4182 | diff --git a/src/maasserver/utils/orm.py b/src/maasserver/utils/orm.py |
4183 | index 582cc49..2f7c442 100644 |
4184 | --- a/src/maasserver/utils/orm.py |
4185 | +++ b/src/maasserver/utils/orm.py |
4186 | @@ -378,7 +378,7 @@ class RetryStack(ExitStack): |
4187 | """An exit stack specialised to the retry machinery.""" |
4188 | |
4189 | def __init__(self): |
4190 | - super(RetryStack, self).__init__() |
4191 | + super().__init__() |
4192 | self._cm_pending = deque() |
4193 | self._cm_seen = set() |
4194 | |
4195 | @@ -414,7 +414,7 @@ class RetryContext(threading.local): |
4196 | """ |
4197 | |
4198 | def __init__(self): |
4199 | - super(RetryContext, self).__init__() |
4200 | + super().__init__() |
4201 | self.stack = None |
4202 | |
4203 | @property |
4204 | diff --git a/src/maasserver/utils/signals.py b/src/maasserver/utils/signals.py |
4205 | index 8606008..6e99f66 100644 |
4206 | --- a/src/maasserver/utils/signals.py |
4207 | +++ b/src/maasserver/utils/signals.py |
4208 | @@ -132,7 +132,7 @@ class SignalsManager: |
4209 | """ |
4210 | |
4211 | def __init__(self): |
4212 | - super(SignalsManager, self).__init__() |
4213 | + super().__init__() |
4214 | self._signals = set() |
4215 | self._signals_connected = set() |
4216 | self._signals_disconnected = set() |
4217 | diff --git a/src/maasserver/utils/tests/test_dblocks.py b/src/maasserver/utils/tests/test_dblocks.py |
4218 | index 482cdfd..48afa2c 100644 |
4219 | --- a/src/maasserver/utils/tests/test_dblocks.py |
4220 | +++ b/src/maasserver/utils/tests/test_dblocks.py |
4221 | @@ -81,7 +81,7 @@ class TestDatabaseLock(MAASTransactionServerTestCase): |
4222 | return dblocks.DatabaseLock(objid, mode=self.mode) |
4223 | |
4224 | def tearDown(self): |
4225 | - super(TestDatabaseLock, self).tearDown() |
4226 | + super().tearDown() |
4227 | with closing(connection.cursor()) as cursor: |
4228 | cursor.execute("SELECT pg_advisory_unlock_all()") |
4229 | |
4230 | diff --git a/src/maasserver/utils/tests/test_keys.py b/src/maasserver/utils/tests/test_keys.py |
4231 | index 482176f..2560c5e 100644 |
4232 | --- a/src/maasserver/utils/tests/test_keys.py |
4233 | +++ b/src/maasserver/utils/tests/test_keys.py |
4234 | @@ -33,7 +33,7 @@ from maastesting.matchers import MockCalledOnceWith |
4235 | |
4236 | class TestKeys(MAASServerTestCase): |
4237 | def setUp(self): |
4238 | - super(TestKeys, self).setUp() |
4239 | + super().setUp() |
4240 | # Disable boot source cache signals. |
4241 | self.addCleanup(bootsources_signals.enable) |
4242 | bootsources_signals.disable() |
4243 | diff --git a/src/maasserver/utils/tests/test_orm.py b/src/maasserver/utils/tests/test_orm.py |
4244 | index b76d709..a15d139 100644 |
4245 | --- a/src/maasserver/utils/tests/test_orm.py |
4246 | +++ b/src/maasserver/utils/tests/test_orm.py |
4247 | @@ -94,7 +94,7 @@ class NoSleepMixin(unittest.TestCase): |
4248 | """Test case mix-in to prevent real sleeps in the `orm` module.""" |
4249 | |
4250 | def setUp(self): |
4251 | - super(NoSleepMixin, self).setUp() |
4252 | + super().setUp() |
4253 | self.patch(orm, "sleep", lambda _: None) |
4254 | |
4255 | |
4256 | @@ -973,7 +973,7 @@ class TestPostCommit(MAASTestCase): |
4257 | """Tests for the `post_commit` function.""" |
4258 | |
4259 | def setUp(self): |
4260 | - super(TestPostCommit, self).setUp() |
4261 | + super().setUp() |
4262 | self.addCleanup(post_commit_hooks.reset) |
4263 | |
4264 | def test_adds_Deferred_as_hook(self): |
4265 | @@ -1048,7 +1048,7 @@ class TestPostCommitDo(MAASTestCase): |
4266 | """Tests for the `post_commit_do` function.""" |
4267 | |
4268 | def setUp(self): |
4269 | - super(TestPostCommitDo, self).setUp() |
4270 | + super().setUp() |
4271 | self.addCleanup(post_commit_hooks.reset) |
4272 | |
4273 | def test_adds_callable_as_hook(self): |
4274 | diff --git a/src/maasserver/utils/tests/test_utils.py b/src/maasserver/utils/tests/test_utils.py |
4275 | index b62baef..b474360 100644 |
4276 | --- a/src/maasserver/utils/tests/test_utils.py |
4277 | +++ b/src/maasserver/utils/tests/test_utils.py |
4278 | @@ -114,7 +114,7 @@ class TestBuildAbsoluteURI(MAASTestCase): |
4279 | """Tests for `build_absolute_uri`.""" |
4280 | |
4281 | def setUp(self): |
4282 | - super(TestBuildAbsoluteURI, self).setUp() |
4283 | + super().setUp() |
4284 | self.useFixture(RegionConfigurationFixture()) |
4285 | |
4286 | def make_request( |
4287 | diff --git a/src/maasserver/utils/tests/test_views.py b/src/maasserver/utils/tests/test_views.py |
4288 | index 30a9f0f..dd6a5e8 100644 |
4289 | --- a/src/maasserver/utils/tests/test_views.py |
4290 | +++ b/src/maasserver/utils/tests/test_views.py |
4291 | @@ -177,7 +177,7 @@ class TestDeleteOAuthNonce(MAASServerTestCase): |
4292 | |
4293 | class TestWebApplicationHandler(SerializationFailureTestCase): |
4294 | def setUp(self): |
4295 | - super(TestWebApplicationHandler, self).setUp() |
4296 | + super().setUp() |
4297 | # Wire time.sleep() directly up to clock.advance() to avoid needless |
4298 | # sleeps, and to simulate the march of time without intervention. |
4299 | clock = self.patch(views, "clock", Clock()) |
4300 | diff --git a/src/maasserver/utils/views.py b/src/maasserver/utils/views.py |
4301 | index b35baff..ebc9df8 100644 |
4302 | --- a/src/maasserver/utils/views.py |
4303 | +++ b/src/maasserver/utils/views.py |
4304 | @@ -133,9 +133,7 @@ def request_headers(request): |
4305 | |
4306 | class MAASDjangoTemplateResponse(SimpleTemplateResponse): |
4307 | def __init__(self, response=None): |
4308 | - super(MAASDjangoTemplateResponse, self).__init__( |
4309 | - "%d.html" % self.status_code |
4310 | - ) |
4311 | + super().__init__("%d.html" % self.status_code) |
4312 | |
4313 | # If we are passed an original response object 'response', |
4314 | # transfer over the content from the original response |
4315 | @@ -167,7 +165,7 @@ class WebApplicationHandler(WSGIHandler): |
4316 | """ |
4317 | |
4318 | def __init__(self, attempts=10, timeout=90.0): |
4319 | - super(WebApplicationHandler, self).__init__() |
4320 | + super().__init__() |
4321 | assert attempts >= 1, "The minimum attempts is 1, not %d" % attempts |
4322 | self.__retry_attempts = attempts |
4323 | self.__retry_timeout = timeout |
4324 | @@ -284,7 +282,7 @@ class WebApplicationHandler(WSGIHandler): |
4325 | with this savepoint will be discarded. |
4326 | |
4327 | """ |
4328 | - view_atomic = super(WebApplicationHandler, self).make_view_atomic(view) |
4329 | + view_atomic = super().make_view_atomic(view) |
4330 | |
4331 | def view_atomic_with_post_commit_savepoint(*args, **kwargs): |
4332 | with post_commit_hooks.savepoint(): |
4333 | @@ -300,7 +298,7 @@ class WebApplicationHandler(WSGIHandler): |
4334 | will *not* run within the same transaction, or any transaction at all |
4335 | by default. |
4336 | """ |
4337 | - django_get_response = super(WebApplicationHandler, self).get_response |
4338 | + django_get_response = super().get_response |
4339 | |
4340 | def get_response(request): |
4341 | # Up-call to Django's get_response() in a transaction. This |
4342 | diff --git a/src/maasserver/views/tests/test_rpc.py b/src/maasserver/views/tests/test_rpc.py |
4343 | index 87b5ab1..aee3d4b 100644 |
4344 | --- a/src/maasserver/views/tests/test_rpc.py |
4345 | +++ b/src/maasserver/views/tests/test_rpc.py |
4346 | @@ -34,7 +34,7 @@ is_valid_port = MatchesAll(IsInstance(int), GreaterThan(0), LessThan(2 ** 16)) |
4347 | |
4348 | class RPCViewTest(MAASTransactionServerTestCase): |
4349 | def setUp(self): |
4350 | - super(RPCViewTest, self).setUp() |
4351 | + super().setUp() |
4352 | self.maas_id = None |
4353 | |
4354 | def set_maas_id(maas_id): |
4355 | diff --git a/src/maasserver/webapp.py b/src/maasserver/webapp.py |
4356 | index ad791ef..53bcaff 100644 |
4357 | --- a/src/maasserver/webapp.py |
4358 | +++ b/src/maasserver/webapp.py |
4359 | @@ -52,9 +52,7 @@ class CleanPathRequest(Request, object): |
4360 | path, sep, args = path.partition(b"?") |
4361 | path = re.sub(rb"/+", b"/", path) |
4362 | path = b"".join([path, sep, args]) |
4363 | - return super(CleanPathRequest, self).requestReceived( |
4364 | - command, path, version |
4365 | - ) |
4366 | + return super().requestReceived(command, path, version) |
4367 | |
4368 | |
4369 | class OverlaySite(Site): |
4370 | @@ -93,7 +91,7 @@ class OverlaySite(Site): |
4371 | raise |
4372 | |
4373 | postpath = copy.copy(request.postpath) |
4374 | - result = super(OverlaySite, self).getResourceFor(request) |
4375 | + result = super().getResourceFor(request) |
4376 | if isinstance(result, NoResource) and self.underlay is not None: |
4377 | return call_underlay(request) |
4378 | else: |
4379 | @@ -123,7 +121,7 @@ class ResourceOverlay(Resource, object): |
4380 | """ |
4381 | |
4382 | def __init__(self, basis): |
4383 | - super(ResourceOverlay, self).__init__() |
4384 | + super().__init__() |
4385 | self.basis = basis |
4386 | |
4387 | def getChild(self, path, request): |
4388 | @@ -197,7 +195,7 @@ class WebApplicationService(StreamServerEndpointService): |
4389 | self.site.requestFactory = CleanPathRequest |
4390 | # `endpoint` is set in `privilegedStartService`, at this point the |
4391 | # `endpoint` is None. |
4392 | - super(WebApplicationService, self).__init__(None, self.site) |
4393 | + super().__init__(None, self.site) |
4394 | self.websocket = WebSocketFactory(listener) |
4395 | self.threadpool = ThreadPoolLimiter( |
4396 | reactor.threadpoolForDatabase, concurrency.webapp |
4397 | @@ -319,14 +317,14 @@ class WebApplicationService(StreamServerEndpointService): |
4398 | self.endpoint = self._makeEndpoint() |
4399 | |
4400 | # Start the service now that the endpoint has been created. |
4401 | - super(WebApplicationService, self).privilegedStartService() |
4402 | + super().privilegedStartService() |
4403 | |
4404 | @asynchronous(timeout=30) |
4405 | def stopService(self): |
4406 | def _cleanup(_): |
4407 | self.starting = False |
4408 | |
4409 | - d = super(WebApplicationService, self).stopService() |
4410 | + d = super().stopService() |
4411 | d.addCallback(lambda _: self.websocket.stopFactory()) |
4412 | d.addCallback(_cleanup) |
4413 | return d |
4414 | diff --git a/src/maasserver/websockets/base.py b/src/maasserver/websockets/base.py |
4415 | index f7b0cc6..ef842e6 100644 |
4416 | --- a/src/maasserver/websockets/base.py |
4417 | +++ b/src/maasserver/websockets/base.py |
4418 | @@ -122,9 +122,7 @@ class HandlerMetaclass(type): |
4419 | |
4420 | def __new__(cls, name, bases, attrs): |
4421 | # Construct the class with the _meta field. |
4422 | - new_class = super(HandlerMetaclass, cls).__new__( |
4423 | - cls, name, bases, attrs |
4424 | - ) |
4425 | + new_class = super().__new__(cls, name, bases, attrs) |
4426 | new_class._meta = HandlerOptions(getattr(new_class, "Meta", None)) |
4427 | |
4428 | # Setup the handlers name based on the naming of the class. |
4429 | diff --git a/src/maasserver/websockets/handlers/device.py b/src/maasserver/websockets/handlers/device.py |
4430 | index 0901eee..c94fba1 100644 |
4431 | --- a/src/maasserver/websockets/handlers/device.py |
4432 | +++ b/src/maasserver/websockets/handlers/device.py |
4433 | @@ -257,7 +257,7 @@ class DeviceHandler(NodeHandler): |
4434 | for key, value in new_params.items() |
4435 | if value is not None |
4436 | } |
4437 | - return super(DeviceHandler, self).preprocess_form(action, new_params) |
4438 | + return super().preprocess_form(action, new_params) |
4439 | |
4440 | def _configure_interface(self, interface, params): |
4441 | """Configure the interface based on the selection.""" |
4442 | @@ -299,7 +299,7 @@ class DeviceHandler(NodeHandler): |
4443 | |
4444 | # Create the object with the form and then create all of the interfaces |
4445 | # based on the users choices. |
4446 | - data = super(DeviceHandler, self).create(params) |
4447 | + data = super().create(params) |
4448 | device_obj = Device.objects.get(system_id=data["system_id"]) |
4449 | interfaces = list(device_obj.interface_set.all()) |
4450 | |
4451 | diff --git a/src/maasserver/websockets/handlers/discovery.py b/src/maasserver/websockets/handlers/discovery.py |
4452 | index 89a09f4..0a78b15 100644 |
4453 | --- a/src/maasserver/websockets/handlers/discovery.py |
4454 | +++ b/src/maasserver/websockets/handlers/discovery.py |
4455 | @@ -38,7 +38,7 @@ class DiscoveryHandler(ViewModelHandler): |
4456 | """ |
4457 | if "start" in params: |
4458 | params["start"] = datetime.fromtimestamp(float(params["start"])) |
4459 | - return super(DiscoveryHandler, self).list(params) |
4460 | + return super().list(params) |
4461 | |
4462 | def dehydrate(self, obj, data, for_list=False): |
4463 | """Add extra fields to `data`.""" |
4464 | diff --git a/src/maasserver/websockets/handlers/event.py b/src/maasserver/websockets/handlers/event.py |
4465 | index c8fd197..4cbc815 100644 |
4466 | --- a/src/maasserver/websockets/handlers/event.py |
4467 | +++ b/src/maasserver/websockets/handlers/event.py |
4468 | @@ -30,7 +30,7 @@ class EventHandler(TimestampedModelHandler): |
4469 | listen_channels = ["event"] |
4470 | |
4471 | def __init__(self, *args, **kwargs): |
4472 | - super(EventHandler, self).__init__(*args, **kwargs) |
4473 | + super().__init__(*args, **kwargs) |
4474 | if "node_ids" not in self.cache: |
4475 | self.cache["node_ids"] = [] |
4476 | |
4477 | diff --git a/src/maasserver/websockets/handlers/pod.py b/src/maasserver/websockets/handlers/pod.py |
4478 | index bb18a58..eb6fb07 100644 |
4479 | --- a/src/maasserver/websockets/handlers/pod.py |
4480 | +++ b/src/maasserver/websockets/handlers/pod.py |
4481 | @@ -90,7 +90,7 @@ class PodHandler(TimestampedModelHandler): |
4482 | for key, value in new_params.items() |
4483 | if value is not None |
4484 | } |
4485 | - return super(PodHandler, self).preprocess_form(action, new_params) |
4486 | + return super().preprocess_form(action, new_params) |
4487 | |
4488 | def dehydrate(self, obj, data, for_list=False): |
4489 | """Add extra fields to `data`.""" |
4490 | diff --git a/src/maasserver/websockets/handlers/sshkey.py b/src/maasserver/websockets/handlers/sshkey.py |
4491 | index 741189f..038159b 100644 |
4492 | --- a/src/maasserver/websockets/handlers/sshkey.py |
4493 | +++ b/src/maasserver/websockets/handlers/sshkey.py |
4494 | @@ -37,9 +37,7 @@ class SSHKeyHandler(TimestampedModelHandler): |
4495 | |
4496 | def get_object(self, params, permission=None): |
4497 | """Only allow getting keys owned by the user.""" |
4498 | - obj = super(SSHKeyHandler, self).get_object( |
4499 | - params, permission=permission |
4500 | - ) |
4501 | + obj = super().get_object(params, permission=permission) |
4502 | if obj.user != self.user: |
4503 | raise HandlerDoesNotExistError(params[self._meta.pk]) |
4504 | else: |
4505 | diff --git a/src/maasserver/websockets/handlers/sslkey.py b/src/maasserver/websockets/handlers/sslkey.py |
4506 | index 9152c57..95d0bdc 100644 |
4507 | --- a/src/maasserver/websockets/handlers/sslkey.py |
4508 | +++ b/src/maasserver/websockets/handlers/sslkey.py |
4509 | @@ -32,9 +32,7 @@ class SSLKeyHandler(TimestampedModelHandler): |
4510 | |
4511 | def get_object(self, params, permission=None): |
4512 | """Only allow getting keys owned by the user.""" |
4513 | - obj = super(SSLKeyHandler, self).get_object( |
4514 | - params, permission=permission |
4515 | - ) |
4516 | + obj = super().get_object(params, permission=permission) |
4517 | if obj.user != self.user: |
4518 | raise HandlerDoesNotExistError(params[self._meta.pk]) |
4519 | else: |
4520 | diff --git a/src/maasserver/websockets/handlers/staticroute.py b/src/maasserver/websockets/handlers/staticroute.py |
4521 | index 307a3f6..23fd22f 100644 |
4522 | --- a/src/maasserver/websockets/handlers/staticroute.py |
4523 | +++ b/src/maasserver/websockets/handlers/staticroute.py |
4524 | @@ -27,16 +27,16 @@ class StaticRouteHandler(TimestampedModelHandler): |
4525 | """Create a static route.""" |
4526 | if not self.user.is_superuser: |
4527 | raise PermissionDenied() |
4528 | - return super(StaticRouteHandler, self).create(params) |
4529 | + return super().create(params) |
4530 | |
4531 | def update(self, params): |
4532 | """Update this static route.""" |
4533 | if not self.user.is_superuser: |
4534 | raise PermissionDenied() |
4535 | - return super(StaticRouteHandler, self).update(params) |
4536 | + return super().update(params) |
4537 | |
4538 | def delete(self, params): |
4539 | """Delete this static route.""" |
4540 | if not self.user.is_superuser: |
4541 | raise PermissionDenied() |
4542 | - return super(StaticRouteHandler, self).delete(params) |
4543 | + return super().delete(params) |
4544 | diff --git a/src/maasserver/websockets/handlers/switch.py b/src/maasserver/websockets/handlers/switch.py |
4545 | index 56e6ba2..b05cb29 100644 |
4546 | --- a/src/maasserver/websockets/handlers/switch.py |
4547 | +++ b/src/maasserver/websockets/handlers/switch.py |
4548 | @@ -43,7 +43,7 @@ class SwitchHandler(NodeHandler): |
4549 | |
4550 | def get_object(self, params): |
4551 | """Get object by using the `pk` in `params`.""" |
4552 | - obj = super(SwitchHandler, self).get_object(params) |
4553 | + obj = super().get_object(params) |
4554 | if self.user.is_superuser or obj.owner == self.user: |
4555 | return obj |
4556 | raise HandlerDoesNotExistError(params[self._meta.pk]) |
4557 | diff --git a/src/maasserver/websockets/handlers/tests/test_bootresource.py b/src/maasserver/websockets/handlers/tests/test_bootresource.py |
4558 | index b1659fa..ced9594 100644 |
4559 | --- a/src/maasserver/websockets/handlers/tests/test_bootresource.py |
4560 | +++ b/src/maasserver/websockets/handlers/tests/test_bootresource.py |
4561 | @@ -58,7 +58,7 @@ class PatchOSInfoMixin: |
4562 | |
4563 | class TestBootResourcePoll(MAASServerTestCase, PatchOSInfoMixin): |
4564 | def setUp(self): |
4565 | - super(TestBootResourcePoll, self).setUp() |
4566 | + super().setUp() |
4567 | # Disable boot source cache signals. |
4568 | self.addCleanup(bootsources.signals.enable) |
4569 | bootsources.signals.disable() |
4570 | @@ -837,7 +837,7 @@ class TestBootResourceSaveUbuntu( |
4571 | MAASTransactionServerTestCase, PatchOSInfoMixin |
4572 | ): |
4573 | def setUp(self): |
4574 | - super(TestBootResourceSaveUbuntu, self).setUp() |
4575 | + super().setUp() |
4576 | # Disable boot source cache signals. |
4577 | self.addCleanup(bootsources.signals.enable) |
4578 | bootsources.signals.disable() |
4579 | @@ -1044,7 +1044,7 @@ class TestBootResourceSaveUbuntuCore(MAASTransactionServerTestCase): |
4580 | |
4581 | class TestBootResourceSaveOther(MAASTransactionServerTestCase): |
4582 | def setUp(self): |
4583 | - super(TestBootResourceSaveOther, self).setUp() |
4584 | + super().setUp() |
4585 | # Disable boot source cache signals. |
4586 | self.addCleanup(bootsources.signals.enable) |
4587 | bootsources.signals.disable() |
4588 | diff --git a/src/maasserver/websockets/handlers/timestampedmodel.py b/src/maasserver/websockets/handlers/timestampedmodel.py |
4589 | index f0ac07d..f7132c2 100644 |
4590 | --- a/src/maasserver/websockets/handlers/timestampedmodel.py |
4591 | +++ b/src/maasserver/websockets/handlers/timestampedmodel.py |
4592 | @@ -13,7 +13,7 @@ class TimestampedModelHandler(Handler): |
4593 | abstract = True |
4594 | |
4595 | def __new__(cls, *args, **kwargs): |
4596 | - cls = super(TimestampedModelHandler, cls).__new__(cls) |
4597 | + cls = super().__new__(cls) |
4598 | if cls._meta.non_changeable is None: |
4599 | cls._meta.non_changeable = [] |
4600 | for field in ["created", "updated"]: |
4601 | diff --git a/src/maasserver/websockets/handlers/token.py b/src/maasserver/websockets/handlers/token.py |
4602 | index 970b147..fc003b8 100644 |
4603 | --- a/src/maasserver/websockets/handlers/token.py |
4604 | +++ b/src/maasserver/websockets/handlers/token.py |
4605 | @@ -27,9 +27,7 @@ class TokenHandler(Handler): |
4606 | |
4607 | def get_object(self, params, permission=None): |
4608 | """Only allow getting keys owned by the user.""" |
4609 | - obj = super(TokenHandler, self).get_object( |
4610 | - params, permission=permission |
4611 | - ) |
4612 | + obj = super().get_object(params, permission=permission) |
4613 | if obj.user != self.user: |
4614 | raise HandlerDoesNotExistError(params[self._meta.pk]) |
4615 | else: |
4616 | diff --git a/src/maasserver/websockets/handlers/user.py b/src/maasserver/websockets/handlers/user.py |
4617 | index 97f14fd..269d334 100644 |
4618 | --- a/src/maasserver/websockets/handlers/user.py |
4619 | +++ b/src/maasserver/websockets/handlers/user.py |
4620 | @@ -67,7 +67,7 @@ class UserHandler(Handler): |
4621 | |
4622 | def get_queryset(self, for_list=False): |
4623 | """Return `QuerySet` for users only viewable by `user`.""" |
4624 | - users = super(UserHandler, self).get_queryset(for_list=for_list) |
4625 | + users = super().get_queryset(for_list=for_list) |
4626 | if self.user.is_superuser: |
4627 | # Super users can view all users, except for the built-in users |
4628 | return users.exclude(username__in=SYSTEM_USERS) |
4629 | diff --git a/src/maasserver/websockets/handlers/vlan.py b/src/maasserver/websockets/handlers/vlan.py |
4630 | index 3269325..0e75a12 100644 |
4631 | --- a/src/maasserver/websockets/handlers/vlan.py |
4632 | +++ b/src/maasserver/websockets/handlers/vlan.py |
4633 | @@ -87,7 +87,7 @@ class VLANHandler(TimestampedModelHandler): |
4634 | |
4635 | return create_vlan_form |
4636 | else: |
4637 | - return super(VLANHandler, self).get_form_class(action) |
4638 | + return super().get_form_class(action) |
4639 | |
4640 | def delete(self, parameters): |
4641 | """Delete this VLAN.""" |
4642 | @@ -98,7 +98,7 @@ class VLANHandler(TimestampedModelHandler): |
4643 | |
4644 | def update(self, parameters): |
4645 | """Delete this VLAN.""" |
4646 | - return super(VLANHandler, self).update(parameters) |
4647 | + return super().update(parameters) |
4648 | |
4649 | def _configure_iprange_and_gateway(self, parameters): |
4650 | if "subnet" in parameters and parameters["subnet"] is not None: |
4651 | diff --git a/src/maasserver/websockets/tests/test_websockets.py b/src/maasserver/websockets/tests/test_websockets.py |
4652 | index 08f89f7..b627209 100644 |
4653 | --- a/src/maasserver/websockets/tests/test_websockets.py |
4654 | +++ b/src/maasserver/websockets/tests/test_websockets.py |
4655 | @@ -357,7 +357,7 @@ class WebSocketsProtocolTest(MAASTestCase): |
4656 | """ |
4657 | |
4658 | def setUp(self): |
4659 | - super(WebSocketsProtocolTest, self).setUp() |
4660 | + super().setUp() |
4661 | self.receiver = SavingEchoReceiver() |
4662 | self.protocol = WebSocketsProtocol(self.receiver) |
4663 | self.factory = Factory.forProtocol(lambda: self.protocol) |
4664 | @@ -451,7 +451,7 @@ class WebSocketsProtocolWrapperTest(MAASTestCase): |
4665 | """ |
4666 | |
4667 | def setUp(self): |
4668 | - super(WebSocketsProtocolWrapperTest, self).setUp() |
4669 | + super().setUp() |
4670 | self.accumulatingProtocol = AccumulatingProtocol() |
4671 | self.protocol = WebSocketsProtocolWrapper(self.accumulatingProtocol) |
4672 | self.transport = StringTransportWithDisconnection() |
4673 | @@ -542,7 +542,7 @@ class WebSocketsResourceTest(MAASTestCase): |
4674 | """ |
4675 | |
4676 | def setUp(self): |
4677 | - super(WebSocketsResourceTest, self).setUp() |
4678 | + super().setUp() |
4679 | |
4680 | class SavingEchoFactory(Factory): |
4681 | def buildProtocol(oself, addr): |
4682 | diff --git a/src/maasserver/workers.py b/src/maasserver/workers.py |
4683 | index fc6cd5e..6b3b771 100644 |
4684 | --- a/src/maasserver/workers.py |
4685 | +++ b/src/maasserver/workers.py |
4686 | @@ -27,7 +27,7 @@ def set_max_workers_count(worker_count): |
4687 | |
4688 | class WorkerProcess(protocol.ProcessProtocol): |
4689 | def __init__(self, service, runningImport=False): |
4690 | - super(WorkerProcess, self).__init__() |
4691 | + super().__init__() |
4692 | self.service = service |
4693 | self.runningImport = runningImport |
4694 | |
4695 | @@ -55,7 +55,7 @@ class WorkersService(service.Service, object): |
4696 | """ |
4697 | |
4698 | def __init__(self, reactor, *, worker_count=None, worker_cmd=None): |
4699 | - super(WorkersService, self).__init__() |
4700 | + super().__init__() |
4701 | self.reactor = reactor |
4702 | self.stopping = False |
4703 | self.worker_count = worker_count |
4704 | @@ -68,7 +68,7 @@ class WorkersService(service.Service, object): |
4705 | |
4706 | def startService(self): |
4707 | """Start the workers.""" |
4708 | - super(WorkersService, self).startService() |
4709 | + super().startService() |
4710 | self.spawnWorkers() |
4711 | |
4712 | def stopService(self): |
4713 | diff --git a/src/maastesting/crochet.py b/src/maastesting/crochet.py |
4714 | index 40f1dc3..6746e98 100644 |
4715 | --- a/src/maastesting/crochet.py |
4716 | +++ b/src/maastesting/crochet.py |
4717 | @@ -19,7 +19,7 @@ class EventualResultCatchingMixin: |
4718 | """ |
4719 | |
4720 | def setUp(self): |
4721 | - super(EventualResultCatchingMixin, self).setUp() |
4722 | + super().setUp() |
4723 | try: |
4724 | # Every EventualResult that crochet creates is registered into |
4725 | # this registry. We'll check it after the test has finished. |
4726 | diff --git a/src/maastesting/djangoloader.py b/src/maastesting/djangoloader.py |
4727 | index 035ad46..52b2b0d 100755 |
4728 | --- a/src/maastesting/djangoloader.py |
4729 | +++ b/src/maastesting/djangoloader.py |
4730 | @@ -26,7 +26,7 @@ class MAASDjangoTestRunner(NoseTestSuiteRunner): |
4731 | if database["HOST"] == self.cluster.datadir: |
4732 | self.cluster.createdb(database["NAME"]) |
4733 | # Call-up to super-classes. |
4734 | - up = super(MAASDjangoTestRunner, self) |
4735 | + up = super() |
4736 | return up.setup_databases(*args, **kwargs) |
4737 | except Exception: |
4738 | # Clean-up the cluster now, or it'll be left running; django-nose |
4739 | @@ -43,5 +43,5 @@ class MAASDjangoTestRunner(NoseTestSuiteRunner): |
4740 | the test databases, hence there is also tear-down code embedded in |
4741 | `setup_databases`. |
4742 | """ |
4743 | - super(MAASDjangoTestRunner, self).teardown_databases(*args, **kwargs) |
4744 | + super().teardown_databases(*args, **kwargs) |
4745 | self.cluster.cleanUp() |
4746 | diff --git a/src/maastesting/djangotestcase.py b/src/maastesting/djangotestcase.py |
4747 | index b75ea79..97ce245 100644 |
4748 | --- a/src/maastesting/djangotestcase.py |
4749 | +++ b/src/maastesting/djangotestcase.py |
4750 | @@ -197,7 +197,7 @@ class DjangoTestCase(django.test.TestCase, MAASTestCase): |
4751 | legacy = True |
4752 | |
4753 | def _fixture_teardown(self): |
4754 | - super(DjangoTestCase, self)._fixture_teardown() |
4755 | + super()._fixture_teardown() |
4756 | # TODO blake_r: Fix so this is not disabled. Currently not |
4757 | # working with Django 1.8. |
4758 | # Don't let unfinished database activity get away with it. |
4759 | @@ -232,7 +232,7 @@ class DjangoTransactionTestCase(django.test.TransactionTestCase, MAASTestCase): |
4760 | legacy = True |
4761 | |
4762 | def _fixture_teardown(self): |
4763 | - super(DjangoTransactionTestCase, self)._fixture_teardown() |
4764 | + super()._fixture_teardown() |
4765 | # TODO blake_r: Fix so this is not disabled. Currently not |
4766 | # working with Django 1.8. |
4767 | # Don't let unfinished database activity get away with it. |
4768 | diff --git a/src/maastesting/doubles.py b/src/maastesting/doubles.py |
4769 | index fbd3701..cb84e05 100644 |
4770 | --- a/src/maastesting/doubles.py |
4771 | +++ b/src/maastesting/doubles.py |
4772 | @@ -25,7 +25,7 @@ class StubContext: |
4773 | """ |
4774 | |
4775 | def __init__(self): |
4776 | - super(StubContext, self).__init__() |
4777 | + super().__init__() |
4778 | self.entered = False |
4779 | self.exited = False |
4780 | |
4781 | diff --git a/src/maastesting/fixtures.py b/src/maastesting/fixtures.py |
4782 | index b311fb1..d1d00d8 100644 |
4783 | --- a/src/maastesting/fixtures.py |
4784 | +++ b/src/maastesting/fixtures.py |
4785 | @@ -42,12 +42,12 @@ class ImportErrorFixture(fixtures.Fixture): |
4786 | """ |
4787 | |
4788 | def __init__(self, module_name, sub_name): |
4789 | - super(ImportErrorFixture, self).__init__() |
4790 | + super().__init__() |
4791 | self.module_name = module_name |
4792 | self.sub_name = sub_name |
4793 | |
4794 | def setUp(self): |
4795 | - super(ImportErrorFixture, self).setUp() |
4796 | + super().setUp() |
4797 | |
4798 | def mock_import(name, *import_args, **kwargs): |
4799 | if name == self.module_name: |
4800 | @@ -75,12 +75,12 @@ class LoggerSilencerFixture(fixtures.Fixture): |
4801 | """ |
4802 | |
4803 | def __init__(self, names, level=logging.ERROR): |
4804 | - super(LoggerSilencerFixture, self).__init__() |
4805 | + super().__init__() |
4806 | self.names = names |
4807 | self.level = level |
4808 | |
4809 | def setUp(self): |
4810 | - super(LoggerSilencerFixture, self).setUp() |
4811 | + super().setUp() |
4812 | for name in self.names: |
4813 | logger = logging.getLogger(name) |
4814 | self.addCleanup(logger.setLevel, logger.level) |
4815 | @@ -91,7 +91,7 @@ class ProxiesDisabledFixture(fixtures.Fixture): |
4816 | """Disables all HTTP/HTTPS proxies set in the environment.""" |
4817 | |
4818 | def setUp(self): |
4819 | - super(ProxiesDisabledFixture, self).setUp() |
4820 | + super().setUp() |
4821 | self.useFixture(EnvironmentVariable("http_proxy")) |
4822 | self.useFixture(EnvironmentVariable("https_proxy")) |
4823 | |
4824 | @@ -100,7 +100,7 @@ class TempDirectory(fixtures.TempDir): |
4825 | """Create a temporary directory, ensuring Unicode paths.""" |
4826 | |
4827 | def setUp(self): |
4828 | - super(TempDirectory, self).setUp() |
4829 | + super().setUp() |
4830 | if isinstance(self.path, bytes): |
4831 | encoding = sys.getfilesystemencoding() |
4832 | self.path = self.path.decode(encoding) |
4833 | @@ -114,7 +114,7 @@ class TempWDFixture(TempDirectory): |
4834 | |
4835 | def setUp(self): |
4836 | cwd = os.getcwd() |
4837 | - super(TempWDFixture, self).setUp() |
4838 | + super().setUp() |
4839 | self.addCleanup(os.chdir, cwd) |
4840 | os.chdir(self.path) |
4841 | |
4842 | @@ -148,7 +148,7 @@ class CaptureStandardIO(fixtures.Fixture): |
4843 | stderr = None |
4844 | |
4845 | def __init__(self, encoding="utf-8"): |
4846 | - super(CaptureStandardIO, self).__init__() |
4847 | + super().__init__() |
4848 | self.codec = codecs.lookup(encoding) |
4849 | self.encoding = encoding |
4850 | # Create new buffers. |
4851 | @@ -157,7 +157,7 @@ class CaptureStandardIO(fixtures.Fixture): |
4852 | self._buf_err = BytesIO() |
4853 | |
4854 | def setUp(self): |
4855 | - super(CaptureStandardIO, self).setUp() |
4856 | + super().setUp() |
4857 | self.patcher = MonkeyPatcher() |
4858 | self.addCleanup(self.patcher.restore) |
4859 | # Patch sys.std* and self.std*. Use TextIOWrapper to provide an |
4860 | @@ -254,7 +254,7 @@ class DetectLeakedFileDescriptors(fixtures.Fixture): |
4861 | """ |
4862 | |
4863 | def setUp(self): |
4864 | - super(DetectLeakedFileDescriptors, self).setUp() |
4865 | + super().setUp() |
4866 | self.fdpath = "/proc/%d/fd" % os.getpid() |
4867 | self.addCleanup(self.check, os.listdir(self.fdpath)) |
4868 | |
4869 | diff --git a/src/maastesting/httpd.py b/src/maastesting/httpd.py |
4870 | index 99c99c7..79aba61 100644 |
4871 | --- a/src/maastesting/httpd.py |
4872 | +++ b/src/maastesting/httpd.py |
4873 | @@ -144,7 +144,7 @@ class HTTPServerFixture(Fixture): |
4874 | """ |
4875 | |
4876 | def __init__(self, host="localhost", port=0): |
4877 | - super(HTTPServerFixture, self).__init__() |
4878 | + super().__init__() |
4879 | self.server = ThreadingHTTPServer( |
4880 | (host, port), SilentHTTPRequestHandler |
4881 | ) |
4882 | @@ -154,6 +154,6 @@ class HTTPServerFixture(Fixture): |
4883 | return "http://%s:%d/" % self.server.server_address |
4884 | |
4885 | def setUp(self): |
4886 | - super(HTTPServerFixture, self).setUp() |
4887 | + super().setUp() |
4888 | threading.Thread(target=self.server.serve_forever).start() |
4889 | self.addCleanup(self.server.shutdown) |
4890 | diff --git a/src/maastesting/matchers.py b/src/maastesting/matchers.py |
4891 | index 7855fef..297535e 100644 |
4892 | --- a/src/maastesting/matchers.py |
4893 | +++ b/src/maastesting/matchers.py |
4894 | @@ -82,7 +82,7 @@ class Matches: |
4895 | """ |
4896 | |
4897 | def __init__(self, matcher): |
4898 | - super(Matches, self).__init__() |
4899 | + super().__init__() |
4900 | self.matcher = matcher |
4901 | |
4902 | def __eq__(self, other): |
4903 | @@ -110,7 +110,7 @@ class Provides(MatchesPredicate): |
4904 | """Match if the given interface is provided.""" |
4905 | |
4906 | def __init__(self, iface): |
4907 | - super(Provides, self).__init__( |
4908 | + super().__init__( |
4909 | iface.providedBy, "%%r does not provide %s" % iface.getName() |
4910 | ) |
4911 | |
4912 | @@ -119,7 +119,7 @@ class HasAttribute(Matcher): |
4913 | """Match if the given attribute is available.""" |
4914 | |
4915 | def __init__(self, attribute): |
4916 | - super(HasAttribute, self).__init__() |
4917 | + super().__init__() |
4918 | self.attribute = attribute |
4919 | |
4920 | def match(self, something): |
4921 | @@ -332,7 +332,7 @@ class IsUnfiredDeferred(Matcher): |
4922 | |
4923 | class MatchesPartialCall(Matcher): |
4924 | def __init__(self, func, *args, **keywords): |
4925 | - super(MatchesPartialCall, self).__init__() |
4926 | + super().__init__() |
4927 | if len(keywords) > 0: |
4928 | self.expected = partial(func, *args, **keywords) |
4929 | else: |
4930 | @@ -367,7 +367,7 @@ class DocTestMatches(matchers.DocTestMatches): |
4931 | DEFAULT_FLAGS = doctest.ELLIPSIS | doctest.NORMALIZE_WHITESPACE |
4932 | |
4933 | def __init__(self, example, flags=DEFAULT_FLAGS): |
4934 | - super(DocTestMatches, self).__init__(example, flags) |
4935 | + super().__init__(example, flags) |
4936 | |
4937 | |
4938 | class FileContains(Matcher): |
4939 | @@ -446,7 +446,7 @@ class TextEquals(Matcher): |
4940 | """ |
4941 | |
4942 | def __init__(self, expected): |
4943 | - super(TextEquals, self).__init__() |
4944 | + super().__init__() |
4945 | self.expected = expected |
4946 | |
4947 | def match(self, observed): |
4948 | @@ -488,7 +488,7 @@ class ContainedBy(Matcher): |
4949 | """Test if the matchee is in the given container.""" |
4950 | |
4951 | def __init__(self, haystack): |
4952 | - super(ContainedBy, self).__init__() |
4953 | + super().__init__() |
4954 | self.haystack = haystack |
4955 | |
4956 | def __str__(self): |
4957 | diff --git a/src/maastesting/noseplug.py b/src/maastesting/noseplug.py |
4958 | index f002ef7..b1cd3ab 100644 |
4959 | --- a/src/maastesting/noseplug.py |
4960 | +++ b/src/maastesting/noseplug.py |
4961 | @@ -47,7 +47,7 @@ class Crochet(Plugin): |
4962 | |
4963 | :attention: This is part of the Nose plugin contract. |
4964 | """ |
4965 | - super(Crochet, self).options(parser, env) |
4966 | + super().options(parser, env) |
4967 | parser.add_option( |
4968 | "--%s-no-setup" % self.name, |
4969 | dest=self.option_no_setup, |
4970 | @@ -61,7 +61,7 @@ class Crochet(Plugin): |
4971 | |
4972 | :attention: This is part of the Nose plugin contract. |
4973 | """ |
4974 | - super(Crochet, self).configure(options, conf) |
4975 | + super().configure(options, conf) |
4976 | if self.enabled: |
4977 | import crochet |
4978 | |
4979 | @@ -79,7 +79,7 @@ class Crochet(Plugin): |
4980 | if timeout is None: |
4981 | raise AssertionError("A time-out must be specified.") |
4982 | else: |
4983 | - return super(EventualResult, self)._result(timeout) |
4984 | + return super()._result(timeout) |
4985 | |
4986 | # Patch it back into crochet. |
4987 | crochet._eventloop.EventualResult = EventualResult |
4988 | @@ -197,7 +197,7 @@ class Select(Plugin): |
4989 | log = logging.getLogger("nose.plugins.%s" % name) |
4990 | |
4991 | def __init__(self): |
4992 | - super(Select, self).__init__() |
4993 | + super().__init__() |
4994 | self.dirs = frozenset() |
4995 | |
4996 | def options(self, parser, env): |
4997 | @@ -205,7 +205,7 @@ class Select(Plugin): |
4998 | |
4999 | :attention: This is part of the Nose plugin contract. |
5000 | """ |
The diff has been truncated for viewing.
UNIT TESTS
-b super3 lp:~d0ugal/maas/+git/maas into -b master lp:~maas-committers/maas
STATUS: SUCCESS 33b384ee460f1d2 90a8e60e92
COMMIT: 7988be8eafe24ae