def update_or_create_document(yaml_obj):
    """
    Submit an object read from our YAML files and it will update it in the
    database, creating it if it doesn't already exist. 
    
    Returns the database object, and a boolean that is true if a new object 
    was created.
    """
    # Check if the table already exists in the datastore
    obj = Document.get_by_key_name(yaml_obj.get('slug'))
    # Update the obj if it exists
    if obj:
        # Loop through the keys and update the object one by one.
        for key in yaml_obj.keys():
            # With some special casing for projects...
            if key == 'project_slug':
                proj = Project.get_by_key_name(yaml_obj.get('project_slug'))
                obj.project = proj
            # ...and for tags.
            elif key == 'tags':
                obj.tags = get_tag_keys(yaml_obj.get("tags"))
            else:
                setattr(obj, key, yaml_obj.get(key))
        # Save it out
        obj.put()
        created = False
    # Create it if it doesn't
    else:
        # If it has tags....
        if yaml_obj.has_key('tags'):
            # Convert to database keys
            tags = get_tag_keys(yaml_obj.pop("tags"))
            # Load the data
            obj = Document(key_name=yaml_obj.get('slug'), **yaml_obj)
            # Set the tags
            obj.tags = tags
        # Otherwise....
        else:
            # Update the basic values
            obj = Document(key_name=yaml_obj.get('slug'), **yaml_obj)
            # And clear out the tag data
            obj.tags = []
            obj.similar_documents = []
        # Connected it to a project, if it exists
        if yaml_obj.has_key('project_slug'):
            proj = Project.get_by_key_name(yaml_obj.get('project_slug'))
            obj.project = proj
        # Save it out
        obj.put()
        created = True
    
    # Update the similarity lists of documents with the same tags
    taskqueue.add(
        url='/_/document/update-similar/',
        params=dict(key=obj.key()),
        method='GET'
    )
    
    # Pass it out
    return obj, created
示例#2
0
def test_search_endpoint_can_return_multiple_documents_single_word_query(
        search, title):
    word = "hello"
    first_doc = Document(title=title(), content=word)
    first_doc.save()
    second_doc = Document(title=title(), content=word)
    second_doc.save()
    result = search(word)
    assert first_doc.title in result.result_for('hello')['documents']
    assert second_doc.title in result.result_for('hello')['documents']
示例#3
0
def test_gross_rounding():

    document = Document(lines=[
        {
            "price": 41,
            "count": 1,
            "amount": 1,
            "vat_rate": 7,
            "seller_user_id": 1
        },
        {
            "price": 7.9,
            "count": 1,
            "amount": 1,
            "vat_rate": 7,
            "seller_user_id": 2
        },
        {
            "price": 4.89,
            "count": 1,
            "amount": 1,
            "vat_rate": 19,
            "seller_user_id": 3,
        },
        {
            "price": 4.89,
            "count": 1,
            "amount": 1,
            "vat_rate": 19,
            "seller_user_id": 4,
        },
    ])

    assert document.price_gross_cents == 6396

    document = Document(lines=[
        {
            "price": 7.80,
            "count": 1,
            "amount": 1,
            "vat_rate": 7,
            "seller_user_id": 4,
        },
        {
            "price": 0.97,
            "count": 1,
            "amount": 1,
            "vat_rate": 7,
            "seller_user_id": 4,
        },
    ])

    assert document.price_gross_cents == 938
 def forwards(self, orm):
     "Write your forwards methods here."
     # This will transfer all the resumes to the documents
     # Note: Don't use "from appname.models import ModelName".
     # Use orm.ModelName to refer to models in this application,
     # and orm['appname.ModelName'] for models in other applications.
     # 1. get all 'original' resumes
     # 2. for each 'original' resume
     # 3.    get corresponding 'non-original' resume which is the image
     # 4.    create Document entry and store it
     print "hello"
     for resume in orm['resumes.resume'].objects.filter(original=True):
         # get non-original-resume and check if the same user and uploaded within 10 mins
         print resume
         non_org_resume = orm['resumes.resume'].objects.filter(
             id=resume.id + 1)
         if non_org_resume and non_org_resume[0].original == False:
             non_org_resume = non_org_resume[0]
             ten_minutes = datetime.timedelta(minutes=10)
             if resume.user == non_org_resume.user and non_org_resume.timestamp - resume.timestamp <= ten_minutes:
                 s = string.lowercase + string.digits
                 unique_hash = ''.join(random.sample(s, 10))
                 new_doc = Document(user_id=resume.user.id,
                                    document_type=1,
                                    image_url=non_org_resume.url,
                                    url=resume.url,
                                    timestamp=resume.timestamp,
                                    unique_hash=unique_hash)
                 new_doc.save()
