예제 #1
0
    def deserialize(doc):
        brl = BRLUser(doc[User.SERIAL_ID_KEY])
        user = User(brl)
        user._encrypted_password = doc[User.SERIAL_ENCRYPTED_PASSWORD]
        user.password_timestamp = doc.get(User.SERIAL_PASSWORD_TIMESTAMP, None)

        if User.SERIAL_NUMERIC_ID in doc:
            user.numeric_id = ID.deserialize(doc[User.SERIAL_NUMERIC_ID])

        # Profile fields
        user.firstname = doc.get(User.SERIAL_FIRSTNAME, None)
        user.lastname = doc.get(User.SERIAL_LASTNAME, None)
        user.country = doc.get(User.SERIAL_COUNTRY, None)
        user.description = doc.get(User.SERIAL_DESCRIPTION, None)
        user.email = doc.get(User.SERIAL_EMAIL, None)
        user.visible_email = doc.get(User.SERIAL_VISIBLE_EMAIL, 0) == 1
        user.allow_mailing = doc.get(User.SERIAL_ALLOW_MAILING, 0) == 1
        user.active = doc.get(User.SERIAL_ACTIVE, 0) == 1
        user.staff = doc.get(User.SERIAL_STAFF, 0) == 1
        user.joined_date = UtcDatetime.deserialize(
            doc.get(User.SERIAL_JOINED_DATE, None))
        user.confirmation_date = UtcDatetime.deserialize(
            doc.get(User.SERIAL_CONFIRMATION_DATE, None))
        user.confirmation_token = doc.get(User.SERIAL_CONFIRMATION_TOKEN, None)
        # Old workspace methods
        user.block_counter = doc.get(User.SERIAL_MOD_COUNTER, 0)
        blocks_data = doc.get(User.SERIAL_BLOCKS, {})
        user.blocks = DictDeserializer(
            BRLBlock, BlockMetaInfoDeserializer).deserialize(blocks_data)
        user.administrators = Permissions.deserialize(
            doc.get(User.SERIAL_ADMINISTRATORS, {}))
        social_accounts_doc = doc.get(User.SERIAL_SOCIAL_ACCOUNTS)
        user.social_accounts = DictDeserializer(
            str, SocialAccount).deserialize(social_accounts_doc)

        # Achievements
        user.read_api_counter = doc.get(User.SERIAL_READ_API_COUNTER, 0)
        user.publish_counter = doc.get(User.SERIAL_PUBLISH_COUNTER, 0)
        user.reuse_counter = doc.get(User.SERIAL_REUSE_COUNTER, 0)

        # Additional profile fields
        user.street_1 = doc.get(User.SERIAL_STREET1, "")
        user.street_2 = doc.get(User.SERIAL_STREET2, "")
        user.city = doc.get(User.SERIAL_CITY, "")
        user.postal_code = doc.get(User.SERIAL_POSTAL_CODE, "")
        user.region = doc.get(User.SERIAL_REGION, "")
        user.tax_id = doc.get(User.SERIAL_TAX_ID, "")
        user.vat = doc.get(User.SERIAL_VAT, "")

        # OAuth
        user.oauth_github_token = doc.get(User.SERIAL_OAUTH_GITHUB_TOKEN, None)
        user.oauth_google_token = doc.get(User.SERIAL_OAUTH_GOOGLE_TOKEN, None)

        # Max workspace size, default BII_MAX_USER_WORKSPACE_SIZE
        user.max_workspace_size = doc.get(User.SERIAL_MAX_WORKSPACE_SIZE,
                                          BII_MAX_USER_WORKSPACE_SIZE)

        # Invited by
        user.invited_by = doc.get(User.SERIAL_INVITED_BY, None)
        return user
