Skip to content

Commit fc1ba5d

Browse files
author
Andrei Tsaregorodtsev
authored
Merge pull request #5617 from fstagni/80_fixes4
[8.0] py3 fixes
2 parents b22c60a + e446151 commit fc1ba5d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+309
-658
lines changed

src/DIRAC/ConfigurationSystem/Client/Helpers/CSGlobals.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
1-
########################################################################
2-
# File : CSGlobals.py
3-
# Author : Ricardo Graciani
4-
########################################################################
51
"""
62
Some Helper functions to retrieve common location from the CS
73
"""
8-
import imp
4+
import importlib
95
from DIRAC.Core.Utilities.Decorators import deprecated
106
from DIRAC.Core.Utilities.DIRACSingleton import DIRACSingleton
117
from DIRAC.Core.Utilities.Extensions import extensionsByPriority
@@ -22,7 +18,7 @@ def __load(self):
2218
return
2319
for extName in extensionsByPriority():
2420
try:
25-
res = imp.find_module(extName)
21+
res = importlib.import_module(extName)
2622
if res[0]:
2723
res[0].close()
2824
self.__orderedExtNames.append(extName)

src/DIRAC/Core/Utilities/Graph.py

Lines changed: 0 additions & 71 deletions
This file was deleted.

src/DIRAC/Core/Utilities/Graphs/GraphUtilities.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,7 @@ def convert_to_datetime(dstring):
6767
results = dstring
6868
else:
6969
results = eval(str(dstring), {"__builtins__": None, "time": time, "math": math}, {})
70-
if isinstance(
71-
results,
72-
(
73-
int,
74-
float,
75-
),
76-
):
70+
if isinstance(results, (int, float)):
7771
results = datetime.datetime.fromtimestamp(int(results))
7872
elif isinstance(results, datetime.datetime):
7973
pass

src/DIRAC/RequestManagementSystem/private/OperationHandlerBase.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,61 @@
4242
from DIRAC import gLogger, gConfig, S_ERROR, S_OK
4343
from DIRAC.ConfigurationSystem.Client.Helpers.Registry import getGroupsWithVOMSAttribute
4444
from DIRAC.Core.Utilities import Time, Network
45-
from DIRAC.Core.Utilities.Graph import DynamicProps
4645
from DIRAC.Core.Utilities.ReturnValues import returnSingleResult
4746
from DIRAC.DataManagementSystem.Client.DataManager import DataManager
4847
from DIRAC.FrameworkSystem.Client.ProxyManagerClient import gProxyManager
4948
from DIRAC.RequestManagementSystem.Client.Operation import Operation
5049
from DIRAC.Resources.Catalog.FileCatalog import FileCatalog
5150

5251

52+
class DynamicProps(type):
53+
"""
54+
55+
metaclass allowing to create properties on the fly
56+
"""
57+
58+
def __new__(cls, name, bases, classdict):
59+
"""
60+
new operator
61+
"""
62+
63+
def makeProperty(self, name, value, readOnly=False):
64+
"""
65+
Add property :name: to class
66+
67+
This also creates a private :_name: attribute
68+
If you want to make read only property, set :readOnly: flag to True
69+
:warn: could raise AttributeError if :name: of :_name: is already
70+
defined as an attribute
71+
"""
72+
if hasattr(self, "_" + name) or hasattr(self, name):
73+
raise AttributeError("_%s or %s is already defined as a member" % (name, name))
74+
75+
def fget(self):
76+
return self._getProperty(name)
77+
78+
fset = None if readOnly else lambda self, value: self._setProperty(name, value)
79+
setattr(self, "_" + name, value)
80+
setattr(self.__class__, name, property(fget=fget, fset=fset))
81+
82+
def _setProperty(self, name, value):
83+
"""
84+
property setter
85+
"""
86+
setattr(self, "_" + name, value)
87+
88+
def _getProperty(self, name):
89+
"""
90+
property getter
91+
"""
92+
return getattr(self, "_" + name)
93+
94+
classdict["makeProperty"] = makeProperty
95+
classdict["_setProperty"] = _setProperty
96+
classdict["_getProperty"] = _getProperty
97+
return super().__new__(cls, name, bases, classdict)
98+
99+
53100
class OperationHandlerBase(metaclass=DynamicProps):
54101
"""
55102
.. class:: OperationHandlerBase

src/DIRAC/Core/Utilities/test/Test_Graph.py renamed to src/DIRAC/RequestManagementSystem/private/test/Test_OperationHandlerBase.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
""" :mod: GraphTests
2-
=======================
3-
4-
.. module: GraphTests
5-
:synopsis: tests for Graph module classes
6-
.. moduleauthor:: [email protected]
1+
""" tests for Graph OperationHandlerBase module
72
"""
83
import unittest
94