示例#5
0
文件: models.py 项目: spacedman/mayan
    def upload_single_file(self, file_object, filename=None, use_file_name=False, document_type=None, metadata_dict_list=None, user=None, document=None, new_version_data=None):
        if not document:
            document = Document()
            if document_type:
                document.document_type = document_type
            document.save()            

            if metadata_dict_list:
                save_metadata_list(metadata_dict_list, document, create=True)
            warnings = update_indexes(document)

            if user:
                document.add_as_recent_document_for_user(user)
                create_history(HISTORY_DOCUMENT_CREATED, document, {'user': user})
            else:
                create_history(HISTORY_DOCUMENT_CREATED, document)
        else:
            if use_file_name:
                filename = None
            else:
                filename = filename if filename else document.latest_version.filename

        if not new_version_data:
            new_version_data = {}
            
        new_version = document.new_version(file=file_object, **new_version_data)
        if filename:
            new_version.filename = filename
            new_version.save()

        transformations, errors = self.get_transformation_list()

        new_version.apply_default_transformations(transformations)
    def test_list(self):

        self.folder = Folder(**{'name': 'Images'})
        self.folder.save()

        files = ['2210571.jpg', 'images.docx', 'rgba1px.png']
        for file in files:
            path = 'tests/files/%s' % file
            f = open(path, 'rb')
            document = Document()
            document.folder = self.folder
            document.name = file
            document.file.save(name=document.name, content=File(f))
            document.save()
            document.save_thumbnail()
            f.close()

        url = reverse('model_view_list',
                      args=['documents.Document', 'folder', self.folder.pk])
        response = self.client.get(url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), len(files))

        url = reverse(
            'model_view_detail',
            args=['documents.Document', 'folder', self.folder.pk, files[0]])
        response = self.client.get(url)
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(response.data['name'], files[0])
示例#7
0
    def upload_single_file(self,
                           file_object,
                           filename=None,
                           use_file_name=False,
                           document_type=None,
                           metadata_dict_list=None,
                           user=None,
                           document=None,
                           new_version_data=None):
        new_document = not document

        if not document:
            document = Document()
            if document_type:
                document.document_type = document_type
            document.save()

            apply_default_acls(document, user)

            if user:
                document.add_as_recent_document_for_user(user)
                create_history(HISTORY_DOCUMENT_CREATED, document,
                               {'user': user})
            else:
                create_history(HISTORY_DOCUMENT_CREATED, document)
        else:
            if use_file_name:
                filename = None
            else:
                filename = filename if filename else document.latest_version.filename

        if not new_version_data:
            new_version_data = {}

        try:
            new_version = document.new_version(file=file_object,
                                               user=user,
                                               **new_version_data)
        except Exception:
            # Don't leave the database in a broken state
            # document.delete()
            transaction.rollback()
            raise

        if filename:
            document.rename(filename)

        transformations, errors = self.get_transformation_list()

        new_version.apply_default_transformations(transformations)
        #TODO: new HISTORY for version updates

        if metadata_dict_list and new_document:
            # Only do for new documents
            save_metadata_list(metadata_dict_list, document, create=True)
            warnings = update_indexes(document)

        return document
