2014-02-12 72 views
1

我的工作,包含以下根文件夾Python應用程序:強制包分離(避免來自特定模塊進口)

+---FrontEnd 
+---BackEnd 
+---Common 

前端和後端的進口從共同但通用不應該從以前的進口。我想以編程方式強制執行此規則,所以我的團隊(尤其是新團隊成員)不會意外地將FrontEnd或BackEnd導入Common。

我聽說進口掛鉤可以幫助這裏,但我還沒有找到關於此的很多信息。我第一次嘗試沒有多麼容易:

Common.__init__.py

class NoForeignDependencies(object): 

    PATH_TRIGGERS = ['FrontEnd', 'BackEnd'] 

    def __init__(self, path_entry): 
     if path_entry not in self.PATH_TRIGGERS: 
      raise ImportError() 

    def find_module(self, fullname, path=None): 
     print 'Import not allowed for this module' 
     return None 

sys.path_hooks.append(NoForeignDependencies) 

我如何能做到這一點任何想法?

+0

在開發時間內完成它是絕對必要的嗎?我們在git pre-commit鉤子中進行了這些檢查,因此您可以執行此類導入以進行測試或播放,並且只有在嘗試提交時纔會被拒絕。但是如果你事先知道這個邏輯,那麼沒有必要推動CI系統讓測試失敗。 – drodri

回答

0

如何將這三個軟件打包成單獨的軟件包,然後使用Jenkins自動運行每個軟件包的單元測試,例如只有少數人可以訪問Jenkins?通過這種方式,如果有人前往並在Common中添加了FrontEnd的導入,則通用測試將在Jenkins上失敗,因爲FrontEnd尚未安裝在Jenkins用於運行Common測試的通用環境中。

+0

感謝您的回覆,我希望有一種編程方式可以實現這一點(理想情況下可以在部署時禁用它) – Ulises