added support for local pypi mirrors

Change-Id: I509cca3114aafbff72fc2413e262ea5408e56fa9
diff --git a/README.rst b/README.rst
index 35d83b9..bfc9644 100644
--- a/README.rst
+++ b/README.rst
@@ -50,6 +50,25 @@
         module:
           django: true
 
+Using offline mirrors
+
+.. code-block:: yaml
+
+    python:
+      environment:
+        enabled: true
+        user:
+        - root:
+            name: root
+            pypi_user: user
+            pypi_password: password
+            pypi_mirror:
+              host: http://pypi.local
+              port: 8084
+              upstream_fallback: true
+              user: user
+              password: password
+
 Read more
 =========
 
diff --git a/python/environment.sls b/python/environment.sls
index 355d05e..cbb508b 100644
--- a/python/environment.sls
+++ b/python/environment.sls
@@ -16,23 +16,45 @@
 
 {%- endif %}
 
-{%- if network.proxy.host == 'none' %}
+{%- for user in environment.user %}
+{% set user_home = salt['user.info'](user.name).get('home') %}
 
-/root/pip/pip.conf:
+{%- if network.proxy.host == 'none' and user.pypi_mirror is not defined %}
+
+{{user_home}}/.pip/pip.conf:
   file.absent
-  
+
 {%- else %}
 
-/root/pip:
-  file.directory
-
-/root/pip/pip.conf:
+{{user_home}}/.pip/pip.conf:
   file.managed:
+  - defaults:
+      environment: {{ user }}
+  - makedirs: True
   - template: jinja
   - source: salt://python/files/pip.conf
 
 {%- endif %}
 
+{%- if user.pypi_mirror is defined %}
+
+{{user_home}}/.pydistutils.cfg:
+  file.managed:
+  - defaults:
+      environment: {{ user }}
+  - template: jinja
+  - source: salt://python/files/pydistutils.cfg
+
+{{user_home}}/.pypirc:
+  file.managed:
+  - defaults:
+      environment: {{ user }}
+  - template: jinja
+  - source: salt://python/files/pypirc
+
+{%- endif %}
+{%- endfor %}
+
 {%- if environment.module.django %}
 
 python_django_packages:
diff --git a/python/files/pip.conf b/python/files/pip.conf
index 3c42cf7..dcbe586 100644
--- a/python/files/pip.conf
+++ b/python/files/pip.conf
@@ -1,4 +1,14 @@
 {%- from "linux/map.jinja" import network with context %}
 
 [global]
+{%- if not network.proxy.host == 'none' %}
 proxy =  {{ network.proxy.host }}:{{ network.proxy.port }}
+{%- endif %}
+
+{%- if environment.pypi_mirror is defined %}
+index-url = {{ environment.pypi_mirror.host }}:{{environment.pypi_mirror.port}}/
+{%- if environment.pypi_mirror.get('upstream_fallback', false) %}
+extra-index-url = https://pypi.python.org/simple/
+{%- endif %}
+trusted-host = {{ environment.pypi_mirror.host }}
+{%- endif %}
\ No newline at end of file
diff --git a/python/files/pydistutils.cfg b/python/files/pydistutils.cfg
new file mode 100644
index 0000000..793be1f
--- /dev/null
+++ b/python/files/pydistutils.cfg
@@ -0,0 +1,2 @@
+[easy_install]
+index-url={{ environment.pypi_mirror.host }}:{{ environment.pypi_mirror.port }}/
\ No newline at end of file
diff --git a/python/files/pypirc b/python/files/pypirc
new file mode 100644
index 0000000..b49d42c
--- /dev/null
+++ b/python/files/pypirc
@@ -0,0 +1,18 @@
+[distutils]
+index-servers =
+    local
+{%- if environment.pypi_mirror.get('upstream_fallback', false) %}
+    pypi
+{%- endif %}
+
+[local]
+username: {{ environment.pypi_mirror.get('user', 'user') }}
+password: {{ environment.pypi_mirror.get('password', 'password') }}
+repository: {{ environment.pypi_mirror.host }}:{{ environment.pypi_mirror.port }}/
+
+{%- if environment.pypi_mirror.get('upstream_fallback', false) == True %}
+[pypi]
+username: {{ environment.get('pypi_user', 'user') }}
+password: {{ environment.get('pypi_password', 'password') }}
+repository: https://pypi.python.org/simple/
+{%- endif %}
\ No newline at end of file