Exemplo n.º 1
0
def testing(request):
    translationgist=TranslationGist(client_id=1, type='Language')
    DBSession.add(translationgist)
    translationatom=TranslationAtom(client_id=1, parent=translationgist, locale_id=2, content='testing objecttoc')
    DBSession.add(translationatom)
    lang = Language(client_id=1, translation_gist_client_id=translationgist.client_id,
                    translation_gist_object_id=translationgist.object_id)
    DBSession.add(lang)
    DBSession.rollback()
    return {}
Exemplo n.º 2
0
def diff_desk(request):
    import base64
    from lingvodoc.models import categories
    from time import sleep
    client = DBSession.query(Client).filter_by(id=authenticated_userid(request)).first()
    if not client:
        request.response.status = HTTPNotFound.code
        return {'error': str("Try to login again")}
    user = DBSession.query(User).filter_by(id=client.user_id).first()
    if not user:
        request.response.status = HTTPNotFound.code
        return {'error': str("Try to login again")}
    settings = request.registry.settings
    existing = [row2dict(entry) for entry in DBSession.query(ObjectTOC)]
    central_server = settings['desktop']['central_server']
    path = central_server + 'sync/difference/server'
    server = make_request(path, 'post', existing).json()
    language = list()
    dictionary = list()
    perspective = list()
    field = list()
    dictionaryperspectivetofield = list()
    lexicalentry = list()
    entity = list()
    userblobs = list()
    translationgist = list()
    translationatom = list()
    for entry in server:
        if entry['table_name'] == 'language':
            language.append(entry)
        if entry['table_name'] == 'dictionary':
            dictionary.append(entry)
        if entry['table_name'] == 'dictionaryperspective':
            perspective.append(entry)
        if entry['table_name'] == 'dictionaryperspectivetofield':
            dictionaryperspectivetofield.append(entry)
        if entry['table_name'] == 'lexicalentry':
            lexicalentry.append(entry)
        if entry['table_name'] == 'entity':
            entity.append(entry)
        if entry['table_name'] == 'userblobs':
            userblobs.append(entry)
        if entry['table_name'] == 'translationgist':
            translationgist.append(entry)
        if entry['table_name'] == 'translationatom':
            translationatom.append(entry)
        if entry['table_name'] == 'field':
            field.append(entry)
    # todo: batches
    for group in DBSession.query(Group).filter_by(subject_client_id=authenticated_userid(request)).all():
        path = central_server + 'group'
        gr_req = row2dict(group)
        gr_req['users']=[user.id]
        status = make_request(path, 'post', gr_req)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in translationgist:
        desk_gist = DBSession.query(TranslationGist).filter_by(client_id=entry['client_id'],
                                                               object_id=entry['object_id']).one()
        path = central_server + 'translationgist'
        status = make_request(path, 'post', row2dict(desk_gist))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in translationatom:
        desk_atom = DBSession.query(TranslationAtom).filter_by(client_id=entry['client_id'],
                                                               object_id=entry['object_id']).one()
        path = central_server + 'translationatom'
        status = make_request(path, 'post', row2dict(desk_atom))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in language:
        desk_lang = DBSession.query(Language).filter_by(client_id=entry['client_id'],
                                                        object_id=entry['object_id']).one()
        path = central_server + 'language'
        status = make_request(path, 'post', row2dict(desk_lang))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in dictionary:
        desk_dict = DBSession.query(Dictionary).filter_by(client_id=entry['client_id'],
                                                          object_id=entry['object_id']).one()
        path = central_server + 'dictionary'
        desk_json = row2dict(desk_dict)
        desk_json['category'] = categories[desk_json['category']]
        status = make_request(path, 'post', desk_json)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in perspective:
        desk_persp = DBSession.query(DictionaryPerspective).filter_by(client_id=entry['client_id'],
                                                                      object_id=entry['object_id']).one()
        path = central_server + 'dictionary/%s/%s/perspective' % (
            desk_persp.parent_client_id, desk_persp.parent_object_id)
        status = make_request(path, 'post', row2dict(desk_persp))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in field:
        desk_field = DBSession.query(Field).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        path = central_server + 'field'
        status = make_request(path, 'post', row2dict(desk_field))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in dictionaryperspectivetofield:
        desk_field = DBSession.query(DictionaryPerspectiveToField).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        if desk_field.parent_client_id == client.id:
            persp = desk_field.parent
            path = central_server + 'dictionary/%s/%s/perspective/%s/%s/field' % (persp.parent_client_id,
                                                                                          persp.parent_object_id,
                                                                                          persp.client_id,
                                                                                          persp.object_id)
            status = make_request(path, 'post', row2dict(desk_field))
            if status.status_code != 200:
                request.response.status = HTTPInternalServerError.code
                return {'error': str("internet error")}
    for entry in lexicalentry:
        desk_lex = DBSession.query(LexicalEntry).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        persp = desk_lex.parent
        path = central_server + 'dictionary/%s/%s/perspective/%s/%s/lexical_entry' % (persp.parent_client_id,
                                                                                      persp.parent_object_id,
                                                                                      persp.client_id,
                                                                                      persp.object_id)
        status = make_request(path, 'post', row2dict(desk_lex))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    grouping_tags = dict()
    for entry in entity:
        desk_ent = DBSession.query(Entity).filter_by(client_id=entry['client_id'],
                                                     object_id=entry['object_id']).one()
        lex = desk_ent.parent
        persp = lex.parent
        path = central_server + 'dictionary/%s/%s/perspective/%s/%s/lexical_entry/%s/%s/entity' % (
            persp.parent_client_id,
            persp.parent_object_id,
            persp.client_id,
            persp.object_id,
            lex.client_id,
            lex.object_id)  # todo: normal content upload
        ent_req = row2dict(desk_ent)
        content = desk_ent.content
        filename = None
        if desk_ent.additional_metadata:
            data_type = desk_ent.additional_metadata.get('data_type')
            if data_type:
                data_type = data_type.lower()
                if data_type == 'image' or data_type == 'sound' or 'markup' in data_type:
                    full_name = desk_ent.content.split('/')
                    filename = full_name[len(full_name) - 1]
                    content = make_request(desk_ent.content)
                    if content.status_code != 200:
                        log.error(desk_ent.content)
                        DBSession.rollback()
                        request.response.status = HTTPInternalServerError.code
                        return {'error': str("internet error")}
                        # return

                    content = content.content
                    content = base64.urlsafe_b64encode(content)

        ent_req['content'] = content
        ent_req['filename'] = filename
        if desk_ent.field.data_type == 'Grouping Tag':
            field_ids = str(desk_ent.field.client_id) + '_' + str(desk_ent.field.object_id)
            if field_ids not in grouping_tags:
                grouping_tags[field_ids] = {'field_client_id': desk_ent.field.client_id,
                                            'field_object_id': desk_ent.field.object_id,
                                            'tag_groups': dict()}
            if desk_ent.content not in grouping_tags[field_ids]['tag_groups']:
                grouping_tags[field_ids]['tag_groups'][desk_ent.content] = [row2dict(desk_ent)]
            else:
                grouping_tags[field_ids]['tag_groups'][desk_ent.content].append(row2dict(desk_ent))
        else:

            status = make_request(path, 'post', ent_req)
            if status.status_code != 200:
                request.response.status = HTTPInternalServerError.code
                return {'error': str("internet error")}
    for entry in grouping_tags:
        path = central_server + 'group_entity/bulk'
        req = grouping_tags[entry]
        req['counter'] = client.counter
        status = make_request(path, 'post', req)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
        client.counter = status.json()['counter']
        DBSession.flush()
    for entry in userblobs:
        desk_blob = DBSession.query(UserBlobs).filter_by(client_id=entry['client_id'],
                                                         object_id=entry['object_id']).one()
        path = central_server + 'blob'
        data = {'object_id': desk_blob.object_id, 'data_type': desk_blob.data_type}
        files = {'blob': open(desk_blob.real_storage_path, 'rb')}

        status = make_request(path, 'post', data=data, files=files)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    return