105
# # SUT
11-
from DIRAC.Core.Utilities.Graph import DynamicProps
6+
from DIRAC.RequestManagementSystem.private.OperationHandlerBase import DynamicProps
127

138

149
class DynamicPropTests(unittest.TestCase):

src/DIRAC/RequestManagementSystem/private/test/RequestTaskTests.py renamed to src/DIRAC/RequestManagementSystem/private/test/Test_RequestTask.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,7 @@
66
77
test cases for RequestTask class
88
"""
9-
from __future__ import print_function
10-
from __future__ import absolute_import
11-
from __future__ import division
12-
13-
__RCSID__ = "$Id $"
14-
# #
15-
# @file RequestTaskTests.py
16-
17-
# @date 2013/03/27 15:59:40
18-
# @brief Definition of RequestTaskTests class.
19-
# # imports
9+
2010
import unittest
2111
import importlib
2212
from mock import Mock, MagicMock
@@ -32,7 +22,7 @@
3222
from DIRAC.RequestManagementSystem.Client.Request import Request
3323
from DIRAC.RequestManagementSystem.Client.Operation import Operation
3424

35-
########################################################################
25+
3626
class RequestTaskTests(unittest.TestCase):
3727
"""
3828
.. class:: RequestTaskTests

src/DIRAC/RequestManagementSystem/private/test/RequestValidatorTests.py renamed to src/DIRAC/RequestManagementSystem/private/test/Test_RequestValidator.py

Lines changed: 21 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,3 @@
1-
########################################################################
2-
# $HeadURL $
3-
# File: RequestValidatorTests.py
4-
5-
# Date: 2012/09/25 13:49:20
6-
########################################################################
7-
81
""" :mod: RequestValidatorTests
92
=======================
103
@@ -14,27 +7,14 @@
147
158
test cases for RequestValidator
169
"""
17-
from __future__ import absolute_import
18-
from __future__ import division
19-
from __future__ import print_function
20-
21-
__RCSID__ = "$Id $"
22-
23-
##
24-
# @file RequestValidatorTests.py
25-
26-
# @date 2012/09/25 13:49:31
27-
# @brief Definition of RequestValidatorTests class.
28-
29-
## imports
3010
import unittest
11+
from mock import MagicMock as Mock, patch
3112

32-
## from DIRAC
3313
from DIRAC.RequestManagementSystem.Client.Request import Request
3414
from DIRAC.RequestManagementSystem.Client.Operation import Operation
3515
from DIRAC.RequestManagementSystem.Client.File import File
3616

37-
## SUT
17+
# SUT
3818
from DIRAC.RequestManagementSystem.private.RequestValidator import RequestValidator
3919

4020

@@ -57,98 +37,88 @@ def tearDown(self):
5737
del self.operation
5838
del self.file
5939

40+
@patch("DIRAC.ConfigurationSystem.Client.PathFinder.getSystemInstance", new=Mock())
6041
def testValidator(self):
6142
"""validator test"""
6243

63-
## create validator
44+
# create validator
6445
validator = RequestValidator()
6546
self.assertEqual(isinstance(validator, RequestValidator), True)
6647

67-
## RequestName not set
48+
# RequestName not set
6849
ret = validator.validate(self.request)
69-
self.assertEqual(ret, {"Message": "RequestName not set", "OK": False})
50+
self.assertFalse(ret["OK"])
7051
self.request.RequestName = "test_request"
7152