示例#8
0
    def test_pdf_indexing(self):
        doc = Document()
        self.assign_fixture_to_filefield('word_pdf.pdf', doc.file)

        self.assertEquals(
            "\nLorem ipsum dolor sit amet, consectetur " +
            "adipiscing elit.\nPraesent pharetra urna eu arcu blandit " +
            "nec pretium odio fermentum. Sed in orci quis risus interdum " +
            "lacinia ut eu nisl.\n\n\n", self.index.prepare_text(doc))
示例#9
0
def test_search_endpoint_returns_400_if_no_search_terms(
        api_client, create_content):
    content = create_content(5)
    document = Document(title='example.txt', content=content)
    document.save()
    result = api_client.get(f"{SEARCH_ENDPOINT}")
    assert result.status_code == 400
    assert "Missing search terms" in result.data
    result = api_client.get(f"{SEARCH_ENDPOINT}?term=")
    assert result.status_code == 400
    assert "Missing search terms" in result.data
示例#10
0
    def test_powerpoint_2007_indexing(self):
        doc = Document()
        self.assign_fixture_to_filefield('powerpoint_2007.pptx', doc.file)

        self.assertEquals(
            "Lorem Ipsum\n" +
            "Lorem ipsum dolor sit amet, consectetur adipiscing elit.\n" +
            "Praesent pharetra urna eu arcu blandit nec pretium odio " +
            "fermentum.\n" +
            "Sed in orci quis risus interdum lacinia ut eu nisl.\n",
            self.index.prepare_text(doc))
示例#11
0
def test_euro_to_cents_conversion():

    document = Document(lines=[{
        "price": 18.17,
        "count": 1,
        "amount": 1,
        "vat_rate": 10,
        "seller_user_id": 1,
    }])

    assert document.price_gross_cents == 1999
示例#12
0
    def upload_document(self, file_object, document_type, description=None, label=None, language=None, metadata_dict_list=None, metadata_dictionary=None, tag_ids=None, user=None):
        """
        Upload an individual document
        """
        try:
            with transaction.atomic():
                document = Document(
                    description=description or '', document_type=document_type,
                    label=label or file_object.name,
                    language=language or setting_language.value
                )
                document.save(_user=user)
        except Exception as exception:
            logger.critical(
                'Unexpected exception while trying to create new document '
                '"%s" from source "%s"; %s',
                label or file_object.name, self, exception
            )
            raise
        else:
            try:
                document_version = document.new_version(
                    file_object=file_object, _user=user,
                )

                if user:
                    document.add_as_recent_document_for_user(user)

                Transformation.objects.copy(
                    source=self, targets=document_version.pages.all()
                )

                if metadata_dict_list:
                    save_metadata_list(
                        metadata_dict_list, document, create=True
                    )

                if metadata_dictionary:
                    set_bulk_metadata(
                        document=document,
                        metadata_dictionary=metadata_dictionary
                    )

                if tag_ids:
                    for tag in Tag.objects.filter(pk__in=tag_ids):
                        tag.documents.add(document)
            except Exception as exception:
                logger.critical(
                    'Unexpected exception while trying to create version for '
                    'new document "%s" from source "%s"; %s',
                    label or file_object.name, self, exception
                )
                document.delete(to_trash=False)
                raise
示例#13
0
 def compose(self):
     return (
         Document(
             buyer=self.buyer,
             seller=lines["seller_data"],
             lines=lines["lines"],
             order=self._order,
             delivery_address=self.delivery_address,
             document_type=self.DOCUMENT_TYPE.value[0],
         )
         for lines in self.lines.values()
     )
示例#14
0
    def test_excel_2003_indexing(self):
        doc = Document()
        self.assign_fixture_to_filefield('excel_2003.xls', doc.file)

        self.assertEquals(
            "Sheet1\n\tLorem ipsum dolor sit amet, " +
            "consectetur adipiscing elit.\t\tPraesent pharetra urna eu " +
            "arcu blandit nec pretium odio fermentum.\n\tSed in orci " +
            "quis risus interdum lacinia ut eu nisl.\n\t\tSed facilisis " +
            "nibh eu diam tincidunt pellentesque semper nulla auctor.\n" +
            "\n\nSheet2\n\t\n\n\nSheet3\n\t\n\n\n",
            self.index.prepare_text(doc))
