Skip to content

Commit c531a4b

Browse files
authored
[DAPS-1847] - refactor: python package to be compatible with proto3 envelope (#1849)
* [DAPS-1848] - refactor: update authz files to use proto3. (#1851) * [DAPS-1850] - refactor web server proto3 (#1852)
1 parent 8fd5911 commit c531a4b

File tree

20 files changed

+476
-419
lines changed

20 files changed

+476
-419
lines changed

CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,8 @@ endif()
128128
if( BUILD_WEB_SERVER )
129129
include(./cmake/Web.cmake)
130130

131-
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/common/proto/common/"
132-
DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/web/proto/")
131+
file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/common/proto3/common/"
132+
DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/web/proto3/")
133133

134134
if( ENABLE_UNIT_TESTS )
135135
add_test(NAME unit_tests_web COMMAND "${DEPENDENCY_INSTALL_PATH}/nvm/versions/node/${LOCAL_NODE_VERSION}/bin/npm" "test")
@@ -199,7 +199,7 @@ endif()
199199

200200
if( BUILD_PYTHON_CLIENT )
201201
# make target = pydatafed
202-
file(COPY ${PROJECT_SOURCE_DIR}/external/DataFedDependencies/python/datafed_pkg/requirements.txt DESTINATION ${PROJECT_SOURCE_DIR}/python/datafed_pkg/requirements.txt)
202+
file(COPY ${PROJECT_SOURCE_DIR}/external/DataFedDependencies/python/datafed_pkg/requirements.txt DESTINATION ${PROJECT_SOURCE_DIR}/python/datafed_pkg)
203203
add_subdirectory( python EXCLUDE_FROM_ALL )
204204
endif()
205205

@@ -227,9 +227,9 @@ if( INSTALL_CORE_SERVER )
227227
endif()
228228

229229
if( INSTALL_WEB_SERVER )
230-
install( FILES ${ProtoFiles} DESTINATION ${DATAFED_INSTALL_PATH}/web )
231230
install( DIRECTORY ${PROJECT_SOURCE_DIR}/web/static DESTINATION ${DATAFED_INSTALL_PATH}/web )
232231
install( DIRECTORY ${PROJECT_SOURCE_DIR}/web/views DESTINATION ${DATAFED_INSTALL_PATH}/web )
232+
install( DIRECTORY ${PROJECT_SOURCE_DIR}/web/proto3 DESTINATION ${DATAFED_INSTALL_PATH}/web )
233233
install( FILES ${PROJECT_SOURCE_DIR}/web/version.js DESTINATION ${DATAFED_INSTALL_PATH}/web )
234234
endif()
235235

docker/Dockerfile.runtime

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ COPY ./scripts/dependency_versions.sh ${BUILD_DIR}/scripts/
2727
RUN mkdir -p ${DATAFED_DIR}
2828
RUN mkdir -p /opt/datafed
2929
RUN mkdir -p /var/log/datafed
30+
RUN mkdir -p /opt/datafed/logs
3031
RUN chown -R datafed:root /opt/datafed
3132
RUN chown -R datafed:root /var/log/datafed
3233
RUN chown -R datafed:root ${DATAFED_DIR}

python/datafed_pkg/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,4 @@ endforeach()
3535
add_subdirectory( datafed )
3636

3737
add_custom_target( pydatafed )
38-
add_dependencies( pydatafed pydatafed_src)
38+
add_dependencies( pydatafed pydatafed_proto_src)

python/datafed_pkg/datafed/CLI.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
from prompt_toolkit.history import FileHistory
3535
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
3636

37-
# from . import SDMS_Auth_pb2 as auth
38-
from . import Version_pb2
3937
from . import CommandLib
4038
from . import Config
4139
from . import VERSION
@@ -162,14 +160,14 @@ def run():
162160
except _NoCommand as e:
163161
# Be nice and switch to interactive when no command given
164162
if _interactive and _first:
165-
api_version = f"{Version_pb2.DATAFED_COMMON_PROTOCOL_API_MAJOR}."
166-
api_version += f"{Version_pb2.DATAFED_COMMON_PROTOCOL_API_MINOR}."
167-
api_version += f"{Version_pb2.DATAFED_COMMON_PROTOCOL_API_PATCH}"
168-
release_version = f"{Version_pb2.DATAFED_RELEASE_YEAR}."
169-
release_version += f"{Version_pb2.DATAFED_RELEASE_MONTH}."
170-
release_version += f"{Version_pb2.DATAFED_RELEASE_DAY}."
171-
release_version += f"{Version_pb2.DATAFED_RELEASE_HOUR}."
172-
release_version += f"{Version_pb2.DATAFED_RELEASE_MINUTE}"
163+
api_version = f"{VERSION.DATAFED_COMMON_PROTOCOL_API_MAJOR}."
164+
api_version += f"{VERSION.DATAFED_COMMON_PROTOCOL_API_MINOR}."
165+
api_version += f"{VERSION.DATAFED_COMMON_PROTOCOL_API_PATCH}"
166+
release_version = f"{VERSION.DATAFED_RELEASE_YEAR}."
167+
release_version += f"{VERSION.DATAFED_RELEASE_MONTH}."
168+
release_version += f"{VERSION.DATAFED_RELEASE_DAY}."
169+
release_version += f"{VERSION.DATAFED_RELEASE_HOUR}."
170+
release_version += f"{VERSION.DATAFED_RELEASE_MINUTE}"
173171
_print_msg(1, f"Welcome to DataFed CLI, version {VERSION.__version__}")
174172
_print_msg(
175173
1, " Release, version {}".format(release_version)
Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,60 @@
1-
cmake_minimum_required (VERSION 3.17.0)
1+
cmake_minimum_required(VERSION 3.17.0)
22

33
# Copy py source to build package source dir
4-
file( GLOB SrcFiles ${CMAKE_CURRENT_SOURCE_DIR}/*.py )
4+
file(GLOB SrcFiles ${CMAKE_CURRENT_SOURCE_DIR}/*.py)
55
foreach(file ${SrcFiles})
6-
configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY )
6+
configure_file(${file} ${CMAKE_CURRENT_BINARY_DIR} COPYONLY)
77
endforeach()
88

9-
# Collect top-level proto files as dependencies
10-
file( GLOB ProtoFiles ${DataFed_SOURCE_DIR}/common/proto/common/*.proto )
9+
# Collect proto files from the new 1-1-1 directory structure
10+
file(GLOB_RECURSE ProtoFiles ${DataFed_SOURCE_DIR}/common/proto3/common/*.proto)
1111

1212
# OBJECT - is needed because we don't want to compile to a binary
1313
# because we are dealing with python
1414
add_library(protobuf-target-py OBJECT ${ProtoFiles})
15+
1516
protobuf_generate(
1617
LANGUAGE python
1718
TARGET protobuf-target-py
18-
IMPORT_DIRS "${DataFed_SOURCE_DIR}/common/proto/common"
19+
IMPORT_DIRS "${DataFed_SOURCE_DIR}/common/proto3/common"
1920
OUT_VAR protobuf-generated-files-py
2021
PROTOC_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}"
21-
)
22-
23-
add_custom_target( pydatafed_src DEPENDS protobuf-target-py )
24-
25-
# By default this will output the proto py files in the CMAKE BINARY DIR
26-
add_custom_command( TARGET pydatafed_src POST_BUILD
27-
COMMAND sed -i -r 's:^import.*_pb2:from . \\0:' ${protobuf-generated-files-py}
28-
COMMAND ${DataFed_SOURCE_DIR}/python/pyproto_add_msg_idx.py ${DataFed_SOURCE_DIR}/common/proto/common/SDMS_Anon.proto ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Anon_pb2.py
29-
COMMAND ${DataFed_SOURCE_DIR}/python/pyproto_add_msg_idx.py ${DataFed_SOURCE_DIR}/common/proto/common/SDMS_Auth.proto ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Auth_pb2.py
30-
)
31-
32-
# Crea#te copies of the files so they show up in the source folder as well
33-
# for the purpose of testing
34-
add_custom_target( pydatafed_proto_src DEPENDS pydatafed_src )
35-
add_custom_command( TARGET pydatafed_proto_src POST_BUILD pydatafed_src
36-
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Auth_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/
37-
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/
38-
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/Version_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/
39-
COMMAND cp ${CMAKE_CURRENT_BINARY_DIR}/SDMS_Anon_pb2.py ${CMAKE_CURRENT_SOURCE_DIR}/
4022
)
4123

24+
add_custom_target(pydatafed_src DEPENDS protobuf-target-py)
25+
26+
# Proto subdirectories that protoc generates imports for
27+
set(PROTO_SUBDIRS anon auth enums messages)
28+
29+
# Fix imports in generated pb2 files to use relative imports within the package.
30+
# protoc generates absolute imports like:
31+
# from anon import ack_reply_pb2 as ...
32+
# from enums import error_code_pb2 as ...
33+
# import envelope_pb2 as ...
34+
# These must become relative imports:
35+
# from .anon import ack_reply_pb2 as ...
36+
# from .enums import error_code_pb2 as ...
37+
# from . import envelope_pb2 as ...
4238

39+
# Create the import fixup script
40+
add_custom_command(TARGET pydatafed_src POST_BUILD
41+
COMMAND sh ${DataFed_SOURCE_DIR}/python/datafed_pkg/scripts/fix_proto_imports.sh ${CMAKE_CURRENT_BINARY_DIR}
42+
COMMENT "Rewriting protobuf imports to relative"
43+
)
44+
45+
# Copy generated files back to source tree for testing
46+
add_custom_target(pydatafed_proto_src DEPENDS pydatafed_src)
47+
add_custom_command(TARGET pydatafed_proto_src POST_BUILD
48+
COMMAND ${CMAKE_COMMAND} -E copy
49+
${CMAKE_CURRENT_BINARY_DIR}/envelope_pb2.py
50+
${CMAKE_CURRENT_SOURCE_DIR}/
51+
# Copy subdirectories back to source for testing
52+
COMMAND ${CMAKE_COMMAND} -E copy_directory
53+
${CMAKE_CURRENT_BINARY_DIR}/anon ${CMAKE_CURRENT_SOURCE_DIR}/anon
54+
COMMAND ${CMAKE_COMMAND} -E copy_directory
55+
${CMAKE_CURRENT_BINARY_DIR}/auth ${CMAKE_CURRENT_SOURCE_DIR}/auth
56+
COMMAND ${CMAKE_COMMAND} -E copy_directory
57+
${CMAKE_CURRENT_BINARY_DIR}/enums ${CMAKE_CURRENT_SOURCE_DIR}/enums
58+
COMMAND ${CMAKE_COMMAND} -E copy_directory
59+
${CMAKE_CURRENT_BINARY_DIR}/messages ${CMAKE_CURRENT_SOURCE_DIR}/messages
60+
)

0 commit comments

Comments
 (0)