Private GIT
Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
S
SickRage-1
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
vlbox
SickRage-1
Commits
83bad581
Commit
83bad581
authored
Nov 28, 2015
by
labrys
Browse files
Options
Downloads
Patches
Plain Diff
Lint 10/10
parent
4b6acf51
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
tests/numdict_tests.py
+284
-266
284 additions, 266 deletions
tests/numdict_tests.py
with
284 additions
and
266 deletions
tests/numdict_tests.py
+
284
−
266
View file @
83bad581
...
@@ -4,6 +4,8 @@
...
@@ -4,6 +4,8 @@
Unit Tests for sickbeard/numdict.py
Unit Tests for sickbeard/numdict.py
"""
"""
# pylint: disable=line-too-long
import
sys
import
sys
import
os.path
import
os.path
import
unittest
import
unittest
...
@@ -16,7 +18,7 @@ from sickbeard.numdict import NumDict
...
@@ -16,7 +18,7 @@ from sickbeard.numdict import NumDict
PY3
=
sys
.
version_info
>=
(
3
,
)
PY3
=
sys
.
version_info
>=
(
3
,
)
if
PY3
:
if
PY3
:
from
collections
import
UserDict
from
collections
import
UserDict
# pylint: disable=no-name-in-module
else
:
else
:
from
UserDict
import
UserDict
from
UserDict
import
UserDict
...
@@ -25,97 +27,97 @@ class NumDictTest(unittest.TestCase):
...
@@ -25,97 +27,97 @@ class NumDictTest(unittest.TestCase):
"""
"""
Test the NumDict class
Test the NumDict class
"""
"""
def
test_constructors
(
self
):
def
test_constructors
(
self
):
# pylint: disable=too-many-locals, too-many-statements
"""
"""
Test NumDict constructors
Test NumDict constructors
"""
"""
# dicts for testing
# dicts for testing
d0
=
{}
# Empty dictionary
d
ict_
0
=
{}
# Empty dictionary
d1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d
ict_
1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d
ict_
2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d3
=
{
'
3
'
:
'
Aardvark
'
}
# Numeric string key
d
ict_
3
=
{
'
3
'
:
'
Aardvark
'
}
# Numeric string key
d4
=
{
'
3
'
:
'
Aardvark
'
,
'
4
'
:
'
Ant
'
}
# Multiple numeric string keys
d
ict_
4
=
{
'
3
'
:
'
Aardvark
'
,
'
4
'
:
'
Ant
'
}
# Multiple numeric string keys
d5
=
{
5
:
'
Cat
'
,
'
6
'
:
'
Dog
'
}
# Mixed numeric and numeric string keys
d
ict_
5
=
{
5
:
'
Cat
'
,
'
6
'
:
'
Dog
'
}
# Mixed numeric and numeric string keys
d6
=
{
1
:
None
,
'
2
'
:
None
}
# None as values
d
ict_
6
=
{
1
:
None
,
'
2
'
:
None
}
# None as values
d7
=
{
None
:
'
Empty
'
}
# None as key
d
ict_
7
=
{
None
:
'
Empty
'
}
# None as key
# Construct NumDicts from dicts
# Construct NumDicts from dicts
n
=
NumDict
()
n
um_dict
=
NumDict
()
n0
=
NumDict
(
d0
)
n
um_dict_
0
=
NumDict
(
d
ict_
0
)
n1
=
NumDict
(
d1
)
n
um_dict_
1
=
NumDict
(
d
ict_
1
)
n2
=
NumDict
(
d2
)
n
um_dict_
2
=
NumDict
(
d
ict_
2
)
n3
=
NumDict
(
d3
)
n
um_dict_
3
=
NumDict
(
d
ict_
3
)
n4
=
NumDict
(
d4
)
n
um_dict_
4
=
NumDict
(
d
ict_
4
)
n5
=
NumDict
(
d5
)
n
um_dict_
5
=
NumDict
(
d
ict_
5
)
n6
=
NumDict
(
d6
)
n
um_dict_
6
=
NumDict
(
d
ict_
6
)
n7
=
NumDict
(
d7
)
n
um_dict_
7
=
NumDict
(
d
ict_
7
)
# Most NumDicts from dicts should compare equal...
# Most NumDicts from dicts should compare equal...
self
.
assertEqual
(
n
,
{})
self
.
assertEqual
(
n
um_dict
,
{})
self
.
assertEqual
(
n
0
,
d
0
)
self
.
assertEqual
(
n
um_dict_0
,
dict_
0
)
self
.
assertEqual
(
n
1
,
d
1
)
self
.
assertEqual
(
n
um_dict_1
,
dict_
1
)
self
.
assertEqual
(
n
2
,
d
2
)
self
.
assertEqual
(
n
um_dict_2
,
dict_
2
)
# ...however, numeric keys are not equal to numeric string keys...
# ...however, numeric keys are not equal to numeric string keys...
self
.
assertNotEqual
(
n
3
,
d
3
)
self
.
assertNotEqual
(
n
um_dict_3
,
dict_
3
)
self
.
assertNotEqual
(
n
4
,
d
4
)
self
.
assertNotEqual
(
n
um_dict_4
,
dict_
4
)
self
.
assertNotEqual
(
n
5
,
d
5
)
self
.
assertNotEqual
(
n
um_dict_5
,
dict_
5
)
self
.
assertNotEqual
(
n
6
,
d
6
)
self
.
assertNotEqual
(
n
um_dict_6
,
dict_
6
)
# ...but None keys work just fine
# ...but None keys work just fine
self
.
assertEqual
(
n
7
,
d
7
)
self
.
assertEqual
(
n
um_dict_7
,
dict_
7
)
# Construct dicts from NumDicts
# Construct dicts from NumDicts
d
n
=
dict
(
n
)
d
ict_from_num_dict
=
dict
(
n
um_dict
)
d
n
1
=
dict
(
n1
)
d
ict_from_num_dict_
1
=
dict
(
n
um_dict_
1
)
d
n
2
=
dict
(
n2
)
d
ict_from_num_dict_
2
=
dict
(
n
um_dict_
2
)
d
n
3
=
dict
(
n3
)
d
ict_from_num_dict_
3
=
dict
(
n
um_dict_
3
)
d
n
4
=
dict
(
n4
)
d
ict_from_num_dict_
4
=
dict
(
n
um_dict_
4
)
d
n
5
=
dict
(
n5
)
d
ict_from_num_dict_
5
=
dict
(
n
um_dict_
5
)
d
n
6
=
dict
(
n6
)
d
ict_from_num_dict_
6
=
dict
(
n
um_dict_
6
)
d
n
7
=
dict
(
n7
)
d
ict_from_num_dict_
7
=
dict
(
n
um_dict_
7
)
# All dicts from NumDicts should compare equal
# All dicts from NumDicts should compare equal
self
.
assertEqual
(
n
,
dn
)
self
.
assertEqual
(
n
um_dict
,
dict_from_num_dict
)
self
.
assertEqual
(
n
1
,
dn
1
)
self
.
assertEqual
(
n
um_dict_1
,
dict_from_num_dict_
1
)
self
.
assertEqual
(
n
2
,
dn
2
)
self
.
assertEqual
(
n
um_dict_2
,
dict_from_num_dict_
2
)
self
.
assertEqual
(
n
3
,
dn
3
)
self
.
assertEqual
(
n
um_dict_3
,
dict_from_num_dict_
3
)
self
.
assertEqual
(
n
4
,
dn
4
)
self
.
assertEqual
(
n
um_dict_4
,
dict_from_num_dict_
4
)
self
.
assertEqual
(
n
5
,
dn
5
)
self
.
assertEqual
(
n
um_dict_5
,
dict_from_num_dict_
5
)
self
.
assertEqual
(
n
6
,
dn
6
)
self
.
assertEqual
(
n
um_dict_6
,
dict_from_num_dict_
6
)
self
.
assertEqual
(
n
7
,
dn
7
)
self
.
assertEqual
(
n
um_dict_7
,
dict_from_num_dict_
7
)
# Construct NumDicts from NumDicts
# Construct NumDicts from NumDicts
n
n
=
NumDict
(
n
)
n
um_dict_from_num_dict
=
NumDict
(
n
um_dict
)
n
n
0
=
NumDict
(
n0
)
n
um_dict_from_num_dict_
0
=
NumDict
(
n
um_dict_
0
)
n
n
1
=
NumDict
(
n1
)
n
um_dict_from_num_dict_
1
=
NumDict
(
n
um_dict_
1
)
n
n
2
=
NumDict
(
n2
)
n
um_dict_from_num_dict_
2
=
NumDict
(
n
um_dict_
2
)
n
n
3
=
NumDict
(
n3
)
n
um_dict_from_num_dict_
3
=
NumDict
(
n
um_dict_
3
)
n
n
4
=
NumDict
(
n4
)
n
um_dict_from_num_dict_
4
=
NumDict
(
n
um_dict_
4
)
n
n
5
=
NumDict
(
n5
)
n
um_dict_from_num_dict_
5
=
NumDict
(
n
um_dict_
5
)
n
n
6
=
NumDict
(
n6
)
n
um_dict_from_num_dict_
6
=
NumDict
(
n
um_dict_
6
)
n
n
7
=
NumDict
(
n7
)
n
um_dict_from_num_dict_
7
=
NumDict
(
n
um_dict_
7
)
# All NumDicts from NumDicts should compare equal
# All NumDicts from NumDicts should compare equal
self
.
assertEqual
(
n
,
nn
)
self
.
assertEqual
(
n
um_dict
,
num_dict_from_num_dict
)
self
.
assertEqual
(
n
0
,
nn
0
)
self
.
assertEqual
(
n
um_dict_0
,
num_dict_from_num_dict_
0
)
self
.
assertEqual
(
n
1
,
nn
1
)
self
.
assertEqual
(
n
um_dict_1
,
num_dict_from_num_dict_
1
)
self
.
assertEqual
(
n
2
,
nn
2
)
self
.
assertEqual
(
n
um_dict_2
,
num_dict_from_num_dict_
2
)
self
.
assertEqual
(
n
3
,
nn
3
)
self
.
assertEqual
(
n
um_dict_3
,
num_dict_from_num_dict_
3
)
self
.
assertEqual
(
n
4
,
nn
4
)
self
.
assertEqual
(
n
um_dict_4
,
num_dict_from_num_dict_
4
)
self
.
assertEqual
(
n
5
,
nn
5
)
self
.
assertEqual
(
n
um_dict_5
,
num_dict_from_num_dict_
5
)
self
.
assertEqual
(
n
6
,
nn
6
)
self
.
assertEqual
(
n
um_dict_6
,
num_dict_from_num_dict_
6
)
self
.
assertEqual
(
n
7
,
nn
7
)
self
.
assertEqual
(
n
um_dict_7
,
num_dict_from_num_dict_
7
)
# keyword arg constructor should fail
# keyword arg constructor should fail
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
NumDict
(
one
=
1
,
two
=
2
)
# Raise TypeError since we can't have numeric keywords
NumDict
(
one
=
1
,
two
=
2
)
# Raise TypeError since we can't have numeric keywords
# item sequence constructors work fine...
# item sequence constructors work fine...
self
.
assertEqual
(
NumDict
([(
1
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
n
2
)
self
.
assertEqual
(
NumDict
([(
1
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
ict_from_num_dict_
2
)
self
.
assertEqual
(
NumDict
(
dict
=
[(
1
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
n
2
)
self
.
assertEqual
(
NumDict
(
dict
=
[(
1
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
ict_from_num_dict_
2
)
self
.
assertEqual
(
NumDict
([(
1
,
'
Elephant
'
),
(
'
2
'
,
'
Mouse
'
)]),
d
n
2
)
self
.
assertEqual
(
NumDict
([(
1
,
'
Elephant
'
),
(
'
2
'
,
'
Mouse
'
)]),
d
ict_from_num_dict_
2
)
self
.
assertEqual
(
NumDict
(
dict
=
[(
'
1
'
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
n
2
)
self
.
assertEqual
(
NumDict
(
dict
=
[(
'
1
'
,
'
Elephant
'
),
(
2
,
'
Mouse
'
)]),
d
ict_from_num_dict_
2
)
# ...unless you have a non-numeric key
# ...unless you have a non-numeric key
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
...
@@ -128,39 +130,42 @@ class NumDictTest(unittest.TestCase):
...
@@ -128,39 +130,42 @@ class NumDictTest(unittest.TestCase):
NumDict
([(
1
,
'
one
'
),
(
2
,
'
two
'
)],
two
=
3
,
five
=
4
)
NumDict
([(
1
,
'
one
'
),
(
2
,
'
two
'
)],
two
=
3
,
five
=
4
)
# alternate constructors
# alternate constructors
d8
=
{
1
:
'
Echo
'
,
2
:
'
Echo
'
}
dict_8
=
{
1
:
'
Echo
'
,
2
:
'
Echo
'
}
self
.
assertEqual
(
NumDict
.
fromkeys
(
'
1 2
'
.
split
()),
dn6
)
self
.
assertEqual
(
NumDict
.
fromkeys
(
'
1 2
'
.
split
()),
dict_from_num_dict_6
)
self
.
assertEqual
(
NumDict
().
fromkeys
(
'
1 2
'
.
split
()),
dn6
)
self
.
assertEqual
(
NumDict
().
fromkeys
(
'
1 2
'
.
split
()),
dict_from_num_dict_6
)
self
.
assertEqual
(
NumDict
.
fromkeys
(
'
1 2
'
.
split
(),
'
Echo
'
),
d8
)
self
.
assertEqual
(
NumDict
.
fromkeys
(
'
1 2
'
.
split
(),
'
Echo
'
),
dict_8
)
self
.
assertEqual
(
NumDict
().
fromkeys
(
'
1 2
'
.
split
(),
'
Echo
'
),
d8
)
self
.
assertEqual
(
NumDict
().
fromkeys
(
'
1 2
'
.
split
(),
'
Echo
'
),
dict_8
)
self
.
assertTrue
(
n1
.
fromkeys
(
'
1 2
'
.
split
())
is
not
n1
)
self
.
assertTrue
(
num_dict_1
.
fromkeys
(
'
1 2
'
.
split
())
is
not
num_dict_1
)
self
.
assertIsInstance
(
n1
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
num_dict_1
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
n2
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
num_dict_2
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
n3
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
num_dict_3
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
n4
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
self
.
assertIsInstance
(
num_dict_4
.
fromkeys
(
'
1 2
'
.
split
()),
NumDict
)
def
test_repr
(
self
):
def
test_repr
(
self
):
# pylint: disable=too-many-locals
"""
Test representation of NumDicts
"""
# dicts for testing
# dicts for testing
d0
=
{}
# Empty dictionary
d
ict_
0
=
{}
# Empty dictionary
d1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d
ict_
1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d
ict_
2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d3
=
{
'
3
'
:
'
Aardvark
'
}
# Numeric string key
d
ict_
3
=
{
'
3
'
:
'
Aardvark
'
}
# Numeric string key
d4
=
{
'
3
'
:
'
Aardvark
'
,
'
4
'
:
'
Ant
'
}
# Multiple numeric string keys
d
ict_
4
=
{
'
3
'
:
'
Aardvark
'
,
'
4
'
:
'
Ant
'
}
# Multiple numeric string keys
d5
=
{
5
:
'
Cat
'
,
'
6
'
:
'
Dog
'
}
# Mixed numeric and numeric string keys
d
ict_
5
=
{
5
:
'
Cat
'
,
'
6
'
:
'
Dog
'
}
# Mixed numeric and numeric string keys
d6
=
{
1
:
None
,
'
2
'
:
None
}
# None as values
d
ict_
6
=
{
1
:
None
,
'
2
'
:
None
}
# None as values
d7
=
{
None
:
'
Empty
'
}
# None as key
d
ict_
7
=
{
None
:
'
Empty
'
}
# None as key
# Construct NumDicts from dicts
# Construct NumDicts from dicts
n
=
NumDict
()
n
um_dict
=
NumDict
()
n0
=
NumDict
(
d0
)
n
um_dict_
0
=
NumDict
(
d
ict_
0
)
n1
=
NumDict
(
d1
)
n
um_dict_
1
=
NumDict
(
d
ict_
1
)
n2
=
NumDict
(
d2
)
n
um_dict_
2
=
NumDict
(
d
ict_
2
)
n3
=
NumDict
(
d3
)
n
um_dict_
3
=
NumDict
(
d
ict_
3
)
n4
=
NumDict
(
d4
)
n
um_dict_
4
=
NumDict
(
d
ict_
4
)
n5
=
NumDict
(
d5
)
n
um_dict_
5
=
NumDict
(
d
ict_
5
)
n6
=
NumDict
(
d6
)
n
um_dict_
6
=
NumDict
(
d
ict_
6
)
n7
=
NumDict
(
d7
)
n
um_dict_
7
=
NumDict
(
d
ict_
7
)
reps
=
(
reps
=
(
"
{}
"
,
"
{}
"
,
...
@@ -174,137 +179,143 @@ class NumDictTest(unittest.TestCase):
...
@@ -174,137 +179,143 @@ class NumDictTest(unittest.TestCase):
)
)
# Most representations of NumDicts should compare equal to dicts...
# Most representations of NumDicts should compare equal to dicts...
self
.
assertEqual
(
str
(
n
),
str
({}))
self
.
assertEqual
(
str
(
n
um_dict
),
str
({}))
self
.
assertEqual
(
repr
(
n
),
repr
({}))
self
.
assertEqual
(
repr
(
n
um_dict
),
repr
({}))
self
.
assertIn
(
repr
(
n
),
reps
)
self
.
assertIn
(
repr
(
n
um_dict
),
reps
)
self
.
assertEqual
(
str
(
n0
),
str
(
d0
))
self
.
assertEqual
(
str
(
n
um_dict_
0
),
str
(
d
ict_
0
))
self
.
assertEqual
(
repr
(
n0
),
repr
(
d0
))
self
.
assertEqual
(
repr
(
n
um_dict_
0
),
repr
(
d
ict_
0
))
self
.
assertIn
(
repr
(
n0
),
reps
)
self
.
assertIn
(
repr
(
n
um_dict_
0
),
reps
)
self
.
assertEqual
(
str
(
n1
),
str
(
d1
))
self
.
assertEqual
(
str
(
n
um_dict_
1
),
str
(
d
ict_
1
))
self
.
assertEqual
(
repr
(
n1
),
repr
(
d1
))
self
.
assertEqual
(
repr
(
n
um_dict_
1
),
repr
(
d
ict_
1
))
self
.
assertIn
(
repr
(
n1
),
reps
)
self
.
assertIn
(
repr
(
n
um_dict_
1
),
reps
)
self
.
assertEqual
(
str
(
n2
),
str
(
d2
))
self
.
assertEqual
(
str
(
n
um_dict_
2
),
str
(
d
ict_
2
))
self
.
assertEqual
(
repr
(
n2
),
repr
(
d2
))
self
.
assertEqual
(
repr
(
n
um_dict_
2
),
repr
(
d
ict_
2
))
self
.
assertIn
(
repr
(
n2
),
reps
)
self
.
assertIn
(
repr
(
n
um_dict_
2
),
reps
)
# ...however, numeric keys are not equal to numeric string keys...
# ...however, numeric keys are not equal to numeric string keys...
# ...so the string representations for those are different...
# ...so the string representations for those are different...
self
.
assertNotEqual
(
str
(
n3
),
str
(
d3
))
self
.
assertNotEqual
(
str
(
n
um_dict_
3
),
str
(
d
ict_
3
))
self
.
assertNotEqual
(
repr
(
n3
),
repr
(
d3
))
self
.
assertNotEqual
(
repr
(
n
um_dict_
3
),
repr
(
d
ict_
3
))
self
.
assertNotIn
(
repr
(
n3
),
reps
)
self
.
assertNotIn
(
repr
(
n
um_dict_
3
),
reps
)
self
.
assertNotEqual
(
str
(
n4
),
str
(
d4
))
self
.
assertNotEqual
(
str
(
n
um_dict_
4
),
str
(
d
ict_
4
))
self
.
assertNotEqual
(
repr
(
n4
),
repr
(
d4
))
self
.
assertNotEqual
(
repr
(
n
um_dict_
4
),
repr
(
d
ict_
4
))
self
.
assertNotIn
(
repr
(
n4
),
reps
)
self
.
assertNotIn
(
repr
(
n
um_dict_
4
),
reps
)
self
.
assertNotEqual
(
str
(
n5
),
str
(
d5
))
self
.
assertNotEqual
(
str
(
n
um_dict_
5
),
str
(
d
ict_
5
))
self
.
assertNotEqual
(
repr
(
n5
),
repr
(
d5
))
self
.
assertNotEqual
(
repr
(
n
um_dict_
5
),
repr
(
d
ict_
5
))
self
.
assertNotIn
(
repr
(
n5
),
reps
)
self
.
assertNotIn
(
repr
(
n
um_dict_
5
),
reps
)
self
.
assertNotEqual
(
str
(
n6
),
str
(
d6
))
self
.
assertNotEqual
(
str
(
n
um_dict_
6
),
str
(
d
ict_
6
))
self
.
assertNotEqual
(
repr
(
n6
),
repr
(
d6
))
self
.
assertNotEqual
(
repr
(
n
um_dict_
6
),
repr
(
d
ict_
6
))
self
.
assertNotIn
(
repr
(
n6
),
reps
)
self
.
assertNotIn
(
repr
(
n
um_dict_
6
),
reps
)
# ...but None keys work just fine
# ...but None keys work just fine
self
.
assertEqual
(
str
(
n7
),
str
(
d7
))
self
.
assertEqual
(
str
(
n
um_dict_
7
),
str
(
d
ict_
7
))
self
.
assertEqual
(
repr
(
n7
),
repr
(
d7
))
self
.
assertEqual
(
repr
(
n
um_dict_
7
),
repr
(
d
ict_
7
))
self
.
assertIn
(
repr
(
n7
),
reps
)
self
.
assertIn
(
repr
(
n
um_dict_
7
),
reps
)
def
test_rich_comparison_and_len
(
self
):
def
test_rich_comparison_and_len
(
self
):
"""
Test rich comparison and length
"""
# dicts for testing
# dicts for testing
d0
=
{}
# Empty dictionary
d
ict_
0
=
{}
# Empty dictionary
d1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d
ict_
1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d
ict_
2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
# Construct NumDicts from dicts
# Construct NumDicts from dicts
n
=
NumDict
()
n
um_dict
=
NumDict
()
n0
=
NumDict
(
d0
)
n
um_dict_
0
=
NumDict
(
d
ict_
0
)
n1
=
NumDict
(
d1
)
n
um_dict_
1
=
NumDict
(
d
ict_
1
)
n2
=
NumDict
(
d2
)
n
um_dict_
2
=
NumDict
(
d
ict_
2
)
# Construct NumDicts from NumDicts
# Construct NumDicts from NumDicts
n
n
=
NumDict
(
n
)
n
um_dict_from_num_dict
=
NumDict
(
n
um_dict
)
n
n
0
=
NumDict
(
n0
)
n
um_dict_from_num_dict_
0
=
NumDict
(
n
um_dict_
0
)
n
n
1
=
NumDict
(
n1
)
n
um_dict_from_num_dict_
1
=
NumDict
(
n
um_dict_
1
)
n
n
2
=
NumDict
(
n2
)
n
um_dict_from_num_dict_
2
=
NumDict
(
n
um_dict_
2
)
all_dicts
=
[
d
0
,
d1
,
d2
,
n
,
n0
,
n1
,
n2
,
nn
,
nn0
,
nn1
,
nn
2
]
all_dicts
=
[
d
ict_0
,
dict_1
,
dict_2
,
num_dict
,
num_dict_0
,
num_dict_1
,
num_dict_2
,
num_dict_from_num_dict
,
num_dict_from_num_dict_0
,
num_dict_from_num_dict_1
,
num_dict_from_num_dict_
2
]
for
a
in
all_dicts
:
for
val_
a
in
all_dicts
:
for
b
in
all_dicts
:
for
val_
b
in
all_dicts
:
self
.
assertEqual
(
a
==
b
,
len
(
a
)
==
len
(
b
))
self
.
assertEqual
(
val_
a
==
val_
b
,
len
(
val_
a
)
==
len
(
val_
b
))
def
test_dict_access_and_modification
(
self
):
def
test_dict_access_and_mod
(
self
):
# pylint: disable=too-many-locals, too-many-statements
"""
Test num dict access and modification
"""
# dicts for testing
# dicts for testing
d0
=
{}
# Empty dictionary
d
ict_
0
=
{}
# Empty dictionary
d1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d
ict_
1
=
{
1
:
'
Elephant
'
}
# Single numeric key
d2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
d
ict_
2
=
{
1
:
'
Elephant
'
,
2
:
'
Mouse
'
}
# Multiple numeric keys
# Construct NumDicts from dicts
# Construct NumDicts from dicts
n0
=
NumDict
()
n
um_dict_
0
=
NumDict
()
n1
=
NumDict
(
d1
)
n
um_dict_
1
=
NumDict
(
d
ict_
1
)
n2
=
NumDict
(
d2
)
n
um_dict_
2
=
NumDict
(
d
ict_
2
)
# test __getitem__
# test __getitem__
self
.
assertEqual
(
n2
[
1
],
'
Elephant
'
)
self
.
assertEqual
(
n
um_dict_
2
[
1
],
'
Elephant
'
)
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
n
1
[
'
Mouse
'
]
# key is not numeric
_
=
num_dict_
1
[
'
Mouse
'
]
# key is not numeric
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
n
1
.
__getitem__
(
'
Mouse
'
)
# key is not numeric
_
=
num_dict_
1
.
__getitem__
(
'
Mouse
'
)
# key is not numeric
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
n
1
[
None
]
# key does not exist
_
=
num_dict_
1
[
None
]
# key does not exist
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
n
1
.
__getitem__
(
None
)
# key does not exist
_
=
num_dict_
1
.
__getitem__
(
None
)
# key does not exist
# Test __setitem__
# Test __setitem__
n3
=
NumDict
(
n2
)
n
um_dict_
3
=
NumDict
(
n
um_dict_
2
)
self
.
assertEqual
(
n
2
,
n
3
)
self
.
assertEqual
(
n
um_dict_2
,
num_dict_
3
)
n3
[
2
]
=
'
Frog
'
n
um_dict_
3
[
2
]
=
'
Frog
'
self
.
assertNotEqual
(
n
2
,
n
3
)
self
.
assertNotEqual
(
n
um_dict_2
,
num_dict_
3
)
# Check None keys and numeric key conversion
# Check None keys and numeric key conversion
n3
[
'
3
'
]
=
'
Armadillo
'
n
um_dict_
3
[
'
3
'
]
=
'
Armadillo
'
n3
[
None
]
=
'
Cockroach
'
n
um_dict_
3
[
None
]
=
'
Cockroach
'
# Check long ints
# Check long ints
n3
[
12390809518259081208909880312
]
=
'
Squid
'
n
um_dict_
3
[
12390809518259081208909880312
]
=
'
Squid
'
n3
[
'
12390809518259081208909880312
'
]
=
'
Octopus
'
n
um_dict_
3
[
'
12390809518259081208909880312
'
]
=
'
Octopus
'
self
.
assertEqual
(
n3
[
12390809518259081208909880312
],
'
Octopus
'
)
self
.
assertEqual
(
n
um_dict_
3
[
12390809518259081208909880312
],
'
Octopus
'
)
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
n3
.
__setitem__
(
'
Gorilla
'
,
1
)
# key is not numeric
n
um_dict_
3
.
__setitem__
(
'
Gorilla
'
,
1
)
# key is not numeric
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
n3
[
'
Chimpanzee
'
]
=
1
# key is not numeric
n
um_dict_
3
[
'
Chimpanzee
'
]
=
1
# key is not numeric
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
n3
[(
4
,
1
)]
=
1
# key is not numeric
n
um_dict_
3
[(
4
,
1
)]
=
1
# key is not numeric
with
self
.
assertRaises
(
TypeError
):
with
self
.
assertRaises
(
TypeError
):
n3
[[
1
,
3
,
4
]]
=
1
# key is not numeric and is not hashable
n
um_dict_
3
[[
1
,
3
,
4
]]
=
1
# key is not numeric and is not hashable
# Test __delitem__
# Test __delitem__
del
n3
[
3
]
del
n
um_dict_
3
[
3
]
del
n3
[
None
]
del
n
um_dict_
3
[
None
]
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
del
n3
[
3
]
# already deleted
del
n
um_dict_
3
[
3
]
# already deleted
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
n3
.
__delitem__
(
3
)
# already deleted
n
um_dict_
3
.
__delitem__
(
3
)
# already deleted
with
self
.
assertRaises
(
KeyError
):
with
self
.
assertRaises
(
KeyError
):
del
n3
[
'
Mouse
'
]
# key would not exist, since it is not numeric
del
n
um_dict_
3
[
'
Mouse
'
]
# key would not exist, since it is not numeric
# Test clear
# Test clear
n3
.
clear
()
n
um_dict_
3
.
clear
()
self
.
assertEqual
(
n3
,
{})
self
.
assertEqual
(
n
um_dict_
3
,
{})
# Test copy()
# Test copy()
n2a
=
d2
.
copy
()
n
um_dict_
2a
=
d
ict_
2
.
copy
()
self
.
assertEqual
(
n
2
,
n
2a
)
self
.
assertEqual
(
n
um_dict_2
,
num_dict_
2a
)
n
2b
=
n
2
.
copy
()
n
um_dict_2b
=
num_dict_
2
.
copy
()
self
.
assertEqual
(
n
2b
,
n
2
)
self
.
assertEqual
(
n
um_dict_2b
,
num_dict_
2
)
n2c
=
UserDict
({
1
:
'
Elephant
'
,
2
:
'
Mouse
'
})
n
um_dict_
2c
=
UserDict
({
1
:
'
Elephant
'
,
2
:
'
Mouse
'
})
n
2d
=
n
2c
.
copy
()
# making a copy of a UserDict is special cased
n
um_dict_2d
=
num_dict_
2c
.
copy
()
# making a copy of a UserDict is special cased
self
.
assertEqual
(
n
2c
,
n
2d
)
self
.
assertEqual
(
n
um_dict_2c
,
num_dict_
2d
)
class
MyNumDict
(
NumDict
):
class
MyNumDict
(
NumDict
):
"""
"""
...
@@ -316,131 +327,135 @@ class NumDictTest(unittest.TestCase):
...
@@ -316,131 +327,135 @@ class NumDictTest(unittest.TestCase):
"""
"""
print
(
'
MyNumDict:
'
,
self
)
print
(
'
MyNumDict:
'
,
self
)
m
2
=
MyNumDict
(
n2
)
m
y_num_dict
=
MyNumDict
(
n
um_dict_
2
)
m
2a
=
m2
.
copy
()
m
y_num_dict_a
=
my_num_dict
.
copy
()
self
.
assertEqual
(
m
2a
,
m2
)
self
.
assertEqual
(
m
y_num_dict_a
,
my_num_dict
)
m
2
[
1
]
=
'
Frog
'
m
y_num_dict
[
1
]
=
'
Frog
'
self
.
assertNotEqual
(
m
2a
,
m2
)
self
.
assertNotEqual
(
m
y_num_dict_a
,
my_num_dict
)
# Test keys, items, values
# Test keys, items, values
self
.
assertEqual
(
sorted
(
n2
.
keys
()),
sorted
(
d2
.
keys
()))
self
.
assertEqual
(
sorted
(
n
um_dict_
2
.
keys
()),
sorted
(
d
ict_
2
.
keys
()))
self
.
assertEqual
(
sorted
(
n2
.
items
()),
sorted
(
d2
.
items
()))
self
.
assertEqual
(
sorted
(
n
um_dict_
2
.
items
()),
sorted
(
d
ict_
2
.
items
()))
self
.
assertEqual
(
sorted
(
n2
.
values
()),
sorted
(
d2
.
values
()))
self
.
assertEqual
(
sorted
(
n
um_dict_
2
.
values
()),
sorted
(
d
ict_
2
.
values
()))
# Test "in".
# Test "in".
for
i
in
n2
:
for
i
in
n
um_dict_
2
:
self
.
assertIn
(
i
,
n2
)
self
.
assertIn
(
i
,
n
um_dict_
2
)
self
.
assertEqual
(
i
in
n1
,
i
in
d1
)
self
.
assertEqual
(
i
in
n
um_dict_
1
,
i
in
d
ict_
1
)
self
.
assertEqual
(
i
in
n0
,
i
in
d0
)
self
.
assertEqual
(
i
in
n
um_dict_
0
,
i
in
d
ict_
0
)
self
.
assertFalse
(
None
in
n2
)
self
.
assertFalse
(
None
in
n
um_dict_
2
)
self
.
assertEqual
(
None
in
n2
,
None
in
d2
)
self
.
assertEqual
(
None
in
n
um_dict_
2
,
None
in
d
ict_
2
)
d2
[
None
]
=
'
Cow
'
d
ict_
2
[
None
]
=
'
Cow
'
n2
[
None
]
=
d2
[
None
]
n
um_dict_
2
[
None
]
=
d
ict_
2
[
None
]
self
.
assertTrue
(
None
in
n2
)
self
.
assertTrue
(
None
in
n
um_dict_
2
)
self
.
assertEqual
(
None
in
n2
,
None
in
d2
)
self
.
assertEqual
(
None
in
n
um_dict_
2
,
None
in
d
ict_
2
)
self
.
assertEqual
(
n2
.
has_key
(
None
),
None
in
d2
)
self
.
assertEqual
(
n
um_dict_
2
.
has_key
(
None
),
None
in
d
ict_
2
)
if
not
PY3
:
if
not
PY3
:
self
.
assertEqual
(
n2
.
has_key
(
None
),
d2
.
has_key
(
None
))
self
.
assertEqual
(
n
um_dict_
2
.
has_key
(
None
),
d
ict_
2
.
has_key
(
None
))
self
.
assertFalse
(
'
Penguin
'
in
n2
)
self
.
assertFalse
(
'
Penguin
'
in
n
um_dict_
2
)
# Test update
# Test update
t
=
NumDict
()
t
est
=
NumDict
()
t
.
update
(
d2
)
tes
t
.
update
(
d
ict_
2
)
self
.
assertEqual
(
t
,
n
2
)
self
.
assertEqual
(
t
est
,
num_dict_
2
)
# Test get
# Test get
for
i
in
n2
:
for
i
in
n
um_dict_
2
:
self
.
assertEqual
(
n2
.
get
(
i
),
n2
[
i
])
self
.
assertEqual
(
n
um_dict_
2
.
get
(
i
),
n
um_dict_
2
[
i
])
self
.
assertEqual
(
n1
.
get
(
i
),
d1
.
get
(
i
))
self
.
assertEqual
(
n
um_dict_
1
.
get
(
i
),
d
ict_
1
.
get
(
i
))
self
.
assertEqual
(
n0
.
get
(
i
),
d0
.
get
(
i
))
self
.
assertEqual
(
n
um_dict_
0
.
get
(
i
),
d
ict_
0
.
get
(
i
))
for
i
in
[
'
purple
'
,
None
,
12312301924091284
,
23
]:
for
i
in
[
'
purple
'
,
None
,
12312301924091284
,
23
]:
self
.
assertEqual
(
n2
.
get
(
i
),
d2
.
get
(
i
),
i
)
self
.
assertEqual
(
n
um_dict_
2
.
get
(
i
),
d
ict_
2
.
get
(
i
),
i
)
with
self
.
assertRaises
(
AssertionError
):
with
self
.
assertRaises
(
AssertionError
):
i
=
'
1
'
i
=
'
1
'
self
.
assertEqual
(
n2
.
get
(
i
),
d2
.
get
(
i
),
i
)
# d2 expects string key which does not exist
self
.
assertEqual
(
n
um_dict_
2
.
get
(
i
),
d
ict_
2
.
get
(
i
),
i
)
# d
ict_
2 expects string key which does not exist
# Test "in" iteration.
# Test "in" iteration.
n
2b
=
n
2
n
um_dict_2b
=
num_dict_
2
for
i
in
range
(
20
):
for
i
in
range
(
20
):
n2
[
i
]
=
str
(
i
)
n
um_dict_
2
[
i
]
=
str
(
i
)
n2b
[
str
(
i
)]
=
str
(
i
)
n
um_dict_
2b
[
str
(
i
)]
=
str
(
i
)
self
.
assertEqual
(
n
2
,
n
2b
)
self
.
assertEqual
(
n
um_dict_2
,
num_dict_
2b
)
ikeys
=
[]
ikeys
=
[]
for
k
in
n2
:
for
k
in
n
um_dict_
2
:
ikeys
.
append
(
k
)
ikeys
.
append
(
k
)
self
.
assertEqual
(
set
(
ikeys
),
set
(
n2
.
keys
()))
self
.
assertEqual
(
set
(
ikeys
),
set
(
n
um_dict_
2
.
keys
()))
# Test setdefault
# Test setdefault
x
=
1
val
=
1
t
=
NumDict
()
t
est
=
NumDict
()
self
.
assertEqual
(
t
.
setdefault
(
x
,
42
),
42
)
self
.
assertEqual
(
t
est
.
setdefault
(
val
,
42
),
42
)
self
.
assertEqual
(
t
.
setdefault
(
x
,
'
42
'
),
42
)
self
.
assertEqual
(
t
est
.
setdefault
(
val
,
'
42
'
),
42
)
self
.
assertNotEqual
(
t
.
setdefault
(
x
,
42
),
'
42
'
)
self
.
assertNotEqual
(
t
est
.
setdefault
(
val
,
42
),
'
42
'
)
self
.
assertNotEqual
(
t
.
setdefault
(
x
,
'
42
'
),
'
42
'
)
self
.
assertNotEqual
(
t
est
.
setdefault
(
val
,
'
42
'
),
'
42
'
)
self
.
assertIn
(
x
,
t
)
self
.
assertIn
(
val
,
tes
t
)
self
.
assertEqual
(
t
.
setdefault
(
x
,
23
),
42
)
self
.
assertEqual
(
t
est
.
setdefault
(
val
,
23
),
42
)
self
.
assertEqual
(
t
.
setdefault
(
x
,
'
23
'
),
42
)
self
.
assertEqual
(
t
est
.
setdefault
(
val
,
'
23
'
),
42
)
self
.
assertNotEqual
(
t
.
setdefault
(
x
,
23
),
'
42
'
)
self
.
assertNotEqual
(
t
est
.
setdefault
(
val
,
23
),
'
42
'
)
self
.
assertNotEqual
(
t
.
setdefault
(
x
,
'
23
'
),
'
42
'
)
self
.
assertNotEqual
(
t
est
.
setdefault
(
val
,
'
23
'
),
'
42
'
)
self
.
assertIn
(
x
,
t
)
self
.
assertIn
(
val
,
tes
t
)
# Test pop
# Test pop
x
=
1
val
=
1
t
=
NumDict
({
x
:
42
})
t
est
=
NumDict
({
val
:
42
})
self
.
assertEqual
(
t
.
pop
(
x
),
42
)
self
.
assertEqual
(
t
est
.
pop
(
val
),
42
)
self
.
assertRaises
(
KeyError
,
t
.
pop
,
x
)
self
.
assertRaises
(
KeyError
,
tes
t
.
pop
,
val
)
self
.
assertEqual
(
t
.
pop
(
x
,
1
),
1
)
self
.
assertEqual
(
t
est
.
pop
(
val
,
1
),
1
)
t
[
x
]
=
42
t
est
[
val
]
=
42
self
.
assertEqual
(
t
.
pop
(
x
,
1
),
42
)
self
.
assertEqual
(
t
est
.
pop
(
val
,
1
),
42
)
# Test popitem
# Test popitem
x
=
1
val
=
1
t
=
NumDict
({
x
:
42
})
t
est
=
NumDict
({
val
:
42
})
self
.
assertEqual
(
t
.
popitem
(),
(
x
,
42
))
self
.
assertEqual
(
t
est
.
popitem
(),
(
val
,
42
))
self
.
assertRaises
(
KeyError
,
t
.
popitem
)
self
.
assertRaises
(
KeyError
,
tes
t
.
popitem
)
def
test_missing
(
self
):
def
test_missing
(
self
):
"""
Test missing keys
"""
# Make sure NumDict doesn't have a __missing__ method
# Make sure NumDict doesn't have a __missing__ method
self
.
assertEqual
(
hasattr
(
NumDict
,
"
__missing__
"
),
False
)
self
.
assertEqual
(
hasattr
(
NumDict
,
"
__missing__
"
),
False
)
class
D
(
NumDict
):
class
NumDict
D
(
NumDict
):
"""
"""
subclass defines __missing__ method returning a value
subclass defines __missing__ method returning a value
"""
"""
def
__missing__
(
self
,
key
):
def
__missing__
(
self
,
key
):
# pylint: disable=no-self-use
return
42
key
=
42
return
key
d
=
D
({
1
:
2
,
3
:
4
})
self
.
assertEqual
(
d
[
1
],
2
)
num_dict_d
=
NumDictD
({
1
:
2
,
3
:
4
})
self
.
assertEqual
(
d
[
3
],
4
)
self
.
assertEqual
(
num_dict_d
[
1
],
2
)
self
.
assertNotIn
(
2
,
d
)
self
.
assertEqual
(
num_dict_d
[
3
],
4
)
self
.
assertNotIn
(
2
,
d
.
keys
())
self
.
assertNotIn
(
2
,
num_dict_d
)
self
.
assertEqual
(
d
[
2
],
42
)
self
.
assertNotIn
(
2
,
num_dict_d
.
keys
())
self
.
assertEqual
(
num_dict_d
[
2
],
42
)
class
E
(
NumDict
):
class
NumDictE
(
NumDict
):
"""
"""
subclass defines __missing__ method raising RuntimeError
subclass defines __missing__ method raising RuntimeError
"""
"""
def
__missing__
(
self
,
key
):
def
__missing__
(
self
,
key
):
# pylint: disable=no-self-use
raise
RuntimeError
(
key
)
raise
RuntimeError
(
key
)
e
=
E
()
num_dict_e
=
NumDict
E
()
try
:
try
:
e
[
42
]
num_dict_
e
[
42
]
except
RuntimeError
as
err
:
except
RuntimeError
as
err
:
self
.
assertEqual
(
err
.
args
,
(
42
,))
self
.
assertEqual
(
err
.
args
,
(
42
,))
else
:
else
:
self
.
fail
(
"
e[42] didn
'
t raise RuntimeError
"
)
self
.
fail
(
"
num_dict_
e[42] didn
'
t raise RuntimeError
"
)
class
F
(
NumDict
):
class
NumDict
F
(
NumDict
):
"""
"""
subclass sets __missing__ instance variable (no effect)
subclass sets __missing__ instance variable (no effect)
"""
"""
...
@@ -448,40 +463,43 @@ class NumDictTest(unittest.TestCase):
...
@@ -448,40 +463,43 @@ class NumDictTest(unittest.TestCase):
# An instance variable __missing__ should have no effect
# An instance variable __missing__ should have no effect
self
.
__missing__
=
lambda
key
:
None
self
.
__missing__
=
lambda
key
:
None
NumDict
.
__init__
(
self
)
NumDict
.
__init__
(
self
)
f
=
F
()
num_dict_f
=
NumDict
F
()
try
:
try
:
f
[
42
]
num_dict_
f
[
42
]
except
KeyError
as
err
:
except
KeyError
as
err
:
self
.
assertEqual
(
err
.
args
,
(
42
,))
self
.
assertEqual
(
err
.
args
,
(
42
,))
else
:
else
:
self
.
fail
(
"
f[42] didn
'
t raise KeyError
"
)
self
.
fail
(
"
num_dict_
f[42] didn
'
t raise KeyError
"
)
class
G
(
NumDict
):
class
NumDict
G
(
NumDict
):
"""
"""
subclass doesn
'
t define __missing__ at a all
subclass doesn
'
t define __missing__ at a all
"""
"""
pass
pass
g
=
G
()
num_dict_g
=
NumDict
G
()
try
:
try
:
g
[
42
]
num_dict_
g
[
42
]
except
KeyError
as
err
:
except
KeyError
as
err
:
self
.
assertEqual
(
err
.
args
,
(
42
,))
self
.
assertEqual
(
err
.
args
,
(
42
,))
else
:
else
:
self
.
fail
(
"
g[42] didn
'
t raise KeyError
"
)
self
.
fail
(
"
num_dict_
g[42] didn
'
t raise KeyError
"
)
class
H
(
D
):
class
NumDictH
(
NumDict
D
):
"""
"""
subclass calls super classes __missing__ and modifies the value before returning it
subclass calls super classes __missing__ and modifies the value before returning it
"""
"""
def
__missing__
(
self
,
key
):
def
__missing__
(
self
,
key
):
# pylint: disable=arguments-differ
return
super
(
H
,
self
).
__missing__
(
key
)
+
1
return
super
(
NumDict
H
,
self
).
__missing__
(
key
)
+
1
h
=
H
()
num_dict_h
=
NumDict
H
()
self
.
assertEqual
(
h
[
None
],
d
[
None
]
+
1
)
self
.
assertEqual
(
num_dict_h
[
None
],
num_dict_
d
[
None
]
+
1
)
def
test_main
():
def
test_main
():
"""
Run tests when run as main
"""
import
logging
import
logging
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
logging
.
basicConfig
(
level
=
logging
.
DEBUG
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment