예제 #1
0
 def test_plain_views_are_cacheable(self, mocked_api_session):
     mocked_api_session().get().json.return_value = {
         'count':
         1,
         'results': [{
             'nomis_id': 'AAA',
             'short_name': 'Prison',
             'name': 'HMP Prison'
         }],
     }
     view_names = [
         'help_area:help', 'help_area:help-new-payment',
         'help_area:help-sent-payment', 'help_area:prison_list', 'terms',
         'privacy', 'js-i18n', 'sitemap_xml', 'accessibility'
     ]
     for view_name in view_names:
         response = self.client.get(reverse(view_name))
         self.assertGreaterEqual(get_max_age(response),
                                 3600,
                                 msg=f'{view_name} should be cacheable')
         with override_lang('cy'):
             response = self.client.get(reverse(view_name))
             self.assertGreaterEqual(get_max_age(response),
                                     3600,
                                     msg=f'{view_name} should be cacheable')
예제 #2
0
    def test_happy_scenario(self):
        value = 'Submit'

        with override_lang('eo'):
            with patch('util.i18n.ugettext') as patched_ugettext:
                result = force_translate(
                    value,
                    ugettext_noop('Submit'),
                    ugettext_noop('Cancel'),
                )

        self.assertNotEqual(value, unicode(result))
        patched_ugettext.assert_called_once_with('Submit')
예제 #3
0
    def test_happy_scenario(self):
        value = 'Submit'

        with override_lang('eo'):
            with patch('util.i18n.ugettext') as patched_ugettext:
                result = force_translate(
                    value,
                    ugettext_noop('Submit'),
                    ugettext_noop('Cancel'),
                )

        self.assertNotEqual(value, unicode(result))
        patched_ugettext.assert_called_once_with('Submit')
예제 #4
0
    def test_not_in_the_list(self, patched_ugettext):
        value = 'Submit'

        with override_lang('eo'):
            with patch('util.i18n.ugettext') as patched_ugettext:
                force_translate(
                    value,
                    ugettext_noop('Name'),
                    ugettext_noop('Cancel'),
                )

        self.assertFalse(patched_ugettext.called, 'ugettext should not be called!')

        result = force_translate(
            value,
            ugettext_noop('Name'),
            ugettext_noop('Cancel'),
        )

        self.assertEqual(value, result)
예제 #5
0
    def test_not_in_the_list(self, patched_ugettext):
        value = 'Submit'

        with override_lang('eo'):
            with patch('util.i18n.ugettext') as patched_ugettext:
                force_translate(
                    value,
                    ugettext_noop('Name'),
                    ugettext_noop('Cancel'),
                )

        self.assertFalse(patched_ugettext.called,
                         'ugettext should not be called!')

        result = force_translate(
            value,
            ugettext_noop('Name'),
            ugettext_noop('Cancel'),
        )

        self.assertEqual(value, result)
예제 #6
0
 def test_spanish_code(self):
     with override_lang('es-419'):
         assert utils.generate_offer_data(
             self.user, self.overview)['code'] == 'BIENVENIDOAEDX'
