uberpoet/util.py (37 lines of code) (raw):

# Copyright (c) 2018 Uber Technologies, 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 distutils.spawn import os import subprocess class SeedContainer(object): """Holds the seed number variable""" seed = 0 def bool_xor(a, b): """Python's ^ operator is a bitwise xor, so we need to make a boolean equivalent function.""" return (a and not b) or (not a and b) def seed(): """Gives you a unique number for codegen ids""" SeedContainer.seed += 1 return SeedContainer.seed def first_in_dict(d): """Grabs the value returned by the first value in d.keys()""" if len(d) > 0: k = d.keys()[0] return d[k] return None def first_key(dictionary_var): """dictionary_var.keys()[0]""" return dictionary_var.keys()[0] def makedir(path): """Does a mkdir -p `path` if it doesn't exist""" if not os.path.exists(path): os.makedirs(path) def merge_lists(two_d_list): """Merges a 2d array into a 1d array. Ex: [[1,2],[3,4]] becomes [1,2,3,4]""" # I know this is a fold / reduce, but I got an error when I tried # the reduce function? return [i for li in two_d_list for i in li] def sudo_enabled(): """Tells you if the current 'shell' has sudo permission.""" try: subprocess.check_call(['sudo', '-n', 'true']) return True except subprocess.CalledProcessError: return False def check_dependent_commands(command_list): """ Checks if the commands are accessible by the process. Returns a list of misssing commands. Empty if all commands are available. """ # noinspection PyUnresolvedReferences return [command for command in command_list if not distutils.spawn.find_executable(command)] def pad_list(l, size, value=0): """Pads the right side of the list `l` to `size` if len(l) is less than size with `value`.""" if len(l) >= size: return l return l + ([value] * (size - len(l))) def grab_mac_marketing_name(): """ Returns a string telling you you the macOS marketing name of the device your running on. Ex: "MacBook Pro (15-inch, 2018)" """ script_path = os.path.join(os.path.dirname(__file__), "resources", "get_market_name.sh") return subprocess.check_output([script_path])