#  ============LICENSE_START===============================================
#  Copyright (C) 2021-2023 Nordix Foundation. 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.
#  ============LICENSE_END=================================================
#

# NB: This is the only conf.yaml file used by the upstream readthedocs job  (ref '.readthedocs.yaml') 
#     Where possible include contents of the sub-folders' 'conf.yaml' files here if appropriate

from docs_conf.conf import *

branch = 'latest'
selfurl = 'https://docs.o-ran-sc.org/projects/o-ran-sc-nonrtric-plt-ranpm/en/%s' % branch

linkcheck_ignore = [
    'http://localhost.*',
    'http://127.0.0.1.*',
    'https://gerrit.o-ran-sc.org.*'
]

extensions = [
    'sphinx.ext.intersphinx',
    'sphinx.ext.autosectionlabel',
]

#intershpinx mapping with other projects
#intersphinx_mapping = {}
## Note there is a circular dependency here - sub-project pages must exist before they can be checked
#intersphinx_mapping['influxlogger'] = ('%s/influxlogger' % selfurl, None)
#intersphinx_mapping['datafilecollector'] = ('%s/datafilecollector' % selfurl, None)
#intersphinx_mapping['pmproducer'] = ('%s/pmproducer' % selfurl, None)


intersphinx_disabled_reftypes = ["*"]
