示例#1
0
def details(request, type, qr_id): 
    qr = get_qr_object(type, qr_id)
    context = {
        "qrcode": qr,
        "type": type
    }

    if request.method == "GET":
        buff = io.BytesIO()
        segno.make(qr.generate_QR(), error="H").save(buff, kind="png", scale=15)
        encoded = base64.b64encode(buff.getvalue()).decode()
        context.update({"qr_img": encoded})
        return render(request, f"qrcodes/qrdetails{type}.html", context)

    if request.method == "POST":
        qr.name = request.POST["name"]

        if type == "web":
            qr.url = request.POST["url"]
        elif type == "wifi":
            qr.wifiname = request.POST["wifiname"]
            qr.wifipassword = request.POST["password"]
            qr.wifitype = request.POST["type"]
        elif type == "vcard":
            qr.firstname = request.POST["firstname"]
            qr.lastname = request.POST["lastname"]
            qr.email = request.POST["email"]
            qr.phone = request.POST["phone"]

        qr.save()

        return redirect(request.get_full_path())
示例#2
0
def test_encoding():
    encoding = 'iso-8859-15'
    data = 'Émetteur'
    qr = segno.make(data.encode(encoding))
    assert qr.mode == 'byte'
    qr2 = segno.make(data, encoding=encoding)
    assert qr2 == qr
示例#3
0
 def create_qr(self):
     self.new_file = filedialog.asksaveasfilename(
         initialdir="/",
         title="SAVE",
         defaultextension=".png",
         filetypes=[('png files', '*.png'), ('svg files', '*.svg'),
                    ('eps files', '*.eps'), ('txt files', '*.txt')])
     if self.new_file != "":
         name, self.ex = os.path.splitext(self.new_file)
         if self.version.get() not in lista and self.version.get().isdigit(
         ):
             ver = int(self.version.get())
             self.microcode = False
         else:
             ver = self.version.get()
             self.microcode = True
         try:
             if self.ex != ".txt":
                 qr = segno.make(self.display.get('1.0', END),
                                 version=ver,
                                 micro=self.microcode)
                 qr.save(self.new_file,
                         scale=self.size.get(),
                         dark=self.SQblack,
                         light=self.SQwhite)
             else:
                 qr = segno.make(self.display.get('1.0', END),
                                 micro=self.microcode)
                 qr.save(self.new_file)
             messagebox.showinfo("TASK COMPLETED",
                                 "Code created successfully")
         except Exception as e:
             messagebox.showwarning("ERROR", str(e))
示例#4
0
def qrcode_svg():
    data = request.args.get('data')
    if data not in ('Savoy Truffle', 'Rocky Raccoon'):
        return abort(404)
    buff = io.BytesIO()
    segno.make(data, micro=False).save(buff, kind='svg', scale=4)
    buff.seek(0)
    return send_file(buff, mimetype='image/svg+xml')
示例#5
0
def test_make_micro_overflow():
    data = 'A' * 21  # Max. 21 alphanumeric chars (M4-L)
    qr = segno.make(data, micro=True)
    assert 'M4-L' == qr.designator
    data += 'A'
    with pytest.raises(segno.DataOverflowError) as ex:
        segno.make(data, micro=True)
    assert 'too large' in str(ex.value)
示例#6
0
def qrcode_png():
    data = request.args.get('data')
    if data not in ('Savoy Truffle', 'Rocky Raccoon'):
        return abort(404)
    buff = io.BytesIO()
    segno.make(data, micro=False) \
        .save(buff, kind='png', scale=4, dark='darkblue', data_dark='#474747',
              light='#efefef')
    buff.seek(0)
    return send_file(buff, mimetype='image/png')
示例#7
0
def test_enforce_qrcode():
    content = 'HELLO WORLD'
    qr = segno.make(content)
    assert qr.is_micro
    assert 'M3' == qr.version
    qr = segno.make_qr(content)
    assert not qr.is_micro
    assert 1 == qr.version
    qr = segno.make(content, micro=False)
    assert not qr.is_micro
    assert 1 == qr.version
