Naming Scheme

Some bookiesports files (in particular name and description fields) allow the use of variables. Those are dynamic and filled in by bookie-sync, automatically.

As an example, the file MLB_ML_1.yaml defines betting markets for a Moneyline market group. The betting markets carry the name of the event participants. We encode this in bookiesports using variables::

bettingmarkets:
     - description:
         en: '{teams.away}'
     - description:
         en: '{teams.home}'

Overview of variables

  • teams:
    • {teams.home}: Home team
    • {teams.away}: Away team
  • result:
    • {teams.home}: Points for home team
    • {teams.away}: Points for away team
    • {teams.hometeam}: Points for home team
    • {teams.awayteam}: Points for away team
    • {teams.total}: Total Points
  • handicaps:
    • {teams.home}: Comparative (symmetric) Handicaps (e.g., +-2) for home team
    • {teams.away}: Comparative (symmetric) Handicaps (e.g., +-2) for away team
    • {teams.home_score}: Absolute handicap for home team (e.g., 2)
    • {teams.away_score}: Absolute handicap for away team (e.g., 0)
  • overunder:
    • {teams.value}: The over-/under value

Internal Processing

The variable parsing is done in bos-sync (substitutions.py) and work through decode_variables and a few classes that deal with the variables. This allows us to have complex variable substitutions.

The variables all consist of a module identifier and the actual member variable::

{module.member}

All modules are listed in the substitutions variable in decode_variables::

substitutions = {
    "teams": Teams,
    "result": Result,
    "handicaps": Handicaps,
    "overunder": OverUnder,
}

The modules themselves (captical first letter) are defined in the same file and can be as easy as

class Result:
    """ Defines a few variables to be used in conjuctions with {result.X}
    """
    def __init__(self, **kwargs):
        result = kwargs.get("result", [0, 0]) or [0, 0]
        self.hometeam = result[0]
        self.awayteam = result[1]

        self.total = sum([float(x) for x in result])

        # aliases
        self.home = self.hometeam
        self.away = self.awayteam

and as complex as

class Teams:
    """ Defines a few variables to be used in conjuctions with {teams.X}
    """
    def __init__(self, **kwargs):
        teams = kwargs.get("teams", ["", ""]) or ["", ""]
        self.home = " ".join([
            x.capitalize() for x in teams[0].split(" ")])
        self.away = " ".join([
            x.capitalize() for x in teams[1].split(" ")])