FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
aws-cli/awscli/text.py at develop · Processoriented/aws-cli · GitHub
Processoriented
/
aws-cli
Public
forked from
aws/aws-cli
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
aws-cli
/
awscli
/
text.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
117 lines (98 loc) · 4.17 KB
Breadcrumbs
aws-cli
/
awscli
/
text.py
Copy path
File metadata and controls
117 lines (98 loc) · 4.17 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
# Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
# http://aws.amazon.com/apache2.0/
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
import
six
def
format_text
(
data
,
stream
):
_format_text
(
data
,
stream
)
def
_format_text
(
item
,
stream
,
identifier
=
None
,
scalar_keys
=
None
):
if
isinstance
(
item
,
dict
):
_format_dict
(
scalar_keys
,
item
,
identifier
,
stream
)
elif
isinstance
(
item
,
list
):
_format_list
(
item
,
identifier
,
stream
)
else
:
# If it's not a list or a dict, we just write the scalar
# value out directly.
stream
.
write
(
six
.
text_type
(
item
))
stream
.
write
(
'
\n
'
)
def
_format_list
(
item
,
identifier
,
stream
):
if
not
item
:
return
if
any
(
isinstance
(
el
,
dict
)
for
el
in
item
):
all_keys
=
_all_scalar_keys
(
item
)
for
element
in
item
:
_format_text
(
element
,
stream
=
stream
,
identifier
=
identifier
,
scalar_keys
=
all_keys
)
elif
any
(
isinstance
(
el
,
list
)
for
el
in
item
):
scalar_elements
,
non_scalars
=
_partition_list
(
item
)
if
scalar_elements
:
_format_scalar_list
(
scalar_elements
,
identifier
,
stream
)
for
non_scalar
in
non_scalars
:
_format_text
(
non_scalar
,
stream
=
stream
,
identifier
=
identifier
)
else
:
_format_scalar_list
(
item
,
identifier
,
stream
)
def
_partition_list
(
item
):
scalars
=
[]
non_scalars
=
[]
for
element
in
item
:
if
isinstance
(
element
, (
list
,
dict
)):
non_scalars
.
append
(
element
)
else
:
scalars
.
append
(
element
)
return
scalars
,
non_scalars
def
_format_scalar_list
(
elements
,
identifier
,
stream
):
if
identifier
is
not
None
:
for
item
in
elements
:
stream
.
write
(
'%s
\t
%s
\n
'
%
(
identifier
.
upper
(),
item
))
else
:
# For a bare list, just print the contents.
stream
.
write
(
'
\t
'
.
join
([
six
.
text_type
(
item
)
for
item
in
elements
]))
stream
.
write
(
'
\n
'
)
def
_format_dict
(
scalar_keys
,
item
,
identifier
,
stream
):
scalars
,
non_scalars
=
_partition_dict
(
item
,
scalar_keys
=
scalar_keys
)
if
scalars
:
if
identifier
is
not
None
:
scalars
.
insert
(
0
,
identifier
.
upper
())
stream
.
write
(
'
\t
'
.
join
(
scalars
))
stream
.
write
(
'
\n
'
)
for
new_identifier
,
non_scalar
in
non_scalars
:
_format_text
(
item
=
non_scalar
,
stream
=
stream
,
identifier
=
new_identifier
)
def
_all_scalar_keys
(
list_of_dicts
):
keys_seen
=
set
()
for
item_dict
in
list_of_dicts
:
for
key
,
value
in
item_dict
.
items
():
if
not
isinstance
(
value
, (
dict
,
list
)):
keys_seen
.
add
(
key
)
return
list
(
sorted
(
keys_seen
))
def
_partition_dict
(
item_dict
,
scalar_keys
):
# Given a dictionary, partition it into two list based on the
# values associated with the keys.
# {'foo': 'scalar', 'bar': 'scalar', 'baz': ['not, 'scalar']}
# scalar = [('foo', 'scalar'), ('bar', 'scalar')]
# non_scalar = [('baz', ['not', 'scalar'])]
scalar
=
[]
non_scalar
=
[]
if
scalar_keys
is
None
:
# scalar_keys can have more than just the keys in the item_dict,
# but if user does not provide scalar_keys, we'll grab the keys
# from the current item_dict
for
key
,
value
in
sorted
(
item_dict
.
items
()):
if
isinstance
(
value
, (
dict
,
list
)):
non_scalar
.
append
((
key
,
value
))
else
:
scalar
.
append
(
six
.
text_type
(
value
))
else
:
for
key
in
scalar_keys
:
scalar
.
append
(
six
.
text_type
(
item_dict
.
get
(
key
,
''
)))
remaining_keys
=
sorted
(
set
(
item_dict
.
keys
())
-
set
(
scalar_keys
))
for
remaining_key
in
remaining_keys
:
non_scalar
.
append
((
remaining_key
,
item_dict
[
remaining_key
]))
return
scalar
,
non_scalar
Back
|
FazBrowse Home
|
New Git URL