示例#8
0
文件: test_make.py 项目: heuer/segno
def test_enforce_qrcode():
    content = 'HELLO WORLD'
    qr = segno.make(content)
    assert qr.is_micro
    assert 'M3' == qr.version
    qr = segno.make_qr(content)
    assert not qr.is_micro
    assert 1 == qr.version
    qr = segno.make(content, micro=False)
    assert not qr.is_micro
    assert 1 == qr.version
示例#9
0
def test_pyqrcode_issue76():
    # See <https://github.com/mnooner256/pyqrcode/issues/76>
    content = 'АБВГД'
    qr = segno.make(content, micro=False)
    assert 'kanji' == qr.mode
    assert content == decode(qr)
    qr = segno.make(content, encoding='utf-8', micro=False)
    assert 'byte' == qr.mode
    assert content == decode(qr)
    qr = segno.make(content.encode('utf-8'), micro=False)
    assert 'byte' == qr.mode
    assert content == decode(qr)
示例#10
0
def test_pil_palette_autodetect():
    qr = segno.make('Segno')
    img = qr.to_pil(dark='#00fc', light=None, border=0)
    assert img
    assert 'P' == img.mode, 'Expected indexed-color image'
    assert qr.symbol_size(border=0) == img.size
    assert 'transparency' in img.info
示例#11
0
    def encode_to_qr_codes(self):
        print "Encoding data to QR codes.........",
        start_time = time.time()

        size = len(self.data)
        # Divide data into n 2953-byte parts
        data = [
            self.data[i:i + ColorQRCode.MAX_BYTES]
            for i in range(0, len(self.data), ColorQRCode.MAX_BYTES)
        ]

        # If the number of divided parts exceed 24,
        # it is not compatible
        if len(data) > 24:
            return -1

        # Encode the data to QR codes
        for i in range(len(data)):
            self.qr_codes.append(
                segno.make(str(data[i]), version=40, error='l', mask=0))

        # Creates a maximum binary value depending on the
        # amount of QR codes created in order to
        # allow white colors to appear
        self.max_bin = '1' * len(data)
        print "Done: ",
        print("%s seconds" % (time.time() - start_time))
        print "QR Code Parts: " + str(len(data))
示例#12
0
def run():
    timestamp = int(time.time() * 1000)
    frames = []  # type: List[Image]
    for i in range(30):
        salt = "635124"
        id = "53214253214321"

        content = salt + id + str(timestamp)
        print(content)
        timestamp += 100

        qr = segno.make(content, error="M", micro=False)
        fn = f"out/{i}.png"
        img = qr.save(fn, scale=10, light="#ffffff", dark="#8697AC")

        frame = Image.open(fn).convert("P")
        frames.append(frame)

    print(frames)
    frames[0].save(
        "qr.gif",
        # format="GIF",
        append_images=frames[1:],
        save_all=True,
        duration=100,
        loop=0,
    )
示例#13
0
def writePNG(datfile, pngfile):
    with open(datfile, "rb") as f:
        content = f.read()
    print(len(content))
    qr = segno.make(content, encoding=None, eci=True)
    print(qr)
    qr.save(pngfile)
示例#14
0
 def handle_qr(self):
     self.send_response(200)
     self.send_header('Content-Type', 'image/png')
     self.end_headers()
     qr_code = segno.make('Hello Moto')
     content = self.qr_template.format(qr_code.png_data_uri())
     self.wfile.write(content)
示例#15
0
def test_matrix_iter_verbose_border_zero():
    qr = segno.make('No border')
    res = [
        bytearray([bool(v >> 8) for v in row])
        for row in qr.matrix_iter(border=0, verbose=True)
    ]
    assert qr.matrix == tuple(res)
