Rename SimpleOutputStream and SimpleOutputStreamAdapter.
PiperOrigin-RevId: 268196433
diff --git a/python/cc/BUILD.bazel b/python/cc/BUILD.bazel
index 14bb783..183e934 100644
--- a/python/cc/BUILD.bazel
+++ b/python/cc/BUILD.bazel
@@ -16,8 +16,8 @@
)
cc_library(
- name = "simple_output_stream",
- hdrs = ["simple_output_stream.h"],
+ name = "python_file_object_adapter",
+ hdrs = ["python_file_object_adapter.h"],
include_prefix = "tink/python",
strip_include_prefix = "/python",
deps = [
@@ -28,13 +28,13 @@
)
cc_library(
- name = "simple_output_stream_adapter",
- srcs = ["simple_output_stream_adapter.cc"],
- hdrs = ["simple_output_stream_adapter.h"],
+ name = "python_output_stream",
+ srcs = ["python_output_stream.cc"],
+ hdrs = ["python_output_stream.h"],
include_prefix = "tink/python",
strip_include_prefix = "/python",
deps = [
- ":simple_output_stream",
+ ":python_file_object_adapter",
"//cc:output_stream",
"//cc/subtle:subtle_util",
"//cc/util:errors",
@@ -47,13 +47,13 @@
)
cc_test(
- name = "simple_output_stream_adapter_test",
+ name = "python_output_stream_test",
size = "medium",
- srcs = ["simple_output_stream_adapter_test.cc"],
+ srcs = ["python_output_stream_test.cc"],
linkopts = ["-lpthread"],
deps = [
- ":simple_output_stream",
- ":simple_output_stream_adapter",
+ ":python_file_object_adapter",
+ ":python_output_stream",
"//cc/subtle:random",
"//cc/util:status",
"//cc/util:statusor",
diff --git a/python/cc/clif/simple_output_stream.clif b/python/cc/clif/python_file_object_adapter.clif
similarity index 84%
rename from python/cc/clif/simple_output_stream.clif
rename to python/cc/clif/python_file_object_adapter.clif
index 287e14d..2ded31c 100644
--- a/python/cc/clif/simple_output_stream.clif
+++ b/python/cc/clif/python_file_object_adapter.clif
@@ -12,14 +12,11 @@
from "tink/python/util/clif.h" import * # Status, StatusOr
-from "tink/python/cc/simple_output_stream.h":
+from "tink/python/cc/python_file_object_adapter.h":
namespace `crypto::tink`:
- class SimpleOutputStream:
+ class PythonFileObjectAdapter:
@virtual
def `Write` as write(self, data: bytes) -> StatusOr<int>
@virtual
def `Close` as close(self) -> Status
-
- @virtual
- def `Position` as position(self) -> int
diff --git a/python/cc/simple_output_stream.h b/python/cc/python_file_object_adapter.h
similarity index 72%
rename from python/cc/simple_output_stream.h
rename to python/cc/python_file_object_adapter.h
index 80db68d..342e05e 100644
--- a/python/cc/simple_output_stream.h
+++ b/python/cc/python_file_object_adapter.h
@@ -12,8 +12,8 @@
//
///////////////////////////////////////////////////////////////////////////////
-#ifndef TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
-#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+#ifndef TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
+#define TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
#include "absl/strings/string_view.h"
#include "tink/util/status.h"
@@ -22,9 +22,9 @@
namespace crypto {
namespace tink {
-// A simple interface for an output stream like object which can be used to go
-// from Python to C++ via CLIF and vice versa.
-class SimpleOutputStream {
+// Adapts a Python file object for use in C++.
+// This is CLIFed and implemented in Python.
+class PythonFileObjectAdapter {
public:
// Writes 'data' to the underlying stream and returns the number of bytes
// written, which can be less than the size of 'data'.
@@ -33,13 +33,10 @@
// Closes the underlying stream.
virtual util::Status Close() = 0;
- // Returns the total number of bytes written.
- virtual int64_t Position() const = 0;
-
- virtual ~SimpleOutputStream() {}
+ virtual ~PythonFileObjectAdapter() {}
};
} // namespace tink
} // namespace crypto
-#endif // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_H_
+#endif // TINK_PYTHON_CC_PYTHON_FILE_OBJECT_ADAPTER_H_
diff --git a/python/cc/simple_output_stream_adapter.cc b/python/cc/python_output_stream.cc
similarity index 81%
rename from python/cc/simple_output_stream_adapter.cc
rename to python/cc/python_output_stream.cc
index 4c21fc3..23449df 100644
--- a/python/cc/simple_output_stream_adapter.cc
+++ b/python/cc/python_output_stream.cc
@@ -12,7 +12,7 @@
//
///////////////////////////////////////////////////////////////////////////////
-#include "tink/python/cc/simple_output_stream_adapter.h"
+#include "tink/python/cc/python_output_stream.h"
#include <algorithm>
#include <memory>
@@ -24,15 +24,15 @@
#include "tink/util/errors.h"
#include "tink/util/status.h"
#include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
namespace crypto {
namespace tink {
-SimpleOutputStreamAdapter::SimpleOutputStreamAdapter(
- std::unique_ptr<SimpleOutputStream> stream, int buffer_size) {
+PythonOutputStream::PythonOutputStream(
+ std::unique_ptr<PythonFileObjectAdapter> adapter, int buffer_size) {
if (buffer_size <= 0) buffer_size = 128 * 1024; // 128 KB
- stream_ = std::move(stream);
+ adapter_ = std::move(adapter);
subtle::ResizeStringUninitialized(&buffer_, buffer_size);
is_first_call_ = true;
position_ = 0;
@@ -41,7 +41,7 @@
status_ = util::OkStatus();
}
-crypto::tink::util::StatusOr<int> SimpleOutputStreamAdapter::Next(void** data) {
+crypto::tink::util::StatusOr<int> PythonOutputStream::Next(void** data) {
if (!status_.ok()) return status_;
// This is the first call to Next(), so we return the whole buffer.
@@ -67,7 +67,7 @@
// The available space might not span the entire buffer, as writing
// may succeed only for a prefix of the buffer -- in this case the data still
// to be written is shifted in the buffer and the remaining space is returned.
- auto write_result = stream_->Write(buffer_);
+ auto write_result = adapter_->Write(buffer_);
if (!write_result.ok()) return status_ = write_result.status();
// Some data was written, so we can return some portion of buffer_.
@@ -84,36 +84,34 @@
return written;
}
-void SimpleOutputStreamAdapter::BackUp(int count) {
+void PythonOutputStream::BackUp(int count) {
if (!status_.ok() || count < 1 || count_in_buffer_ == 0) return;
int actual_count = std::min(count, count_in_buffer_ - buffer_offset_);
count_in_buffer_ -= actual_count;
position_ -= actual_count;
}
-SimpleOutputStreamAdapter::~SimpleOutputStreamAdapter() {
- Close().IgnoreError();
-}
+PythonOutputStream::~PythonOutputStream() { Close().IgnoreError(); }
-util::Status SimpleOutputStreamAdapter::Close() {
+util::Status PythonOutputStream::Close() {
if (!status_.ok()) return status_;
if (count_in_buffer_ > 0) {
// Try to write the remaining bytes.
int written = 0;
while (written < count_in_buffer_) {
- auto write_result = stream_->Write(absl::string_view(buffer_).substr(
+ auto write_result = adapter_->Write(absl::string_view(buffer_).substr(
written, count_in_buffer_ - written));
if (!write_result.ok()) return write_result.status();
written += write_result.ValueOrDie();
}
}
- status_ = stream_->Close();
+ status_ = adapter_->Close();
if (!status_.ok()) return status_;
status_ = util::Status(util::error::FAILED_PRECONDITION, "Stream closed");
return util::OkStatus();
}
-int64_t SimpleOutputStreamAdapter::Position() const { return position_; }
+int64_t PythonOutputStream::Position() const { return position_; }
} // namespace tink
} // namespace crypto
diff --git a/python/cc/simple_output_stream_adapter.h b/python/cc/python_output_stream.h
similarity index 67%
rename from python/cc/simple_output_stream_adapter.h
rename to python/cc/python_output_stream.h
index 1d73f22..f289ddb 100644
--- a/python/cc/simple_output_stream_adapter.h
+++ b/python/cc/python_output_stream.h
@@ -12,29 +12,29 @@
//
///////////////////////////////////////////////////////////////////////////////
-#ifndef TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
-#define TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
+#ifndef TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
+#define TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
#include <memory>
#include "tink/output_stream.h"
#include "tink/util/status.h"
#include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
namespace crypto {
namespace tink {
-// An OutputStream that writes to a SimpleOutputStream.
-class SimpleOutputStreamAdapter : public crypto::tink::OutputStream {
+// An OutputStream that writes to a PythonFileObjectAdapter.
+class PythonOutputStream : public OutputStream {
public:
- // Constructs an OutputStream that will write to the SimpleOutputStream
- // specified via 'stream', using a buffer of the specified size, if any
+ // Constructs an OutputStream that will write to the PythonFileObjectAdapter
+ // specified via 'adapter', using a buffer of the specified size, if any
// (if 'buffer_size' <= 0, a reasonable default will be used).
- explicit SimpleOutputStreamAdapter(std::unique_ptr<SimpleOutputStream> stream,
- int buffer_size = 0);
+ explicit PythonOutputStream(std::unique_ptr<PythonFileObjectAdapter> adapter,
+ int buffer_size = 0);
- ~SimpleOutputStreamAdapter() override;
+ ~PythonOutputStream() override;
crypto::tink::util::StatusOr<int> Next(void** data) override;
@@ -46,7 +46,7 @@
private:
util::Status status_;
- std::unique_ptr<SimpleOutputStream> stream_;
+ std::unique_ptr<PythonFileObjectAdapter> adapter_;
std::string buffer_;
bool is_first_call_;
int64_t position_; // current position in the underlying stream (from the
@@ -60,4 +60,4 @@
} // namespace tink
} // namespace crypto
-#endif // TINK_PYTHON_CC_SIMPLE_OUTPUT_STREAM_ADAPTER_H_
+#endif // TINK_PYTHON_CC_PYTHON_OUTPUT_STREAM_H_
diff --git a/python/cc/simple_output_stream_adapter_test.cc b/python/cc/python_output_stream_test.cc
similarity index 87%
rename from python/cc/simple_output_stream_adapter_test.cc
rename to python/cc/python_output_stream_test.cc
index b2e5efc..6ac4a3e 100644
--- a/python/cc/simple_output_stream_adapter_test.cc
+++ b/python/cc/python_output_stream_test.cc
@@ -12,7 +12,7 @@
//
///////////////////////////////////////////////////////////////////////////////
-#include "tink/python/cc/simple_output_stream_adapter.h"
+#include "tink/python/cc/python_output_stream.h"
#include <memory>
@@ -23,14 +23,14 @@
#include "tink/subtle/random.h"
#include "tink/util/status.h"
#include "tink/util/statusor.h"
-#include "tink/python/cc/simple_output_stream.h"
+#include "tink/python/cc/python_file_object_adapter.h"
namespace crypto {
namespace tink {
namespace {
-// SimpleOutputStream for testing.
-class TestSimpleOutputStream : public SimpleOutputStream {
+// PythonFileObjectAdapter for testing.
+class TestPythonFileObjectAdapter : public PythonFileObjectAdapter {
public:
util::StatusOr<int> Write(absl::string_view data) override {
buffer_ += std::string(data);
@@ -39,8 +39,6 @@
util::Status Close() override { return util::OkStatus(); }
- int64_t Position() const override { return buffer_.size(); }
-
std::string* GetBuffer() { return &buffer_; }
private:
@@ -50,7 +48,7 @@
// Writes 'contents' to the specified 'output_stream', and closes the stream.
// Returns the status of output_stream->Close()-operation, or a non-OK status
// of a prior output_stream->Next()-operation, if any.
-util::Status WriteToStream(SimpleOutputStreamAdapter* output_stream,
+util::Status WriteToStream(PythonOutputStream* output_stream,
absl::string_view contents) {
void* buffer;
int pos = 0;
@@ -72,14 +70,14 @@
return output_stream->Close();
}
-TEST(SimpleOutputStreamAdapterTest, WritingStreams) {
+TEST(PythonOutputStreamTest, WritingStreams) {
for (size_t stream_size : {0, 10, 100, 1000, 10000, 100000, 1000000}) {
SCOPED_TRACE(absl::StrCat("stream_size = ", stream_size));
std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
- auto output = absl::make_unique<TestSimpleOutputStream>();
+ auto output = absl::make_unique<TestPythonFileObjectAdapter>();
std::string* output_buffer = output->GetBuffer();
auto output_stream =
- absl::make_unique<SimpleOutputStreamAdapter>(std::move(output));
+ absl::make_unique<PythonOutputStream>(std::move(output));
auto status = WriteToStream(output_stream.get(), stream_contents);
EXPECT_TRUE(status.ok()) << status;
EXPECT_EQ(stream_size, output_buffer->size());
@@ -87,15 +85,15 @@
}
}
-TEST(SimpleOutputStreamAdapterTest, CustomBufferSizes) {
+TEST(PythonOutputStreamTest, CustomBufferSizes) {
int stream_size = 1024 * 1024;
std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
for (int buffer_size : {1, 10, 100, 1000, 10000, 100000, 1000000}) {
SCOPED_TRACE(absl::StrCat("buffer_size = ", buffer_size));
- auto output = absl::make_unique<TestSimpleOutputStream>();
+ auto output = absl::make_unique<TestPythonFileObjectAdapter>();
std::string* output_buffer = output->GetBuffer();
- auto output_stream = absl::make_unique<SimpleOutputStreamAdapter>(
- std::move(output), buffer_size);
+ auto output_stream =
+ absl::make_unique<PythonOutputStream>(std::move(output), buffer_size);
void* buffer;
auto next_result = output_stream->Next(&buffer);
EXPECT_TRUE(next_result.ok()) << next_result.status();
@@ -108,17 +106,17 @@
}
}
-TEST(SimpleOutputStreamAdapterTest, BackupAndPosition) {
+TEST(PythonOutputStreamTest, BackupAndPosition) {
int stream_size = 1024 * 1024;
int buffer_size = 1234;
void* buffer;
std::string stream_contents = subtle::Random::GetRandomBytes(stream_size);
- auto output = absl::make_unique<TestSimpleOutputStream>();
+ auto output = absl::make_unique<TestPythonFileObjectAdapter>();
std::string* output_buffer = output->GetBuffer();
// Prepare the stream and do the first call to Next().
- auto output_stream = absl::make_unique<SimpleOutputStreamAdapter>(
- std::move(output), buffer_size);
+ auto output_stream =
+ absl::make_unique<PythonOutputStream>(std::move(output), buffer_size);
EXPECT_EQ(0, output_stream->Position());
auto next_result = output_stream->Next(&buffer);
EXPECT_TRUE(next_result.ok()) << next_result.status();
diff --git a/python/util/file_object_adapter.py b/python/util/file_object_adapter.py
index 88b8c18..47461e5 100644
--- a/python/util/file_object_adapter.py
+++ b/python/util/file_object_adapter.py
@@ -11,8 +11,8 @@
# limitations under the License.
"""FileObjectAdapter class.
-Used in conjunction with SimpleOutputStreamAdapter to allow a C++ OutputStream
-to write to a Python file-like objects.
+Used in conjunction with PythonOutputStream to allow a C++ OutputStream
+to write to a Python file-like object.
"""
from __future__ import absolute_import
@@ -23,11 +23,11 @@
import io
from typing import BinaryIO
-from tink.python.cc.clif import simple_output_stream
+from tink.python.cc.clif import python_file_object_adapter
-class FileObjectAdapter(simple_output_stream.SimpleOutputStream):
- """Wraps a Python file object to SimpleOutputStream for use in C++."""
+class FileObjectAdapter(python_file_object_adapter.PythonFileObjectAdapter):
+ """Adapts a Python file object for use in C++."""
def __init__(self, file_object: BinaryIO):
if not file_object.writable():
@@ -44,6 +44,3 @@
def close(self) -> None:
self._file_object.close()
-
- def position(self) -> int:
- return self._file_object.tell()
diff --git a/python/util/file_object_adapter_test.py b/python/util/file_object_adapter_test.py
index e49a053..15ff5c3 100644
--- a/python/util/file_object_adapter_test.py
+++ b/python/util/file_object_adapter_test.py
@@ -28,7 +28,6 @@
file_object = io.BytesIO()
adapter = file_object_adapter.FileObjectAdapter(file_object)
self.assertEqual(9, adapter.write(b'something'))
- self.assertEqual(9, adapter.position())
self.assertEqual(b'something', file_object.getvalue())
adapter.close()
@@ -47,16 +46,6 @@
adapter.close()
self.assertRaises(ValueError, adapter.write, b'something')
- def test_position(self):
- file_object = io.BytesIO()
- adapter = file_object_adapter.FileObjectAdapter(file_object)
- self.assertEqual(0, adapter.position())
- self.assertEqual(9, adapter.write(b'something'))
- self.assertEqual(9, adapter.position())
- self.assertEqual(3, adapter.write(b'123'))
- self.assertEqual(12, adapter.position())
- adapter.close()
-
def test_non_writable(self):
file_object = mock.Mock()
file_object.writable = mock.Mock(return_value=False)