예제 #7
0
파일: views.py 프로젝트: patta42/website
def full_xls_list( request ):


    # create an output stream
    output = io.BytesIO()


    # create an excel file
    wb = xlsxwriter.workbook.Workbook(output)
    # ... with bold as format
    bold = wb.add_format({'bold': True})
    textwrap = wb.add_format()
    textwrap.set_text_wrap()

    # add a worksheet
    ws = wb.add_worksheet()

    widths = {}

    def w_write( row, col, content, fmt = None ):
        if content:
            if fmt:
                ws.write(row, col, str(content), fmt)
            else:
                ws.write(row, col, str(content))

        if content:

            try:
                if widths[col] < len(str(content)):
                    widths[col] = len(str(content))
            except KeyError:
                widths[col] = len(str(content))


    HEADROW = 1

    # Pseudo-constants as for columns
    NAME = 0
    w_write(HEADROW,NAME,'Name', bold)

    VORNAME = NAME + 1 # 1
    w_write(HEADROW,VORNAME,'Vorname', bold)

    TITEL = VORNAME + 1 # 2
    w_write(HEADROW,TITEL,'Titel', bold)
    
    NI = TITEL + 1 #3
    w_write(HEADROW,NI,'NI', bold)

    NT = NI + 1 #4
    w_write(HEADROW,NT,'NT', bold)

    STED = NT + 1#5
    w_write(HEADROW,STED,'Mikroskopie', bold)

    UNIVERSITAET = STED + 1#6
    w_write(HEADROW,UNIVERSITAET,'Universität', bold)

    INSTITUT = UNIVERSITAET + 1#7
    w_write(HEADROW,INSTITUT,'Institut', bold)

    ARBEITSGRUPPE = INSTITUT+1#8
    w_write(HEADROW,ARBEITSGRUPPE,'Arbeitsgruppe', bold)

    AGLEITER = ARBEITSGRUPPE+1#9
    w_write(HEADROW,AGLEITER,'Leitung der Arbeitsgruppe', bold)

    MITARBEITER = AGLEITER + 1#10
    w_write(HEADROW,MITARBEITER,'Mitarbeiter', bold)


    NUTZER = MITARBEITER + 1#11
    w_write(HEADROW,NUTZER,'Nutzer', bold)

    LEITUNG = NUTZER + 1#12
    w_write(HEADROW,LEITUNG,'AG-Leiter', bold)

 
    BEIRAT = LEITUNG + 1 #13
    w_write(HEADROW,BEIRAT,'Beirat', bold)

    MITGLIED = BEIRAT + 1#14
    w_write(HEADROW,MITGLIED,'RUBION-Mitglied', bold)

    MITGLIEDERVERSAMMLUNG = MITGLIED+1#15
    w_write(HEADROW,MITGLIEDERVERSAMMLUNG,'Einladung MV', bold)

    SONSTIGE = MITGLIEDERVERSAMMLUNG+1#16
    w_write(HEADROW,SONSTIGE,'Sonstige', bold)
    
    RMETHODS = SONSTIGE+1#17
    w_write(HEADROW,RMETHODS,'Methoden', bold)

    RAUM = RMETHODS+1#18
    w_write(HEADROW,RAUM,'Raum', bold)

    TELEFON = RAUM+1
    w_write(HEADROW,TELEFON,'Telefon', bold)
    
    EMAIL = TELEFON+1
    w_write(HEADROW,EMAIL,'E-Mail', bold)
    AKTIV = EMAIL+1
    w_write(HEADROW,AKTIV,'Aktiv', bold)
    WOHNORT = AKTIV+1
    w_write(HEADROW,WOHNORT,'Wohnort', bold)
    STRASSE = WOHNORT+1
    w_write(HEADROW,STRASSE,'Straße', bold)
    GEBURTSTAG = STRASSE+1
    w_write(HEADROW,GEBURTSTAG,'Geburtstag', bold)
    GEBURTSORT = GEBURTSTAG+1
    w_write(HEADROW,GEBURTSORT,'Geburtsort', bold)
    FRUEHERERNAME = GEBURTSORT+1
    w_write(HEADROW,FRUEHERERNAME,'Früherer Name', bold)
    SCHLUESSEL = FRUEHERERNAME+1
    w_write(HEADROW,SCHLUESSEL,'Schlüssel', bold)
    DOSEMETER = SCHLUESSEL + 1
    w_write(HEADROW,DOSEMETER,'Art des Dosimeters', bold)
    nextpos = DOSEMETER + 1
    SICOORDINATES = {}
    with override_lang('de'):
        for instruction in SI.AVAILABLE_SAFETY_INSTRUCTIONS:
            SICOORDINATES.update({ instruction : nextpos })
            ws.merge_range(
                HEADROW-1, nextpos, HEADROW-1, nextpos+1,
                str(SI.SAFETYINSTRUCTION_NAMES[instruction]), bold)
            w_write(HEADROW,nextpos,'benötigt?', bold)
            w_write(HEADROW,nextpos+1,'letzte Auffrischung', bold)
            nextpos = nextpos + 2
        
    
    
    BEMERKUNGEN1 = nextpos 
    w_write(HEADROW,BEMERKUNGEN1,'Bemerkungen 1', bold)
    BEMERKUNGEN2 = BEMERKUNGEN1 + 1
    w_write(HEADROW,BEMERKUNGEN2,'Bemerkungen 2', bold)

    # end pseudo-constants
    
    # maximum column number
    MAXCOL = BEMERKUNGEN2


    # internal function for writing safety instruction information

    def write_safety_information(row, user):
        informations = SI.get_instruction_information( user )
        for instruction, information in informations.items():
            if information['required']:
                w_write( row, SICOORDINATES[instruction],  "✓" )
            w_write( row, SICOORDINATES[instruction]+1, information['last']  )

    # internal function for writing staff information
    def write_staff_user(row, staff):
        w_write(row, NAME, staff.get_last_name())
        w_write(row, VORNAME, staff.get_first_name())
        w_write(row, EMAIL, staff.mail)
        w_write(row, AKTIV, '✓')
        try:
            ru = RUBIONUser.objects.filter(linked_user = staff.user).first()
        except RUBIONUser.DoesNotExist:
            ru = None



        if is_beirat(staff) or is_beirat(ru):
            w_write(row, BEIRAT, "✓")
            w_write(row, MITGLIEDERVERSAMMLUNG, '✓')
            beirat = True
        else:
            beirat = False

        if staff.get_parent().specific.show_in_list:
            w_write(row, MITARBEITER, "✓")        
            w_write(row, MITGLIED, '✓')
            w_write(row, MITGLIEDERVERSAMMLUNG, '✓')
        else:
            if not beirat:
                w_write(row, SONSTIGE, "✓")        
        

 
        w_write(row, SCHLUESSEL, staff.key_number)
        w_write(row, TITEL, staff.grade)
        w_write(row, RAUM, staff.room)
        w_write(row, TELEFON, str(staff.phone))
        write_safety_information( row, staff )

    # internal function for writing user information
    def write_rubion_user(row, ru):
        w_write(row, NAME, ru.last_name)
        
        w_write(row, VORNAME, ru.first_name)
        w_write(row, TITEL, ru.get_academic_title_display())
        w_write(row, EMAIL, ru.email)
        if ru.expire_at == None or ru.expire_at >= datetime.datetime.now():
            w_write(row, AKTIV, '✓');
        w_write(row, NUTZER, '✓')
        if ru.is_leader:
            w_write(row, LEITUNG, '✓')
        wg = ru.get_workgroup()
        w_write(row, UNIVERSITAET, wg.university)
        w_write(row, INSTITUT, wg.institute)
        w_write(row, ARBEITSGRUPPE, wg.title_trans)
        rm = wg.get_methods()
        r_methods = ''
        for method in rm:
            r_methods = r_methods + str(method) + '\n'
            # this fails for people retrieving the data in german
            #if ( str(method) == 'Working with unstable isotopes' or
            #     str(method) == 'Other' 
            #) :
            if re.match(r'.*(unstable|instabil|other|sonstige).*', str(method)):
                w_write(row, NI, '✓')
            else:
                w_write(row, NT, '✓')

        w_write(row, RMETHODS, r_methods)
        head = wg.get_head()
        if head:
            w_write(row, AGLEITER, "{} {}".format(head.first_name, head.last_name))

        w_write(row, GEBURTSORT, ru.place_of_birth)
        w_write(row, GEBURTSTAG, ru.date_of_birth)
        w_write(row, FRUEHERERNAME, ru.previous_names)

        try:
            su = StaffUser.objects.filter(user = ru.linked_user).first()
        except StaffUser.DoesNotExist:
            su = None

        
        if ru.linked_user == None:
            su = None

        beirat = is_beirat(ru) or is_beirat(su)
        if not su:
            w_write(row, SCHLUESSEL, ru.key_number)
            if ru.phone:
                w_write(row, TELEFON, str(ru.phone))

        if beirat:
            w_write(row, BEIRAT, '✓')

        if (ru.is_rub and ru.is_leader):
            w_write(row, MITGLIED, '✓')
            w_write(row, MITGLIEDERVERSAMMLUNG, '✓')
        if beirat:
            w_write(row, MITGLIEDERVERSAMMLUNG, '✓')
        w_write(row, FRUEHERERNAME, ru.previous_names)

        w_write(row, DOSEMETER, ru.get_dosemeter_display())
        w_write(row, BEMERKUNGEN1, ru.internal_rubion_comment.replace('<br/>','\n').replace('</p>','\n'), textwrap)
        write_safety_information(row, ru)


    row = HEADROW + 1

    allstaff = StaffUser.objects.all()

    linked_users = []

    for staff in allstaff:
        write_staff_user(row, staff)
        if staff.linked_user:
            linked_users.append(staff.linked_user)
            try:
                write_rubion_user(row, RUBIONUser.objects.get(linked_user = staff.linked_user))
            except RUBIONUser.DoesNotExist:
                pass

        row=row+1

    rubionusers = RUBIONUser.objects.exclude(linked_user__in = linked_users)

    for ru in rubionusers:
        write_rubion_user(row, ru)

        row=row+1

    ws.autofilter(HEADROW,0,row,MAXCOL)

    for i in range(MAXCOL+1):
        try:
            if widths[i] > 9:
                ws.set_column(i,i, widths[i]*1.2)
            else:
                ws.set_column(i,i, 12)
        except KeyError:
            ws.set_column(i,i, 12)

    wb.close()

    output.seek(0)

    response = HttpResponse(output.read(), content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

    response['Content-Disposition'] = "attachment; filename=nutzer-{}-.xlsx".format(datetime.datetime.now())

    output.close()

    return response