File: __init__.py

package info (click to toggle)
mongo-c-driver 1.23.1-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 41,364 kB
  • sloc: ansic: 176,588; javascript: 7,954; python: 4,498; sh: 136; makefile: 32; xml: 10; cpp: 2
file content (93 lines) | stat: -rw-r--r-- 2,774 bytes parent folder | download
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
# Copyright 2018-present MongoDB, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License 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 sys
from collections import OrderedDict as OD

try:
    import yaml
    import yamlordereddictloader
except ImportError:
    sys.stderr.write(
        "try 'pip install -r evergreen_config_generator/requirements.txt'\n")
    raise


class ConfigObject(object):
    def __init__(self, *args, **kwargs):
        super(ConfigObject, self).__init__()

    @property
    def name(self):
        return 'UNSET'

    def to_dict(self):
        return OD([('name', self.name)])


# We want legible YAML tasks:
#
#     - name: debug-compile
#       tags: [zlib, snappy, compression, openssl]
#       commands:
#       - command: shell.exec
#         params:
#           script: |-
#             set -o errexit
#             ...
#
# Write values compactly except multiline strings, which use "|" style. Write
# tag sets as lists.

class _Dumper(yamlordereddictloader.Dumper):
    def __init__(self, *args, **kwargs):
        super(_Dumper, self).__init__(*args, **kwargs)
        self.add_representer(set, type(self).represent_set)
        # Use "multi_representer" to represent all subclasses of ConfigObject.
        self.add_multi_representer(ConfigObject,
                                   type(self).represent_config_object)

    def represent_scalar(self, tag, value, style=None):
        if isinstance(value, (str)) and '\n' in value:
            style = '|'
        return super(_Dumper, self).represent_scalar(tag, value, style)

    def represent_set(self, data):
        return super(_Dumper, self).represent_list(sorted(data))

    def represent_config_object(self, obj):
        return super(_Dumper, self).represent_data(obj.to_dict())


def yaml_dump(obj):
    return yaml.dump(obj, Dumper=_Dumper, default_flow_style=False)


def generate(config, path):
    """Dump config to a file as YAML.
    config is a dict, preferably an OrderedDict. path is a file path.
    """
    f = open(path, 'w+')
    f.write('''####################################
# Evergreen configuration
#
# Generated with evergreen_config_generator from
# github.com/mongodb-labs/drivers-evergreen-tools
#
# DO NOT EDIT THIS FILE
#
####################################
''')
    f.write(yaml_dump(config))