コード例 #1
0
ファイル: tests.py プロジェクト: cccs-web/mayan-edms
class DocumentSearchTestCase(unittest.TestCase):
    def setUp(self):
        # Start the OCR queue
        self.default_queue = DocumentQueue.objects.get(name='default')

    def test_do_document_ocr(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()

        file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'title_page.png'))
        new_version = self.document.new_version(file=File(file_object, name='title_page.png'))
        file_object.close()

        self.failUnlessEqual(self.default_queue.queuedocument_set.count(), 1)

        do_document_ocr(self.default_queue.queuedocument_set.all()[0])

        self.assertTrue(u'Mayan EDMS' in self.document.pages.all()[0].content)

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()
コード例 #2
0
ファイル: signals.py プロジェクト: genxstylez/meow
def save_document(provider, title, href, images, embed, desc, duration, views, categories):
    from documents.models import Document, Category, Image

    try:
        doc = Document.objects.get(href=href)
    except Document.DoesNotExist:
        doc = Document()
        doc.provider = provider
        doc.title = title
        doc.href = href
        doc.embed = embed
        doc.desc = desc
        doc.duration = duration

    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
    doc.views = locale.atoi(views)
    doc.save()
    
    if doc.images.count() == 0:
        for image_url in images:
            response = requests.get(image_url)
            if response.status_code == 200:
                image = Image()
                image.document = doc
                image.url = image_url
                image.save()

    for category in categories:
        cat = Category.objects.get_or_create(title=category)
        doc.categories.add(cat[0])
コード例 #3
0
ファイル: views.py プロジェクト: Foxugly/MyTaxAccountant
def split_doc(request):
    if request.is_ajax():
        results = {}
        cut = int(request.GET["modal_split_cut"][0])
        doc = Document.objects.get(pk=int(request.GET["modal_split_doc_id"]))
        doc.name = request.GET["modal_split_name"]
        new_doc = Document(
            name=request.GET["modal_split_new_name"],
            owner=request.user,
            refer_category=doc.refer_category,
            complete=True,
        )
        pages = doc.pages.all()
        new_doc.save()
        i = 0
        for p in pages:
            if i >= cut:
                new_doc.pages.add(p)
                new_doc.size += p.get_size()
                p.refer_document = new_doc
                p.save()
                doc.size -= p.get_size()
                doc.pages.remove(p)
            i += 1
        doc.refer_category.documents.add(new_doc)
        doc.save()
        new_doc.save()
        results["valid"] = True
        return HttpResponse(json.dumps(results))
コード例 #4
0
ファイル: views.py プロジェクト: DisfluxTest/django-mtr
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)

    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,
                              },
                              context_instance=RequestContext(request))
コード例 #5
0
 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()
コード例 #6
0
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
コード例 #7
0
    def _add_iban_alias_to_order_confirmation(self,
                                              order_confirmation: Document,
                                              order: Order):
        wallet = self.get_user_wallet(order.buyer.mangopay_user_id)
        wallet_id = wallet.get("Id")

        # List that contains only one item maximum
        banking_alias = self.get_wallet_banking_alias(wallet_id)

        if banking_alias:
            iban = banking_alias["iban"]
            bic = banking_alias["bic"]
            owner_name = banking_alias["owner_name"]
        else:
            banking_alias = self.mangopay.create_banking_alias_iban(
                user_id=order.buyer.mangopay_user_id,
                wallet_id=wallet_id,
                name=order.buyer.get_full_name(),
            )
            iban = banking_alias["IBAN"]
            bic = banking_alias["BIC"]
            owner_name = banking_alias["OwnerName"]

        order_confirmation.seller["iban"] = iban
        order_confirmation.seller["bic"] = bic
        order_confirmation.bank_account_owner = owner_name
        order_confirmation.save()
コード例 #8
0
ファイル: tests.py プロジェクト: aptivate/intranet-documents
    def test_create_document_object(self):
        doc = Document(title="foo", document_type=DocumentType.objects.all()[0],
            notes="bonk")
        doc.file.save(name="whee", content=ContentFile("wee willy wonka"))
        doc.programs = Program.objects.all()[:2]  
        doc.authors = [self.john.id]

        self.assertItemsEqual([doc], Document.objects.all())
