forked from spotify/luigi
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'upstream-master' into feature/moto-version-update
* upstream-master: S3 client refactor (spotify#2482) Rename to rpc_log_retries, and make it apply to all the logging involved Factor log_exceptions into a configuration parameter Fix attribute forwarding for tasks with dynamic dependencies (spotify#2478) Add a visiblity level for luigi.Parameters (spotify#2278) Add support for multiple requires and inherits arguments (spotify#2475) Add metadata columns to the RDBMS contrib (spotify#2440) Fix race condition in luigi.lock.acquire_for (spotify#2357) (spotify#2477) tests: Use RunOnceTask where possible (spotify#2476) Optional TOML configs support (spotify#2457) Added default port behaviour for Redshift (spotify#2474) Add codeowners file with default and specific example (spotify#2465) Add Data Revenue to the `blogged` list (spotify#2472)
- Loading branch information
Showing
36 changed files
with
1,578 additions
and
207 deletions.
There are no files selected for viewing
Validating CODEOWNERS rules …
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# The following patterns are used to auto-assign review requests | ||
# to specific individuals. Order is important; the last matching | ||
# pattern takes the most precedence. | ||
|
||
# These owners will be the default owners for everything in | ||
# the repo. Unless a later match takes precedence, | ||
* @dlstadther @Tarrasch @ulzha | ||
|
||
# Specific files, directories, paths, or file types can be | ||
# assigned more specificially. | ||
contrib/redshift*.py @dlstadther | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Copyright 2012-2015 Spotify AB | ||
# | ||
# 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. | ||
# | ||
from .cfg_parser import LuigiConfigParser | ||
from .core import get_config, add_config_path | ||
from .toml_parser import LuigiTomlParser | ||
|
||
|
||
__all__ = [ | ||
'add_config_path', | ||
'get_config', | ||
'LuigiConfigParser', | ||
'LuigiTomlParser', | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Copyright 2012-2015 Spotify AB | ||
# | ||
# 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 logging | ||
|
||
|
||
# IMPORTANT: don't inherit from `object`! | ||
# ConfigParser have some troubles in this case. | ||
# More info: https://stackoverflow.com/a/19323238 | ||
class BaseParser: | ||
@classmethod | ||
def instance(cls, *args, **kwargs): | ||
""" Singleton getter """ | ||
if cls._instance is None: | ||
cls._instance = cls(*args, **kwargs) | ||
loaded = cls._instance.reload() | ||
logging.getLogger('luigi-interface').info('Loaded %r', loaded) | ||
|
||
return cls._instance | ||
|
||
@classmethod | ||
def add_config_path(cls, path): | ||
cls._config_paths.append(path) | ||
cls.reload() | ||
|
||
@classmethod | ||
def reload(cls): | ||
return cls.instance().read(cls._config_paths) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
# -*- coding: utf-8 -*- | ||
# | ||
# Copyright 2012-2015 Spotify AB | ||
# | ||
# 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 logging | ||
import os | ||
import warnings | ||
|
||
from .cfg_parser import LuigiConfigParser | ||
from .toml_parser import LuigiTomlParser | ||
|
||
|
||
logger = logging.getLogger('luigi-interface') | ||
|
||
|
||
PARSERS = { | ||
'cfg': LuigiConfigParser, | ||
'conf': LuigiConfigParser, | ||
'ini': LuigiConfigParser, | ||
'toml': LuigiTomlParser, | ||
} | ||
|
||
# select parser via env var | ||
DEFAULT_PARSER = 'cfg' | ||
PARSER = os.environ.get('LUIGI_CONFIG_PARSER', DEFAULT_PARSER) | ||
if PARSER not in PARSERS: | ||
warnings.warn("Invalid parser: {parser}".format(parser=PARSER)) | ||
PARSER = DEFAULT_PARSER | ||
|
||
|
||
def get_config(parser=PARSER): | ||
"""Get configs singleton for parser | ||
""" | ||
|
||
parser_class = PARSERS[parser] | ||
if not parser_class.enabled: | ||
logger.error(( | ||
"Parser not installed yet. " | ||
"Please, install luigi with required parser:\n" | ||
"pip install luigi[{parser}]" | ||
).format(parser) | ||
) | ||
|
||
return parser_class.instance() | ||
|
||
|
||
def add_config_path(path): | ||
"""Select config parser by file extension and add path into parser. | ||
""" | ||
if not os.path.isfile(path): | ||
warnings.warn("Config file does not exist: {path}".format(path=path)) | ||
return False | ||
|
||
# select parser by file extension | ||
_base, ext = os.path.splitext(path) | ||
if ext and ext[1:] in PARSERS: | ||
parser_class = PARSERS[ext[1:]] | ||
else: | ||
parser_class = PARSERS[PARSER] | ||
|
||
# add config path to parser | ||
parser_class.add_config_path(path) | ||
return True | ||
|
||
|
||
if 'LUIGI_CONFIG_PATH' in os.environ: | ||
add_config_path(os.environ['LUIGI_CONFIG_PATH']) |
Oops, something went wrong.