Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove .ropeproject/history and .ropeproject/objectdb compression #606

Merged
merged 11 commits into from
Dec 16, 2022
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# **Upcoming release**

- #604 Fix test that sometimes leaves files behind in the current working directory (@lieryan)
- #606 Deprecate compress_objectdb and compress_history

# Release 1.6.0

Expand Down
2 changes: 1 addition & 1 deletion docs/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Will be used if [tool.rope] is configured.
.. code-block:: toml

[tool.rope]
compress_objectdb = true
split_imports = true

config.py
---------
Expand Down
2 changes: 0 additions & 2 deletions docs/default_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ def set_prefs(prefs):
# Should rope save object information or not.
#
# prefs["save_objectdb"] = True
# prefs["compress_objectdb"] = False

# If `True`, rope analyzes each module when it is being saved.
#
Expand All @@ -81,7 +80,6 @@ def set_prefs(prefs):
# Shows whether to save history across sessions.
#
# prefs["save_history"] = True
# prefs["compress_history"] = False

# Set the number spaces used for indenting. According to
# :PEP:`8`, it is best to use 4 spaces. Since most of rope's
Expand Down
11 changes: 5 additions & 6 deletions rope/base/history.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from rope.base import exceptions, change, taskhandle
from rope.base import exceptions, change, taskhandle, utils


class History:
Expand All @@ -15,9 +15,7 @@ def __init__(self, project, maxundos=None):

def _load_history(self):
if self.save:
result = self.project.data_files.read_data(
"history", compress=self.compress, import_=True
)
result = self.project.data_files.read_data("history", import_=True)
if result is not None:
to_change = change.DataToChange(self.project)
for data in result[0]:
Expand Down Expand Up @@ -152,7 +150,7 @@ def write(self):
self._remove_extra_items()
data.append([to_data(change_) for change_ in self.undo_list])
data.append([to_data(change_) for change_ in self.redo_list])
self.project.data_files.write_data("history", data, compress=self.compress)
self.project.data_files.write_data("history", data)