示例#16
0
def test_matrix_iter_border_default():
    qr = segno.make('A', version=1)
    res = [bytearray(row) for row in qr.matrix_iter(border=None)]
    top_border = [bytearray([0x0] * 29)] * 4
    seq = bytearray([0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0])
    assert top_border == res[:4]
    assert seq == res[4][:len(seq)]
示例#17
0
    def build_qrcode(self,
                     to_encode=None,
                     module_color=None,
                     background_color=None,
                     scale_factor=None):
        '''Create base QR Code'''
        if not (self.to_encode
                or to_encode):  # If we have no data, we can't do anything.
            return

        # If any data has changed, save it.
        if to_encode:
            self.to_encode = to_encode
        if module_color:
            self.module_color = module_color
        if background_color:
            self.background_color = background_color
        if scale_factor:
            self.scale_factor = scale_factor

        self.QRsvg = io.BytesIO()
        self.qr = segno.make(self.to_encode, micro=False, error='H')
        # saving base qr code to StringIO buffer
        self.qr.save(self.QRsvg,
                     color=self.module_color,
                     background=self.background_color,
                     kind='svg')
        self.fig_qr = sg.fromstring(self.QRsvg.getvalue())
        self.qr_size = float(self.fig_qr.get_size()
                             [0])  # only grab first size because it's a square
        self.middle = (self.qr_size *
                       self.scale_factor) / 2  # typically not an integer
示例#18
0
def test_matrix_iter_border_3():
    qr = segno.make('A', version=1)
    res = [bytearray(row) for row in qr.matrix_iter(border=3)]
    top_border = [bytearray([0x0] * 27)] * 3
    seq = bytearray([0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0])
    assert top_border == res[:3]
    assert seq == res[3][:len(seq)]
示例#19
0
def test_stackoverflow_issue():
    # See <https://stackoverflow.com/questions/63303624/generating-and-reading-qr-codes-with-special-characters>
    # and <https://github.com/NaturalHistoryMuseum/pyzbar/issues/14>
    content = 'Thomsôn Gonçalves Ámaral,325.432.123-21'
    qr = segno.make(content, encoding='utf-8')
    assert 'byte' == qr.mode
    assert content == decode(qr).encode('shift-jis').decode('utf-8')
示例#20
0
def add_totp(request):
    if request.profile.totp:
        # TOTP is already configured, refuse to continue
        return HttpResponseBadRequest()

    if "totp_secret" not in request.session:
        request.session["totp_secret"] = pyotp.random_base32()

    totp = pyotp.totp.TOTP(request.session["totp_secret"])

    if request.method == "POST":
        form = forms.TotpForm(totp, request.POST)
        if form.is_valid():
            request.profile.totp = request.session["totp_secret"]
            request.profile.totp_created = now()
            request.profile.save()

            request.session["enabled_totp"] = True
            request.session.pop("totp_secret")
            return redirect("hc-profile")
    else:
        form = forms.TotpForm(totp)

    uri = totp.provisioning_uri(name=request.user.email,
                                issuer_name=settings.SITE_NAME)
    qr_data_uri = segno.make(uri).png_data_uri(scale=8)
    ctx = {
        "form": form,
        "qr_data_uri": qr_data_uri,
        "secret": request.session["totp_secret"],
    }
    return render(request, "accounts/add_totp.html", ctx)
示例#21
0
def plot_qr_code():
    """
    Turn the request's URL into a QR code, so another user can join the observation session
    """

    qr = segno.make(request.url)
    return qr
