Code Duplication    Length = 29-31 lines in 2 locations

src/senaite/core/z3cform/widgets/uidreference/widget.py 1 location

@@ 127-157 (lines=31) @@
124
        # just to be sure (paranoid)
125
        return [uid for uid in value if api.is_uid(uid)]
126
127
    def get_render_data(self, context, field, uid):
128
        """Provides the needed data to render the display template from the UID
129
130
        :returns: Dictionary with data needed to render the display template
131
        """
132
        regex = r"\{(.*?)\}"
133
        context = self.get_context()
134
        template = self.get_display_template(context, self.field)
135
        names = re.findall(regex, template)
136
137
        try:
138
            obj = api.get_object(uid)
139
        except api.APIError:
140
            logger.error("No object found for field '{}' with UID '{}'".format(
141
                field.getName(), uid))
142
            return {}
143
144
        data = {
145
            "uid": api.get_uid(obj),
146
            "url": api.get_url(obj),
147
            "Title": api.get_title(obj),
148
            "Description": api.get_description(obj),
149
        }
150
        for name in names:
151
            if name not in data:
152
                value = getattr(obj, name, None)
153
                if callable(value):
154
                    value = value()
155
                data[name] = value
156
157
        return data
158
159
160
@adapter(IUIDReferenceField, ISenaiteFormLayer)

src/senaite/core/browser/widgets/referencewidget.py 1 location

@@ 269-297 (lines=29) @@
266
            value = [value]
267
        return map(api.get_uid, value)
268
269
    def get_render_data(self, context, field, uid, template):
270
        """Provides the needed data to render the display template from the UID
271
272
        :returns: Dictionary with data needed to render the display template
273
        """
274
        regex = r"\{(.*?)\}"
275
        names = re.findall(regex, template)
276
277
        try:
278
            obj = api.get_object(uid)
279
        except api.APIError:
280
            logger.error("No object found for field '{}' with UID '{}'".format(
281
                field.getName(), uid))
282
            return {}
283
284
        data = {
285
            "uid": api.get_uid(obj),
286
            "url": api.get_url(obj),
287
            "Title": api.get_title(obj),
288
            "Description": api.get_description(obj),
289
        }
290
        for name in names:
291
            if name not in data:
292
                value = getattr(obj, name, None)
293
                if callable(value):
294
                    value = value()
295
                data[name] = value
296
297
        return data
298
299
    def render_reference(self, context, field, uid):
300
        """Returns a rendered HTML element for the reference