예제 #2
0
 def deserialize(data):
     '''From dictionary to object Publish Pack'''
     pp = PublishRequest()
     pp.parent = BlockVersion.deserialize(
         data[PublishRequest.SERIAL_TRACKED_KEY])
     pp.parent_time = data[PublishRequest.SERIAL_PARENT_DATETIME]
     pp.tag = VersionTag.deserialize(data[PublishRequest.SERIAL_TAG_KEY])
     pp.msg = data[PublishRequest.SERIAL_MSG_KEY]
     # Backward client compatibility
     pp.versiontag = data.get(PublishRequest.SERIAL_VTAG_KEY, None)
     pp.deptable = BlockVersionTable.deserialize(
         data[PublishRequest.SERIAL_DEP_TABLE])
     pp.cells = ListDeserializer(CellDeserializer(BlockCellName)).\
                         deserialize(data[PublishRequest.SERIAL_CELLS_KEY])
     pp.deleted = ListDeserializer(CellName).\
                         deserialize(data[PublishRequest.SERIAL_DELETED_KEY])
     pp.renames = Renames.deserialize(
         data[PublishRequest.SERIAL_RENAMES_KEY])
     pp.contents = DictDeserializer(CellName, ContentDeserializer(BlockCellName)).\
                     deserialize(data[PublishRequest.SERIAL_CONTENTS_KEY])
     pp.contents_ids = DictDeserializer(CellName, ID).\
                         deserialize(data[PublishRequest.SERIAL_CONTENTS_ID_KEY])
     # Backward client compatibility
     pp.origin = OriginInfo.deserialize(
         data.get(PublishRequest.SERIAL_ORIGIN_INFO, None))
     return pp
예제 #3
0
 def deserialize(data):
     d = DictDeserializer(
         BlockVersion,
         DictDeserializer(Declaration,
                          SetDeserializer(BlockCellName))).deserialize(data)
     result = ReferencedDependencies()
     result.update(d)
     return result
예제 #4
0
 def deserialize(data):
     d = DictDeserializer(
         BlockVersion,
         DictDeserializer(
             CellName,
             ResourceDeserializer(
                 CellDeserializer(ID),
                 ContentDeserializer(ID)))).deserialize(data)
     result = ReferencedResources()
     result.update(d)
     return result
예제 #5
0
 def deserialize(self, data, kls=None):
     """From dictionary to object Changes"""
     kls = kls or Changes
     #NOTE: ID always is CellName, and values are text tuples, if not, we cant deserialize
     ret = kls()
     ret.deleted = self.dict_values_deserializer.deserialize(data[Changes.SERIAL_DELETED_KEY])
     renames_deserializer = DictDeserializer(self.keys_deserializer, self.keys_deserializer)
     ret.renames = renames_deserializer.deserialize(data[Changes.SERIAL_RENAMES_KEY])
     ret.created = self.dict_values_deserializer.deserialize(data[Changes.SERIAL_CREATED_KEY])
     #ret.modified = self.values_deserializer.deserialize(data[Changes.SERIAL_MODIFIED_KEY])
     mod_deserial = DictDeserializer(self.keys_deserializer,
                                     ModificationDeserializer(self.values_deserializer))
     ret.modified = mod_deserial.deserialize(data[Changes.SERIAL_MODIFIED_KEY])
     ret.sim_limit = data[Changes.SERIAL_SIMLIMIT_KEY]
     return ret
예제 #6
0
 def deserialize(data):
     if data is None:
         return None
     d = DictDeserializer(BlockVersion,
                          SetDeserializer(CellName)).deserialize(data)
     result = References()
     result.update(d)
     return result
예제 #7
0
    def testDeserializeDict(self):
        brl = BlockCellName("user/block/path/file.h")
        brl2 = BlockCellName("user/block/path/file2.h")

        h = {brl.serialize(): "asasdasdasd",
             brl2.serialize(): "1123"
        }
        ret = DictDeserializer(BlockCellName, str).deserialize(h)
        self.assertEqual(ret, {'user/block/path/file.h': 'asasdasdasd',
                               'user/block/path/file2.h': '1123'})

        h = {brl.serialize(): brl.serialize(),
             brl2.serialize(): brl.serialize()
        }

        ret = DictDeserializer(BlockCellName, BlockCellName).deserialize(h)
        self.assertEqual(ret,
                         {'user/block/path/file.h': 'user/block/path/file.h',
                          'user/block/path/file2.h': 'user/block/path/file.h'}
                        )