示例#22
0
文件: base.py 项目: fritz0705/kltrack
    def render_data(self, ctx, data):
        # Generate QR Code
        import segno
        qr = segno.make(data, **self.qr_parameters)
        matrix = list(qr.matrix)
        del qr

        # Add quiet zone
        quiet_data = [()] * self.quiet_zone
        matrix = quiet_data + [
            quiet_data + list(row) + quiet_data for row in matrix
        ] + quiet_data

        qr_height, qr_width = len(matrix), max(len(row) for row in matrix)
        scale_factor = min(self.field_width / qr_width,
                           self.field_height / qr_height)
        if self.max_module_size:
            scale_factor = min(scale_factor, self.max_module_size)

        ctx.save()
        try:
            ctx.translate(
                Alignment.CENTER.align_offset(self.field_width,
                                              qr_width * scale_factor) +
                self.padding_left,
                Alignment.CENTER.align_offset(self.field_height, qr_height *
                                              scale_factor) + self.padding_top)
            ctx.scale(scale_factor, scale_factor)
            self._render_matrix(ctx, matrix)
        finally:
            ctx.restore()
示例#23
0
def test_matrix_iter_border_3():
    qr = segno.make('A', version=1)
    res = [bytearray(row) for row in qr.matrix_iter(border=3)]
    top_border = [bytearray([0x0] * 27)] * 3
                   # border         finder
    seq = bytearray([0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0])
    assert top_border == res[:3]
    assert seq == res[3][:len(seq)]
示例#24
0
def test_matrix_iter_border_default():
    qr = segno.make('A', version=1)
    res = [bytearray(row) for row in qr.matrix_iter(border=None)]
    top_border = [bytearray([0x0] * 29)] * 4
                   # border              finder
    seq = bytearray([0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x1, 0x0])
    assert top_border == res[:4]
    assert seq == res[4][:len(seq)]
示例#25
0
def qr_colors(id, grade):
    #qr = segno.make(id, micro=False)
    qr = segno.make(f"ecotag.herokuapp.com/oi/{id}", error='h')
    qr.to_artistic(background=f'static/base/{grade}.png',
                   target=f"static/{id}.png",
                   scale=10)
    #qr.save(f"static/{id}.png",scale = 10)
    return qr
示例#26
0
def test_force_hanzi_mode2():
    qr = segno.make(
        '大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,'
        '惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,'
        '雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。',
        mode='hanzi')
    assert 'hanzi' == qr.mode
    assert '9-L' == qr.designator
示例#27
0
def test_version_1_1():
    qr = segno.make('Test')
    out = io.BytesIO()
    qr.save(out, svgversion=1.1, kind='svg', color='#0000ffcc')
    root = _parse_xml(out)
    assert '1.1' == root.get('version')
    assert b'stroke-opacity' in out.getvalue()
    assert b'rgba(' not in out.getvalue()
示例#28
0
def test_version_2_0():
    qr = segno.make('Test')
    out = io.BytesIO()
    qr.save(out, svgversion=2.0, kind='svg', color='#0000ffcc')
    root = _parse_xml(out)
    assert root.get('version') is None
    assert b'stroke-opacity' not in out.getvalue()
    assert b'rgba(' in out.getvalue()
示例#29
0
def test_version_1_1():
    qr = segno.make('Test')
    out = io.BytesIO()
    qr.save(out, svgversion=1.1, kind='svg', dark='#0000ffcc')
    root = _parse_xml(out)
    assert '1.1' == root.get('version')
    assert b'stroke-opacity' in out.getvalue()
    assert b'rgba(' not in out.getvalue()
示例#30
0
def make_qr(text: Any, qr_code_options: QRCodeOptions):
    """Creates a QR code

    :rtype: segno.QRCode
    """
    # WARNING: For compatibility reasons, we still allow to pass __proxy__ class (lazy string). Moreover, it would be OK to pass anything that has __str__
    # attribute (e. g. class instance that handles phone numbers).
    return segno.make(str(text), **qr_code_options.kw_make())