示例#15
0
def test_document_pdf_file_names(order, document_type, file_pattern):
    seller = {"company_name": "Seller Ltd"}
    buyer = {"company_name": "Buyer Ltd"}
    document = Document(
        document_type=Document.TYPES.get_value(document_type),
        order=order,
        seller=seller,
        buyer=buyer,
    )
    document.save()
    assert document.pdf_file_name == file_pattern.format(
        order_id=order.id, document_id=document.id, seller=seller, buyer=buyer)
示例#16
0
    def create_document(self):
        """Creates new random documents"""
        self.stdout.write("Creating a document")
        doc = Document()

        doc.name = _faker.text(max_nb_chars=30)
        doc.category = random.choice(
            [c[0] for c in Document.DOCUMENT_CATEGORIES])
        doc.members_only = random.random() < 0.75
        doc.file.save("{}.txt".format(doc.name),
                      ContentFile(_faker.text(max_nb_chars=120)))
        doc.save()
示例#17
0
    def setUp(self):
        self.document_type = DocumentType(name='test doc type')
        self.document_type.save()

        self.document = Document(
            document_type=self.document_type,
            description='description',
        )
        self.document.save()

        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(file_object=File(file_object))
示例#18
0
def test_total_price():
    document = Document()
    document.lines = [{
        "amount": 3,
        "price": 10,
        "vat_rate": 20,
        "count": 2,
        "seller_user_id": 1
    }]

    assert document.price == 3 * 10 * 2
    assert document.price_gross == 3 * 10 * 2 * 1.20
示例#19
0
    def upload_document(self,
                        file_object,
                        document_type,
                        description=None,
                        label=None,
                        language=None,
                        querystring=None,
                        user=None):
        """
        Upload an individual document
        """
        try:
            with transaction.atomic():
                document = Document(description=description or '',
                                    document_type=document_type,
                                    label=label or file_object.name,
                                    language=language
                                    or setting_language.value)
                document.save(_user=user)
        except Exception as exception:
            logger.critical(
                'Unexpected exception while trying to create new document '
                '"%s" from source "%s"; %s', label or file_object.name, self,
                exception)
            raise
        else:
            try:
                document_version = document.new_version(
                    file_object=file_object,
                    _user=user,
                )

                if user:
                    document.add_as_recent_document_for_user(user)

                Transformation.objects.copy(
                    source=self, targets=document_version.pages.all())

            except Exception as exception:
                logger.critical(
                    'Unexpected exception while trying to create version for '
                    'new document "%s" from source "%s"; %s',
                    label or file_object.name,
                    self,
                    exception,
                    exc_info=True)
                document.delete(to_trash=False)
                raise
            else:
                WizardStep.post_upload_process(document=document,
                                               querystring=querystring)
                return document
示例#20
0
def report(request, lot_number):
    report = Report.objects.get(lot_number=lot_number)
    audit_log = target_stream(report)
    orders = OrderLineItem.objects.filter(report=report)
    newdoc = NewDocumentForm(None)
    try:
        next_report = report.get_next_by_created_at()
    except:
        next_report = None
    try:
        prev_report = report.get_previous_by_created_at()
    except:
        prev_report = None

    if 'document_button' in request.POST:
        newdoc = NewDocumentForm(request.POST, request.FILES)
        if newdoc.is_valid():
            doc = Document(type=newdoc.cleaned_data['type'],
                           file=request.FILES['file'],
                           created_by=request.user)
            doc.save()
            action.send(request.user,
                        verb="created document",
                        action_object=doc)
            rd = ReportDocument(
                report=report,
                document=doc,
                primary_document=newdoc.cleaned_data['primary'],
                created_by=request.user,
                internal_cert=newdoc.cleaned_data['internal'])
            rd.save()
            action.send(request.user,
                        verb="attached document",
                        action_object=rd,
                        target=report)
            report.save()
            messages.success(request, 'Document upload successful.')

            return HttpResponseRedirect(
                reverse('reports.views.report', args=[report.lot_number]))

    return render_to_response('reports/report.html', {
        'report': report,
        'new_document_form': newdoc,
        'orders': orders,
        'audit_log': audit_log,
        'next_report': next_report,
        'prev_report': prev_report,
    },
                              context_instance=RequestContext(request))
