summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--Makefile5
-rw-r--r--ipaplatform/__init__.py.in18
-rw-r--r--ipaplatform/base/services.py5
-rw-r--r--ipaserver/dcerpc.py2
-rw-r--r--pylint_plugins.py20
6 files changed, 37 insertions, 17 deletions
diff --git a/.gitignore b/.gitignore
index 61054de30..9b1547569 100644
--- a/.gitignore
+++ b/.gitignore
@@ -77,7 +77,3 @@ freeipa2-dev-doc
/ipaplatform/__init__.py
/ipaplatform/setup.py
-/ipaplatform/tasks.py
-/ipaplatform/services.py
-/ipaplatform/paths.py
-/ipaplatform/constants.py
diff --git a/Makefile b/Makefile
index 632430860..0435fe924 100644
--- a/Makefile
+++ b/Makefile
@@ -197,11 +197,6 @@ version-update: release-update
if [ "$(SUPPORTED_PLATFORM)" != "" ]; then \
sed -e s/__PLATFORM__/$(SUPPORTED_PLATFORM)/ \
ipaplatform/__init__.py.in > ipaplatform/__init__.py; \
- rm -f ipaplatform/paths.py ipaplatform/services.py ipaplatform/tasks.py ipaplatform/constants.py; \
- ln -s $(SUPPORTED_PLATFORM)/paths.py ipaplatform/paths.py; \
- ln -s $(SUPPORTED_PLATFORM)/services.py ipaplatform/services.py; \
- ln -s $(SUPPORTED_PLATFORM)/tasks.py ipaplatform/tasks.py; \
- ln -s $(SUPPORTED_PLATFORM)/constants.py ipaplatform/constants.py; \
fi
if [ "$(SKIP_API_VERSION_CHECK)" != "yes" ]; then \
diff --git a/ipaplatform/__init__.py.in b/ipaplatform/__init__.py.in
index 61f6f3c4a..9821bf62a 100644
--- a/ipaplatform/__init__.py.in
+++ b/ipaplatform/__init__.py.in
@@ -1,12 +1,20 @@
#
# Copyright (C) 2015 FreeIPA Contributors see COPYING for license
#
+"""Module containing platform-specific functionality.
+
+ipaplatform.constants
+ipaplatform.paths
+ipaplatform.services
+ipaplatform.tasks
+"""
+import os
-'''
-Module containing platform-specific functionality for every platform.
-'''
NAME = "__PLATFORM__"
-# FIXME: too much cyclic dependencies
-# from __PLATFORM__ import paths, tasks, services
+# Create an alias for platform specific modulues, e.g.
+# 'import ipaplatform.paths' loads 'ipaplatform/NAME/paths.py'.
+
+__path__.append(
+ os.path.join(os.path.dirname(os.path.abspath(__file__)), NAME))
diff --git a/ipaplatform/base/services.py b/ipaplatform/base/services.py
index 750d97953..ec38b28a8 100644
--- a/ipaplatform/base/services.py
+++ b/ipaplatform/base/services.py
@@ -483,7 +483,10 @@ class SystemdService(PlatformService):
# Objects below are expected to be exported by platform module
-service = None
+def base_service_class_factory(name):
+ raise NotImplementedError
+
+service = base_service_class_factory
knownservices = None
# System may support more time&date services. FreeIPA supports ntpd only, other
diff --git a/ipaserver/dcerpc.py b/ipaserver/dcerpc.py
index bd1d8c1ca..a6d10db0f 100644
--- a/ipaserver/dcerpc.py
+++ b/ipaserver/dcerpc.py
@@ -58,7 +58,7 @@ from dns.exception import DNSException
import pysss_nss_idmap
import pysss
import six
-from ipaplatform.paths import paths
+from ipaplatform.paths import paths # pylint: disable=import-error
from ldap.filter import escape_filter_chars
from time import sleep
diff --git a/pylint_plugins.py b/pylint_plugins.py
index bf357737c..6273d2c84 100644
--- a/pylint_plugins.py
+++ b/pylint_plugins.py
@@ -6,9 +6,11 @@ from __future__ import print_function
import copy
import sys
+import textwrap
-from astroid import MANAGER
+from astroid import MANAGER, register_module_extender
from astroid import scoped_nodes
+from astroid.builder import AstroidBuilder
def register(linter):
@@ -255,3 +257,19 @@ def fix_ipa_classes(cls):
fake_class(cls, ipa_class_members[class_name_with_module])
MANAGER.register_transform(scoped_nodes.Class, fix_ipa_classes)
+
+
+def ipaplatform_transform():
+ """Module aliases for IpaPlatformImporter
+ """
+ return AstroidBuilder(MANAGER).string_build(textwrap.dedent(
+ """
+ from ipaplatform.base import constants
+ from ipaplatform.base import paths
+ from ipaplatform.base import services
+ from ipaplatform.base import tasks
+ """
+ ))
+
+
+register_module_extender(MANAGER, 'ipaplatform', ipaplatform_transform)