示例#31
0
def test_version_2_0():
    qr = segno.make('Test')
    out = io.BytesIO()
    qr.save(out, svgversion=2.0, kind='svg', dark='#0000ffcc')
    root = _parse_xml(out)
    assert root.get('version') is None
    assert b'stroke-opacity' not in out.getvalue()
    assert b'rgba(' in out.getvalue()
 def save(self, *args, **kwargs):
     latitude = self.get_address_data().latitude
     longitude = self.get_address_data().longitude
     buffer = BytesIO()
     qr_code_img = segno.make('https://www.google.pl/maps/place/{},{}'.format(latitude, longitude))
     qr_code_img.save(buffer, kind='png', light='#FFFFFF', scale=5)
     self.qr_code.save(f'{self.user}-qrcode.png', ContentFile(buffer.getvalue()), save=False)
     self.city_district = self.get_address_data().raw['address']['city_district']
     super().save(*args, **kwargs)
示例#33
0
def decode(data):
    scale = 3
    qrcode = segno.make(data, micro=False)
    width, height = qrcode.symbol_size(scale=scale)
    qr_bytes = qr_to_bytes(qrcode, scale)
    decoded = zbardecode((qr_bytes, width, height))
    assert 1 == len(decoded)
    assert 'QRCODE' == decoded[0].type
    return decoded[0].data.decode('utf-8')
示例#34
0
def test_plugin():
    distribution = pkg_resources.Distribution(os.path.dirname(__file__))
    entry_point = pkg_resources.EntryPoint.parse(
        'test = test_plugin:an_example_plugin', dist=distribution)
    distribution._ep_map = {'segno.plugin.converter': {'test': entry_point}}
    pkg_resources.working_set.add(distribution)

    qr = segno.make('The Beatles')
    assert 'works' == qr.to_test()
def generate_code(url, filename):
    import segno

    if not os.path.exists(CONFIG.QRCODES):
        os.makedirs(CONFIG.QRCODES)
    imagefile = os.path.join(CONFIG.QRCODES, '{0}.png'.format(filename))
    generated_qr = segno.make(url)
    generated_qr.save(imagefile, scale=10)
    return imagefile
示例#36
0
def test_symbol_size():
    qr = segno.make('Hello world', micro=False)
    width, height = 21, 21
    border = 0
    assert (width, height) == qr.symbol_size(border=border)
    border = 1
    assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size(border=border)
    border = 4  # (default border)
    assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size()
    assert (_calc_size(width, border) == _calc_size(width, border)), qr.symbol_size(scale=1)
    assert (_calc_size(width, border, 4), _calc_size(width, border, 4)) == qr.symbol_size(scale=4)
    border = 0
    assert (_calc_size(width, border, 4), _calc_size(width, border, 4)) == qr.symbol_size(border=border, scale=4)
示例#37
0
def test_symbol_size_micro():
    qr = segno.make('A', version='m2')
    width, height = 13, 13  # Micro QR Code Version M2 size
    border = 0
    assert (width, height) == qr.symbol_size(border=border)
    border = 1
    dim = _calc_size(width, border)
    assert (dim, dim) == qr.symbol_size(border=border)
    border = 2  # (default border)
    dim = _calc_size(width, border)
    assert (dim, dim) == qr.symbol_size()
    assert (dim, dim) == qr.symbol_size(scale=1)
    dim = _calc_size(width, border, 4)
    assert (dim, dim) == qr.symbol_size(scale=4)
    border = 0
    dim = _calc_size(width, border, 4)
    assert (dim, dim) == qr.symbol_size(border=border, scale=4)
示例#38
0
def test_eq():
    qr = segno.make('Hello')
    qr2 = segno.make('Hello')
    assert qr == qr2
示例#39
0
def test_data_too_large(data, version):
    with pytest.raises(DataOverflowError):
        segno.make(data, version=version)
示例#40
0
def test_issue_18_zero_automatic():
    qr = segno.make(0)
    assert 'M1' == qr.version
    assert 'numeric' == qr.mode
    assert qr.error is None
