Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

# vim: tabstop=4 shiftwidth=4 softtabstop=4 

 

# Copyright 2012 OpenStack LLC 

# Copyright 2010 United States Government as represented by the 

# Administrator of the National Aeronautics and Space Administration. 

# 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. 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 os 

import sys 

 

from migrate.versioning import api as versioning_api 

 

from keystone import config 

 

 

CONF = config.CONF 

 

 

try: 

    from migrate.versioning import exceptions as versioning_exceptions 

except ImportError: 

    try: 

        # python-migration changed location of exceptions after 1.6.3 

        # See LP Bug #717467 

        from migrate import exceptions as versioning_exceptions 

    except ImportError: 

        sys.exit('python-migrate is not installed. Exiting.') 

 

 

def db_sync(version=None): 

44    if version is not None: 

        try: 

            version = int(version) 

        except ValueError: 

            raise Exception(_('version should be an integer')) 

 

    current_version = db_version() 

    repo_path = _find_migrate_repo() 

54    if version is None or version > current_version: 

        return versioning_api.upgrade(CONF.sql.connection, repo_path, version) 

    else: 

        return versioning_api.downgrade( 

            CONF.sql.connection, repo_path, version) 

 

 

def db_version(): 

    repo_path = _find_migrate_repo() 

    try: 

        return versioning_api.db_version(CONF.sql.connection, repo_path) 

    except versioning_exceptions.DatabaseNotControlledError: 

        return db_version_control(0) 

 

 

def db_version_control(version=None): 

    repo_path = _find_migrate_repo() 

    versioning_api.version_control(CONF.sql.connection, repo_path, version) 

    return version 

 

 

def _find_migrate_repo(): 

    """Get the path for the migrate repository.""" 

    path = os.path.join(os.path.abspath(os.path.dirname(__file__)), 

                        'migrate_repo') 

    assert os.path.exists(path) 

    return path