Skip to content

Commit

Permalink
Merge pull request #526 from tenable/feature/ad-base-schema-change
Browse files Browse the repository at this point in the history
Feature/ad base schema change
  • Loading branch information
SteveMcGrath authored Jan 19, 2022
2 parents c485cde + 3ce6580 commit 79f3f73
Showing 1 changed file with 18 additions and 11 deletions.
29 changes: 18 additions & 11 deletions tenable/ad/base/schema.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import Optional, List
from marshmallow import Schema, fields
from typing import Optional, List, Dict
from marshmallow import Schema, fields, pre_load


def camelcase(s):
Expand All @@ -15,8 +15,10 @@ def last_word_uppercase(s):
example_field -> exampleFIELD
'''
parts = s.split("_")
return parts[0] + "".join(i.title() for i in parts[1:len(parts) - 1]) + \
parts[-1].upper()
start = parts.pop(0)
last = parts.pop(-1).upper()
middle = "".join(i.title() for i in parts)
return f'{start}{middle}{last}'


def convert_keys_to_camel(data: dict,
Expand Down Expand Up @@ -58,13 +60,18 @@ class CamelCaseSchema(Schema):
"""

def on_bind_field(self, field_name, field_obj):
last_word_uppercase_field_names = ['search_user_dn']

if field_name in last_word_uppercase_field_names:
field_obj.data_key = last_word_uppercase(
field_obj.data_key or field_name)
else:
field_obj.data_key = camelcase(field_obj.data_key or field_name)
fn_mapping = getattr(self.Meta, 'case_convertors', {})
convertor = fn_mapping.get(field_name, camelcase)
field_obj.data_key = convertor(field_obj.data_key or field_name)

@pre_load
def convert_snake_to_camel(self, data, **kwargs) -> Dict:
resp = {}
fn_mapping = getattr(self.Meta, 'case_convertors', {})
for key, value in data.items():
convertor = fn_mapping.get(key, camelcase)
resp[convertor(key)] = value
return resp


class BoolInt(fields.Boolean):
Expand Down

0 comments on commit 79f3f73

Please sign in to comment.