示例#41
0
def test_issue_18_automatic():
    qr = segno.make('')
    assert 'M3' == qr.version
    assert 'byte' == qr.mode
    assert 'M' == qr.error
示例#42
0
def test_matrix_iter_invalid_border(border):
    qr = segno.make('A')
    with pytest.raises(ValueError):
        for row in qr.matrix_iter(border=border):
            pass
示例#43
0
def test_illegal_error_level_micro():
    with pytest.raises(ErrorLevelError):
        segno.make('test', error='H', micro=True)
示例#44
0
文件: test_make.py 项目: heuer/segno
def test_encoding_latin1():
    qr = segno.make('Märchenbücher', error='m', encoding='latin1', micro=False)
    assert 1 == qr.version
    assert 'byte' == qr.mode
示例#45
0
文件: test_make.py 项目: heuer/segno
def test_valid_mode_autodetection_auto(data, expected_mode):
    qr = segno.make(data)
    assert expected_mode == qr.mode
示例#46
0
def test_legal_error_levels(error):
    qr = segno.make(1, error=error, boost_error=False)
    assert error.upper() == qr.error
示例#47
0
def test_valid_versions(version):
    qr = segno.make(1, version=version)
    assert int(version) == qr.version
    assert not qr.is_micro
示例#48
0
def test_m3_wikipedia():
    qr = segno.make('Wikipedia', version='m3')
    assert 'M3-L' == qr.designator
    ref_matrix = read_matrix('issue-33-m3-l-wikipedia')
    assert ref_matrix == qr.matrix
示例#49
0
def test_valid_mirco_versions(version):
    qr = segno.make(1, version=version)
    assert version.upper() == qr.version
    assert qr.is_micro
示例#50
0
def test_illegal_version(version):
    with pytest.raises(VersionError):
        segno.make('a', version=version)
示例#51
0
def test_neq():
    qr = segno.make('Hello')
    qr2 = segno.make('hello')
    assert qr == qr
    assert qr2 == qr2
    assert qr != qr2
示例#52
0
def test_version_contradicts_micro(version):
    with pytest.raises(VersionError):
        segno.make(1, version=version, micro=True)
示例#53
0
文件: test_make.py 项目: heuer/segno
def test_m1_has_no_error_level():
    qr = segno.make('1')
    assert qr.is_micro
    assert 'M1' == qr.version
    assert qr.error is None
示例#54
0
def test_illegal_mode_micro(version, mode):
    with pytest.raises(ModeError):
        segno.make(1, version=version, mode=mode)
    with pytest.raises(ModeError):
        segno.make(1, version=version.lower(), mode=mode)
示例#55
0
文件: test_make.py 项目: heuer/segno
def test_default_encoding():
    qr = segno.make('Märchenbücher', error='m', micro=False)
    # 1 since the data fits into version 1 if ISO/IEC 8859-1 (the default
    # encoding) is used
    assert 1 == qr.version
    assert 'byte' == qr.mode
示例#56
0
def test_matrix_iter_border_zero():
    qr = segno.make('No border')
    res = [bytearray(row) for row in qr.matrix_iter(border=0)]
    assert qr.matrix == tuple(res)
示例#57
0
文件: test_make.py 项目: heuer/segno
def test_encoding_utf8():
    qr = segno.make('Märchenbücher', error='m', encoding='utf-8', micro=False)
    assert 2 == qr.version
    assert 'byte' == qr.mode
示例#58
0
def test_illegal_error_level(error):
    with pytest.raises(ErrorLevelError):
        segno.make(1, error=error)
示例#59
0
文件: test_png.py 项目: heuer/segno
def test_dpi_negative():
    qr = segno.make('test')
    out = io.BytesIO()
    with pytest.raises(ValueError):
        qr.save(out, kind='png', dpi=-3)
示例#60
0
def test_error_m1():
    qr = segno.make('12')
    assert 'M1' == qr.version
    assert qr.error is None