コード例 #9
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
コード例 #10
0
    def get_context_data(self, *args, **kwargs):
        context = super(FolderContextMixin,
                        self).get_context_data(*args, **kwargs)
        folder = self.get_folder()
        if not folder:
            return context  # Exit in case of usage outside of Folders section, like committees, etc.

        account = get_current_account(self.request)
        membership = self.request.user.get_membership(account)
        # Folder forms
        context['folder_add_form'] = FolderAddForm()
        context['folder_edit_form'] = FolderEditForm()
        context['folder_move_form'] = FolderMoveForm()
        # Ordered items (files & folders)
        search = self.request.GET.get('search', None)
        if search:
            descendants = folder.get_descendants()
            sub_folders = descendants.filter(name__icontains=search)
            documents = Document.objects.filter(account=folder.account,
                                                folder__in=descendants,
                                                name__icontains=search)
        else:
            sub_folders = folder.children.all()
            documents = folder.documents.all()

        documents = documents.select_related('user')

        items = filter_by_permission(sub_folders, membership, PERMISSIONS.view)
        filtered_documents = filter_by_permission(documents, membership,
                                                  PERMISSIONS.view)
        Document.prefetch_revisions(filtered_documents)
        items += filtered_documents

        # Order items
        default_ordering = 'date' if folder.name == 'Meeting Documents' else 'default'
        ordering = self.request.GET.get('o', default_ordering).lower()
        items = FolderContextMixin.sort_items(items, ordering)

        # append members private folder
        if folder.is_account_root and not search:
            try:
                private_folder = membership.private_folder
            except Folder.DoesNotExist:
                private_folder = Folder.objects.create_membership_folder(
                    membership)
            items.append(private_folder)
            context['show_shared_folder'] = True
        # Set helper attributes
        FolderContextMixin.set_help_attrs(items)
        context['items'] = items
        context['ordering'] = ordering
        context['search'] = search
        qs = folder.get_ancestors(include_self=True).filter(
            membership_id=membership.id)
        membership_ancestor = qs[0] if len(qs) > 0 else None
        context['membership_ancestor'] = membership_ancestor
        return context
コード例 #11
0
ファイル: views.py プロジェクト: Foxugly/MyTaxAccountant
def add_documents(request, category_id):
    if request.is_ajax():
        files = request.GET.getlist('files', False)
        cat = Category.objects.get(id=category_id)
        l_doc = []
        l_pdf = []
        cmds = []
        paths = []
        for f in list(files):
            mime = MimeTypes()
            path = os.path.join(settings.MEDIA_ROOT, settings.UPLOAD_DIR, f)
            m = mime.guess_type(path)[0]
            d = Document(name=f.encode('ascii', 'ignore'), owner=request.user, refer_category=cat)
            d.save()
            cat.add_doc(d)
            if m == 'application/pdf':
                l_pdf.append(([cat], path, f, [d]))
            elif m in ['image/png', 'image/jpeg', 'image/bmp']:
                im = Image.open(path)
                w, h = im.size
                new_filename = str(d.id) + '_' + f
                new_path = os.path.join(cat.get_absolute_path(), new_filename)
                shutil.copy2(path, new_path)
                d.add_page(d.get_npages() + 1, new_filename, w, h)
                for fu in FileUpload.objects.all():
                    if fu.file.path == path:
                        fu.delete()
                d.complete = True
                d.save()
                remove_fileupload([path])
            elif m in ['application/msword', 'application/vnd.openxmlformats-officedocument.wordprocessingml.document']:
                p = re.compile(r'.[Dd][Oo][Cc][xX]?$')
                new_f = p.sub('.pdf', f)
                new_path = path.replace(f, new_f)
                cmd = 'soffice --headless --convert-to pdf  %s --outdir %s/upload' % (path, settings.MEDIA_ROOT)
                cmds.append(cmd)
                paths.append(path)
                l_doc.append(([cat], new_path, new_f, [d]))
            elif m in ['application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet']:
                p = re.compile(r'.[Xx][Ll][Ss][xX]?$')
                new_f = p.sub('.pdf', f)
                new_path = path.replace(f, new_f)
                cmd = 'soffice --headless --convert-to pdf  %s --outdir %s/upload' % (path, settings.MEDIA_ROOT)
                cmds.append(cmd)
                paths.append(path)
                l_doc.append(([cat], new_path, new_f, [d]))
            else:
                print 'ERREUR FORMAT FICHIER'
        if len(l_doc):
            thread1 = Timer(0, manage_convert_doc_to_pdf, (cmds, paths, l_doc,))
            thread1.start()
        if len(l_pdf):
            thread = Timer(0, manage_convert_pdf_to_jpg, (l_pdf,))
            thread.start()
        results = {'doc_list': [d.as_json() for d in cat.get_docs()], 'n': cat.count_docs()}
        return HttpResponse(json.dumps(results))