7253
# # no operations
7354
ret = validator.validate(self.request)
74-
self.assertEqual(ret, {"Message": "Operations not present in request 'test_request'", "OK": False})
55+
self.assertFalse(ret["OK"])
7556
self.request.addOperation(self.operation)
7657

7758
# # type not set
7859
ret = validator.validate(self.request)
79-
self.assertEqual(ret, {"Message": "Operation #0 in request 'test_request' hasn't got Type set", "OK": False})
60+
self.assertFalse(ret["OK"])
8061
self.operation.Type = "ReplicateAndRegister"
8162

8263
# # files not present
8364
ret = validator.validate(self.request)
84-
self.assertEqual(
85-
ret, {"Message": "Operation #0 of type 'ReplicateAndRegister' hasn't got files to process.", "OK": False}
86-
)
65+
self.assertFalse(ret["OK"])
8766
self.operation.addFile(self.file)
8867

8968
# # targetSE not set
9069
ret = validator.validate(self.request)
91-
self.assertEqual(
92-
ret, {"Message": "Operation #0 of type 'ReplicateAndRegister' is missing TargetSE attribute.", "OK": False}
93-
)
70+
self.assertFalse(ret["OK"])
9471
self.operation.TargetSE = "CERN-USER"
9572

9673
# # missing LFN
9774
ret = validator.validate(self.request)
98-
self.assertEqual(
99-
ret,
100-
{"Message": "Operation #0 of type 'ReplicateAndRegister' is missing LFN attribute for file.", "OK": False},
101-
)
75+
self.assertFalse(ret["OK"])
10276
self.file.LFN = "/a/b/c"
10377

10478
# # no ownerDN
10579
# force no owner DN because it takes the one of the current user
10680
self.request.OwnerDN = ""
10781
ret = validator.validate(self.request)
108-
self.assertEqual(ret, {"Message": "Request 'test_request' is missing OwnerDN value", "OK": False})
82+
self.assertFalse(ret["OK"])
10983
self.request.OwnerDN = "foo/bar=baz"
11084

11185
# # no owner group
11286
# same, force it
11387
self.request.OwnerGroup = ""
11488
ret = validator.validate(self.request)
115-
self.assertEqual(ret, {"Message": "Request 'test_request' is missing OwnerGroup value", "OK": False})
89+
self.assertFalse(ret["OK"])
11690
self.request.OwnerGroup = "dirac_user"
11791

118-
## Checksum set, ChecksumType not set
92+
# Checksum set, ChecksumType not set
11993
self.file.Checksum = "abcdef"
12094
ret = validator.validate(self.request)
121-
self.assertEqual(
122-
ret, {"Message": "File in operation #0 is missing Checksum (abcdef) or ChecksumType ()", "OK": False}
123-
)
95+
self.assertFalse(ret["OK"])
12496

125-
## ChecksumType set, Checksum not set
97+
# ChecksumType set, Checksum not set
12698
self.file.Checksum = ""
12799
self.file.ChecksumType = "adler32"
128100

129101
ret = validator.validate(self.request)
130-
self.assertEqual(
131-
ret, {"Message": "File in operation #0 is missing Checksum () or ChecksumType (ADLER32)", "OK": False}
132-
)
102+
self.assertFalse(ret["OK"])
133103

134-
## both set
104+
# both set
135105
self.file.Checksum = "abcdef"
136106
self.file.ChecksumType = "adler32"
137107
ret = validator.validate(self.request)
138108
self.assertEqual(ret, {"OK": True, "Value": None})
139109

140-
## both unset
110+
# both unset
141111
self.file.Checksum = ""
142112
self.file.ChecksumType = None
143113
ret = validator.validate(self.request)
144114
self.assertEqual(ret, {"OK": True, "Value": None})
145115

146-
## all OK
116+
# all OK
147117
ret = validator.validate(self.request)
148118
self.assertEqual(ret, {"OK": True, "Value": None})
149119

150120

151-
## test suite execution
121+
# test suite execution
152122
if __name__ == "__main__":
153123
gTestLoader = unittest.TestLoader()
154124
gSuite = gTestLoader.loadTestsFromTestCase(RequestValidatorTests)

0 commit comments

Comments
 (0)