示例#21
0
    def setUp(self):
        self.admin_user = User.objects.create_superuser(
            username=TEST_ADMIN_USERNAME,
            email=TEST_ADMIN_EMAIL,
            password=TEST_ADMIN_PASSWORD)

        self.document_type = DocumentType(name=TEST_DOCUMENT_TYPE)
        self.document_type.save()

        self.document = Document(document_type=self.document_type, )
        self.document.save()

        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(
                file_object=File(file_object, name='mayan_11_1.pdf'))
 def test_delete(self):
     name = '2210571.jpg'
     url = reverse(
         'model_view_detail',
         args=['documents.Document', 'folder', self.folder.pk, name])
     path = 'tests/files/%s' % name
     f = open(path, 'rb')
     document = Document()
     document.folder = self.folder
     document.name = '2210571.jpg'
     document.file.save(name=document.name, content=File(f))
     document.save()
     f.close()
     response = self.client.delete(url)
     self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
示例#23
0
    def setUp(self):
        # Start the OCR queue
        self.default_queue = DocumentQueue.objects.get(name='default')
        self.document_type = DocumentType.objects.create(name='test doc type')
        self.document = Document(
            document_type=self.document_type,
            description='description',
        )
        self.document.save()

        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(
                file=File(file_object, name='title_page.png'))

        # Clear OCR queue
        QueueDocument.objects.all().delete()
示例#24
0
def document_from_sql(name, code, host, db_user, db_password, db_name,
                      table_name):
    description = get_table_description(host, db_user, db_password, db_name,
                                        table_name)
    try:
        document = Document(name=name, code=code)
    except:
        raise Exception('Error creating new document, check name and code.')

    fields_description = dict()
    for field in description:
        fields_description[field] = ''

    document.fields_description = str(fields_description)
    document.save()
    return document
示例#25
0
    def setUp(self):
        self.document_type = DocumentType(name='test doc type')
        self.document_type.save()

        self.document = Document(
            document_type=self.document_type,
            description='description',
        )
        self.document.save()

        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(
                file_object=File(file_object, name='mayan_11_1.pdf'))

        with open(TEST_KEY_FILE) as file_object:
            gpg.import_key(file_object.read())
示例#26
0
def upload_document(request, mapid=None):
    if request.method == 'GET':
        return render_to_response('documents/document_upload.html',
                                  RequestContext(request, {
                                      'mapid': mapid,
                                  }),
                                  context_instance=RequestContext(request))

    elif request.method == 'POST':
        try:
            resourceId = str(request.POST['map'])
            file = None
            try:
                file = request.FILES['file']
            except MultiValueDictKeyError as fe:
                file = None
            title = request.POST['title']
            html_lnk_document = request.POST['html_lnk_document']
            htmllink = None
            if (html_lnk_document == "Yes"):
                htmllink = request.POST['documentHtmlLink']

            document = Document(title=title, file=file, htmllink=htmllink)
            if request.user.is_authenticated(): document.owner = request.user
            document.save()
            document.set_default_permissions()
            permissionsStr = request.REQUEST['documentPermissions']
            permissions = json.loads(permissionsStr)
            set_document_permissions(document, permissions)

            if (resourceId != "" and float(resourceId)):
                docMap = Map.objects.get(id=resourceId)
                if docMap is not None:
                    document.maps.add(docMap)
                docLayer = Layer.objects.get(id=resourceId)
                if docLayer is not None:
                    document.layers.add(docLayer)
        except Exception as e:
            logger.error('Error inside document upload ' + str(e))
            raise e
        return HttpResponse(
            json.dumps({
                'success': True,
                'redirect_to': '/maps/' + str(mapid)
            }))
    def create(self, validated_data):
        body = validated_data.get('body')
        body = base64_decode(body)[0]

        document = Document()
        document.account = self.context['account']
        document.folder = validated_data.get('folder')
        document.type = validated_data.get('type') or Document.OTHER
        document.file = ContentFile(body, validated_data.get('name'))
        document.user = self.context['user']

        old_doc = validated_data.get('old_doc')
        if old_doc:
            document.previous_version = old_doc.id

        document.save()

        return document