コード例 #12
0
ファイル: tests.py プロジェクト: EmlynC/mayan-edms
class DocumentTestCase(TestCase):
    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=File(file_object, name='mayan_11_1.pdf'))

        with open(TEST_KEY_FILE) as file_object:
            gpg.import_key(file_object.read())

    def test_document_no_signature(self):
        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)

    def test_new_document_version_signed(self):
        with open(TEST_SIGNED_DOCUMENT_PATH) as file_object:
            new_version_data = {
                'comment': 'test comment 1',
                'version_update': VERSION_UPDATE_MAJOR,
                'release_level': RELEASE_LEVEL_FINAL,
                'serial': 0,
            }

            self.document.new_version(file=File(file_object, name='mayan_11_1.pdf.gpg'), **new_version_data)

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)
        self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID)

    def test_detached_signatures(self):
        new_version_data = {
            'comment': 'test comment 2',
            'version_update': VERSION_UPDATE_MAJOR,
            'release_level': RELEASE_LEVEL_FINAL,
            'serial': 0,
        }
        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(file=File(file_object), **new_version_data)

        # GPGVerificationError
        self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document), None)

        with open(TEST_SIGNATURE_FILE_PATH, 'rb') as file_object:
            DocumentVersionSignature.objects.add_detached_signature(self.document, File(file_object))

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), True)
        self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID)

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()
コード例 #13
0
ファイル: tests.py プロジェクト: mathewvaughan/freetextsearch
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
コード例 #14
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)
コード例 #15
0
ファイル: tests.py プロジェクト: vinchu/mayan-edms
    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))
コード例 #16
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
コード例 #17
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
コード例 #18
0
    def list(self, request, *args, **kwargs):
        self.require_folder_permission('view')

        queryset = self.get_queryset().filter(folder=self.folder)
        documents = filter_by_permission(queryset,
                                         self.get_current_membership(),
                                         PERMISSIONS.view)
        Document.prefetch_revisions(documents)

        serializer = self.get_serializer(documents, many=True)

        return Response(serializer.data)
コード例 #19
0
ファイル: views.py プロジェクト: mdavoodi/konkourse-python
def __upload_core(request):
    form = DocumentForm(request.POST, request.FILES)
    if form.is_valid():
        u = request.user
        doc = Document(owner=u)
        file = request.FILES['file']
        doc.filename = request.FILES['file'].name
        doc.save()
        doc.file.save('file_' + str(doc.id), file)
        return doc
    else:
        return Exception()
コード例 #20
0
ファイル: tests.py プロジェクト: mathewvaughan/freetextsearch
def test_search_endpoint_sorts_by_hit_count(search, obama_speech: Document):
    obama_speech.save()
    result = search("begin", "believe")
    assert result.results[0]['search_term'] == "believe"
    assert result.results[1]['search_term'] == "begin"
    result = search("believe", "begin")
    assert result.results[0]['search_term'] == "believe"
    assert result.results[1]['search_term'] == "begin"