def get_file_undo_list(self, resource):
return [
Expand Down Expand Up @@ -193,8 +191,9 @@ def save(self):
return self.project.prefs.get("save_history", False)

@property
@utils.deprecated("compress_history is no longer supported")
def compress(self):
return self.project.prefs.get("compress_history", False)
return False

def clear(self):
"""Forget all undo and redo information"""
Expand Down
10 changes: 5 additions & 5 deletions rope/base/oi/memorydb.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from rope.base.oi import objectdb
from rope.base import utils


class MemoryDB(objectdb.FileDict):
Expand All @@ -12,9 +13,7 @@ def __init__(self, project, persist=None):
def _load_files(self):
self._files = {}
if self.persist:
result = self.project.data_files.read_data(
"objectdb", compress=self.compress, import_=True
)
result = self.project.data_files.read_data("objectdb", import_=True)
if result is not None:
self._files = result

Expand Down Expand Up @@ -50,11 +49,12 @@ def __delitem__(self, file):

def write(self):
if self.persist:
self.project.data_files.write_data("objectdb", self._files, self.compress)
self.project.data_files.write_data("objectdb", self._files)

@property
@utils.deprecated("compress_objectdb is no longer supported")
def compress(self):
return self.project.prefs.get("compress_objectdb", False)
return False

@property
def persist(self):
Expand Down
8 changes: 6 additions & 2 deletions rope/base/prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,9 @@ class Prefs:
save_objectdb: bool = field(
default=False, description="Should rope save object information or not."
)
compress_objectdb: bool = False
compress_objectdb: bool = field(
default=False, description="Deprecated. This has no effect",
)
automatic_soa: bool = field(
True, "If `True`, rope analyzes each module when it is being saved."
)
Expand All @@ -92,7 +94,9 @@ class Prefs:
save_history: bool = field(
default=True, description="Shows whether to save history across sessions."
)
compress_history: bool = False
compress_history: bool = field(
default=False, description="Deprecated. This has no effect",
)

indent_size: int = field(
default=4,
Expand Down
44 changes: 10 additions & 34 deletions rope/base/project.py
Original file line number Diff line number Diff line change
Expand Up @@ -379,16 +379,14 @@ def __init__(self, project):
self.project = project
self.hooks = []

def read_data(self, name, compress=False, import_=False):
def read_data(self, name, import_=False):
if self.project.ropefolder is None:
return None
compress = compress and self._can_compress()
opener = self._get_opener(compress)
file = self._get_file(name, compress)
if not compress and import_:
file = self._get_file(name)
if import_:
self._import_old_files(name)
if file.exists():
input = opener(file.real_path, "rb")
input = open(file.real_path, "rb")
try:
result = []
try:
Expand All @@ -403,12 +401,10 @@ def read_data(self, name, compress=False, import_=False):
finally:
input.close()

def write_data(self, name, data, compress=False):
def write_data(self, name, data):
if self.project.ropefolder is not None:
compress = compress and self._can_compress()
file = self._get_file(name, compress)
opener = self._get_opener(compress)
output = opener(file.real_path, "wb")
file = self._get_file(name)
output = open(file.real_path, "wb")
try:
pickle.dump(data, output, 2)
finally:
Expand All @@ -421,34 +417,14 @@ def write(self):
for hook in self.hooks:
hook()

def _can_compress(self):
try:
import gzip # noqa

return True
except ImportError:
return False

def _import_old_files(self, name):
old = self._get_file(name + ".pickle", False)
new = self._get_file(name, False)
old = self._get_file(name + ".pickle")
new = self._get_file(name)
if old.exists() and not new.exists():
shutil.move(old.real_path, new.real_path)

def _get_opener(self, compress):
if compress:
try:
import gzip

return gzip.open
except ImportError:
pass
return open

def _get_file(self, name, compress):
def _get_file(self, name):
path = self.project.ropefolder.path + "/" + name
if compress:
path += ".gz"
return self.project.get_file(path)


Expand Down
12 changes: 12 additions & 0 deletions rope/contrib/findit.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,18 @@ def __init__(self, occurrence):
self.unsure = occurrence.is_unsure()
self.lineno = occurrence.lineno

def __repr__(self):
pymod = self.resource.project.get_pymodule(self.resource)
return '<{}.{} "{}:{} ({}-{})" at {}>'.format(
self.__class__.__module__,
self.__class__.__name__,
self.resource.path,
self.lineno,
self.region[0],
self.region[1],
hex(id(self)),
)


def _find_locations(finder, resources, job_set):
result = []
Expand Down
26 changes: 14 additions & 12 deletions ropetest/projecttest.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import os.path
import pathlib
import tempfile
import unittest
from textwrap import dedent
Expand Down Expand Up @@ -67,22 +68,23 @@ def test_creating_files_that_already_exist(self):
self.project.root.create_file(self.sample_file)

def test_making_root_folder_if_it_does_not_exist(self):
project = Project("sampleproject2")
try:
self.assertTrue(
os.path.exists("sampleproject2") and os.path.isdir("sampleproject2")
)
finally:
testutils.remove_project(project)
with tempfile.TemporaryDirectory(dir=testutils.RUN_TMP_DIR) as tmpdir:
project_root = pathlib.Path(tmpdir) / "sampleproject2"
assert not project_root.exists()

project = Project(project_root)

assert project_root.exists()
assert project_root.is_dir()

def test_failure_when_project_root_exists_and_is_a_file(self):
project_root = "sampleproject2"
try:
open(project_root, "w").close()
with tempfile.TemporaryDirectory(dir=testutils.RUN_TMP_DIR) as tmpdir:
project_root = pathlib.Path(tmpdir) / "sampleproject2"
project_root.touch()
assert project_root.exists() and project_root.is_file()

with self.assertRaises(RopeError):
Project(project_root)
finally:
testutils.remove_recursively(project_root)

def test_creating_folders(self):
folderName = "SampleFolder"
Expand Down
27 changes: 27 additions & 0 deletions ropetest/reprtest.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,14 @@
import pathlib
import tempfile
from textwrap import dedent
from unittest.mock import MagicMock

import pytest

from rope.base import libutils, resources, pyobjectsdef
from rope.base.project import Project
from rope.contrib import findit
from rope.refactor import occurrences
from ropetest import testutils


Expand Down Expand Up @@ -123,3 +127,26 @@ def test_repr_pyobjectsdef_pycomprehension_without_associated_resource(project):
assert repr(obj).startswith(
'<rope.base.pyobjectsdef.PyComprehension "::<comprehension>" at 0x'
)


def test_repr_findit_location(project, mod1):
code = dedent("""\
a = 10
b = 20
c = 30
""")
mod1.write(code)

occurrence = MagicMock(
occurrences.Occurrence,
resource=project.get_resource("pkg1/mod1.py"),
lineno=2,
)
occurrence.get_word_range.return_value = (11, 13)
occurrence.is_unsure.return_value = True

obj = findit.Location(occurrence=occurrence)

assert repr(obj).startswith(
'<rope.contrib.findit.Location "pkg1/mod1.py:2 (11-13)" at 0x'
)