예제 #8
0
class ChangesDeserializer(object):
    def __init__(self, keys_deserializer, values_deserializer):
        self.keys_deserializer = keys_deserializer
        self.values_deserializer = values_deserializer
        self.dict_values_deserializer = DictDeserializer(keys_deserializer, values_deserializer)

    def deserialize(self, data, kls=None):
        """From dictionary to object Changes"""
        kls = kls or Changes
        #NOTE: ID always is CellName, and values are text tuples, if not, we cant deserialize
        ret = kls()
        ret.deleted = self.dict_values_deserializer.deserialize(data[Changes.SERIAL_DELETED_KEY])
        renames_deserializer = DictDeserializer(self.keys_deserializer, self.keys_deserializer)
        ret.renames = renames_deserializer.deserialize(data[Changes.SERIAL_RENAMES_KEY])
        ret.created = self.dict_values_deserializer.deserialize(data[Changes.SERIAL_CREATED_KEY])
        #ret.modified = self.values_deserializer.deserialize(data[Changes.SERIAL_MODIFIED_KEY])
        mod_deserial = DictDeserializer(self.keys_deserializer,
                                        ModificationDeserializer(self.values_deserializer))
        ret.modified = mod_deserial.deserialize(data[Changes.SERIAL_MODIFIED_KEY])
        ret.sim_limit = data[Changes.SERIAL_SIMLIMIT_KEY]
        return ret
예제 #9
0
    def deserialize(data):
        targets_deserializer = DependencySet.targets_deserializer
        declaration_deserializer = DependencySet.declaration_deserializer
        r = DependencySet()
        r.explicit = targets_deserializer.deserialize(
            data[DependencySet.SERIAL_EXPLICIT])
        r.implicit = targets_deserializer.deserialize(
            data[DependencySet.SERIAL_IMPLICIT])
        r.system = SetDeserializer(SystemCellName).deserialize(
            data[DependencySet.SERIAL_SYSTEM])
        r.resolved = declaration_deserializer.deserialize(
            data[DependencySet.SERIAL_RESOLVED])
        r.unresolved = declaration_deserializer.deserialize(
            data[DependencySet.SERIAL_UNRESOLVED])
        try:
            d = data[DependencySet.SERIAL_PROPERTIES]
            r.properties = DependenciesProperties.deserialize(d)
        except KeyError:
            pass

        try:
            d = data[DependencySet.SERIAL_PATHS]
            r.paths = DictDeserializer(int, str).deserialize(d)
        except KeyError:
            pass

        # This 2 latter are backward compatibility deserializations
        # TODO: Can be removed with a migration
        try:
            d = data[DependencySet.SERIAL_DATA]
            items = targets_deserializer.deserialize(d)
            for item in items:
                r.explicit.add(item)
                r.properties.add_property(item, DependenciesProperties.DATA)
        except KeyError:
            pass

        try:
            d = data[DependencySet.SERIAL_EXCLUDE]
            items = targets_deserializer.deserialize(d)
            for item in items:
                r.properties.add_property(
                    item, DependenciesProperties.EXCLUDE_FROM_BUILD)
        except KeyError:
            pass
        return r
예제 #10
0
 def test_deserialize_none(self):
     dd = DictDeserializer(str, str)
     self.assertIsNone(dd.deserialize(None))
예제 #11
0
 def deserialize(doc, block_id):
     m = AddressTable(block_id)
     tmp = DictDeserializer(CellName, TimeBaseMapDeserializer(ID)).deserialize(doc)
     m.update(tmp)
     return m
예제 #12
0
 def deserialize(data):
     return Renames(DictDeserializer(CellName, CellName).deserialize(data))
예제 #13
0
 def deserialize(data):
     if data is None:
         return None
     d = DictDeserializer(BlockCellName,
                          SetDeserializer(str)).deserialize(data)
     return DependenciesProperties(d)
예제 #14
0
 def deserialize(data):
     deserializer = DictDeserializer(str, str)
     return UserSettings(deserializer.deserialize(data))
예제 #15
0
 def __init__(self, keys_deserializer, values_deserializer):
     self.keys_deserializer = keys_deserializer
     self.values_deserializer = values_deserializer
     self.dict_values_deserializer = DictDeserializer(keys_deserializer, values_deserializer)
예제 #16
0
 def deserialize(data):
     deserializer = DictDeserializer(str, str)
     return UserSettings(deserializer.deserialize(data))