#Licensed to the Apache Software Foundation (ASF) under one
#or more contributor license agreements.  See the NOTICE file
#distributed with this work for additional information
#regarding copyright ownership.  The ASF licenses this file
#to you 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.
"""defines Allocation Manager Utilities"""

# -*- python -*-
from hodlib.allocationManagers.goldAllocationManager import goldAllocationManager

class allocationManagerUtil:
  def getAllocationManager(name, cfg, log):
    """returns a concrete instance of the specified AllocationManager"""
    if name == 'gold':
      return goldAllocationManager(cfg, log)
    
  getAllocationManager = staticmethod(getAllocationManager)