# TODO: Choose some words
# TODO: Find a pretty way to display the report!
# TODO: Finish README.md
コード例 #21
0
ファイル: views.py プロジェクト: mabroor/mayan
def document_clear_image_cache(request):
    check_permissions(request.user, [PERMISSION_DOCUMENT_TOOLS])

    previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/')))

    if request.method == 'POST':
        try:
            Document.clear_image_cache()
            messages.success(request, _(u'Document image cache cleared successfully'))
        except Exception, msg:
            messages.error(request, _(u'Error clearing document image cache; %s') % msg)
            
        return HttpResponseRedirect(previous)
コード例 #22
0
ファイル: tests.py プロジェクト: cccs-web/mayan-edms
class FolderTestCase(unittest.TestCase):
    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()

        file_object = open(os.path.join(settings.SITE_ROOT, 'contrib', 'sample_documents', 'mayan_11_1.pdf'))
        new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf'))
        file_object.close()

    def test_creation_of_folder(self):
        user = User.objects.all()[0]
        folder = Folder.objects.create(title='test', user=user)

        self.assertEqual(Folder.objects.all().count(), 1)
        self.assertEqual(list(Folder.objects.all()), [folder])
        folder.delete()

    def test_addition_of_documents(self):
        user = User.objects.all()[0]
        folder = Folder.objects.create(title='test', user=user)
        folder.add_document(self.document)

        self.assertEqual(folder.documents.count(), 1)
        self.assertEqual(list(folder.documents), [self.document])
        folder.delete()

    def test_addition_and_deletion_of_documents(self):
        user = User.objects.all()[0]
        folder = Folder.objects.create(title='test', user=user)
        folder.add_document(self.document)

        self.assertEqual(folder.documents.count(), 1)
        self.assertEqual(list(folder.documents), [self.document])

        folder.remove_document(self.document)

        self.assertEqual(folder.documents.count(), 0)
        self.assertEqual(list(folder.documents), [])

        folder.delete()

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()
コード例 #23
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))
コード例 #24
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)
コード例 #25
0
    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])
コード例 #26
0
ファイル: models.py プロジェクト: 2050utopia/mayan-edms-1
    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
コード例 #27
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'))
コード例 #28
0
    def ready(self):
        super(FoldersApp, self).ready()

        APIEndPoint(app=self, version_string='1')

        Document.add_to_class(
            'document_folders',
            lambda document: DocumentFolder.objects.filter(documents=document))

        ModelPermission.register(
            model=Document,
            permissions=(permission_folder_add_document,
                         permission_folder_remove_document))

        ModelPermission.register(
            model=Folder,
            permissions=(permission_acl_edit, permission_acl_view,
                         permission_folder_delete, permission_folder_edit,
                         permission_folder_view))

        SourceColumn(source=Folder,
                     label=_('Created'),
                     attribute='datetime_created')
        SourceColumn(source=Folder, label=_('User'), attribute='user')
        SourceColumn(source=Folder,
                     label=_('Documents'),
                     func=lambda context: context['object'].get_document_count(
                         user=context['request'].user))

        menu_facet.bind_links(links=(link_document_folder_list, ),
                              sources=(Document, ))
        menu_main.bind_links(links=(link_folder_list, ))
        menu_multi_item.bind_links(
            links=(link_folder_add_multiple_documents, ), sources=(Document, ))
        menu_multi_item.bind_links(
            links=(link_folder_document_multiple_remove, ),
            sources=('folders:folder_view', ))
        menu_object.bind_links(links=(link_folder_view, ),
                               sources=(DocumentFolder, ))
        menu_object.bind_links(links=(link_folder_view, link_folder_edit,
                                      link_acl_list, link_folder_delete),
                               sources=(Folder, ))
        menu_secondary.bind_links(links=(link_folder_list, link_folder_create),
                                  sources=(Folder, 'folders:folder_list',
                                           'folders:folder_create'))
        menu_sidebar.bind_links(links=(link_folder_add_document, ),
                                sources=('folders:document_folder_list',
                                         'folders:folder_add_document'))
