# Python 3 Upgrade: [INVESTIGATION] ckanext-datajson compatibility
> https://open-data-ed.atlassian.net/browse/OD-1339
**Previous version**: [ckanext-datajson `0.5.1`](https://github.com/datopian/ckanext-datajson/tree/0.5.1)
**Latest version**: [ckanext-datajson `datagov`](https://github.com/datopian/ckanext-datajson/tree/808b211ba50e681e3b146c76443c456262836d0f)
This extension would need to be updated for python 3 as it does not currently have any python 3 compatible versions.
The ckanext-ed extension imports plugin and controller classes from this extension, so this could be a blocker for the ckanext-ed extension.
## Work that needs to be done
* [Updating the extension to be python 3 compatible](#Updating-the-extension-to-be-python-3-compatible)
* [Updating the extension to be compatible with ckan python 3 features](#Updating-the-extension-to-be-compatible-with-ckan-python-3-features)
* Test that the existing features of the extension all work as expected with python 3 and ckan 2.9.x
* Update the extension documentation to reflect the new changes
### Updating the extension to be python 3 compatible
The latest version of the extension still has python 2 code that needs to be refactored to work with python 3. These are some of the changes (there might also be some required changes that can only be found when the extension is running):
* **Refactoring Import formats**
* https://github.com/datopian/ckanext-datajson/blob/808b211ba50e681e3b146c76443c456262836d0f/ckanext/datajson/plugin.py#L1
```python
import StringIO
```
would need to be refactored to:
```python
from io import StringIO
```
* https://github.com/datopian/ckanext-datajson/blob/808b211ba50e681e3b146c76443c456262836d0f/ckanext/datajson/package2pod.py#L8
```python
from helpers import *
```
would need to be refactored to:
```python
from ckanext.datajson.helpers import *
```
* https://github.com/datopian/ckanext-datajson/blob/808b211ba50e681e3b146c76443c456262836d0f/ckanext/datajson/plugin.py#L15-L16
```python
from helpers import get_export_map_json, detect_publisher, get_validator
from package2pod import Package2Pod
```
would need to be refactored to:
```python
from ckanext.datajson.helpers import get_export_map_json, detect_publisher, get_validator
from ckanext.datajson.package2pod import Package2Pod
```
### Updating the extension to be compatible with ckan python 3 features
The latest version of the extension still calls ckan code that is not available in a python 3 environment. These are some of the changes (there might also be some required changes that can only be found when the extension is running):
* **Refactor from ckan Controllers to Blueprints**:
The extension still uses controllers: https://github.com/datopian/ckanext-datajson/blob/808b211ba50e681e3b146c76443c456262836d0f/ckanext/datajson/plugin.py#L167
```python
class DataJsonController(BaseController):
```
which would not work as controllers ar only available in a python 2 environment: https://github.com/ckan/ckan/blob/ckan-2.9.5/ckan/lib/base.py#L276-L277
```python
if six.PY2:
class BaseController(WSGIController):
```
For python 3 with ckan, controllers have to be converted to views/Blueprints.
* **Fix broken ckan imports**
https://github.com/datopian/ckanext-datajson/blob/808b211ba50e681e3b146c76443c456262836d0f/ckanext/datajson/helpers.py#L8-L9
```python
from pylons import config
from ckan import plugins as p
```
would need to be refactored to
```python
import ckan.plugins as p
config = p.toolkit.config
```