示例#28
0
    def setUp(self):
        self.project = Project(**{'name': 'Customer  A'})
        self.project.save()

        self.folder = Folder(**{'name': 'Images', 'project': self.project})
        self.folder.save()

        files = ['2210571.jpg', 'images.docx']
        for file in files:
            path = 'tests/files/%s' % file
            f = open(path, 'rb')
            document = Document()
            document.folder = self.folder
            document.name = file
            document.file.save(name=document.name, content=File(f))
            document.save()
            document.save_thumbnail()
            f.close()
示例#29
0
def mtr_generator(request):
    lot_number = request.GET.get('lot_number', None)
    if lot_number:
        report = Report.objects.get(lot_number=lot_number)

    if request.method == 'POST':
        mtrform = MTRForm(request.POST)
        if mtrform.is_valid():
            new_mtr = MTR(properties=mtrform.cleaned_data)
            pdf = new_mtr.generate_pdf()
            fp = StringIO()
            pdf.write(fp)
            file = InMemoryUploadedFile(fp, None, "%s.pdf" % report.lot_number,
                                        'application/pdf', fp.len, None)
            doc_type = DocumentType.objects.get(name='Material Test Report')
            doc = Document(type=doc_type, file=file, created_by=request.user)
            doc.save()
            rd = ReportDocument(report=report,
                                document=doc,
                                primary_document=True,
                                created_by=request.user,
                                internal_cert=True)
            rd.save()
            report.save()
            messages.success(request, 'Document upload successful.')
            action.send(request.user,
                        verb="generated an MTR ",
                        action_object=rd,
                        target=report)
            return HttpResponseRedirect(
                reverse('reports.views.report', args=[report.lot_number]))

    else:
        mtrform = MTRForm(
            initial={
                'part_number': report.part_number,
                'heat_number': report.heat_number,
                'size': report.part_number.description,
            })

    return render_to_response('pdfgen/new_mtr.html', {
        'form': mtrform,
    },
                              context_instance=RequestContext(request))
示例#30
0
文件: DB_Tools.py 项目: medzarka/wKKU
    def get_or_add_Sectionreport(self, section_obj, semester, user, grades, analysis):
        _doc = None
        for _document in Document.objects.filter(semester=semester,
                                                 document_class=self.section_document_class):
            try:
                _section_code = _document.data_dict['section']
                if _section_code == section_obj.section_code:
                    _doc = _document
                    break
            except:
                pass
        if _doc is None:
            _doc = Document()

        _doc.document_class = self.section_document_class
        _doc.document_owner = user
        _doc.semester = semester
        _data = {}
        _data['grades'] = grades
        _data['section'] = int(section_obj.section_code)
        _data['teacher'] = user.username
        _data['semester'] = semester.semester_name
        _data['academic_year'] = semester.semester_academic_year.academic_year_name
        _data['campus'] = section_obj.section_course.program.department.college.campus.campus_name_en
        _data['college'] = section_obj.section_course.program.department.college.college_name_en
        _data['department'] = section_obj.section_course.program.department.department_name_en
        _data['course'] = section_obj.section_course.course_name
        _data['filename'] = 'section__' + str(section_obj.section_code)
        _data['max_grade'] = 100
        _stats = {}
        _stats = Section_Measurment(grades).compute_statistics()
        if analysis == '' or analysis == None:
            pass
        else:
            _stats['analysis'] = analysis

        _doc.data_dict = {**_data, **_stats}

        _doc.save()

        return _doc