コード例 #29
0
ファイル: __init__.py プロジェクト: x3n0/mayan
def initialize_document_checkout_extra_methods():
    Document.add_to_class(
        'is_checked_out', lambda document: DocumentCheckout.objects.
        is_document_checked_out(document))
    Document.add_to_class('check_in',
                          lambda document, user=None: DocumentCheckout.objects.
                          check_in_document(document, user))
    Document.add_to_class(
        'checkout_info', lambda document: DocumentCheckout.objects.
        document_checkout_info(document))
    Document.add_to_class(
        'checkout_state', lambda document: DocumentCheckout.objects.
        document_checkout_state(document))
    Document.add_to_class('is_new_versions_allowed',
                          lambda document, user=None: DocumentCheckout.objects.
                          is_document_new_versions_allowed(document, user))
コード例 #30
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
コード例 #31
0
ファイル: tests.py プロジェクト: vinchu/mayan-edms
    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())
コード例 #32
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()
コード例 #33
0
ファイル: tests.py プロジェクト: bedros/mayan-edms
class DocumentTestCase(TestCase):
    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())

    def test_document_no_signature(self):
        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)

    def test_new_document_version_signed(self):
        with open(TEST_SIGNED_DOCUMENT_PATH) as file_object:
            new_version_data = {"comment": "test comment 1"}

            self.document.new_version(file_object=File(file_object, name="mayan_11_1.pdf.gpg"), **new_version_data)

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)
        self.failUnlessEqual(
            DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID
        )

    def test_detached_signatures(self):
        new_version_data = {"comment": "test comment 2"}
        with open(TEST_DOCUMENT_PATH) as file_object:
            self.document.new_version(file_object=File(file_object), **new_version_data)

        # GPGVerificationError
        self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document), None)

        with open(TEST_SIGNATURE_FILE_PATH, "rb") as file_object:
            DocumentVersionSignature.objects.add_detached_signature(self.document, File(file_object))

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), True)
        self.failUnlessEqual(
            DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID
        )

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()
コード例 #34
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
コード例 #35
0
    def create_document(self):
        """Creates new random documents"""
        doc = Document()

        doc.name_nl = _faker.text(max_nb_chars=30)
        doc.name_en = _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_en.save("{}.txt".format(doc.name_en),
                         ContentFile(_faker.text(max_nb_chars=120)))
        doc.file_nl = doc.file_en
        doc.save()
コード例 #36
0
ファイル: views.py プロジェクト: Liam-Hinzman/classsite
    def form_valid(self, form):
        new_homework=Homework(
                        entered_by=self.request.user,
                        entered_on=datetime.today(),
                        )
        new_homework.save()
        
        new_details=form.save(commit=False)
        new_details.deleted=False
        new_details.hwk=new_homework
        
        if self.request.user.has_perm('classlists.is_kksastaff'):
            #creating multiple copies of the same hwk details record, one for each class
            for k in form.cleaned_data['klass']:
                new_details.pk=None
                new_details.klass=k
                new_details.save()
            
            if form.cleaned_data['link']:
                new_link=Link(
                            link=form.cleaned_data['link'],
                            description=form.cleaned_data['link_description'],
                            homework=new_homework,
                            subject=new_details.subject,
                            )
                new_link.save()
                for k in form.cleaned_data['klass']:
                    new_link.klass.add(k)
                    
            if form.cleaned_data['attached_file']:
                new_document=Document(
                    attached_file=form.cleaned_data['attached_file'],
                    filename=form.cleaned_data['attached_file'].name,
                    description=form.cleaned_data['document_description'],
                    homework=new_homework,
                    subject=new_details.subject,
                    )
                new_document.save()
                for k in form.cleaned_data['klass']:
                    new_document.klass.add(k)
                    
        else:
            new_details.klass=Klass.objects.get(klass_name=self.kwargs['class_url'])
            new_details.save()

        return HttpResponseRedirect(reverse('homework_view', args=(self.kwargs['class_url'],),))
コード例 #37
0
ファイル: tests.py プロジェクト: mathewvaughan/freetextsearch
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']
コード例 #38
0
    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
コード例 #39
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))
コード例 #40
0
ファイル: tests.py プロジェクト: bedros/mayan-edms
    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))
