Skip to content

Commit

Permalink
Revert "fix: ScalarMapContainer not found in protobuf dependency (Win…
Browse files Browse the repository at this point in the history
…dows only)"

This reverts commit 7d469f5.
  • Loading branch information
Sieboldianus committed Mar 18, 2022
1 parent 1cf34e8 commit f847758
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 4 deletions.
10 changes: 10 additions & 0 deletions lbsntransform/output/submit_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -584,6 +584,16 @@ def sort_clean_proto_repeated_field(cls, record):
ProtocolBuffers has no unique list field type. This function will
remove duplicates, which is needed for unique compare.
There is a 'bug' in Python implementation of ProtocolBuffers:
- depending on the implementation type in use, it is possible
to spot either 'RepeatedCompositeFieldContainer'
or 'RepeatedCompositeContainer'
- solution here: import and compare to both types
- this is not ideal, since both types are internal to PB and
subject to change
- see [proto-bug](https://github.com/protocolbuffers/
protobuf/issues/3870)
"""
for descriptor in record.DESCRIPTOR.fields:
if descriptor.label == descriptor.LABEL_REPEATED:
Expand Down
26 changes: 22 additions & 4 deletions lbsntransform/tools/helper_functions.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import importlib.util
import json
import logging
# due to different protocol buffers implementations on Unix, MacOS and Windows
# import types based on OS
import platform
import re
import string
from datetime import timezone
Expand All @@ -18,14 +21,24 @@

import emoji
import regex
from google.protobuf.internal.containers import \
RepeatedCompositeFieldContainer, ScalarMap # pylint: disable=no-name-in-module
from google.protobuf.timestamp_pb2 import Timestamp
from lbsnstructure import lbsnstructure_pb2 as lbsn
from lbsntransform.output.shared_structure import Coordinates
from shapely import geos, wkt
from shapely.geometry import Point, Polygon

PLATFORM_SYS = platform.system()
if PLATFORM_SYS == 'Linux':
from google.protobuf.pyext._message import \
RepeatedCompositeContainer # pylint: disable=no-name-in-module
from google.protobuf.pyext._message import \
ScalarMapContainer # pylint: disable=no-name-in-module
else:
from google.protobuf.internal.containers import \
RepeatedCompositeFieldContainer # pylint: disable=no-name-in-module
from google.protobuf.internal.containers import \
ScalarMapContainer # pylint: disable=no-name-in-module

NLTK_AVAIL = True
try:
# check if nltk is installed
Expand Down Expand Up @@ -686,14 +699,19 @@ def empty_list(list_str):
@staticmethod
def is_composite_field_container(in_obj):
"""Checks whether in_obj is of type RepeatedCompositeFieldContainer"""
if PLATFORM_SYS == 'Linux':
if isinstance(
in_obj, (RepeatedCompositeContainer, ScalarMapContainer)):
return True
return False
if isinstance(
in_obj, (RepeatedCompositeFieldContainer, ScalarMap)):
in_obj, (RepeatedCompositeFieldContainer, ScalarMapContainer)):
return True
return False

@staticmethod
def map_to_dict(proto_map):
"""Converts protobuf field map (ScalarMap)
"""Converts protobuf field map (ScalarMapContainer)
to Dictionary"""
if proto_map:
mapped_dict = dict(zip(proto_map.keys(), proto_map.values()))
Expand Down

0 comments on commit f847758

Please sign in to comment.