Exemplo n.º 3
0
def diff_desk(request):
    import base64
    from lingvodoc.models import categories
    from time import sleep
    client = DBSession.query(Client).filter_by(id=authenticated_userid(request)).first()
    if not client:
        request.response.status = HTTPNotFound.code
        return {'error': str("Try to login again")}
    user = DBSession.query(User).filter_by(id=client.user_id).first()
    if not user:
        request.response.status = HTTPNotFound.code
        return {'error': str("Try to login again")}
    settings = request.registry.settings
    existing = [row2dict(entry) for entry in DBSession.query(ObjectTOC)]
    central_server = settings['desktop']['central_server']
    path = central_server + 'sync/difference/server'
    server = make_request(path, 'post', existing).json()
    language = list()
    dictionary = list()
    perspective = list()
    field = list()
    dictionaryperspectivetofield = list()
    lexicalentry = list()
    entity = list()
    userblobs = list()
    translationgist = list()
    translationatom = list()
    for entry in server:
        if entry['table_name'] == 'language':
            language.append(entry)
        if entry['table_name'] == 'dictionary':
            dictionary.append(entry)
        if entry['table_name'] == 'dictionaryperspective':
            perspective.append(entry)
        if entry['table_name'] == 'dictionaryperspectivetofield':
            dictionaryperspectivetofield.append(entry)
        if entry['table_name'] == 'lexicalentry':
            lexicalentry.append(entry)
        if entry['table_name'] == 'entity':
            entity.append(entry)
        if entry['table_name'] == 'userblobs':
            userblobs.append(entry)
        if entry['table_name'] == 'translationgist':
            translationgist.append(entry)
        if entry['table_name'] == 'translationatom':
            translationatom.append(entry)
        if entry['table_name'] == 'field':
            field.append(entry)
    # todo: batches
    for group in DBSession.query(Group).filter_by(subject_client_id=authenticated_userid(request)).all():
        path = central_server + 'group'
        gr_req = row2dict(group)
        gr_req['users']=[user.id]
        status = make_request(path, 'post', gr_req)
    for entry in translationgist:
        desk_gist = DBSession.query(TranslationGist).filter_by(client_id=entry['client_id'],
                                                               object_id=entry['object_id']).one()
        path = central_server + 'translationgist'
        make_request(path, 'post', row2dict(desk_gist))
    for entry in translationatom:
        desk_atom = DBSession.query(TranslationAtom).filter_by(client_id=entry['client_id'],
                                                               object_id=entry['object_id']).one()
        path = central_server + 'translationatom'
        make_request(path, 'post', row2dict(desk_atom))
    for entry in language:
        desk_lang = DBSession.query(Language).filter_by(client_id=entry['client_id'],
                                                        object_id=entry['object_id']).one()
        path = central_server + 'language'
        make_request(path, 'post', row2dict(desk_lang))
    for entry in dictionary:
        desk_dict = DBSession.query(Dictionary).filter_by(client_id=entry['client_id'],
                                                          object_id=entry['object_id']).one()
        path = central_server + 'dictionary'
        desk_json = row2dict(desk_dict)
        desk_json['category'] = categories[desk_json['category']]
        make_request(path, 'post', desk_json)
    for entry in perspective:
        desk_persp = DBSession.query(DictionaryPerspective).filter_by(client_id=entry['client_id'],
                                                                      object_id=entry['object_id']).one()
        path = central_server + 'dictionary/%s/%s/perspective' % (
            desk_persp.parent_client_id, desk_persp.parent_object_id)
        status = make_request(path, 'post', row2dict(desk_persp))
    for entry in field:
        desk_field = DBSession.query(Field).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        path = central_server + 'field'
        status = make_request(path, 'post', row2dict(desk_field))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    for entry in dictionaryperspectivetofield:
        desk_field = DBSession.query(DictionaryPerspectiveToField).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        if desk_field.parent_client_id == client.id:
            persp = desk_field.parent
            path = central_server + 'dictionary/%s/%s/perspective/%s/%s/field' % (persp.parent_client_id,
                                                                                          persp.parent_object_id,
                                                                                          persp.client_id,
                                                                                          persp.object_id)
            status = make_request(path, 'post', row2dict(desk_field))
            if status.status_code != 200:
                request.response.status = HTTPInternalServerError.code
                return {'error': str("internet error")}
    for entry in lexicalentry:
        desk_lex = DBSession.query(LexicalEntry).filter_by(client_id=entry['client_id'],
                                                           object_id=entry['object_id']).one()
        persp = desk_lex.parent
        path = central_server + 'dictionary/%s/%s/perspective/%s/%s/lexical_entry' % (persp.parent_client_id,
                                                                                      persp.parent_object_id,
                                                                                      persp.client_id,
                                                                                      persp.object_id)
        status = make_request(path, 'post', row2dict(desk_lex))
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    grouping_tags = dict()
    for entry in entity:
        desk_ent = DBSession.query(Entity).filter_by(client_id=entry['client_id'],
                                                     object_id=entry['object_id']).one()
        lex = desk_ent.parent
        persp = lex.parent
        path = central_server + 'dictionary/%s/%s/perspective/%s/%s/lexical_entry/%s/%s/entity' % (
            persp.parent_client_id,
            persp.parent_object_id,
            persp.client_id,
            persp.object_id,
            lex.client_id,
            lex.object_id)  # todo: normal content upload
        ent_req = row2dict(desk_ent)
        content = desk_ent.content
        filename = None
        if desk_ent.additional_metadata:
            data_type = desk_ent.additional_metadata.get('data_type')
            if data_type:
                data_type = data_type.lower()
                if data_type == 'image' or data_type == 'sound' or 'markup' in data_type:
                    full_name = desk_ent.content.split('/')
                    filename = full_name[len(full_name) - 1]
                    content = make_request(desk_ent.content)
                    if content.status_code != 200:
                        log.error(desk_ent.content)
                        DBSession.rollback()
                        request.response.status = HTTPInternalServerError.code
                        return {'error': str("internet error")}
                        # return

                    content = content.content
                    content = base64.urlsafe_b64encode(content)

        ent_req['content'] = content
        ent_req['filename'] = filename
        if desk_ent.field.data_type == 'Grouping Tag':
            field_ids = str(desk_ent.field.client_id) + '_' + str(desk_ent.field.object_id)
            if field_ids not in grouping_tags:
                grouping_tags[field_ids] = {'field_client_id': desk_ent.field.client_id,
                                            'field_object_id': desk_ent.field.object_id,
                                            'tag_groups': dict()}
            if desk_ent.content not in grouping_tags[field_ids]['tag_groups']:
                grouping_tags[field_ids]['tag_groups'][desk_ent.content] = [row2dict(desk_ent)]
            else:
                grouping_tags[field_ids]['tag_groups'][desk_ent.content].append(row2dict(desk_ent))
        else:

            status = make_request(path, 'post', ent_req)
            if status.status_code != 200:
                request.response.status = HTTPInternalServerError.code
                return {'error': str("internet error")}
    for entry in grouping_tags:
        path = central_server + 'group_entity/bulk'
        req = grouping_tags[entry]
        req['counter'] = client.counter
        status = make_request(path, 'post', req)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
        client.counter = status.json()['counter']
        DBSession.flush()
    for entry in userblobs:
        desk_blob = DBSession.query(UserBlobs).filter_by(client_id=entry['client_id'],
                                                         object_id=entry['object_id']).one()
        path = central_server + 'blob'
        data = {'object_id': desk_blob.object_id, 'data_type': desk_blob.data_type}
        files = {'blob': open(desk_blob.real_storage_path, 'rb')}

        status = make_request(path, 'post', data=data, files=files)
        if status.status_code != 200:
            request.response.status = HTTPInternalServerError.code
            return {'error': str("internet error")}
    return