コード例 #41
0
ファイル: views.py プロジェクト: dzynin/django-mtr
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))
コード例 #42
0
    def handle(self, *args, **options):

        # Login
        self.authorize(options)

        # Loop through them...
        for obj in Document.all():
            # ... and do the deed.
            print "Deleted %s" % obj
            obj.delete()
コード例 #43
0
ファイル: views.py プロジェクト: stanwood/traidoo-api
def pay_for_document(
    document: Document,
    author_id: str,
    source_wallet_id: str,
    destination_wallet_id: str,
    amount: float,
    fees: float = 0,
    db="default",
):
    """
    Atomic transaction to pay for the document an mark document as paid
    :param document:
    :param author_id:
    :param source_wallet_id:
    :param destination_wallet_id:
    :param amount:
    :param fees:
    :return:
    """
    mangopay = MangopayMixin()
    with transaction.atomic(using=db):
        try:
            document = (Document.objects.using(db).filter(
                id=document.id).select_for_update(nowait=True).get())
        except OperationalError:
            raise DuplicateTransferError(
                f"Document {document.id} is being paid by other process")

        if document.paid:
            raise DuplicateTransferError(
                f"Document {document.id} already paid")

        if source_wallet_id != destination_wallet_id and not document.paid:
            mangopay.mangopay.transfer(
                author_id,
                source_wallet_id,
                destination_wallet_id,
                amount=amount,
                fees=fees,
                tag=document.mangopay_tag,
            )
        document.paid = True
        document.save(update_fields=("paid", "updated_at"))
コード例 #44
0
 def handle(self, *args, **options):
     
     # Login
     self.authorize(options)
     
     # Loop through them...
     for obj in Document.all():
         # ... and do the deed.
         print "Deleted %s" % obj
         obj.delete()
コード例 #45
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))
コード例 #46
0
ファイル: views.py プロジェクト: Psycojoker/proj402
def upload_file(request, slug):
    form = UploadFileForm(request.POST, request.FILES)
    if form.is_valid():
        course = get_object_or_404(Course, slug=slug)
        d = Document.new(request.user, course, request.FILES['file'].name,
                         form.cleaned_data['category'])
        course.add_document(d)
        transaction.commit()
        run_process_file(d.id, request.FILES['file'])
    # FIXME add an error management
    return HttpResponseRedirect(reverse('course_show', args=[slug]))
コード例 #47
0
ファイル: tests.py プロジェクト: bedros/mayan-edms
    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())
コード例 #48
0
ファイル: tests.py プロジェクト: jotagesales/nucleos-edms
    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=File(file_object, name='nucleos_11_1.pdf'))
コード例 #49
0
ファイル: models.py プロジェクト: ntwarg/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):
        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)
コード例 #50
0
ファイル: tests.py プロジェクト: pwhipp/mayan-edms
class DocumentSearchTestCase(unittest.TestCase):
    def setUp(self):
        # Start the OCR queue
        self.default_queue = DocumentQueue.objects.get(name='default')

    def test_do_document_ocr(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=File(file_object, name='title_page.png'))

        self.failUnlessEqual(self.default_queue.queuedocument_set.count(), 1)

        do_document_ocr(self.default_queue.queuedocument_set.all()[0])

        self.assertTrue(u'Mayan EDMS' in self.document.pages.all()[0].content)

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()
コード例 #51
0
ファイル: views.py プロジェクト: sativa/geonode-documents
def upload_document(request):
	if request.method == 'GET':
		return render_to_response('documents/document_upload.html',
								  RequestContext(request),
								  context_instance=RequestContext(request)
		)

	elif request.method == 'POST':
		
		try:
			content_type = ContentType.objects.get(name=request.POST['ctype'])
			object_id = request.POST['objid']
		except:
			content_type = None
			object_id = None
		try:
			int(object_id)
		except: 
			if object_id is not None:
				object_id = Layer.objects.get(uuid=object_id).id

		file = request.FILES['file']
		title = request.POST['title']
		document = Document(content_type=content_type, object_id=object_id, title=title, file=file)
		document.owner = request.user
		document.save()
		document.set_default_permissions()
		permissionsStr = request.POST['permissions']
		permissions = json.loads(permissionsStr)
		set_document_permissions(document, permissions)

		return HttpResponse(json.dumps({'success': True,'redirect_to':'/documents/' + str(document.id)}))
