topackage.py 1.3 KB

1234567891011121314151617181920212223242526272829303132
  1. import rope.refactor.importutils
  2. from rope.base.change import ChangeSet, ChangeContents, MoveResource, CreateFolder
  3. class ModuleToPackage(object):
  4. def __init__(self, project, resource):
  5. self.project = project
  6. self.pycore = project.pycore
  7. self.resource = resource
  8. def get_changes(self):
  9. changes = ChangeSet('Transform <%s> module to package' %
  10. self.resource.path)
  11. new_content = self._transform_relatives_to_absolute(self.resource)
  12. if new_content is not None:
  13. changes.add_change(ChangeContents(self.resource, new_content))
  14. parent = self.resource.parent
  15. name = self.resource.name[:-3]
  16. changes.add_change(CreateFolder(parent, name))
  17. parent_path = parent.path + '/'
  18. if not parent.path:
  19. parent_path = ''
  20. new_path = parent_path + '%s/__init__.py' % name
  21. if self.resource.project == self.project:
  22. changes.add_change(MoveResource(self.resource, new_path))
  23. return changes
  24. def _transform_relatives_to_absolute(self, resource):
  25. pymodule = self.pycore.resource_to_pyobject(resource)
  26. import_tools = rope.refactor.importutils.ImportTools(self.pycore)
  27. return import_tools.relatives_to_absolutes(pymodule)