Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
nilbacardit26 committed Oct 10, 2023
1 parent 7b9fb5f commit 10c583c
Show file tree
Hide file tree
Showing 7 changed files with 17 additions and 19 deletions.
3 changes: 1 addition & 2 deletions guillotina/api/service.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
from guillotina.browser import View
from guillotina.component import query_utility
from guillotina.component.interfaces import IFactory
from guillotina.contrib.image.behaviors import IMultiImageOrderedAttachment
from guillotina.fields import CloudFileField
from guillotina.interfaces import IAsyncBehavior
from guillotina.interfaces import ICloudFileField
Expand Down Expand Up @@ -254,7 +253,7 @@ async def prepare(self):
if key is not None:
self.field = CloudFileField(__name__=name).bind(DictFieldProxy(key, ctx, name))
else:
self.field = field
self.field = field.bind(ctx)
elif ICloudFileField.providedBy(field):
self.field = field.bind(ctx)

Expand Down
1 change: 0 additions & 1 deletion guillotina/contrib/image/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,5 +150,4 @@ async def __call__(self):
class OrderMultiImage(TraversableFieldService):
async def __call__(self):
data = await self.request.json()
__import__("pdb").set_trace()
self.field.reorder_images(data)
6 changes: 3 additions & 3 deletions guillotina/contrib/image/behaviors.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from collections import OrderedDict as NativeOrderedDict
from guillotina.schema import OrderedDict
from guillotina.schema import Dict
from guillotina import configure
from guillotina.contrib.image.image import CloudImageFileField
from guillotina.schema import Dict
from guillotina.schema import OrderedDict
from guillotina.schema import TextLine
from zope.interface import Interface

Expand Down Expand Up @@ -48,5 +48,5 @@ class IMultiImageOrderedAttachment(Interface):
value_type=CloudImageFileField(),
default=NativeOrderedDict(),
missing_value=NativeOrderedDict(),
max_length=1000
max_length=1000,
)
2 changes: 1 addition & 1 deletion guillotina/json/serialize_value.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# -*- coding: utf-8 -*-
from collections import OrderedDict
from datetime import date
from datetime import datetime
from datetime import time
Expand All @@ -10,7 +11,6 @@
from guillotina.interfaces import IValueToJson
from guillotina.profile import profilable
from guillotina.schema.vocabulary import SimpleVocabulary
from collections import OrderedDict


_MISSING = object()
Expand Down
4 changes: 2 additions & 2 deletions guillotina/schema/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@
from guillotina.schema._field import Datetime
from guillotina.schema._field import Decimal
from guillotina.schema._field import Dict
from guillotina.schema._field import OrderedDict
from guillotina.schema._field import DottedName
from guillotina.schema._field import Field
from guillotina.schema._field import Float
Expand All @@ -43,6 +42,7 @@
from guillotina.schema._field import NativeStringLine
from guillotina.schema._field import Object
from guillotina.schema._field import Orderable
from guillotina.schema._field import OrderedDict
from guillotina.schema._field import Password
from guillotina.schema._field import Set
from guillotina.schema._field import SourceText
Expand Down Expand Up @@ -72,7 +72,7 @@
Iterable, List, MaskTextLine, MinMaxLen, NativeString, NativeStringLine, Object, Orderable
Password, Set, SourceText, Text, TextLine, Time, Timedelta, Tuple, URI, UnionField
get_fields, get_fields_in_order, getFieldNames, getFieldNamesInOrder,
getValidationErrors, getSchemaValidationErrors, JSONField
getValidationErrors, getSchemaValidationErrors, JSONField, OrderedDict
accessors
ValidationError
NO_VALUE
19 changes: 10 additions & 9 deletions guillotina/schema/_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#
##############################################################################
from collections import namedtuple
from collections import OrderedDict as NativeOrderedDict
from datetime import date
from datetime import datetime
from datetime import time
Expand Down Expand Up @@ -51,7 +52,6 @@
from guillotina.schema.interfaces import IDatetime
from guillotina.schema.interfaces import IDecimal
from guillotina.schema.interfaces import IDict
from guillotina.schema.interfaces import IOrderedDict
from guillotina.schema.interfaces import IDottedName
from guillotina.schema.interfaces import IField
from guillotina.schema.interfaces import IFloat
Expand All @@ -66,6 +66,7 @@
from guillotina.schema.interfaces import IMinMaxLen
from guillotina.schema.interfaces import IObject
from guillotina.schema.interfaces import IObjectJSONField
from guillotina.schema.interfaces import IOrderedDict
from guillotina.schema.interfaces import IPassword
from guillotina.schema.interfaces import ISet
from guillotina.schema.interfaces import ISource
Expand All @@ -87,7 +88,6 @@
from zope.interface import Interface
from zope.interface.interfaces import IInterface
from zope.interface.interfaces import IMethod
from collections import OrderedDict as NativeOrderedDict

import decimal
import json
Expand Down Expand Up @@ -669,20 +669,21 @@ def bind(self, object):

@implementer(IOrderedDict)
class OrderedDict(Dict):
"""A field representing a Dict."""
"""A field representing an OrderedDict."""

_type = NativeOrderedDict

def reorder_images(self, payload):
data_field = self.get(self.context)
# payload is an ordered list of the keys
__import__("pdb").set_trace()
if isinstance(payload, list):
if len(payload) != len(self.images):
if len(payload) != len(data_field):
raise ValueError("Length of the payload must be equal to the field")
for key in payload:
if key not in self.images:
raise ValueError()
self.images.move_to_end(key)
self.register()
if key not in data_field:
raise ValueError("Key not found")
data_field.move_to_end(key)
self.set(self.context, data_field)


DEFAULT_JSON_SCHMEA = json.dumps({"type": "object", "properties": {}})
Expand Down
1 change: 0 additions & 1 deletion guillotina/tests/image/test_field.py
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,6 @@ async def test_multiimage_ordered_field_with_behavior(redis_container, container
assert status == 200

response, status = await requester("GET", "/db/guillotina/foobar")
__import__("pdb").set_trace()
behavior = response["guillotina.contrib.image.behaviors.IMultiImageOrderedAttachment"]
# First in first
keys_ordered = {"key2": 0, "key1": 1, "key0": 2, "key3": 3}
Expand Down

0 comments on commit 10c583c

Please sign in to comment.