コード例 #52
0
ファイル: views.py プロジェクト: DisfluxTest/django-mtr
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))    
コード例 #53
0
 def handle_noargs(self, **options):
     doc_dir = os.path.join(os.path.dirname(__file__), '..', '..',
         'fixtures')
     
     doctypes = DocumentType.objects.all()
     programs = Program.objects.all()
     users = IntranetUser.objects.all()
     
     for i in range(1000):
         for f in os.listdir(doc_dir):
             doc = Document()
             doc.title = random.random()
             doc.file = File(open(os.path.join(doc_dir, f)))
             doc.notes = random.random()
             doc.document_type = random.choice(doctypes)
             doc.save()
             doc.programs = random.sample(programs, 2)
             doc.authors = random.sample(users, 1)
コード例 #54
0
ファイル: tests.py プロジェクト: BangorUniversity/mayan-edms
    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'))
コード例 #55
0
ファイル: tests.py プロジェクト: simone/mayan-edms
    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()

        file_object = open(os.path.join(settings.PROJECT_ROOT, 'contrib', 'mayan_11_1.pdf'))
        new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf'))
        file_object.close()
コード例 #56
0
ファイル: views.py プロジェクト: haxelion/proj402
def upload_http(request, slug):
    form = UploadHttpForm(request.POST)
    if form.is_valid():
        course = get_object_or_404(Course, slug=slug)
        url = escape(form.cleaned_data["url"])
        name = match(r".*/([^/]+)$", url).group(1)
        if len(name) < 4:
            return HttpResponse("name invalid", "text/html")
        doc = Document.new(request.user, course, name, escape(form.cleaned_data["category"]))
        course.add_document(doc)
        PendingDocument.objects.create(doc=doc, state="queued", url=url)
        return HttpResponse("ok", "text/html")
    return HttpResponse("form invalid", "text/html")
コード例 #57
0
 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()
コード例 #58
0
ファイル: tests.py プロジェクト: simone/mayan-edms
class DocumentTestCase(unittest.TestCase):
    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()

        file_object = open(os.path.join(settings.PROJECT_ROOT, 'contrib', 'mayan_11_1.pdf'))
        new_version = self.document.new_version(file=File(file_object, name='mayan_11_1.pdf'))
        file_object.close()

    def test_document_no_signature(self):
        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)

    def test_new_document_version_signed(self):
        file_object = open(os.path.join(settings.PROJECT_ROOT, 'contrib', 'mayan_11_1.pdf.gpg'))
        new_version_data = {
            'comment': 'test comment 1',
            'version_update': VERSION_UPDATE_MAJOR,
            'release_level': RELEASE_LEVEL_FINAL,
            'serial': 0,
        }

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), False)
        # self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID)
        # TODO: verify_signature is failing, check

    def test_detached_signatures(self):
        new_version_data = {
            'comment': 'test comment 2',
            'version_update': VERSION_UPDATE_MAJOR,
            'release_level': RELEASE_LEVEL_FINAL,
            'serial': 0,
        }
        file_object = open(os.path.join(settings.PROJECT_ROOT, 'contrib', 'mayan_11_1.pdf'))
        new_version = self.document.new_version(file=File(file_object), **new_version_data)
        file_object.close()

        # GPGVerificationError
        self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document), None)

        file_object = open(os.path.join(settings.PROJECT_ROOT, 'contrib', 'mayan_11_1.pdf.sig'), 'rb')
        DocumentVersionSignature.objects.add_detached_signature(self.document, File(file_object))
        file_object.close()

        self.failUnlessEqual(DocumentVersionSignature.objects.has_detached_signature(self.document), True)
        # self.failUnlessEqual(DocumentVersionSignature.objects.verify_signature(self.document).status, SIGNATURE_STATE_VALID)
        # TODO: verify_signature is failing, check

    def tearDown(self):
        self.document.delete()
        self.document_type.delete()