From 965b61c2d82ce9df9d71b5a2b3a550eb1ee09646 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Isma=C3=ABl=20Bouya?= Date: Fri, 6 Aug 2021 01:35:06 +0200 Subject: [PATCH] Nicecoop installation --- .../buildbot/projects/nicecoop/__init__.py | 70 ++ modules/private/databases/postgresql.nix | 2 +- modules/private/default.nix | 4 + modules/private/environment.nix | 24 + modules/private/mail/sympa.nix | 2 +- modules/private/websites/default.nix | 5 + .../websites/nicecoop/gestion-compte.nix | 261 ++++ .../nicecoop/gestion-compte/default.nix | 39 + .../nicecoop/gestion-compte/php-packages.nix | 1018 ++++++++++++++++ .../nicecoop/gestion-compte_integration.nix | 158 +++ modules/private/websites/nicecoop/odoo.nix | 127 ++ .../websites/nicecoop/odoo/default.nix | 37 + .../private/websites/nicecoop/odoo/odoo.patch | 26 + .../websites/nicecoop/odoo/poetry.lock | 1085 +++++++++++++++++ .../websites/nicecoop/odoo/pyproject.toml | 54 + .../nicecoop/odoo/shell_generate_poetry.nix | 52 + 16 files changed, 2962 insertions(+), 2 deletions(-) create mode 100644 modules/private/buildbot/projects/nicecoop/__init__.py create mode 100644 modules/private/websites/nicecoop/gestion-compte.nix create mode 100644 modules/private/websites/nicecoop/gestion-compte/default.nix create mode 100644 modules/private/websites/nicecoop/gestion-compte/php-packages.nix create mode 100644 modules/private/websites/nicecoop/gestion-compte_integration.nix create mode 100644 modules/private/websites/nicecoop/odoo.nix create mode 100644 modules/private/websites/nicecoop/odoo/default.nix create mode 100644 modules/private/websites/nicecoop/odoo/odoo.patch create mode 100644 modules/private/websites/nicecoop/odoo/poetry.lock create mode 100644 modules/private/websites/nicecoop/odoo/pyproject.toml create mode 100644 modules/private/websites/nicecoop/odoo/shell_generate_poetry.nix diff --git a/modules/private/buildbot/projects/nicecoop/__init__.py b/modules/private/buildbot/projects/nicecoop/__init__.py new file mode 100644 index 0000000..b2c02ee --- /dev/null +++ b/modules/private/buildbot/projects/nicecoop/__init__.py @@ -0,0 +1,70 @@ +from buildbot.plugins import * +from buildbot_common.build_helpers import * +import os +from buildbot.util import bytes2unicode +import json +from functools import partial + +__all__ = [ "configure", "E" ] + +class E(): + PROJECT = "nicecoop" + BUILDBOT_URL = "https://git.immae.eu/buildbot/{}/".format(PROJECT) + SOCKET = "unix:/run/buildbot/{}.sock".format(PROJECT) + PB_SOCKET = "unix:address=/run/buildbot/{}_pb.sock".format(PROJECT) + SSH_KEY_PATH = "/var/lib/buildbot/buildbot_key" + SSH_HOST_KEY = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIFbhFTl2A2RJn5L51yxJM4XfCS2ZaiSX/jo9jFSdghF" + + GESTION_GIT_URL = "gitolite@git.immae.eu:perso/Immae/Projets/Nicecoop/GestionCompte" + GESTION_RELEASE_PATH = "/var/lib/buildbot/outputs/nicecoop/gestion" + + # master.cfg + SECRETS_FILE = os.getcwd() + "/secrets" + LDAP_URL = "ldaps://ldap.immae.eu:636" + LDAP_ADMIN_USER = "cn=buildbot,ou=services,dc=immae,dc=eu" + LDAP_BASE = "dc=immae,dc=eu" + LDAP_PATTERN = "(uid=%(username)s)" + LDAP_GROUP_PATTERN = "(&(memberOf=cn=groups,ou=immaeEu,cn=buildbot,ou=services,dc=immae,dc=eu)(member=%(dn)s))" + TITLE_URL = "https://www.immae.eu" + TITLE = "Nicecoop" + +def configure(c): + c["buildbotURL"] = E.BUILDBOT_URL + c["www"]["port"] = E.SOCKET + + worker_name = "generic-worker-nicecoop" + c['workers'].append(worker.LocalWorker(worker_name)) + + c['schedulers'].append(git_hook_scheduler("Gestion", ["GestionProduction", "GestionSandbox"])) + c['schedulers'].append(force_scheduler("force_nicecoop", ["GestionProduction", "GestionSandbox"])) + c['builders'].append(util.BuilderConfig(name="GestionProduction", workernames=[worker_name], factory=gestion_factory("production"))) + c['builders'].append(util.BuilderConfig(name="GestionSandbox", workernames=[worker_name], factory=gestion_factory("sandbox"))) + +def gestion_factory(env): + path_env = { + "PATH": os.environ["BUILDBOT_PATH_Gestion"] + ":${PATH}", + } + + factory = util.BuildFactory() + factory.addStep(steps.Git(logEnviron=False, repourl=E.GESTION_GIT_URL, + submodules=True, sshPrivateKey=open(E.SSH_KEY_PATH).read().rstrip(), + sshHostKey=E.SSH_HOST_KEY, mode="full", method="fresh")) + factory.addStep(steps.FileDownload(mastersrc="/run/current-system/nicecoop/gestion/{}.tar.gz".format(env), workerdest="{}.tar.gz".format(env))) + factory.addStep(steps.ShellCommand(name="cleanup files", + logEnviron=False, haltOnFailure=False, command="rm -rf ../{}_app".format(env))) + factory.addStep(steps.ShellCommand(name="extract files", + logEnviron=False, haltOnFailure=True, env=path_env, command="tar -C .. -xzf {}.tar.gz".format(env))) + factory.addStep(steps.ShellCommand(name="make files writeable", + logEnviron=False, haltOnFailure=True, workdir="{}_app".format(env), command="chmod -R u+w .")) + factory.addStep(steps.ShellCommand(name="remove symlinks", + logEnviron=False, haltOnFailure=True, workdir="{}_app".format(env), + command="rm var app/config/parameters.yml")) + factory.addStep(steps.ShellCommand(name="copy parameters", + logEnviron=False, haltOnFailure=True, env=path_env, + command="cat {0}/parameters.yml | gucci -f /var/secrets/buildbot/nicecoop/{0}.yml > ../{0}_app/app/config/parameters.yml".format(env))) + factory.addStep(steps.ShellCommand(name="test configuration", + logEnviron=False, haltOnFailure=True, workdir="{}_app".format(env), command="./bin/console --env=prod -q")) + factory.addStep(steps.FileUpload(workersrc="../{}_app/app/config/parameters.yml".format(env), + masterdest=E.GESTION_RELEASE_PATH + "/{}/parameters.yml".format(env))) + + return factory diff --git a/modules/private/databases/postgresql.nix b/modules/private/databases/postgresql.nix index a6c4cc9..fdab2f0 100644 --- a/modules/private/databases/postgresql.nix +++ b/modules/private/databases/postgresql.nix @@ -159,7 +159,7 @@ in { authentication = let hosts = builtins.concatStringsSep "\n" ( lib.lists.flatten (lib.mapAttrsToList (k: vs: map (v: - map (ip6: "hostssl ${v.database} ${v.username} ${ip6}/128 ${v.method}") v.ip6 + map (ip6: "hostssl ${v.database} ${v.username} ${ip6} ${v.method}") v.ip6 ++ map (ip4: "hostssl ${v.database} ${v.username} ${ip4}/32 ${v.method}") v.ip4 ) vs) cfg.authorizedHosts )); diff --git a/modules/private/default.nix b/modules/private/default.nix index 9108a92..d005de4 100644 --- a/modules/private/default.nix +++ b/modules/private/default.nix @@ -65,6 +65,10 @@ set = { nathVillon = ./websites/nath/villon.nix; + nicecoopGestionCompte = ./websites/nicecoop/gestion-compte.nix; + nicecoopGestionCompteIntegration = ./websites/nicecoop/gestion-compte_integration.nix; + nicecoopOdoo = ./websites/nicecoop/odoo.nix; + papaMaisonBbc = ./websites/papa/maison_bbc.nix; papaSurveillance = ./websites/papa/surveillance.nix; diff --git a/modules/private/environment.nix b/modules/private/environment.nix index 837d24b..1b47210 100644 --- a/modules/private/environment.nix +++ b/modules/private/environment.nix @@ -1379,6 +1379,30 @@ in }; }; }; + nicecoop = mkOption { + description = "Nicecoop configuration"; + type = submodule { + options = { + odoo = { + port = mkOption { description = "Port to listen to"; type = port; }; + longpoll_port = mkOption { description = "Port to listen to"; type = port; }; + postgresql = mkPsqlOptions "Odoo"; + admin_password = mkOption { type = str; description = "Admin password"; }; + }; + gestion-compte = { + mysql = mkMysqlOptions "gestion-compte" {}; + secret = mkOption { type = str; description = "Application secret"; }; + adminpassword = mkOption { type = str; description = "Admin password"; }; + }; + gestion-compte-integration = { + smtp = mkSmtpOptions "GestionCompte"; + mysql = mkMysqlOptions "gestion-compte" {}; + secret = mkOption { type = str; description = "Application secret"; }; + adminpassword = mkOption { type = str; description = "Admin password"; }; + }; + }; + }; + }; emilia = mkOption { description = "Emilia configuration"; type = submodule { diff --git a/modules/private/mail/sympa.nix b/modules/private/mail/sympa.nix index 0626ac0..a0903be 100644 --- a/modules/private/mail/sympa.nix +++ b/modules/private/mail/sympa.nix @@ -11,7 +11,7 @@ in username = "sympa"; database = "sympa"; ip4 = [config.myEnv.servers.backup-2.ips.main.ip4]; - ip6 = config.myEnv.servers.backup-2.ips.main.ip6; + ip6 = map (v: "${v}/128") config.myEnv.servers.backup-2.ips.main.ip6; } ]; }; diff --git a/modules/private/websites/default.nix b/modules/private/websites/default.nix index 4864034..fde459e 100644 --- a/modules/private/websites/default.nix +++ b/modules/private/websites/default.nix @@ -275,6 +275,11 @@ in nath.villon.enable = true; + nicecoop = { + gestion-compte.enable = true; + gestion-compte-integration.enable = true; + odoo.enable = true; + }; papa = { surveillance.enable = true; maison_bbc.enable = true; diff --git a/modules/private/websites/nicecoop/gestion-compte.nix b/modules/private/websites/nicecoop/gestion-compte.nix new file mode 100644 index 0000000..0d86297 --- /dev/null +++ b/modules/private/websites/nicecoop/gestion-compte.nix @@ -0,0 +1,261 @@ +{ lib, pkgs, config, ... }: +let + secrets = config.myEnv.websites.nicecoop.gestion-compte; + varDir = "/var/lib/nicecoop_gestion-compte/var"; + parametersPath = "/var/lib/buildbot/outputs/nicecoop/gestion/production/parameters.yml"; + app = pkgs.callPackage ./gestion-compte { + inherit varDir; + secretsPath = parametersPath; + }; + cfg = config.myServices.websites.nicecoop.gestion-compte; +in { + options.myServices.websites.nicecoop.gestion-compte.enable = lib.mkEnableOption "enable nicecoop's gestion-compte website"; + + config = lib.mkIf cfg.enable { + services.phpfpm.pools.nicecoop_gestion-compte = { + user = config.services.httpd.Prod.user; + group = config.services.httpd.Prod.group; + settings = { + "listen.owner" = config.services.httpd.Prod.user; + "listen.group" = config.services.httpd.Prod.group; + "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [ + app + varDir + parametersPath + "/tmp" + ]; + "php_admin_value[upload_max_filesize]" = "20M"; + "php_admin_value[post_max_size]" = "20M"; + "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; + "pm" = "dynamic"; + "pm.max_children" = "20"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "3"; + }; + }; + system.extraSystemBuilderCmds = let + tarball = pkgs.runCommand "production.tar.gz" {} '' + tar -P --transform="s@${app}@production_app@" -czf $out ${app} + ''; + in '' + mkdir -p $out/nicecoop/gestion + ln -s ${tarball} $out/nicecoop/gestion/production.tar.gz + ''; + systemd.services.phpfpm-nicecoop_gestion-compte = { + after = lib.mkAfter ["mysql.service"]; + wants = ["mysql.service"]; + preStart = lib.mkAfter '' + /run/wrappers/bin/sudo chown wwwrun:wwwrun ${parametersPath} + watchFilesChanged() { + [ ! -f "${varDir}"/watchedFiles ] \ + || ! sha512sum -c --status ${varDir}/watchedFiles + } + appDirChanged() { + [ ! -f "${varDir}/currentWebappDir" -o \ + "${app}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] + } + updateWatchFiles() { + sha512sum ${parametersPath} > ${varDir}/watchedFiles + } + + if watchFilesChanged || appDirChanged; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:database:create -n --if-not-exists + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate -n + popd > /dev/null + echo -n "${app}" > ${varDir}/currentWebappDir + updateWatchFiles + fi + ''; + }; + + services.cron = { + systemCronJobs = let + prefix = "${config.services.httpd.Prod.user} cd ${app} && ./bin/console --env=prod"; + in [ + '' + # generate shifts in 27 days (same weekday as yesterday) + 55 5 * * * ${prefix} app:shift:generate $(date -d "+27 days" +\%Y-\%m-\%d) + + # free pre-booked shifts + 55 5 * * * ${prefix} app:shift:free $(date -d "+21 days" +\%Y-\%m-\%d) + + # send reminder 2 days before shift + #0 6 * * * ${prefix} app:shift:reminder $(date -d "+2 days" +\%Y-\%m-\%d) + + # execute routine for cycle_end/cycle_start, everyday + 5 6 * * * ${prefix} app:user:cycle_start + + # send alert on shifts booking (low) + #0 10 * * * ${prefix} app:shift:send_alerts --emails creneaux@nicecoop.fr $(date -d "+2 days" +\%Y-\%m-\%d) 1 + + # send a reminder mail to the user who generate the last code but did not validate the change. + #45 21 * * * ${prefix} app:code:verify_change --last_run 24 + '' + ]; + }; + + system.activationScripts.nicecoop_gestion-compte = { + deps = []; + text = '' + install -m 0700 -o wwwrun -g wwwrun -d ${varDir} ${varDir}/phpSessions ${varDir}/var + ''; + }; + + services.filesWatcher.phpfpm-nicecoop_gestion-compte = { + restart = true; + paths = [ + parametersPath + ]; + }; + + secrets.keys."buildbot/nicecoop/production.yml" = { + user = "buildbot"; + group = "buildbot"; + permissions = "0400"; + text = builtins.toJSON { + database = { + host = secrets.mysql.host; + port = secrets.mysql.port; + name = secrets.mysql.database; + user = secrets.mysql.user; + password = secrets.mysql.password; + version = pkgs.mariadb.mysqlVersion; + }; + admipassword = secrets.adminpassword; + smtp = { + host = secrets.smtp.host; + port = secrets.smtp.port; + email = secrets.smtp.email; + password = secrets.smtp.password; + }; + secret = secrets.secret; + }; + }; + + # secrets.keys."websites/nicecoop/gestion-compte" = { + # user = config.services.httpd.Prod.user; + # group = config.services.httpd.Prod.group; + # permissions = "0400"; + # text = '' + # # This file is auto-generated during the composer install + # parameters: + # database_host: ${secrets.mysql.host} + # database_port: ${secrets.mysql.port} + # database_name: ${secrets.mysql.database} + # database_user: ${secrets.mysql.user} + # database_password: ${secrets.mysql.password} + # database_version: ${pkgs.mariadb.mysqlVersion} + # super_admin.username: admin + # super_admin.initial_password: ${secrets.adminpassword} + # mailer_transport: smtp + # mailer_host: ${secrets.smtp.host} + # mailer_port: ${secrets.smtp.port} + # mailer_user: ${secrets.smtp.email} + # mailer_password: ${secrets.smtp.password} + # mailer_encryption: tls + # transactional_mailer_user: ${secrets.smtp.email} + # transactional_mailer_user_name: 'espace membre' + # emails.base_domain: tools.immae.eu + # emails.contact: + # from_name: 'Contact Nicecoop' + # address: ${secrets.smtp.email} + # emails.member: + # from_name: 'Membres Nicecoop' + # address: ${secrets.smtp.email} + # emails.shift: + # from_name: 'Créneaux Nicecoop' + # address: ${secrets.smtp.email} + # emails.formation: + # from_name: 'Formation Nicecoop' + # address: ${secrets.smtp.email} + # emails.admin: + # from_name: 'Admin Nicecoop' + # address: ${secrets.smtp.email} + # emails.noreply: + # from_name: 'Ne pas répondre' + # address: ${secrets.smtp.email} + # emails.sendable: + # - '%emails.contact%' + # - '%emails.member%' + # - '%emails.shift%' + # - '%emails.formation%' + # - '%emails.admin%' + # - '%emails.noreply%' + # shift_mailer_user: null + # secret: ${secrets.secret} + # router.request_context.host: membre.nicecoop.fr + # router.request_context.scheme: https + # router.request_context.base_url: null + # site_name: 'Espace membre @ Nicecoop' + # project_name: 'Nicecoop' + # project_url: 'https://membre.nicecoop.fr/' + # project_url_display: membre.nicecoop.fr + # main_color: null + # local_currency_name: 'monnaie locale' + # place_local_ip_address: '127.0.0.1,192.168.0.x' + # wiki_keys_url: null + # registration_duration: '1 year' + # registration_every_civil_year: false + # helloasso_registration_campaign_url: 'https://www.helloasso.com/associations/my-local-coop/adhesions/re-adhesion' + # helloasso_campaign_id: null + # helloasso_api_key: null + # helloasso_api_password: null + # helloasso_api_base_url: 'https://api.helloasso.com/v3/' + # due_duration_by_cycle: 180 + # min_shift_duration: 90 + # cycle_duration: '28 days' + # maximum_nb_of_beneficiaries_in_membership: 2 + # new_users_start_as_beginner: true + # allow_extra_shifts: true + # max_time_in_advance_to_book_extra_shifts: '3 days' + # display_gauge: true + # use_fly_and_fixed: false + # time_after_which_members_are_late_with_shifts: -9 + # reserve_new_shift_to_prior_shifter: true + # forbid_shift_overlap_time: 30 + # display_name_shifters: false + # use_card_reader_to_validate_shifts: false + # max_time_at_end_of_shift: 0 + # swipe_card_logging: true + # display_swipe_cards_settings: true + # logging.mattermost.enabled: false + # logging.mattermost.level: critical + # logging.mattermost.url: 'http://mattermost.yourcoop.local' + # logging.mattermost.channel: null + # logging.swiftmailer.enabled: false + # logging.swiftmailer.level: critical + # logging.swiftmailer.recipient: null + # code_generation_enabled: true + # display_freeze_account: true + # display_keys_shop: true + # services: + # swiftmailer.mailer.default.transport: + # class: Swift_SendmailTransport + # arguments: ['/run/wrappers/bin/sendmail -bs'] + # ''; + # }; + + services.websites.env.production.vhostConfs.nicecoop_gestion-compte = { + certName = "nicecoop"; + certMainHost = "membre.nicecoop.fr"; + hosts = ["membre.nicecoop.fr"]; + root = app.webRoot; + extraConfig = [ + '' + + SetHandler "proxy:unix:${config.services.phpfpm.pools.nicecoop_gestion-compte.socket}|fcgi://localhost" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + '' + ]; + }; + }; +} diff --git a/modules/private/websites/nicecoop/gestion-compte/default.nix b/modules/private/websites/nicecoop/gestion-compte/default.nix new file mode 100644 index 0000000..2b33e7e --- /dev/null +++ b/modules/private/websites/nicecoop/gestion-compte/default.nix @@ -0,0 +1,39 @@ +{ varDir +, secretsPath +, composerEnv, fetchFromGitHub, fetchurl, fetchgit }: +let + app = composerEnv.buildPackage ( + import ./php-packages.nix { inherit composerEnv fetchurl fetchgit; } // + rec { + version = "1.32.3"; + pname = "gestion-compte"; + name = "${pname}-${version}"; + src = fetchFromGitHub { + owner = "elefan-grenoble"; + repo = "gestion-compte"; + rev = "v${version}"; + sha256 = "16pwp4pqdf85ziryzvcj9ryk9jlz56ja07p8kj7pldghnk9pmkwm"; + }; + noDev = true; + preInstall = '' + sed -i -e "/^ charset: utf8mb4/a\ server_version: '%database_version%'" app/config/config.yml + sed -i -e "/database_password: /a\ database_version: 5.5" app/config/parameters.yml.dist + export APP_ENV="prod" + export SYMFONY_ENV="prod" + ''; + postInstall = '' + cd $out + patchShebangs bin/console + ./bin/console assetic:dump + rm -rf var + ln -sf ${varDir} var + rm -f app/config/parameters.yml + ln -sf ${secretsPath} app/config/parameters.yml + ''; + passthru = { + inherit varDir secretsPath; + webRoot = "${app}/web"; + }; + } + ); +in app diff --git a/modules/private/websites/nicecoop/gestion-compte/php-packages.nix b/modules/private/websites/nicecoop/gestion-compte/php-packages.nix new file mode 100644 index 0000000..dce22d3 --- /dev/null +++ b/modules/private/websites/nicecoop/gestion-compte/php-packages.nix @@ -0,0 +1,1018 @@ +{composerEnv, fetchurl, fetchgit ? null, fetchhg ? null, fetchsvn ? null, noDev ? false}: + +{ + packages = { + "asmshaon/easy-barcode-generator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "asmshaon-easy-barcode-generator-44c08da6f8ee1585d41f71ebd48b9b920031b22e"; + src = fetchurl { + url = "https://api.github.com/repos/asmshaon/easy-barcode-generator/zipball/44c08da6f8ee1585d41f71ebd48b9b920031b22e"; + sha256 = "0yzw9ln7hlqncd97w5qk6nxq95sivam3q8c68lhpwqnmcy4353n1"; + }; + }; + }; + "behat/transliterator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "behat-transliterator-baac5873bac3749887d28ab68e2f74db3a4408af"; + src = fetchurl { + url = "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af"; + sha256 = "04dk371h448wjgdk9x9g2mpqwcnx71dfclvspkj23rn3znq964rh"; + }; + }; + }; + "composer/package-versions-deprecated" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "composer-package-versions-deprecated-b4f54f74ef3453349c24a845d22392cd31e65f1d"; + src = fetchurl { + url = "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d"; + sha256 = "1hrjxvk8i14pw9gi7j3qc0gljjy74hwdkv8zwsrg5brgyzhqfwam"; + }; + }; + }; + "doctrine/annotations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-annotations-648b0343343565c4a056bfc8392201385e8d89f0"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/annotations/zipball/648b0343343565c4a056bfc8392201385e8d89f0"; + sha256 = "0mkxq1yaqp6an2gjcgsmg7hq37mrwcj27f94sfkfxq9x6qh02k57"; + }; + }; + }; + "doctrine/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-cache-56cd022adb5514472cb144c087393c1821911d09"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/cache/zipball/56cd022adb5514472cb144c087393c1821911d09"; + sha256 = "1ri5pwrnq8pxjv8ljscvlaqzjj7ii87420af4dq133qm35jn4ffr"; + }; + }; + }; + "doctrine/collections" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-collections-2b44dd4cbca8b5744327de78bafef5945c7e7b5e"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/collections/zipball/2b44dd4cbca8b5744327de78bafef5945c7e7b5e"; + sha256 = "0ch52jxr7kpv64dmg4xbzlnsspsc0ykm227h2hvr40clalhdw6n8"; + }; + }; + }; + "doctrine/common" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-common-f3812c026e557892c34ef37f6ab808a6b567da7f"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/common/zipball/f3812c026e557892c34ef37f6ab808a6b567da7f"; + sha256 = "16jf1wzs6ccpw2ny7rkzpf0asdwr1cfzcyw8g5x88i4j9jazn8xa"; + }; + }; + }; + "doctrine/dbal" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-dbal-c480849ca3ad6706a39c970cdfe6888fa8a058b8"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/dbal/zipball/c480849ca3ad6706a39c970cdfe6888fa8a058b8"; + sha256 = "15j98h80li6m1aj53p8ddy0lkbkanc5kdy6xrikpdd6zhmsfgq9k"; + }; + }; + }; + "doctrine/deprecations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-deprecations-0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"; + sha256 = "1sk1f020n0w7p7r4rsi7wnww85vljrim1i5h9wb0qiz2c4l8jj09"; + }; + }; + }; + "doctrine/doctrine-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-bundle-85460b85edd8f61a16ad311e7ffc5d255d3c937c"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/85460b85edd8f61a16ad311e7ffc5d255d3c937c"; + sha256 = "027gkkr8jdcbk82gw42wyrq4d36ar52cmg6yl7qka6h8albhlmja"; + }; + }; + }; + "doctrine/doctrine-cache-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-cache-bundle-6bee2f9b339847e8a984427353670bad4e7bdccb"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/DoctrineCacheBundle/zipball/6bee2f9b339847e8a984427353670bad4e7bdccb"; + sha256 = "0gc2h6nqdx9iw6xs2zwyssgw1di1x37a7a8hq31fnac1n5j3xbl1"; + }; + }; + }; + "doctrine/doctrine-migrations-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-doctrine-migrations-bundle-0a081b55a88259a887af7be654743a8c5f703e99"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/0a081b55a88259a887af7be654743a8c5f703e99"; + sha256 = "0xzy052liqmmzf675w25ahdwbrrq9zx7djm5f2741za91qcravpw"; + }; + }; + }; + "doctrine/event-manager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-event-manager-95aa4cb529f1e96576f3fda9f5705ada4056a520"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/event-manager/zipball/95aa4cb529f1e96576f3fda9f5705ada4056a520"; + sha256 = "0xi2s28jmmvrndg1yd0r5s10d9a0q6j2dxdbazvcbws9waf0yrvj"; + }; + }; + }; + "doctrine/inflector" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-inflector-4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/inflector/zipball/4bd5c1cdfcd00e9e2d8c484f79150f67e5d355d9"; + sha256 = "0390gkbk3vdjd98h7wjpdv0579swbavrdb6yrlslfdr068g4bmbf"; + }; + }; + }; + "doctrine/instantiator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-instantiator-10dcfce151b967d20fde1b34ae6640712c3891bc"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc"; + sha256 = "1m6pw3bb8v04wqsysj8ma4db8vpm9jnd7ddh8ihdqyfpz8pawjp7"; + }; + }; + }; + "doctrine/lexer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-lexer-c268e882d4dbdd85e36e4ad69e02dc284f89d229"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229"; + sha256 = "12g069nljl3alyk15884nd1jc4mxk87isqsmfj7x6j2vxvk9qchs"; + }; + }; + }; + "doctrine/migrations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-migrations-af915024d41669600354efe78664ee86dfca62e1"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/migrations/zipball/af915024d41669600354efe78664ee86dfca62e1"; + sha256 = "15sgn10x5hfaj057vx2l7ilrwsdmw3j6rqa1d9wli31brb7mxvj0"; + }; + }; + }; + "doctrine/orm" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-orm-01187c9260cd085529ddd1273665217cae659640"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/orm/zipball/01187c9260cd085529ddd1273665217cae659640"; + sha256 = "0c5swnkk3zgz5rcj4a7mai0i786w7h86i2pamv9zqkya0nv5h17x"; + }; + }; + }; + "doctrine/persistence" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-persistence-7a6eac9fb6f61bba91328f15aa7547f4806ca288"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/persistence/zipball/7a6eac9fb6f61bba91328f15aa7547f4806ca288"; + sha256 = "0mszkf7lxdhbr5b3ibpn7ipyrf6a6kfj283fvh83akyv1mplsl0h"; + }; + }; + }; + "doctrine/reflection" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "doctrine-reflection-1034e5e71f89978b80f9c1570e7226f6c3b9b6fb"; + src = fetchurl { + url = "https://api.github.com/repos/doctrine/reflection/zipball/1034e5e71f89978b80f9c1570e7226f6c3b9b6fb"; + sha256 = "08n0m6z8b66b0v8awl1w8s8ncg61sa25273ba42fbjmn24b3h6mp"; + }; + }; + }; + "egulias/email-validator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "egulias-email-validator-f88dcf4b14af14a98ad96b14b2b317969eab6715"; + src = fetchurl { + url = "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715"; + sha256 = "1w0440d8ifasx647wci5ydbqsgxyxpf4z9ksvl999604lj0zr7di"; + }; + }; + }; + "fig/link-util" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "fig-link-util-5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/link-util/zipball/5d7b8d04ed3393b4b59968ca1e906fb7186d81e8"; + sha256 = "0rzg5y8gk4g6nnjmf70c4zqqddqs4hggjkdyv60qfyim8vzcvnbb"; + }; + }; + }; + "friendsofsymfony/oauth-server-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "friendsofsymfony-oauth-server-bundle-fcaa25cc49474bdb0db7894f880976fe76ffed23"; + src = fetchurl { + url = "https://api.github.com/repos/FriendsOfSymfony/FOSOAuthServerBundle/zipball/fcaa25cc49474bdb0db7894f880976fe76ffed23"; + sha256 = "1vn7yrq1h6gqq4gxsja66w8f07klrk6m3mkv79kl7gbikib4syk6"; + }; + }; + }; + "friendsofsymfony/oauth2-php" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "friendsofsymfony-oauth2-php-546f869d68fb79b284752e6787263d797165dba4"; + src = fetchurl { + url = "https://api.github.com/repos/FriendsOfSymfony/oauth2-php/zipball/546f869d68fb79b284752e6787263d797165dba4"; + sha256 = "0xy8k1hh2gmcpzvfw57jllcsqa1prrh0a962ysayak4b9viq3vf6"; + }; + }; + }; + "friendsofsymfony/user-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "friendsofsymfony-user-bundle-1049935edd24ec305cc6cfde1875372fa9600446"; + src = fetchurl { + url = "https://api.github.com/repos/FriendsOfSymfony/FOSUserBundle/zipball/1049935edd24ec305cc6cfde1875372fa9600446"; + sha256 = "1vajl1nlhydd18dx61llqwyl0cdn84yhfviafyfybagr2iwwmihz"; + }; + }; + }; + "imagine/imagine" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "imagine-imagine-a9a702a946073cbca166718f1b02a1e72d742daa"; + src = fetchurl { + url = "https://api.github.com/repos/php-imagine/Imagine/zipball/a9a702a946073cbca166718f1b02a1e72d742daa"; + sha256 = "1spb4pzzv732jl90x46h5ywrw96n60gj8x22yv24rqyn32dw7djn"; + }; + }; + }; + "incenteev/composer-parameter-handler" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "incenteev-composer-parameter-handler-e1dd118763503f7fd766f907013e1d76d525fcc4"; + src = fetchurl { + url = "https://api.github.com/repos/Incenteev/ParameterHandler/zipball/e1dd118763503f7fd766f907013e1d76d525fcc4"; + sha256 = "0b2xp7psyzzyss0fy4gx9bpn7m27wq5cagag880k4l04zl30bf48"; + }; + }; + }; + "jdorn/sql-formatter" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "jdorn-sql-formatter-64990d96e0959dff8e059dfcdc1af130728d92bc"; + src = fetchurl { + url = "https://api.github.com/repos/jdorn/sql-formatter/zipball/64990d96e0959dff8e059dfcdc1af130728d92bc"; + sha256 = "1dnmkm8mxylvxjwi0bdkzrlklncqx92fa4fwqp5bh2ypj8gaagzi"; + }; + }; + }; + "jms/metadata" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "jms-metadata-283c714831d272d78ddd6e52e08ac16d76be30fd"; + src = fetchurl { + url = "https://api.github.com/repos/schmittjoh/metadata/zipball/283c714831d272d78ddd6e52e08ac16d76be30fd"; + sha256 = "1k4hx6lzp2kz7md036kvfq3bz53fl286qh1fp43cpj6zqqpwnddy"; + }; + }; + }; + "kriswallsmith/assetic" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "kriswallsmith-assetic-e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"; + src = fetchurl { + url = "https://api.github.com/repos/kriswallsmith/assetic/zipball/e911c437dbdf006a8f62c2f59b15b2d69a5e0aa1"; + sha256 = "1dqk4zvx8fgqf8rb81sj9bipl5431jib2b9kcvxyig5fw99irpf8"; + }; + }; + }; + "liip/imagine-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "liip-imagine-bundle-3084c77e984ec669e0d645250a3cb1077d8b92f6"; + src = fetchurl { + url = "https://api.github.com/repos/liip/LiipImagineBundle/zipball/3084c77e984ec669e0d645250a3cb1077d8b92f6"; + sha256 = "0qifrgmy7gnj4izcbnx2dx4q4029mnbwvyzidvvm45hnnqqb2dfx"; + }; + }; + }; + "michelf/php-markdown" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "michelf-php-markdown-5024d623c1a057dcd2d076d25b7d270a1d0d55f3"; + src = fetchurl { + url = "https://api.github.com/repos/michelf/php-markdown/zipball/5024d623c1a057dcd2d076d25b7d270a1d0d55f3"; + sha256 = "1zhaiqfzvcf36vq2wvqx0gyyj4d1rs9i8vxn8191cyxhkxap3zfw"; + }; + }; + }; + "monolog/monolog" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "monolog-monolog-904713c5929655dc9b97288b69cfeedad610c9a1"; + src = fetchurl { + url = "https://api.github.com/repos/Seldaek/monolog/zipball/904713c5929655dc9b97288b69cfeedad610c9a1"; + sha256 = "17fjd5dk45b6dbfx15vxqk6mnm3fsn2kd8nsjfjd2zk3zfihq4jj"; + }; + }; + }; + "nesbot/carbon" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "nesbot-carbon-01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a"; + src = fetchurl { + url = "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a"; + sha256 = "1czgfiimnf0fs19fjwwwpv4d3wk1ab9v7dxagz0ii8vz5gpz0vwv"; + }; + }; + }; + "ocramius/proxy-manager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "ocramius-proxy-manager-2d7cd2a79cd3ade90c46211baae1b88d47683917"; + src = fetchurl { + url = "https://api.github.com/repos/Ocramius/ProxyManager/zipball/2d7cd2a79cd3ade90c46211baae1b88d47683917"; + sha256 = "0bm6iwvbj665kmfrn5h89zk07w7icwax11cnblzsfxb3idmgswyz"; + }; + }; + }; + "ornicar/gravatar-bundle" = { + targetDir = "Ornicar/GravatarBundle"; + src = composerEnv.buildZipPackage { + name = "ornicar-gravatar-bundle-5a4e3619f0654eaa3ad4e4a45d927bd0bf044e7c"; + src = fetchurl { + url = "https://api.github.com/repos/henrikbjorn/GravatarBundle/zipball/5a4e3619f0654eaa3ad4e4a45d927bd0bf044e7c"; + sha256 = "17a9ljhqjwkd7apkfndykjwkq1as7xv0vjz4di3dg1aii06ixnjh"; + }; + }; + }; + "paragonie/random_compat" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "paragonie-random_compat-96c132c7f2f7bc3230723b66e89f8f150b29d5ae"; + src = fetchurl { + url = "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae"; + sha256 = "0qjzwklm1gfxsqalmpbg3ll7f0dasn56frgl5jdlmy8g6x09hql2"; + }; + }; + }; + "psr/cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-cache-d11b50ad223250cf17b86e38383413f5a6764bf8"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8"; + sha256 = "06i2k3dx3b4lgn9a4v1dlgv8l9wcl4kl7vzhh63lbji0q96hv8qz"; + }; + }; + }; + "psr/container" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-container-8622567409010282b7aeebe4bb841fe98b58dcaf"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf"; + sha256 = "0qfvyfp3mli776kb9zda5cpc8cazj3prk0bg0gm254kwxyfkfrwn"; + }; + }; + }; + "psr/link" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-link-eea8e8662d5cd3ae4517c9b864493f59fca95562"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/link/zipball/eea8e8662d5cd3ae4517c9b864493f59fca95562"; + sha256 = "091k4p9irkqnmq9b0p792wz1hb7dm4rafpjilw9im9xhsxgkmr13"; + }; + }; + }; + "psr/log" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-log-d49695b909c3b7628b6289db5479a1c204601f11"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11"; + sha256 = "0sb0mq30dvmzdgsnqvw3xh4fb4bqjncx72kf8n622f94dd48amln"; + }; + }; + }; + "psr/simple-cache" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "psr-simple-cache-408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; + src = fetchurl { + url = "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b"; + sha256 = "1djgzclkamjxi9jy4m9ggfzgq1vqxaga2ip7l3cj88p7rwkzjxgw"; + }; + }; + }; + "sensio/distribution-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-distribution-bundle-80a38234bde8321fb92aa0b8c27978a272bb4baf"; + src = fetchurl { + url = "https://api.github.com/repos/sensiolabs/SensioDistributionBundle/zipball/80a38234bde8321fb92aa0b8c27978a272bb4baf"; + sha256 = "0y1as1r5l5j7474jdqla3hk6s7d3ac5aa8b6whlw37r8qvglqf5c"; + }; + }; + }; + "sensio/framework-extra-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-framework-extra-bundle-585f4b3a1c54f24d1a8431c729fc8f5acca20c8a"; + src = fetchurl { + url = "https://api.github.com/repos/sensiolabs/SensioFrameworkExtraBundle/zipball/585f4b3a1c54f24d1a8431c729fc8f5acca20c8a"; + sha256 = "1pyw3x5s4bhvf06xnjyana4f4g5jcal3n8p56vlrik0gczpgbq5n"; + }; + }; + }; + "sensiolabs/security-checker" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensiolabs-security-checker-a576c01520d9761901f269c4934ba55448be4a54"; + src = fetchurl { + url = "https://api.github.com/repos/sensiolabs/security-checker/zipball/a576c01520d9761901f269c4934ba55448be4a54"; + sha256 = "0zlylw1gr1g32yzg35jkmavxj8m5mxyl9iyfxmisna5y74f07l6s"; + }; + }; + }; + "spipu/html2pdf" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "spipu-html2pdf-c002749cf21733d53fb9e50d082ca3d1bde06c85"; + src = fetchurl { + url = "https://api.github.com/repos/spipu/html2pdf/zipball/c002749cf21733d53fb9e50d082ca3d1bde06c85"; + sha256 = "0xkyx2pr3py6jbzsl16z2prszwfmmk3w5djrg8vq8m45jlr85paq"; + }; + }; + }; + "swiftmailer/swiftmailer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "swiftmailer-swiftmailer-8a5d5072dca8f48460fce2f4131fcc495eec654c"; + src = fetchurl { + url = "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c"; + sha256 = "1p9m4fw9y9md9a7msbmnc0hpdrky8dwrllnyg1qf1cdyp9d70x1d"; + }; + }; + }; + "symfony/assetic-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-assetic-bundle-2e0a23a4874838e26de6f025e02fc63328921a4c"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/assetic-bundle/zipball/2e0a23a4874838e26de6f025e02fc63328921a4c"; + sha256 = "17rxrkyzxa6x5nn7qhhhdgx4z0nlznnq5fifza4wv9znca8bbwyc"; + }; + }; + }; + "symfony/deprecation-contracts" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-deprecation-contracts-e8b495ea28c1d97b5e0c121748d6f9b53d075c66"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66"; + sha256 = "09k869asjb7cd3xh8i5ps824k5y6v510sbpzfalndwy3knig9fig"; + }; + }; + }; + "symfony/http-client" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-http-client-8a3929c814cba77db93de61c22759e0dbeaa4c87"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/http-client/zipball/8a3929c814cba77db93de61c22759e0dbeaa4c87"; + sha256 = "1x6s8d7wlms3krhz60mspj4f618s2n5gdnyja18mxmlcr7nm2i34"; + }; + }; + }; + "symfony/http-client-contracts" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-http-client-contracts-ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/http-client-contracts/zipball/ba6a9f0e8f3edd190520ee3b9a958596b6ca2e70"; + sha256 = "13256s0x0kicrb1sr0gmp8pbcmccx8a65h58kvfg670xzwrdklb2"; + }; + }; + }; + "symfony/mime" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-mime-bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/mime/zipball/bb2ccf759e2b967dcd11bdee5bdf30dddd2290bd"; + sha256 = "0y5jpx21x5l083pma0g1wv3if84vmid36cclg4m7j2g0sj7azwpw"; + }; + }; + }; + "symfony/monolog-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-monolog-bundle-dd80460fcfe1fa2050a7103ad818e9d0686ce6fd"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/monolog-bundle/zipball/dd80460fcfe1fa2050a7103ad818e9d0686ce6fd"; + sha256 = "03bd66gcbaq8mnpj4gzz0z8l9lyj25wr6r9ynhnwl5x1rqw04591"; + }; + }; + }; + "symfony/polyfill-apcu" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-apcu-43273a33c46f9d5a08dac76859f63d6814242e81"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-apcu/zipball/43273a33c46f9d5a08dac76859f63d6814242e81"; + sha256 = "00my23k2xlrsrvpwdn8wcr0jfgsfb9yhmx8gjx2sq5krvnfzg47v"; + }; + }; + }; + "symfony/polyfill-ctype" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-ctype-6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4"; + sha256 = "18235xiqpjx9nzx3pzylm5yzqr6n1j8wnnrzgab1hpbvixfrbqba"; + }; + }; + }; + "symfony/polyfill-iconv" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-iconv-143f1881e655bebca1312722af8068de235ae5dc"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc"; + sha256 = "19v4r40vx62a181l6zfs7n40w9f7npy7jw5x6dssg40hl4a0i3p2"; + }; + }; + }; + "symfony/polyfill-intl-icu" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-intl-icu-e407643d610e5f2c8a4b14189150f68934bf5e48"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e407643d610e5f2c8a4b14189150f68934bf5e48"; + sha256 = "0dkdrjpb2msqzpkp38ssaj7qmphq3j7qynyvd8i9xry0rkdgbmh7"; + }; + }; + }; + "symfony/polyfill-intl-idn" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-intl-idn-59a8d271f00dd0e4c2e518104cc7963f655a1aa8"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8"; + sha256 = "1bcdl48ji0dmswwvw2b66qxdxxawbx8bgicc02la92gacps08n5v"; + }; + }; + }; + "symfony/polyfill-intl-normalizer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-intl-normalizer-219aa369ceff116e673852dce47c3a41794c14bd"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd"; + sha256 = "1cwckrazq4p4i9ysjh8wjqw8qfnp0rx48pkwysch6z7vkgcif22w"; + }; + }; + }; + "symfony/polyfill-mbstring" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-mbstring-9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"; + sha256 = "0y289x91c9lgr8vlixj5blayf9lsgi4nn2gyn3a99brvn2jnh6q8"; + }; + }; + }; + "symfony/polyfill-php56" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php56-54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-php56/zipball/54b8cd7e6c1643d78d011f3be89f3ef1f9f4c675"; + sha256 = "0gbw33finml181s3gbvamrsav368rysa8fx69fbq0ff9cvn2lmc6"; + }; + }; + }; + "symfony/polyfill-php70" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php70-5f03a781d984aae42cebd18e7912fa80f02ee644"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-php70/zipball/5f03a781d984aae42cebd18e7912fa80f02ee644"; + sha256 = "0yzw1gp2q46pk8fmgvz4nyiz34m6d4kiardyr9ajdmfrlqsiy202"; + }; + }; + }; + "symfony/polyfill-php72" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php72-bf44a9fd41feaac72b074de600314a93e2ae78e2"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2"; + sha256 = "11knb688wcf8yvrprgp4z02z3nb6s5xj3wrv77n2qjkc7nc8q7l7"; + }; + }; + }; + "symfony/polyfill-php73" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php73-e440d35fa0286f77fb45b79a03fedbeda9307e85"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85"; + sha256 = "1c7w7j375a1fxq5m4ldy72jg5x4dpijs8q9ryqxvd6gmj1lvncqy"; + }; + }; + }; + "symfony/polyfill-php80" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-polyfill-php80-cfa0ae98841b9e461207c13ab093d76b0fa7bace"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace"; + sha256 = "1kbh4j01kxxc39ls9kzkg7dj13cdlzwy599b96harisysn47jw2n"; + }; + }; + }; + "symfony/service-contracts" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-service-contracts-4b426aac47d6427cc1a1d0f7e2ac724627f5966c"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c"; + sha256 = "0lh0vxy0h4wsjmnlf42s950bicsvkzz6brqikfnfb5kmvi0xhcm6"; + }; + }; + }; + "symfony/swiftmailer-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-swiftmailer-bundle-defa9bdfc0191ed70b389cb93c550c6c82cf1745"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/swiftmailer-bundle/zipball/defa9bdfc0191ed70b389cb93c550c6c82cf1745"; + sha256 = "07jbf1x6im6vysh73is4vj5jzjkj6ywns1dk440j21gq7m8bcrkx"; + }; + }; + }; + "symfony/symfony" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-symfony-ba0e346e3ad11de4a307fe4fa2452a3656dcc17b"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/symfony/zipball/ba0e346e3ad11de4a307fe4fa2452a3656dcc17b"; + sha256 = "0mkp0729wkz3qwf5j8xn37v2sji7dp3s1dpr41syg325fv6z42j0"; + }; + }; + }; + "tecnickcom/tcpdf" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "tecnickcom-tcpdf-cc54c1503685e618b23922f53635f46e87653662"; + src = fetchurl { + url = "https://api.github.com/repos/tecnickcom/TCPDF/zipball/cc54c1503685e618b23922f53635f46e87653662"; + sha256 = "1rb1hbw0mr313wsffp9m8b6friyas93ihl52q04r9azy8x9igf2v"; + }; + }; + }; + "twig/twig" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "twig-twig-ab402673db8746cb3a4c46f3869d6253699f614a"; + src = fetchurl { + url = "https://api.github.com/repos/twigphp/Twig/zipball/ab402673db8746cb3a4c46f3869d6253699f614a"; + sha256 = "1xy4dziysc4b7md1i9r4s3rcw0vr5sj06nl0n6qdj0hq5g856sgp"; + }; + }; + }; + "vich/uploader-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "vich-uploader-bundle-8ef4935f5535bb4e967f30ee95dff358c7c0705e"; + src = fetchurl { + url = "https://api.github.com/repos/dustin10/VichUploaderBundle/zipball/8ef4935f5535bb4e967f30ee95dff358c7c0705e"; + sha256 = "075mgj1zb7n50h6fj5sjyb6fnc92akk4x83fsyb9sfc7kjami1d6"; + }; + }; + }; + "zendframework/zend-code" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-code-268040548f92c2bfcba164421c1add2ba43abaaa"; + src = fetchurl { + url = "https://api.github.com/repos/zendframework/zend-code/zipball/268040548f92c2bfcba164421c1add2ba43abaaa"; + sha256 = "1jhz4xr5a3j2r6n9l5pnmdblkf67fyd0kmwm9k1bcrmph4fs63j0"; + }; + }; + }; + "zendframework/zend-eventmanager" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "zendframework-zend-eventmanager-a5e2583a211f73604691586b8406ff7296a946dd"; + src = fetchurl { + url = "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/a5e2583a211f73604691586b8406ff7296a946dd"; + sha256 = "08a05gn40hfdy2zhz4gcd3r6q7m7zcaks5kpvb9dx1awgx0pzr8n"; + }; + }; + }; + }; + devPackages = { + "myclabs/deep-copy" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "myclabs-deep-copy-14daed4296fae74d9e3201d2c4925d1acb7aa614"; + src = fetchurl { + url = "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614"; + sha256 = "11593chczjw8k5jix2mj9v31lg5jgpxqrkhp27bxd96aajapqd9w"; + }; + }; + }; + "phar-io/manifest" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phar-io-manifest-7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"; + src = fetchurl { + url = "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"; + sha256 = "1n59a0gnk43ryl54bc37hlsi1spvi8280bq64zddxrpagyjyp15a"; + }; + }; + }; + "phar-io/version" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phar-io-version-45a2ec53a73c70ce41d55cedef9063630abaf1b6"; + src = fetchurl { + url = "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6"; + sha256 = "0syr7v2b3lsdavfa22z55sdkg5awc3jlzpgn0qk0d3vf6x96hvzp"; + }; + }; + }; + "phpdocumentor/reflection-common" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpdocumentor-reflection-common-1d01c49d4ed62f25aa84a747ad35d5a16924662b"; + src = fetchurl { + url = "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b"; + sha256 = "1wx720a17i24471jf8z499dnkijzb4b8xra11kvw9g9hhzfadz1r"; + }; + }; + }; + "phpdocumentor/reflection-docblock" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpdocumentor-reflection-docblock-622548b623e81ca6d78b721c5e029f4ce664f170"; + src = fetchurl { + url = "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170"; + sha256 = "1vs0fhpqk8s9bc0sqyfhpbs63q14lfjg1f0c1dw4jz97145j6r1n"; + }; + }; + }; + "phpdocumentor/type-resolver" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpdocumentor-type-resolver-77a32518733312af16a44300404e945338981de3"; + src = fetchurl { + url = "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/77a32518733312af16a44300404e945338981de3"; + sha256 = "0y6byv5psmrcy6ga7nghzblv61rjbni046h0pgjda8r8qmz26yr4"; + }; + }; + }; + "phpspec/prophecy" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpspec-prophecy-bbcd7380b0ebf3961ee21409db7b38bc31d69a13"; + src = fetchurl { + url = "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13"; + sha256 = "1xw7x12lws8qdrryhbgjiih48gxwlq99ayhhsy0q2ls9i9p6mw0w"; + }; + }; + }; + "phpunit/php-code-coverage" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-php-code-coverage-807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/807e6013b00af69b6c5d9ceb4282d0393dbb9d8d"; + sha256 = "04l5piavahvxp5j3f6s1cx85b3lnjidnlw3nixk24nwqx4bdfk10"; + }; + }; + }; + "phpunit/php-file-iterator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-php-file-iterator-42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/42c5ba5220e6904cbfe8b1a1bda7c0cfdc8c12f5"; + sha256 = "1mqbdc4xdawv3w591ri9spa8rqric0rzp7bfx751r87cfqgi3lay"; + }; + }; + }; + "phpunit/php-text-template" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-php-text-template-31f8b717e51d9a2afca6c9f046f5d69fc27c8686"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686"; + sha256 = "1y03m38qqvsbvyakd72v4dram81dw3swyn5jpss153i5nmqr4p76"; + }; + }; + }; + "phpunit/php-timer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-php-timer-2454ae1765516d20c4ffe103d85a58a9a3bd5662"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662"; + sha256 = "12gaqzvgh5y212zmp253z03w0f040v00zqafymilzkc9l0m2fsxd"; + }; + }; + }; + "phpunit/php-token-stream" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-php-token-stream-9c1da83261628cb24b6a6df371b6e312b3954768"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9c1da83261628cb24b6a6df371b6e312b3954768"; + sha256 = "1q0gbd9hz6psa0a78cdxdw9xavfy1r2ilp88spbrps761081wmr5"; + }; + }; + }; + "phpunit/phpunit" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "phpunit-phpunit-9467db479d1b0487c99733bb1e7944d32deded2c"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9467db479d1b0487c99733bb1e7944d32deded2c"; + sha256 = "192mri9ikbcc8ix4pwiwyyw8jc9xfg77il4wjbadycw4k4f43944"; + }; + }; + }; + "sebastian/code-unit-reverse-lookup" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-code-unit-reverse-lookup-1de8cd5c010cb153fcd68b8d0f64606f523f7619"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619"; + sha256 = "17690sqmhdabhvgalrf2ypbx4nll4g4cwdbi51w5p6w9n8cxch1a"; + }; + }; + }; + "sebastian/comparator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-comparator-1dc7ceb4a24aede938c7af2a9ed1de09609ca770"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1dc7ceb4a24aede938c7af2a9ed1de09609ca770"; + sha256 = "0acdcv5dfzrxkpi3nhqd5w2zwj96rpgwx0wkj01qixvas45jmfzf"; + }; + }; + }; + "sebastian/diff" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-diff-14f72dd46eaf2f2293cbe79c93cc0bc43161a211"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211"; + sha256 = "0planffhifwhxgml9r3ma89c83jvbrqilj517a5ps9x8vc6kk312"; + }; + }; + }; + "sebastian/environment" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-environment-d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"; + sha256 = "1s5wfp79bx2diw9jxfdm6l54286pr9b1rhs7s2j71rvj4y7pycgp"; + }; + }; + }; + "sebastian/exporter" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-exporter-73a9676f2833b9a7c36968f9d882589cd75511e6"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/exporter/zipball/73a9676f2833b9a7c36968f9d882589cd75511e6"; + sha256 = "1v7fmy6l3mnl7kl8a842v5j1fl6xjlmnn6w6fvvgcw813ab5xgax"; + }; + }; + }; + "sebastian/global-state" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-global-state-e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/global-state/zipball/e8ba02eed7bbbb9e59e43dedd3dddeff4a56b0c4"; + sha256 = "1489kfvz0gg6jprakr43mjkminlhpsimcdrrxkmsm6mmhahbgjnf"; + }; + }; + }; + "sebastian/object-enumerator" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-object-enumerator-e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"; + sha256 = "10g778j02h3kywvz4ldhin64zbypxpl0l39rm2ycsr7iin8q904w"; + }; + }; + }; + "sebastian/object-reflector" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-object-reflector-9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"; + sha256 = "010g9mkf3s1hcbwn1wvd9s72xcyjzrb6csx472xs69yln1mr11z8"; + }; + }; + }; + "sebastian/recursion-context" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-recursion-context-367dcba38d6e1977be014dc4b22f47a484dac7fb"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb"; + sha256 = "1zpq0qk2mgwnbyhjnj05dz2n2v8hvj2g4jy68fd5klxxkdr92ps7"; + }; + }; + }; + "sebastian/resource-operations" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-resource-operations-31d35ca87926450c44eae7e2611d45a7a65ea8b3"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3"; + sha256 = "10im8r899k4jdch1r4n6nbfvxbqnndg3bqrzlvxi03w501pcsxfd"; + }; + }; + }; + "sebastian/version" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sebastian-version-99732be0ddb3361e16ad77b68ba41efc8e979019"; + src = fetchurl { + url = "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019"; + sha256 = "0wrw5hskz2hg5aph9r1fhnngfrcvhws1pgs0lfrwindy066z6fj7"; + }; + }; + }; + "sensio/generator-bundle" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "sensio-generator-bundle-28cbaa244bd0816fd8908b93f90380bcd7b67a65"; + src = fetchurl { + url = "https://api.github.com/repos/sensiolabs/SensioGeneratorBundle/zipball/28cbaa244bd0816fd8908b93f90380bcd7b67a65"; + sha256 = "1j09y037xk843q8gcyfmwgy6dmn0h67pd5jnsvhj08h92ssbl0c3"; + }; + }; + }; + "symfony/phpunit-bridge" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "symfony-phpunit-bridge-75857fc94e9cb68e7ab32e7a962750f73ce40396"; + src = fetchurl { + url = "https://api.github.com/repos/symfony/phpunit-bridge/zipball/75857fc94e9cb68e7ab32e7a962750f73ce40396"; + sha256 = "17x05cxf9kcjim474v56g7wgvm84bvixljra6kfv3hljxlr0sdqd"; + }; + }; + }; + "theseer/tokenizer" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "theseer-tokenizer-34a41e998c2183e22995f158c581e7b5e755ab9e"; + src = fetchurl { + url = "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e"; + sha256 = "1za4a017kjb4rw2ydglip4bp5q2y7mfiycj3fvnp145i84jc7n0q"; + }; + }; + }; + "webmozart/assert" = { + targetDir = ""; + src = composerEnv.buildZipPackage { + name = "webmozart-assert-11cb2199493b2f8a3b53e7f19068fc6aac760991"; + src = fetchurl { + url = "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991"; + sha256 = "18qiza1ynwxpi6731jx1w5qsgw98prld1lgvfk54z92b1nc7psix"; + }; + }; + }; + }; +} diff --git a/modules/private/websites/nicecoop/gestion-compte_integration.nix b/modules/private/websites/nicecoop/gestion-compte_integration.nix new file mode 100644 index 0000000..8c5d270 --- /dev/null +++ b/modules/private/websites/nicecoop/gestion-compte_integration.nix @@ -0,0 +1,158 @@ +{ lib, pkgs, config, ... }: +let + secrets = config.myEnv.websites.nicecoop.gestion-compte-integration; + varDir = "/var/lib/nicecoop_gestion-compte_integration/var"; + parametersPath = "/var/lib/buildbot/outputs/nicecoop/gestion/sandbox/parameters.yml"; + app = pkgs.callPackage ./gestion-compte { + inherit varDir; + secretsPath = parametersPath; + }; + cfg = config.myServices.websites.nicecoop.gestion-compte-integration; +in { + options.myServices.websites.nicecoop.gestion-compte-integration.enable = lib.mkEnableOption "enable nicecoop's gestion-compte website"; + + config = lib.mkIf cfg.enable { + services.phpfpm.pools.nicecoop_gestion-compte_integration = { + user = config.services.httpd.Inte.user; + group = config.services.httpd.Inte.group; + settings = { + "listen.owner" = config.services.httpd.Inte.user; + "listen.group" = config.services.httpd.Inte.group; + "php_admin_value[open_basedir]" = builtins.concatStringsSep ":" [ + app + varDir + parametersPath + "/tmp" + ]; + "php_admin_value[upload_max_filesize]" = "20M"; + "php_admin_value[post_max_size]" = "20M"; + "php_admin_value[session.save_path]" = "${varDir}/phpSessions"; + "pm" = "dynamic"; + "pm.max_children" = "20"; + "pm.start_servers" = "2"; + "pm.min_spare_servers" = "1"; + "pm.max_spare_servers" = "3"; + }; + }; + services.cron = { + systemCronJobs = let + prefix = "${config.services.httpd.Prod.user} cd ${app} && ./bin/console --env=prod"; + in [ + '' + # generate shifts in 80 to 90 days + 55 5 * * * ${prefix} app:shift:generate --quiet $(date -d "+80 days" +\%Y-\%m-\%d) --to $(date -d "+90 days" +\%Y-\%m-\%d) + + # free pre-booked shifts + 55 5 * * * ${prefix} app:shift:free --quiet $(date -d "+21 days" +\%Y-\%m-\%d) + + # send reminder 2 days before shift + 0 6 * * * ${prefix} app:shift:reminder --quiet $(date -d "+2 days" +\%Y-\%m-\%d) + + # execute routine for cycle_end/cycle_start, everyday + 5 6 * * * ${prefix} app:user:cycle_start --quiet + + # send alert on shifts booking (low) + 0 10 * * * ${prefix} app:shift:send_alerts --quiet --emails creneaux@nicecoop.fr $(date -d "+2 days" +\%Y-\%m-\%d) 1 + + # send a reminder mail to the user who generate the last code but did not validate the change. + 45 21 * * * ${prefix} app:code:verify_change --quiet --last_run 24 + '' + ]; + }; + system.extraSystemBuilderCmds = let + tarball = pkgs.runCommand "sandbox.tar.gz" {} '' + tar -P --transform="s@${app}@sandbox_app@" -czf $out ${app} + ''; + in '' + mkdir -p $out/nicecoop/gestion + ln -s ${tarball} $out/nicecoop/gestion/sandbox.tar.gz + ''; + systemd.services.phpfpm-nicecoop_gestion-compte_integration = { + after = lib.mkAfter ["mysql.service"]; + wants = ["mysql.service"]; + preStart = lib.mkAfter '' + /run/wrappers/bin/sudo chown wwwrun:wwwrun ${parametersPath} + watchFilesChanged() { + [ ! -f "${varDir}"/watchedFiles ] \ + || ! sha512sum -c --status ${varDir}/watchedFiles + } + appDirChanged() { + [ ! -f "${varDir}/currentWebappDir" -o \ + "${app}" != "$(cat ${varDir}/currentWebappDir 2>/dev/null)" ] + } + updateWatchFiles() { + sha512sum ${parametersPath} > ${varDir}/watchedFiles + } + + if watchFilesChanged || appDirChanged; then + pushd ${app} > /dev/null + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod cache:clear + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:database:create -n --if-not-exists + /run/wrappers/bin/sudo -u wwwrun ./bin/console --env=prod doctrine:migrations:migrate -n + popd > /dev/null + echo -n "${app}" > ${varDir}/currentWebappDir + updateWatchFiles + fi + ''; + }; + + system.activationScripts.nicecoop_gestion-compte_integration = { + deps = []; + text = '' + install -m 0700 -o wwwrun -g wwwrun -d ${varDir} ${varDir}/phpSessions ${varDir}/var + ''; + }; + + services.filesWatcher.phpfpm-nicecoop_gestion-compte_integration = { + restart = true; + paths = [ + parametersPath + ]; + }; + + secrets.keys."buildbot/nicecoop/sandbox.yml" = { + user = "buildbot"; + group = "buildbot"; + permissions = "0400"; + text = builtins.toJSON { + database = { + host = secrets.mysql.host; + port = secrets.mysql.port; + name = secrets.mysql.database; + user = secrets.mysql.user; + password = secrets.mysql.password; + version = pkgs.mariadb.mysqlVersion; + }; + admipassword = secrets.adminpassword; + smtp = { + host = secrets.smtp.host; + port = secrets.smtp.port; + email = secrets.smtp.email; + password = secrets.smtp.password; + }; + secret = secrets.secret; + }; + }; + + services.websites.env.integration.vhostConfs.nicecoop_gestion-compte = { + certName = "integration"; + addToCerts = true; + hosts = ["gestion-compte.nc.immae.dev"]; + root = app.webRoot; + extraConfig = [ + '' + + SetHandler "proxy:unix:${config.services.phpfpm.pools.nicecoop_gestion-compte_integration.socket}|fcgi://localhost" + + + + Options Indexes FollowSymLinks MultiViews Includes + AllowOverride All + Require all granted + + '' + ]; + }; + }; +} + diff --git a/modules/private/websites/nicecoop/odoo.nix b/modules/private/websites/nicecoop/odoo.nix new file mode 100644 index 0000000..f8f44e6 --- /dev/null +++ b/modules/private/websites/nicecoop/odoo.nix @@ -0,0 +1,127 @@ +{ lib, config, pkgs, ... }: +let + cfg = config.myServices.websites.nicecoop.odoo; + pcfg = config.myEnv.websites.nicecoop.odoo; + odoo = pkgs.callPackage ./odoo {}; + hostname = "odoo.nc.immae.dev"; + download-bundles = let + nix-bundle = import (builtins.fetchTarball "https://github.com/matthewbauer/nix-bundle/archive/master.tar.gz") {}; + extraTargets = { + wkhtmltopdf = (import { overlays = []; }).wkhtmltopdf; + }; + odoo-bundle = nix-bundle.nix-bootstrap { target = odoo; run = "/bin/odoo"; extraTargets = builtins.attrValues extraTargets; }; + in + pkgs.runCommand "download-bundles" {} '' + mkdir -p $out + cp ${odoo-bundle} $out/odoo + chmod +x $out/* + cd $out + sha256sum * > sha256sums.txt + cat > extra-paths.json <<"EOF" + ${builtins.toJSON extraTargets} + EOF + ''; +in { + options.myServices.websites.nicecoop.odoo.enable = lib.mkEnableOption "enable nicecoop's odoo website"; + + config = lib.mkIf cfg.enable { + myServices.databases.postgresql.authorizedHosts = { + nicecoop = [ + { + username = "bucardo"; + database = "nicecoop_odoo"; + ip4 = ["82.65.251.137"]; + ip6 = ["2a01:e0a:58d:55f0::/64"]; + } + ]; + }; + secrets.keys."websites/nicecoop/odoo.conf" = { + user = config.services.httpd.Inte.user; + group = config.services.httpd.Inte.group; + permissions = "0400"; + text = '' + [options] + ; This is the password that allows database operations: + admin_passwd = ${pcfg.admin_password} + db_host = ${pcfg.postgresql.socket} + db_port = ${pcfg.postgresql.port} + db_user = ${pcfg.postgresql.user} + db_password = ${pcfg.postgresql.password} + db_name = ${pcfg.postgresql.database} + db_maxconn = 64 + + workers = 5 + max_cron_threads = 2 + limit_time_cpu = 60 + limit_time_real = 170 + limit_memory_soft = 471974428 + limit_memory_hard = 1395864371 + limit_request = 8196 + osv_memory_count_limit = False + osv_memory_age_limit = 1.0 + without_demo = ['all'] + + proxy_mode = True + http_interface = 127.0.0.1 + http_port = ${builtins.toString pcfg.port} + longpolling_port = ${builtins.toString pcfg.longpoll_port} + ''; + }; + + services.websites.env.integration.modules = [ "remoteip" ]; + services.websites.env.integration.vhostConfs.nicecoop_odoo = { + certName = "integration"; + addToCerts = true; + hosts = [ hostname ]; + root = null; + extraConfig = [ + '' + Alias /download-bundles ${download-bundles} + RewriteEngine On + ProxyPreserveHost on + ProxyVia On + ProxyRequests Off + ProxyPass /download-bundles ! + ProxyPassMatch ^/.well-known/acme-challenge ! + ProxyPass /longpoll http://localhost:${builtins.toString pcfg.longpoll_port}/ + ProxyPassReverse /longpoll http://localhost:${builtins.toString pcfg.longpoll_port}/ + ProxyPass / http://localhost:${builtins.toString pcfg.port}/ + ProxyPassReverse / http://localhost:${builtins.toString pcfg.port}/ + RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} + RemoteIPHeader X-Real-IP + + + Require all granted + + '' + ]; + }; + + services.filesWatcher.nicecoop-odoo = { + restart = true; + paths = [ config.secrets.fullPaths."websites/nicecoop/odoo.conf" ]; + }; + systemd.services.nicecoop-odoo = { + description = "Nicecoop Odoo website"; + after = [ "network.target" ]; + wantedBy = [ "multi-user.target" ]; + + path = [ (import { overlays = []; }).wkhtmltopdf ]; + serviceConfig = { + Environment = [ + "HOME=%S/nicecoop_odoo" + ]; + Type = "simple"; + ExecStart = "${odoo}/bin/odoo -c ${config.secrets.fullPaths."websites/nicecoop/odoo.conf"}"; + User = "wwwrun"; + Restart = "always"; + RestartSec = "5s"; + StandardOutput = "journal"; + StandardError = "inherit"; + StateDirectory = "nicecoop_odoo"; + WorkingDirectory = "%S/nicecoop_odoo"; + }; + }; + + }; +} diff --git a/modules/private/websites/nicecoop/odoo/default.nix b/modules/private/websites/nicecoop/odoo/default.nix new file mode 100644 index 0000000..3479f6f --- /dev/null +++ b/modules/private/websites/nicecoop/odoo/default.nix @@ -0,0 +1,37 @@ +{ poetry2nix, runCommand, fetchFromGitHub, openldap, cyrus_sasl, pkg-config, python36 }: +let + version = "13.0"; + commit = "8353c069529030bddf4bff071c13906565ddc7f1"; + poetryApp = poetry2nix.mkPoetryApplication rec { + src = fetchFromGitHub { + owner = "odoo"; + repo = "odoo"; + rev = commit; + sha256 = "0lyq7bylb4xnry7vn1k39k0w9i064hpm1d3fq2h9lsyakhxdnb1p"; + }; + overrides = poetry2nix.overrides.withDefaults (self: super: { + pyldap = super.pyldap.overridePythonAttrs (old: { + buildInputs = old.buildInputs ++ [ openldap cyrus_sasl ]; + nativeBuildInputs = old.nativeBuildInputs ++ [ pkg-config ]; + preConfigure = old.preConfigure or "" + '' + export NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${cyrus_sasl.dev}/include/sasl" + ''; + }); + }); + pyproject = ./pyproject.toml; + poetrylock = ./poetry.lock; + python = python36; + nativeBuildInputs = [ openldap ]; + preBuild = '' + mv addons/* odoo/addons + ''; + }; +in + runCommand "python3.6-odoo-${version}" {} '' + mkdir -p $out + cp -a ${poetryApp}/* $out/ + chmod -R u+w $out + find $out -type f -exec sed -i -e "s@${poetryApp}@$out@g" {} \; + cd $out/lib/python3.6/site-packages/odoo + patch -p2 < ${./odoo.patch} + '' diff --git a/modules/private/websites/nicecoop/odoo/odoo.patch b/modules/private/websites/nicecoop/odoo/odoo.patch new file mode 100644 index 0000000..a921ed4 --- /dev/null +++ b/modules/private/websites/nicecoop/odoo/odoo.patch @@ -0,0 +1,26 @@ +diff --git a/odoo/service/server.py b/odoo/service/server.py +index 421de812ba5..94f551b025d 100644 +--- a/odoo/service/server.py ++++ b/odoo/service/server.py +@@ -701,7 +701,7 @@ class PreforkServer(CommonServer): + + def long_polling_spawn(self): + nargs = stripped_sys_argv() +- cmd = [sys.executable, sys.argv[0], 'gevent'] + nargs[1:] ++ cmd = [sys.argv[0], 'gevent'] + nargs[1:] + popen = subprocess.Popen(cmd) + self.long_polling_pid = popen.pid + +diff --git a/odoo/addons/base/models/ir_attachment.py b/odoo/addons/base/models/ir_attachment.py +index abbbe7826a3..7e31edf21d3 100644 +--- a/odoo/addons/base/models/ir_attachment.py ++++ b/odoo/addons/base/models/ir_attachment.py +@@ -46,7 +46,7 @@ class IrAttachment(models.Model): + + @api.model + def _storage(self): +- return self.env['ir.config_parameter'].sudo().get_param('ir_attachment.location', 'file') ++ return self.env['ir.config_parameter'].sudo().get_param('ir_attachment.location', 'db') + + @api.model + def _filestore(self): diff --git a/modules/private/websites/nicecoop/odoo/poetry.lock b/modules/private/websites/nicecoop/odoo/poetry.lock new file mode 100644 index 0000000..92782c3 --- /dev/null +++ b/modules/private/websites/nicecoop/odoo/poetry.lock @@ -0,0 +1,1085 @@ +[[package]] +category = "main" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +name = "appdirs" +optional = false +python-versions = "*" +version = "1.4.4" + +[[package]] +category = "main" +description = "Classes Without Boilerplate" +name = "attrs" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "21.2.0" + +[package.extras] +dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] +tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] + +[[package]] +category = "main" +description = "Internationalization utilities" +name = "babel" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.6.0" + +[package.dependencies] +pytz = ">=0a" + +[[package]] +category = "main" +description = "Screen-scraping library" +name = "beautifulsoup4" +optional = false +python-versions = "*" +version = "4.9.3" + +[package.dependencies] +[package.dependencies.soupsieve] +python = ">=3.0" +version = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +category = "main" +description = "A decorator for caching properties in classes." +name = "cached-property" +optional = false +python-versions = "*" +version = "1.5.2" + +[[package]] +category = "main" +description = "Python package for providing Mozilla's CA Bundle." +name = "certifi" +optional = false +python-versions = "*" +version = "2021.5.30" + +[[package]] +category = "main" +description = "Universal encoding detector for Python 2 and 3" +name = "chardet" +optional = false +python-versions = "*" +version = "3.0.4" + +[[package]] +category = "main" +description = "Cross-platform colored terminal text." +marker = "platform_system == \"Windows\"" +name = "colorama" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.4.4" + +[[package]] +category = "main" +description = "Better living through Python with decorators" +name = "decorator" +optional = false +python-versions = "*" +version = "4.3.0" + +[[package]] +category = "main" +description = "XML bomb protection for Python stdlib modules" +name = "defusedxml" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +version = "0.7.1" + +[[package]] +category = "main" +description = "Docutils -- Python Documentation Utilities" +name = "docutils" +optional = false +python-versions = "*" +version = "0.14" + +[[package]] +category = "main" +description = "eBay SDK for Python" +name = "ebaysdk" +optional = false +python-versions = "*" +version = "2.1.5" + +[package.dependencies] +lxml = "*" +requests = "*" + +[[package]] +category = "main" +description = "Universal feed parser, handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds" +name = "feedparser" +optional = false +python-versions = "*" +version = "5.2.1" + +[[package]] +category = "main" +description = "Coroutine-based network library (python 2.6 - 3.5)" +name = "gevent" +optional = false +python-versions = "*" +version = "1.1.2" + +[package.dependencies] +greenlet = ">=0.4.9" + +[[package]] +category = "main" +description = "Lightweight in-process concurrent programming" +name = "greenlet" +optional = false +python-versions = "*" +version = "0.4.10" + +[[package]] +category = "main" +description = "Turn HTML into equivalent Markdown-structured text." +name = "html2text" +optional = false +python-versions = "*" +version = "2018.1.9" + +[[package]] +category = "main" +description = "Internationalized Domain Names in Applications (IDNA)" +name = "idna" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.8" + +[[package]] +category = "main" +description = "An ISO 8601 date/time/duration parser and formatter" +name = "isodate" +optional = false +python-versions = "*" +version = "0.6.0" + +[package.dependencies] +six = "*" + +[[package]] +category = "main" +description = "A small but fast and easy to use stand-alone template engine written in pure python." +name = "jinja2" +optional = false +python-versions = "*" +version = "2.10.1" + +[package.dependencies] +MarkupSafe = ">=0.23" + +[package.extras] +i18n = ["Babel (>=0.8)"] + +[[package]] +category = "main" +description = "Sass for Python: A straightforward binding of libsass for Python." +name = "libsass" +optional = false +python-versions = "*" +version = "0.17.0" + +[package.dependencies] +six = "*" + +[package.extras] +upload_appveyor_builds = ["twine (1.11.0)"] + +[[package]] +category = "main" +description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." +name = "lxml" +optional = false +python-versions = "*" +version = "3.7.1" + +[package.extras] +cssselect = ["cssselect (>=0.7)"] +html5 = ["html5lib"] +htmlsoup = ["beautifulsoup4"] +source = ["Cython (>=0.20)"] + +[[package]] +category = "main" +description = "A super-fast templating language that borrows the best ideas from the existing templating languages." +name = "mako" +optional = false +python-versions = "*" +version = "1.0.7" + +[package.dependencies] +MarkupSafe = ">=0.9.2" + +[[package]] +category = "main" +description = "Safely add untrusted strings to HTML/XML markup." +name = "markupsafe" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "1.1.0" + +[[package]] +category = "main" +description = "Rolling backport of unittest.mock for all Pythons" +name = "mock" +optional = false +python-versions = "*" +version = "2.0.0" + +[package.dependencies] +pbr = ">=0.11" +six = ">=1.9" + +[package.extras] +docs = ["sphinx", "Pygments (<2)", "jinja2 (<2.7)", "sphinx (<1.3)"] +test = ["unittest2 (>=1.1.0)"] + +[[package]] +category = "main" +description = "Modules to convert numbers to words. Easily extensible." +name = "num2words" +optional = false +python-versions = "*" +version = "0.5.6" + +[[package]] +category = "main" +description = "Tools for working with the OFX (Open Financial Exchange) file format" +name = "ofxparse" +optional = false +python-versions = "*" +version = "0.19" + +[package.dependencies] +beautifulsoup4 = "*" +lxml = "*" +six = "*" + +[[package]] +category = "main" +description = "comprehensive password hashing framework supporting over 30 schemes" +name = "passlib" +optional = false +python-versions = "*" +version = "1.7.1" + +[package.extras] +argon2 = ["argon2-cffi (>=16.2)"] +bcrypt = ["bcrypt (>=3.1.0)"] +totp = ["cryptography"] + +[[package]] +category = "main" +description = "Python Build Reasonableness" +name = "pbr" +optional = false +python-versions = ">=2.6" +version = "5.6.0" + +[[package]] +category = "main" +description = "Python Imaging Library (Fork)" +name = "pillow" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "5.4.1" + +[[package]] +category = "main" +description = "A library to manipulate gettext files (po and mo files)." +name = "polib" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "Cross-platform lib for process and system monitoring in Python." +name = "psutil" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "5.6.6" + +[package.extras] +enum = ["enum34"] + +[[package]] +category = "main" +description = "psycopg2 - Python-PostgreSQL Database Adapter" +name = "psycopg2" +optional = false +python-versions = "*" +version = "2.7.7" + +[[package]] +category = "main" +description = "ASN.1 types and codecs" +name = "pyasn1" +optional = false +python-versions = "*" +version = "0.4.8" + +[[package]] +category = "main" +description = "A collection of ASN.1-based protocols modules." +name = "pyasn1-modules" +optional = false +python-versions = "*" +version = "0.2.8" + +[package.dependencies] +pyasn1 = ">=0.4.6,<0.5.0" + +[[package]] +category = "main" +description = "Python interface to Graphviz's Dot" +name = "pydot" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "1.4.1" + +[package.dependencies] +pyparsing = ">=2.1.4" + +[[package]] +category = "main" +description = "Python parsing module" +name = "pyparsing" +optional = false +python-versions = "*" +version = "2.2.0" + +[[package]] +category = "main" +description = "PDF toolkit" +name = "pypdf2" +optional = false +python-versions = "*" +version = "1.26.0" + +[[package]] +category = "main" +description = "Python Serial Port Extension" +name = "pyserial" +optional = false +python-versions = "*" +version = "3.4" + +[[package]] +category = "main" +description = "Extensions to the standard Python datetime module" +name = "python-dateutil" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "2.7.3" + +[package.dependencies] +six = ">=1.5" + +[[package]] +category = "main" +description = "Python modules for implementing LDAP clients" +name = "python-ldap" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +version = "3.1.0" + +[package.dependencies] +pyasn1 = ">=0.3.7" +pyasn1_modules = ">=0.1.5" + +[[package]] +category = "main" +description = "Python module to handle standardized numbers and codes" +name = "python-stdnum" +optional = false +python-versions = "*" +version = "1.16" + +[package.extras] +soap = ["zeep"] +soap-alt = ["suds"] +soap-fallback = ["pysimplesoap"] + +[[package]] +category = "main" +description = "World timezone definitions, modern and historical" +name = "pytz" +optional = false +python-versions = "*" +version = "2019.1" + +[[package]] +category = "main" +description = "Python USB access module" +name = "pyusb" +optional = false +python-versions = "*" +version = "1.0.2" + +[[package]] +category = "main" +description = "QR Code image generator" +name = "qrcode" +optional = false +python-versions = "*" +version = "6.1" + +[package.dependencies] +colorama = "*" +six = "*" + +[package.extras] +dev = ["tox", "pytest", "mock"] +maintainer = ["zest.releaser"] +pil = ["pillow"] +test = ["pytest", "pytest-cov", "mock"] + +[[package]] +category = "main" +description = "The Reportlab Toolkit" +name = "reportlab" +optional = false +python-versions = "*" +version = "3.5.13" + +[package.dependencies] +pillow = ">=4.0.0" + +[[package]] +category = "main" +description = "Python HTTP for Humans." +name = "requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +version = "2.21.0" + +[package.dependencies] +certifi = ">=2017.4.17" +chardet = ">=3.0.2,<3.1.0" +idna = ">=2.5,<2.9" +urllib3 = ">=1.21.1,<1.25" + +[package.extras] +security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"] + +[[package]] +category = "main" +description = "A utility belt for advanced users of python-requests" +name = "requests-toolbelt" +optional = false +python-versions = "*" +version = "0.9.1" + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +category = "main" +description = "Python 2 and 3 compatibility utilities" +name = "six" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +version = "1.16.0" + +[[package]] +category = "main" +description = "A modern CSS selector implementation for Beautiful Soup." +marker = "python_version >= \"3.0\"" +name = "soupsieve" +optional = false +python-versions = ">=3.6" +version = "2.2.1" + +[[package]] +category = "main" +description = "HTTP library with thread-safe connection pooling, file post, and more." +name = "urllib3" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +version = "1.24.3" + +[package.extras] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"] + +[[package]] +category = "main" +description = "[UNMAINTAINED] Python module to validate VAT numbers" +name = "vatnumber" +optional = false +python-versions = "*" +version = "1.2" + +[package.dependencies] +python-stdnum = "*" + +[package.extras] +suds = ["suds"] + +[[package]] +category = "main" +description = "A full-featured Python package for parsing and creating iCalendar and vCard files" +name = "vobject" +optional = false +python-versions = "*" +version = "0.9.6.1" + +[package.dependencies] +python-dateutil = ">=2.4.0" + +[[package]] +category = "main" +description = "The comprehensive WSGI web application library." +name = "werkzeug" +optional = false +python-versions = "*" +version = "0.14.1" + +[package.extras] +dev = ["coverage", "pytest", "sphinx", "tox"] +termcolor = ["termcolor"] +watchdog = ["watchdog"] + +[[package]] +category = "main" +description = "Library for developers to extract data from Microsoft Excel (tm) spreadsheet files" +name = "xlrd" +optional = false +python-versions = "*" +version = "1.1.0" + +[[package]] +category = "main" +description = "A Python module for creating Excel XLSX files." +name = "xlsxwriter" +optional = false +python-versions = "*" +version = "1.1.2" + +[[package]] +category = "main" +description = "Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform, with Python 2.6, 2.7, 3.3+" +name = "xlwt" +optional = false +python-versions = "*" +version = "1.3.0" + +[[package]] +category = "main" +description = "A modern/fast Python SOAP client based on lxml / requests" +name = "zeep" +optional = false +python-versions = "*" +version = "3.2.0" + +[package.dependencies] +appdirs = ">=1.4.0" +attrs = ">=17.2.0" +cached-property = ">=1.3.0" +defusedxml = ">=0.4.1" +isodate = ">=0.5.4" +lxml = ">=3.1.0" +pytz = "*" +requests = ">=2.7.0" +requests-toolbelt = ">=0.7.1" +six = ">=1.9.0" + +[package.extras] +async = ["aiohttp (>=1.0)"] +docs = ["sphinx (>=1.4.0)"] +test = ["freezegun (0.3.8)", "mock (2.0.0)", "pretend (1.0.8)", "pytest-cov (2.5.1)", "pytest (3.1.3)", "requests-mock (>=0.7.0)", "pytest-tornado (0.4.5)", "isort (4.2.15)", "flake8 (3.3.0)", "flake8-blind-except (0.1.1)", "flake8-debugger (1.4.0)", "flake8-imports (0.1.1)", "aioresponses (>=0.4.1)"] +tornado = ["tornado (>=4.0.2,<5)"] +xmlsec = ["xmlsec (>=0.6.1)"] + +[metadata] +content-hash = "885e8d8d411460ab489d46959ce536810ac940753beb0a12ebaa70ae732d61ca" +lock-version = "1.0" +python-versions = "^3.6" + +[metadata.files] +appdirs = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] +attrs = [ + {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, + {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, +] +babel = [ + {file = "Babel-2.6.0-py2.py3-none-any.whl", hash = "sha256:6778d85147d5d85345c14a26aada5e478ab04e39b078b0745ee6870c2b5cf669"}, + {file = "Babel-2.6.0.tar.gz", hash = "sha256:8cba50f48c529ca3fa18cf81fa9403be176d374ac4d60738b839122dfaaa3d23"}, +] +beautifulsoup4 = [ + {file = "beautifulsoup4-4.9.3-py2-none-any.whl", hash = "sha256:4c98143716ef1cb40bf7f39a8e3eec8f8b009509e74904ba3a7b315431577e35"}, + {file = "beautifulsoup4-4.9.3-py3-none-any.whl", hash = "sha256:fff47e031e34ec82bf17e00da8f592fe7de69aeea38be00523c04623c04fb666"}, + {file = "beautifulsoup4-4.9.3.tar.gz", hash = "sha256:84729e322ad1d5b4d25f805bfa05b902dd96450f43842c4e99067d5e1369eb25"}, +] +cached-property = [ + {file = "cached-property-1.5.2.tar.gz", hash = "sha256:9fa5755838eecbb2d234c3aa390bd80fbd3ac6b6869109bfc1b499f7bd89a130"}, + {file = "cached_property-1.5.2-py2.py3-none-any.whl", hash = "sha256:df4f613cf7ad9a588cc381aaf4a512d26265ecebd5eb9e1ba12f1319eb85a6a0"}, +] +certifi = [ + {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, + {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, +] +chardet = [ + {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, + {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +decorator = [ + {file = "decorator-4.3.0-py2.py3-none-any.whl", hash = "sha256:2c51dff8ef3c447388fe5e4453d24a2bf128d3a4c32af3fabef1f01c6851ab82"}, + {file = "decorator-4.3.0.tar.gz", hash = "sha256:c39efa13fbdeb4506c476c9b3babf6a718da943dab7811c206005a4a956c080c"}, +] +defusedxml = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] +docutils = [ + {file = "docutils-0.14-py2-none-any.whl", hash = "sha256:7a4bd47eaf6596e1295ecb11361139febe29b084a87bf005bf899f9a42edc3c6"}, + {file = "docutils-0.14-py3-none-any.whl", hash = "sha256:02aec4bd92ab067f6ff27a38a38a41173bf01bed8f89157768c1573f53e474a6"}, + {file = "docutils-0.14.tar.gz", hash = "sha256:51e64ef2ebfb29cae1faa133b3710143496eca21c530f3f71424d77687764274"}, +] +ebaysdk = [ + {file = "ebaysdk-2.1.5-py3.7.egg", hash = "sha256:55360edc239037c3a0aaaf3f39889ddea666b8b1d97c893b2c3fd2269d868b45"}, + {file = "ebaysdk-2.1.5.tar.gz", hash = "sha256:78458e1ea4a0fc7d693c26de363069696393767e4aa9689fd38efbfb08409acd"}, +] +feedparser = [ + {file = "feedparser-5.2.1.tar.bz2", hash = "sha256:ce875495c90ebd74b179855449040003a1beb40cd13d5f037a0654251e260b02"}, + {file = "feedparser-5.2.1.tar.gz", hash = "sha256:bd030652c2d08532c034c27fcd7c85868e7fa3cb2b17f230a44a6bbc92519bf9"}, + {file = "feedparser-5.2.1.zip", hash = "sha256:cd2485472e41471632ed3029d44033ee420ad0b57111db95c240c9160a85831c"}, +] +gevent = [ + {file = "gevent-1.1.2-cp26-cp26m-macosx_10_11_intel.whl", hash = "sha256:ca934dc30f26e84c79e483db4de433702283ff02344d029635730ff9e7c1d416"}, + {file = "gevent-1.1.2-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:f42de31de5f29a11f5480f76c05f3afce80e030333295718efd64bfb823e4e82"}, + {file = "gevent-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:a24fb153e3c65d025c065b140e39998d483d4df6887b02503ba66debf32b49d6"}, + {file = "gevent-1.1.2-cp27-cp27m-win32.whl", hash = "sha256:a51f414f22f31a110823ff0365cb088dc3317a06227c85033d8523dd619ada72"}, + {file = "gevent-1.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:a4ce00048808d3c2ee7e8c83860595b0d2090724770e499056aec1c8947bd2d1"}, + {file = "gevent-1.1.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d072a29ca28bb84d9433434e2675c44ca29635c0aa0ed51b1eecf216991fd204"}, + {file = "gevent-1.1.2-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:2cb985038826eb353f5759dda2ec7bca581abf4e5c2e90b95ddb5d976dc785e6"}, + {file = "gevent-1.1.2-cp33-cp33m-win32.whl", hash = "sha256:9ce82526317a1279de2997e5da2744342ff0bd1459a14d75e749350966ae1e17"}, + {file = "gevent-1.1.2-cp33-cp33m-win_amd64.whl", hash = "sha256:2af2b6eae04ccfa0766a135c31056c92a127ebcb172858880d8309a9e57f52d8"}, + {file = "gevent-1.1.2-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:bd0c6dcc30ec8014426e61a2cc429c7fcbcc26bd7b682bd590d31fce2d2bd843"}, + {file = "gevent-1.1.2-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:720574505391b0f0817b092edfcbb97938d6d407ce912444a92267dab763eb8e"}, + {file = "gevent-1.1.2-cp34-cp34m-win32.whl", hash = "sha256:7188cbec74276e42ea0671ad479e4209f9f12d82bc542d21217a09f759e647e3"}, + {file = "gevent-1.1.2-cp34-cp34m-win_amd64.whl", hash = "sha256:c7f86e297b8ffff7e101993980062f053ebda92ed8c40ab3a9c53c50ff9ef408"}, + {file = "gevent-1.1.2-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:26a622ad8da282b0fea17f3800bfc4eae9be89a53c22ffba5a2b357278b8f8e8"}, + {file = "gevent-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:4552cc8ffefd4c5301ba75ac2720befb0001bc134e4e8c28475e96992e513300"}, + {file = "gevent-1.1.2-cp35-cp35m-win32.whl", hash = "sha256:468bc2aea02aa1963bd0c73803f0378530f60af8fc93a576d0ca79285d60e833"}, + {file = "gevent-1.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:58bdc8d1ca56e3dab833c2e2098a9afa98d0ff0f738c63e896138289c2a08b5e"}, + {file = "gevent-1.1.2-pp253-pypy_41-macosx_10_11_x86_64.whl", hash = "sha256:3963faca1c5e175fdcfeec3ee7116f3d8082be2f94e096871e9b08da10fa4c25"}, + {file = "gevent-1.1.2.tar.gz", hash = "sha256:cb15cf73d69a2eeefed330858f09634e2c50bf46da9f9e7635730fcfb872c02c"}, + {file = "gevent-1.1.2.win-amd64-py2.7.exe", hash = "sha256:911ebb03dee09e841d0f7ee367b1b8380f8918b3e30c3a822bc41599ae74d2a3"}, + {file = "gevent-1.1.2.win-amd64-py3.3.exe", hash = "sha256:f403a6b18b3cdb6de4c0140711de690071783433cd0f325c9e46c585497e580c"}, + {file = "gevent-1.1.2.win-amd64-py3.4.exe", hash = "sha256:3c43de92658eb4723572cd7e543340943e96bf4666f92a819d36f93653c39d15"}, + {file = "gevent-1.1.2.win-amd64-py3.5.exe", hash = "sha256:2feb3fddc0240373bfc0176d7625cb667132beef18009bf7101216baafd136e9"}, + {file = "gevent-1.1.2.win32-py2.7.exe", hash = "sha256:2f578b4469cbd2c5a59f353dacb81f8435b54afe4ec706c6155900aff39e8a12"}, + {file = "gevent-1.1.2.win32-py3.4.exe", hash = "sha256:7d8e8ff35decff1c70fd55959e74e5067505862828d875250a840d8031bf48c2"}, + {file = "gevent-1.1.2.win32-py3.5.exe", hash = "sha256:192439e55f6f99215ba98f95c53cf990b8380858d195d8c84ad60eb55ef4161b"}, +] +greenlet = [ + {file = "greenlet-0.4.10-cp26-cp26m-manylinux1_x86_64.whl", hash = "sha256:1f8bf39807016d97778e12c45510addc6996f965a0b40aa7ecbb28a73ed9861c"}, + {file = "greenlet-0.4.10-cp26-cp26m-win32.whl", hash = "sha256:d0e071a6fd2314447827285d33958b76b98090a78267bd7074f5bc10057db3d5"}, + {file = "greenlet-0.4.10-cp26-cp26m-win_amd64.whl", hash = "sha256:d32efa985042147e87bc08b6f9bcf5335e0adefefdaf391484c38192e8a707f7"}, + {file = "greenlet-0.4.10-cp26-cp26mu-manylinux1_x86_64.whl", hash = "sha256:3cd07825d98ed834a74821fcd8f1c40d8410b6cf92726dcaaad4b46b440da852"}, + {file = "greenlet-0.4.10-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:1b6642acde2889c8cef00ef237e28cfdb1e928ea1c7e08d06d67b4a42a73fcff"}, + {file = "greenlet-0.4.10-cp27-cp27m-win32.whl", hash = "sha256:f97758ca465fd2cf9b3335881b073b3463558e985078f4d8f27941d9626615ea"}, + {file = "greenlet-0.4.10-cp27-cp27m-win_amd64.whl", hash = "sha256:12efc20be79d6f5a61257758b0d926ea083e0e93ca9a3f07bd6ebfac37327a9b"}, + {file = "greenlet-0.4.10-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:5682764e893e5e6621dd70f11b72993f723953ee3d374650bf9dcea99c04f9c2"}, + {file = "greenlet-0.4.10-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:1b537b3144ef518586f7935e3671f0f8195056288936dcd200744f285b7e24ae"}, + {file = "greenlet-0.4.10-cp33-cp33m-win32.whl", hash = "sha256:7e5b804e011d605c24662d30cc2e4c8f4896ee4c1d5f2ed5b73accbc3613af5f"}, + {file = "greenlet-0.4.10-cp33-cp33m-win_amd64.whl", hash = "sha256:5a8a7402f28f2d7d3829d0e62bb370749bd6e013b6eb40cfe2637b298b2fd25f"}, + {file = "greenlet-0.4.10-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d9be3514f22439a3fb468aa1b026654f5eafb1b65bd6b0ffe109439ad77adffc"}, + {file = "greenlet-0.4.10-cp34-cp34m-win32.whl", hash = "sha256:1017efcb7c2078f081dc9b505f2fff606e683e672ddea9a7dbd332222c6a0a7c"}, + {file = "greenlet-0.4.10-cp34-cp34m-win_amd64.whl", hash = "sha256:c6428e6086535231d99c1de464c8a8e2face60d255c4c20dd84379760beb9307"}, + {file = "greenlet-0.4.10-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:37bcb3e2cf8f67ce6b735b1c50f098c6774f5cf47258de58561e05c639dad356"}, + {file = "greenlet-0.4.10-cp35-cp35m-win32.whl", hash = "sha256:4d89f536490e74691e6e1e232c72d112863d8597f894873c3f452e08f21843e4"}, + {file = "greenlet-0.4.10-cp35-cp35m-win_amd64.whl", hash = "sha256:af5fd9bfac0eef3875d6dc4496ba83ed1fb3f802045409a005d08c1ca98cad22"}, + {file = "greenlet-0.4.10-py2.6-win-amd64.egg", hash = "sha256:a9c2e9ded2ee4d6e17c70d52109a97392a64400b1568108825d1cabf26710b35"}, + {file = "greenlet-0.4.10-py2.6-win32.egg", hash = "sha256:58b07295a5085cff7773d2866510701d5cd955156e5368d7b6c823811e62da9b"}, + {file = "greenlet-0.4.10-py2.7-win-amd64.egg", hash = "sha256:3d46c7841477136bcdafa1b343c0849d9886845848bd563279608f0644b2598a"}, + {file = "greenlet-0.4.10-py2.7-win32.egg", hash = "sha256:f4d77939b392bbafbf3eea01169aefe85cb5ffbbd5b9a9d7ef012b01c384df5c"}, + {file = "greenlet-0.4.10-py3.3-win-amd64.egg", hash = "sha256:d0cc137ca44e3664d3d97d7bbba8c77f10b411bdbbe2215c5e7f00f7d5c2af08"}, + {file = "greenlet-0.4.10-py3.3-win32.egg", hash = "sha256:97ee513db7c13ec21ec9b9657e257c2beb491ae8199b058c68d7451a2f6cc27b"}, + {file = "greenlet-0.4.10-py3.4-win-amd64.egg", hash = "sha256:d549332dbb7351301d081db92c27d5f0f3d4803bd92c415c65c30bf98fbe8fb4"}, + {file = "greenlet-0.4.10-py3.4-win32.egg", hash = "sha256:4c5f4908f7c9fb1c4316b45ceabe35985ea79e79336ffe300ddd3f49bf57cbec"}, + {file = "greenlet-0.4.10-py3.5-win-amd64.egg", hash = "sha256:6c717e5fbe2bba8cb885031883dcb55c609ffadb84ef395f91915050d3c84343"}, + {file = "greenlet-0.4.10-py3.5-win32.egg", hash = "sha256:134ec264699eeb76a5fee5d73a3c8766f8d4c5edc12464bb438cb6f3f3bd23e4"}, + {file = "greenlet-0.4.10.tar.gz", hash = "sha256:c4417624aa88380cdf0fe110a8a6e0dbcc26f80887197fe5df0427dfa348ae62"}, + {file = "greenlet-0.4.10.zip", hash = "sha256:9a98d49f63259b16d3627976b69dd856888a376c498b091c8e9ead56d5098ca8"}, +] +html2text = [ + {file = "html2text-2018.1.9-py3-none-any.whl", hash = "sha256:490db40fe5b2cd79c461cf56be4d39eb8ca68191ae41ba3ba79f6cb05b7dd662"}, + {file = "html2text-2018.1.9.tar.gz", hash = "sha256:627514fb30e7566b37be6900df26c2c78a030cc9e6211bda604d8181233bcdd4"}, +] +idna = [ + {file = "idna-2.8-py2.py3-none-any.whl", hash = "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c"}, + {file = "idna-2.8.tar.gz", hash = "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407"}, +] +isodate = [ + {file = "isodate-0.6.0-py2.py3-none-any.whl", hash = "sha256:aa4d33c06640f5352aca96e4b81afd8ab3b47337cc12089822d6f322ac772c81"}, + {file = "isodate-0.6.0.tar.gz", hash = "sha256:2e364a3d5759479cdb2d37cce6b9376ea504db2ff90252a2e5b7cc89cc9ff2d8"}, +] +jinja2 = [ + {file = "Jinja2-2.10.1-py2.py3-none-any.whl", hash = "sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b"}, + {file = "Jinja2-2.10.1.tar.gz", hash = "sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013"}, +] +libsass = [ + {file = "libsass-0.17.0-cp27-cp27m-macosx_10_14_intel.whl", hash = "sha256:bf6b7ad08f287695338f050c80f79d258a405e5c349cdaeb9be5d5376c09e37a"}, + {file = "libsass-0.17.0-cp27-cp27m-win32.whl", hash = "sha256:411833c623288138744865d882f5226f6db52afce1e19f42722c416df9d308dc"}, + {file = "libsass-0.17.0-cp27-cp27m-win_amd64.whl", hash = "sha256:66e3062ff508c81928e35c66702f0cc4f70fb12eb76ba23eeb0ff87a6340cc13"}, + {file = "libsass-0.17.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0da943e00e028211cb4bb91496a20becab9fe82407bb75266ec4212af04acb45"}, + {file = "libsass-0.17.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b3e4abf50ad3a6bec25acd0c67495301cab6137aa79b8640364276f7f3712586"}, + {file = "libsass-0.17.0-cp35-cp35m-win32.whl", hash = "sha256:75605a97f4b2f47fafc5a372f09efec210c7f33908c6de726362f85489fd53aa"}, + {file = "libsass-0.17.0-cp35-cp35m-win_amd64.whl", hash = "sha256:7c7a531b8cd786c35170e97338be2e73a74806f95539366a8ee837df94b8a8cf"}, + {file = "libsass-0.17.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:a19041e78d5bb7c5d72e010e893c29119693628b6ee06025503ab2584cf24edd"}, + {file = "libsass-0.17.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:107591ba2c0d173bb1705bef0e9fd04a5b6f482f3584f4ea51b28ab8b137fbb2"}, + {file = "libsass-0.17.0-cp36-cp36m-win32.whl", hash = "sha256:4bf7a80a956da9de9715436b85343a179da4ff399a6e9a1694e70bff93d43099"}, + {file = "libsass-0.17.0-cp36-cp36m-win_amd64.whl", hash = "sha256:55b77204cfa363142ab02c49ee871321a396b8e51f6361ebc226c3953c780541"}, + {file = "libsass-0.17.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:1aeadc155594af23879e27792667dc06e7f248c2c599c40ff2a7335193abdf05"}, + {file = "libsass-0.17.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:53be1c6cea9458fc0b59fafff5307d63cbde4d6f8a4413fb52ae467566273357"}, + {file = "libsass-0.17.0-cp37-cp37m-win32.whl", hash = "sha256:747e1cb3624b25ce9104315cf98b080246c5112d008cba6536a7dd2edb16fcc2"}, + {file = "libsass-0.17.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcbc861a001ffd68c4df00164b41c6152d5451185d06c654ac240d811be9f7e2"}, + {file = "libsass-0.17.0.tar.gz", hash = "sha256:953ebe810f09d81b84ccafdca0fb6171d1b58c8f0147cb650184a41e124e296f"}, +] +lxml = [ + {file = "lxml-3.7.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:474793adc51e0187478106523e867ad4f21bc1bdf0dd5d1d157976761a543ca1"}, + {file = "lxml-3.7.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7b31befd08b7b874515458725f62e186ab4da4ede92d74f9135e3e938f3bece0"}, + {file = "lxml-3.7.1-cp33-cp33m-manylinux1_x86_64.whl", hash = "sha256:f05d28c0094cb381a5d531cbda8a80618e8d0323b0bf91ba5a996267461be209"}, + {file = "lxml-3.7.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:35fe32835725e3b68454549f3efc4e05c96b353f7bc1e098b04d90adeb733144"}, + {file = "lxml-3.7.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ee56165f28da6abe480d4b740548c89a5f1d0687f37c0684ea98b0e614f0aff"}, + {file = "lxml-3.7.1-cp35-cp35m-win32.whl", hash = "sha256:c8fd33bea8f25c55af6d497d7f1c475db78f972afcab360714fd449dafc2d6d1"}, + {file = "lxml-3.7.1-cp35-cp35m-win_amd64.whl", hash = "sha256:7d2312098ee58dcc2ce84e9767b12fce286b1a6ea081a4f25f4b27e15e9e1eaf"}, + {file = "lxml-3.7.1.tar.gz", hash = "sha256:1c7f6771838300787cfa1bb3ed6512e9dc78e60ecb308a8ed49ac956569c1cca"}, + {file = "lxml-3.7.1.win-amd64-py2.7.exe", hash = "sha256:7ae45ce747344f2e4065ed5353853a82ceb51e78465ac4060dc670bfa5fe5ce7"}, + {file = "lxml-3.7.1.win-amd64-py3.2.exe", hash = "sha256:a42b5214945e77f3aaea1588094eaba3256d0b87e9c6092a10ff1a46b879f82e"}, + {file = "lxml-3.7.1.win-amd64-py3.3.exe", hash = "sha256:a5ec568a33eb727527d0121bed1386b4c786bb11c849f9317c2f0b5192105fb7"}, + {file = "lxml-3.7.1.win-amd64-py3.4.exe", hash = "sha256:db8f7a9db45822a734178b43cb3958e5fdddf0863b69cf9d1941829cf2237334"}, + {file = "lxml-3.7.1.win32-py2.7.exe", hash = "sha256:e576f7c786e56ca3d0cdb9a1cf92f533dd13dabaa2a2b5f688a6db98f41dbdff"}, + {file = "lxml-3.7.1.win32-py3.2.exe", hash = "sha256:d4c7f11ce6e6162210f5a2f43fd028e664f19f850703aefd559654c0d989b2f6"}, + {file = "lxml-3.7.1.win32-py3.3.exe", hash = "sha256:47f0dd2fd55ca8fbc0582280a4e8b7db4c56bf72a89d449a0ad4e4898c88fd7e"}, + {file = "lxml-3.7.1.win32-py3.4.exe", hash = "sha256:06287300f38d450fded69eb8164b200a3b0a1939ca882ea79594df3f2ad35ace"}, +] +mako = [ + {file = "Mako-1.0.7.tar.gz", hash = "sha256:4e02fde57bd4abb5ec400181e4c314f56ac3e49ba4fb8b0d50bba18cb27d25ae"}, +] +markupsafe = [ + {file = "MarkupSafe-1.1.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:efdc45ef1afc238db84cb4963aa689c0408912a0239b0721cb172b4016eb31d6"}, + {file = "MarkupSafe-1.1.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:52ccb45e77a1085ec5461cde794e1aa037df79f473cbc69b974e73940655c8d7"}, + {file = "MarkupSafe-1.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:525396ee324ee2da82919f2ee9c9e73b012f23e7640131dd1b53a90206a0f09c"}, + {file = "MarkupSafe-1.1.0-cp27-cp27m-win32.whl", hash = "sha256:31cbb1359e8c25f9f48e156e59e2eaad51cd5242c05ed18a8de6dbe85184e4b7"}, + {file = "MarkupSafe-1.1.0-cp27-cp27m-win_amd64.whl", hash = "sha256:edce2ea7f3dfc981c4ddc97add8a61381d9642dc3273737e756517cc03e84dd6"}, + {file = "MarkupSafe-1.1.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:5c3fbebd7de20ce93103cb3183b47671f2885307df4a17a0ad56a1dd51273d36"}, + {file = "MarkupSafe-1.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f82e347a72f955b7017a39708a3667f106e6ad4d10b25f237396a7115d8ed5fd"}, + {file = "MarkupSafe-1.1.0-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:19f637c2ac5ae9da8bfd98cef74d64b7e1bb8a63038a3505cd182c3fac5eb4d9"}, + {file = "MarkupSafe-1.1.0-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:98e439297f78fca3a6169fd330fbe88d78b3bb72f967ad9961bcac0d7fdd1550"}, + {file = "MarkupSafe-1.1.0-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:fb7c206e01ad85ce57feeaaa0bf784b97fa3cad0d4a5737bc5295785f5c613a1"}, + {file = "MarkupSafe-1.1.0-cp34-cp34m-win32.whl", hash = "sha256:1fa6058938190ebe8290e5cae6c351e14e7bb44505c4a7624555ce57fbbeba0d"}, + {file = "MarkupSafe-1.1.0-cp34-cp34m-win_amd64.whl", hash = "sha256:e982fe07ede9fada6ff6705af70514a52beb1b2c3d25d4e873e82114cf3c5401"}, + {file = "MarkupSafe-1.1.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:5e5851969aea17660e55f6a3be00037a25b96a9b44d2083651812c99d53b14d1"}, + {file = "MarkupSafe-1.1.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:f137c02498f8b935892d5c0172560d7ab54bc45039de8805075e19079c639a9c"}, + {file = "MarkupSafe-1.1.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:3e835d8841ae7863f64e40e19477f7eb398674da6a47f09871673742531e6f4b"}, + {file = "MarkupSafe-1.1.0-cp35-cp35m-win32.whl", hash = "sha256:5edfa27b2d3eefa2210fb2f5d539fbed81722b49f083b2c6566455eb7422fd7e"}, + {file = "MarkupSafe-1.1.0-cp35-cp35m-win_amd64.whl", hash = "sha256:857eebb2c1dc60e4219ec8e98dfa19553dae33608237e107db9c6078b1167856"}, + {file = "MarkupSafe-1.1.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:bf54103892a83c64db58125b3f2a43df6d2cb2d28889f14c78519394feb41492"}, + {file = "MarkupSafe-1.1.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:048ef924c1623740e70204aa7143ec592504045ae4429b59c30054cb31e3c432"}, + {file = "MarkupSafe-1.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:83381342bfc22b3c8c06f2dd93a505413888694302de25add756254beee8449c"}, + {file = "MarkupSafe-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:130f844e7f5bdd8e9f3f42e7102ef1d49b2e6fdf0d7526df3f87281a532d8c8b"}, + {file = "MarkupSafe-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52b07fbc32032c21ad4ab060fec137b76eb804c4b9a1c7c7dc562549306afad2"}, + {file = "MarkupSafe-1.1.0-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:1f19ef5d3908110e1e891deefb5586aae1b49a7440db952454b4e281b41620cd"}, + {file = "MarkupSafe-1.1.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:1b8a7a87ad1b92bd887568ce54b23565f3fd7018c4180136e1cf412b405a47af"}, + {file = "MarkupSafe-1.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d9ac82be533394d341b41d78aca7ed0e0f4ba5a2231602e2f05aa87f25c51672"}, + {file = "MarkupSafe-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:1c25694ca680b6919de53a4bb3bdd0602beafc63ff001fea2f2fc16ec3a11834"}, + {file = "MarkupSafe-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7d263e5770efddf465a9e31b78362d84d015cc894ca2c131901a4445eaa61ee1"}, + {file = "MarkupSafe-1.1.0.tar.gz", hash = "sha256:4e97332c9ce444b0c2c38dd22ddc61c743eb208d916e4265a2a3b575bdccb1d3"}, +] +mock = [ + {file = "mock-2.0.0-py2.py3-none-any.whl", hash = "sha256:5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1"}, + {file = "mock-2.0.0.tar.gz", hash = "sha256:b158b6df76edd239b8208d481dc46b6afd45a846b7812ff0ce58971cf5bc8bba"}, +] +num2words = [ + {file = "num2words-0.5.6-py2.py3-none-any.whl", hash = "sha256:529017394eef84daf63bb57e837fe2fb81363d1b06f6114e86608dae7ceb11ee"}, + {file = "num2words-0.5.6.tar.gz", hash = "sha256:aea26c2d11d636f0e9da094f2bf55ac94cb1c380ff1f86e8db22c210e5a6a05f"}, +] +ofxparse = [ + {file = "ofxparse-0.19-py2.7.egg", hash = "sha256:dbfb406691116c28a7733280f66de86644230067fa6a874e90d5422b9a20a39d"}, + {file = "ofxparse-0.19-py3.6.egg", hash = "sha256:1ab2674d95c8860edb1494484fed96271d1e73d03ed729b3cad86669ba6fdbe4"}, + {file = "ofxparse-0.19.tar.gz", hash = "sha256:d8c81fd5089332106da1a2e8919c412c7c677f08af04d557ca767701a04e0918"}, +] +passlib = [ + {file = "passlib-1.7.1-py2.py3-none-any.whl", hash = "sha256:43526aea08fa32c6b6dbbbe9963c4c767285b78147b7437597f992812f69d280"}, + {file = "passlib-1.7.1.tar.gz", hash = "sha256:3d948f64138c25633613f303bcc471126eae67c04d5e3f6b7b8ce6242f8653e0"}, +] +pbr = [ + {file = "pbr-5.6.0-py2.py3-none-any.whl", hash = "sha256:c68c661ac5cc81058ac94247278eeda6d2e6aecb3e227b0387c30d277e7ef8d4"}, + {file = "pbr-5.6.0.tar.gz", hash = "sha256:42df03e7797b796625b1029c0400279c7c34fd7df24a7d7818a1abb5b38710dd"}, +] +pillow = [ + {file = "Pillow-5.4.1-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:18e912a6ccddf28defa196bd2021fe33600cbe5da1aa2f2e2c6df15f720b73d1"}, + {file = "Pillow-5.4.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:267f8e4c0a1d7e36e97c6a604f5b03ef58e2b81c1becb4fccecddcb37e063cc7"}, + {file = "Pillow-5.4.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:051de330a06c99d6f84bcf582960487835bcae3fc99365185dc2d4f65a390c0e"}, + {file = "Pillow-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:825aa6d222ce2c2b90d34a0ea31914e141a85edefc07e17342f1d2fdf121c07c"}, + {file = "Pillow-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:5d95cb9f6cced2628f3e4de7e795e98b2659dfcc7176ab4a01a8b48c2c2f488f"}, + {file = "Pillow-5.4.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ba04f57d1715ca5ff74bb7f8a818bf929a204b3b3c2c2826d1e1cc3b1c13398c"}, + {file = "Pillow-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f227d7e574d050ff3996049e086e1f18c7bd2d067ef24131e50a1d3fe5831fbc"}, + {file = "Pillow-5.4.1-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:3273a28734175feebbe4d0a4cde04d4ed20f620b9b506d26f44379d3c72304e1"}, + {file = "Pillow-5.4.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:cee815cc62d136e96cf76771b9d3eb58e0777ec18ea50de5cfcede8a7c429aa8"}, + {file = "Pillow-5.4.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:4d4bc2e6bb6861103ea4655d6b6f67af8e5336e7216e20fff3e18ffa95d7a055"}, + {file = "Pillow-5.4.1-cp34-cp34m-win32.whl", hash = "sha256:a6523a23a205be0fe664b6b8747a5c86d55da960d9586db039eec9f5c269c0e6"}, + {file = "Pillow-5.4.1-cp34-cp34m-win_amd64.whl", hash = "sha256:505738076350a337c1740a31646e1de09a164c62c07db3b996abdc0f9d2e50cf"}, + {file = "Pillow-5.4.1-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:7eda4c737637af74bac4b23aa82ea6fbb19002552be85f0b89bc27e3a762d239"}, + {file = "Pillow-5.4.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:163136e09bd1d6c6c6026b0a662976e86c58b932b964f255ff384ecc8c3cefa3"}, + {file = "Pillow-5.4.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9c215442ff8249d41ff58700e91ef61d74f47dfd431a50253e1a1ca9436b0697"}, + {file = "Pillow-5.4.1-cp35-cp35m-win32.whl", hash = "sha256:0ae5289948c5e0a16574750021bd8be921c27d4e3527800dc9c2c1d2abc81bf7"}, + {file = "Pillow-5.4.1-cp35-cp35m-win_amd64.whl", hash = "sha256:801ddaa69659b36abf4694fed5aa9f61d1ecf2daaa6c92541bbbbb775d97b9fe"}, + {file = "Pillow-5.4.1-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:cd878195166723f30865e05d87cbaf9421614501a4bd48792c5ed28f90fd36ca"}, + {file = "Pillow-5.4.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:fc9a12aad714af36cf3ad0275a96a733526571e52710319855628f476dcb144e"}, + {file = "Pillow-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d7c1c06246b05529f9984435fc4fa5a545ea26606e7f450bdbe00c153f5aeaad"}, + {file = "Pillow-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:0b1efce03619cdbf8bcc61cfae81fcda59249a469f31c6735ea59badd4a6f58a"}, + {file = "Pillow-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:a631fd36a9823638fe700d9225f9698fb59d049c942d322d4c09544dc2115356"}, + {file = "Pillow-5.4.1-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:24ec3dea52339a610d34401d2d53d0fb3c7fd08e34b20c95d2ad3973193591f1"}, + {file = "Pillow-5.4.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:e9c8066249c040efdda84793a2a669076f92a301ceabe69202446abb4c5c5ef9"}, + {file = "Pillow-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:4c678e23006798fc8b6f4cef2eaad267d53ff4c1779bd1af8725cc11b72a63f3"}, + {file = "Pillow-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:b117287a5bdc81f1bac891187275ec7e829e961b8032c9e5ff38b70fd036c78f"}, + {file = "Pillow-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d1722b7aa4b40cf93ac3c80d3edd48bf93b9208241d166a14ad8e7a20ee1d4f3"}, + {file = "Pillow-5.4.1-pp260-pypy_41-win32.whl", hash = "sha256:a3d90022f2202bbb14da991f26ca7a30b7e4c62bf0f8bf9825603b22d7e87494"}, + {file = "Pillow-5.4.1-pp360-pp360-win32.whl", hash = "sha256:a756ecf9f4b9b3ed49a680a649af45a8767ad038de39e6c030919c2f443eb000"}, + {file = "Pillow-5.4.1-py2.7-macosx-10.13-x86_64.egg", hash = "sha256:634209852cc06c0c1243cc74f8fdc8f7444d866221de51125f7b696d775ec5ca"}, + {file = "Pillow-5.4.1-py2.7-win-amd64.egg", hash = "sha256:0cf0208500df8d0c3cad6383cd98a2d038b0678fd4f777a8f7e442c5faeee81d"}, + {file = "Pillow-5.4.1-py2.7-win32.egg", hash = "sha256:f71ff657e63a9b24cac254bb8c9bd3c89c7a1b5e00ee4b3997ca1c18100dac28"}, + {file = "Pillow-5.4.1-py3.4-win-amd64.egg", hash = "sha256:01a501be4ae05fd714d269cb9c9f145518e58e73faa3f140ddb67fae0c2607b1"}, + {file = "Pillow-5.4.1-py3.4-win32.egg", hash = "sha256:4baab2d2da57b0d9d544a2ce0f461374dd90ccbcf723fe46689aff906d43a964"}, + {file = "Pillow-5.4.1-py3.5-win-amd64.egg", hash = "sha256:f62b1aeb5c2ced8babd4fbba9c74cbef9de309f5ed106184b12d9778a3971f15"}, + {file = "Pillow-5.4.1-py3.5-win32.egg", hash = "sha256:e9f13711780c981d6eadd6042af40e172548c54b06266a1aabda7de192db0838"}, + {file = "Pillow-5.4.1-py3.6-win-amd64.egg", hash = "sha256:07c35919f983c2c593498edcc126ad3a94154184899297cc9d27a6587672cbaa"}, + {file = "Pillow-5.4.1-py3.6-win32.egg", hash = "sha256:87fe838f9dac0597f05f2605c0700b1926f9390c95df6af45d83141e0c514bd9"}, + {file = "Pillow-5.4.1-py3.7-win-amd64.egg", hash = "sha256:c8939dba1a37960a502b1a030a4465c46dd2c2bca7adf05fa3af6bea594e720e"}, + {file = "Pillow-5.4.1-py3.7-win32.egg", hash = "sha256:5337ac3280312aa065ed0a8ec1e4b6142e9f15c31baed36b5cd964745853243f"}, + {file = "Pillow-5.4.1.tar.gz", hash = "sha256:5233664eadfa342c639b9b9977190d64ad7aca4edc51a966394d7e08e7f38a9f"}, + {file = "Pillow-5.4.1.win-amd64-py2.7.exe", hash = "sha256:e1555d4fda1db8005de72acf2ded1af660febad09b4708430091159e8ae1963e"}, + {file = "Pillow-5.4.1.win-amd64-py3.4.exe", hash = "sha256:52e2e56fc3706d8791761a157115dc8391319720ad60cc32992350fda74b6be2"}, + {file = "Pillow-5.4.1.win-amd64-py3.5.exe", hash = "sha256:ba6ef2bd62671c7fb9cdb3277414e87a5cd38b86721039ada1464f7452ad30b2"}, + {file = "Pillow-5.4.1.win-amd64-py3.6.exe", hash = "sha256:39fbd5d62167197318a0371b2a9c699ce261b6800bb493eadde2ba30d868fe8c"}, + {file = "Pillow-5.4.1.win-amd64-py3.7.exe", hash = "sha256:5ccd97e0f01f42b7e35907272f0f8ad2c3660a482d799a0c564c7d50e83604d4"}, + {file = "Pillow-5.4.1.win32-py2.7.exe", hash = "sha256:db418635ea20528f247203bf131b40636f77c8209a045b89fa3badb89e1fcea0"}, + {file = "Pillow-5.4.1.win32-py3.4.exe", hash = "sha256:ac036b6a6bac7010c58e643d78c234c2f7dc8bb7e591bd8bc3555cf4b1527c28"}, + {file = "Pillow-5.4.1.win32-py3.5.exe", hash = "sha256:f0e3288b92ca5dbb1649bd00e80ef652a72b657dc94989fa9c348253d179054b"}, + {file = "Pillow-5.4.1.win32-py3.6.exe", hash = "sha256:4132c78200372045bb348fcad8d52518c8f5cfc077b1089949381ee4a61f1c6d"}, + {file = "Pillow-5.4.1.win32-py3.7.exe", hash = "sha256:75d1f20bd8072eff92c5f457c266a61619a02d03ece56544195c56d41a1a0522"}, +] +polib = [ + {file = "polib-1.1.0-py2.py3-none-any.whl", hash = "sha256:93b730477c16380c9a96726c54016822ff81acfa553977fdd131f2b90ba858d7"}, + {file = "polib-1.1.0.tar.gz", hash = "sha256:fad87d13696127ffb27ea0882d6182f1a9cf8a5e2b37a587751166c51e5a332a"}, +] +psutil = [ + {file = "psutil-5.6.6-cp27-none-win32.whl", hash = "sha256:06660136ab88762309775fd47290d7da14094422d915f0466e0adf8e4b22214e"}, + {file = "psutil-5.6.6-cp27-none-win_amd64.whl", hash = "sha256:f21a7bb4b207e4e7c60b3c40ffa89d790997619f04bbecec9db8e3696122bc78"}, + {file = "psutil-5.6.6-cp35-cp35m-win32.whl", hash = "sha256:5e8dbf31871b0072bcba8d1f2861c0ec6c84c78f13c723bb6e981bce51b58f12"}, + {file = "psutil-5.6.6-cp35-cp35m-win_amd64.whl", hash = "sha256:724390895cff80add7a1c4e7e0a04d9c94f3ee61423a2dcafd83784fabbd1ee9"}, + {file = "psutil-5.6.6-cp36-cp36m-win32.whl", hash = "sha256:6d81b9714791ef9a3a00b2ca846ee547fc5e53d259e2a6258c3d2054928039ff"}, + {file = "psutil-5.6.6-cp36-cp36m-win_amd64.whl", hash = "sha256:3004361c6b93dbad71330d992c1ae409cb8314a6041a0b67507cc882357f583e"}, + {file = "psutil-5.6.6-cp37-cp37m-win32.whl", hash = "sha256:0fc7a5619b47f74331add476fbc6022d7ca801c22865c7069ec0867920858963"}, + {file = "psutil-5.6.6-cp37-cp37m-win_amd64.whl", hash = "sha256:f60042bef7dc50a78c06334ca8e25580455948ba2fa98f240d034a4fed9141a5"}, + {file = "psutil-5.6.6-cp38-cp38-win32.whl", hash = "sha256:0c11adde31011a286197630ba2671e34651f004cc418d30ae06d2033a43c9e20"}, + {file = "psutil-5.6.6-cp38-cp38-win_amd64.whl", hash = "sha256:0c211eec4185725847cb6c28409646c7cfa56fdb531014b35f97b5dc7fe04ff9"}, + {file = "psutil-5.6.6.tar.gz", hash = "sha256:ad21281f7bd6c57578dd53913d2d44218e9e29fd25128d10ff7819ef16fa46e7"}, +] +psycopg2 = [ + {file = "psycopg2-2.7.7-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:5d222983847b40af989ad96c07fc3f07e47925e463baa5de716be8f805b41d9b"}, + {file = "psycopg2-2.7.7-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:36b60201b6d215d7658a71493fdf6bd5e60ad9a0cffed39906627ff9f4f3afd3"}, + {file = "psycopg2-2.7.7-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3f9d532bce54c4234161176ff3b8688ff337575ca441ea27597e112dfcd0ee0c"}, + {file = "psycopg2-2.7.7-cp27-cp27m-win32.whl", hash = "sha256:6757a6d2fc58f7d8f5d471ad180a0bd7b4dd3c7d681f051504fbea7ae29c8d6f"}, + {file = "psycopg2-2.7.7-cp27-cp27m-win_amd64.whl", hash = "sha256:02445ebbb3a11a3fe8202c413d5e6faf38bb75b4e336203ee144ca2c46529f94"}, + {file = "psycopg2-2.7.7-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:6a0e0f1e74edb0ab57d89680e59e7bfefad2bfbdf7c80eb38304d897d43674bb"}, + {file = "psycopg2-2.7.7-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:6ca703ccdf734e886a1cf53eb702261110f6a8b0ed74bcad15f1399f74d3f189"}, + {file = "psycopg2-2.7.7-cp33-cp33m-win32.whl", hash = "sha256:a07feade155eb8e69b54dd6774cf6acf2d936660c61d8123b8b6b1f9247b67d6"}, + {file = "psycopg2-2.7.7-cp33-cp33m-win_amd64.whl", hash = "sha256:b360ffd17659491f1a6ad7c928350e229c7b7bd83a2b922b6ee541245c7a776f"}, + {file = "psycopg2-2.7.7-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:314a74302d4737a3865d40ea50e430ce1543c921ba10f39d562e807cfe2edf2a"}, + {file = "psycopg2-2.7.7-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:8513b953d8f443c446aa79a4cc8a898bd415fc5e29349054f03a7d696d495542"}, + {file = "psycopg2-2.7.7-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:d1b61999d15c79cf7f4f7cc9021477aef35277fc52452cf50fd13b713c84424d"}, + {file = "psycopg2-2.7.7-cp34-cp34m-win32.whl", hash = "sha256:9262a5ce2038570cb81b4d6413720484cb1bc52c064b2f36228d735b1f98b794"}, + {file = "psycopg2-2.7.7-cp34-cp34m-win_amd64.whl", hash = "sha256:97441f851d862a0c844d981cbee7ee62566c322ebb3d68f86d66aa99d483985b"}, + {file = "psycopg2-2.7.7-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:1148a5eb29073280bf9057c7fc45468592c1bb75a28f6df1591adb93c8cb63d0"}, + {file = "psycopg2-2.7.7-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:b90758e49d5e6b152a460d10b92f8a6ccf318fcc0ee814dcf53f3a6fc5328789"}, + {file = "psycopg2-2.7.7-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:c669ea986190ed05fb289d0c100cc88064351f2b85177cbfd3564c4f4847d18c"}, + {file = "psycopg2-2.7.7-cp35-cp35m-win32.whl", hash = "sha256:28dffa9ed4595429e61bacac41d3f9671bb613d1442ff43bcbec63d4f73ed5e8"}, + {file = "psycopg2-2.7.7-cp35-cp35m-win_amd64.whl", hash = "sha256:0e9873e60f98f0c52339abf8f0339d1e22bfe5aae0bcf7aabd40c055175035ec"}, + {file = "psycopg2-2.7.7-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ae88216f94728d691b945983140bf40d51a1ff6c7fe57def93949bf9339ed54a"}, + {file = "psycopg2-2.7.7-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:f36b333e9f86a2fba960c72b90c34be6ca71819e300f7b1fc3d2b0f0b2c546cd"}, + {file = "psycopg2-2.7.7-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:ed7e0849337bd37d89f2c2b0216a0de863399ee5d363d31b1e5330a99044737b"}, + {file = "psycopg2-2.7.7-cp36-cp36m-win32.whl", hash = "sha256:a9b9c02c91b1e3ec1f1886b2d0a90a0ea07cc529cb7e6e472b556bc20ce658f3"}, + {file = "psycopg2-2.7.7-cp36-cp36m-win_amd64.whl", hash = "sha256:e393568e288d884b94d263f2669215197840d097c7e5b0acd1a51c1ea7d1aba8"}, + {file = "psycopg2-2.7.7-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:f153f71c3164665d269a5d03c7fa76ba675c7a8de9dc09a4e2c2cdc9936a7b41"}, + {file = "psycopg2-2.7.7-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:259a8324e109d4922b0fcd046e223e289830e2568d6f4132a3702439e5fd532b"}, + {file = "psycopg2-2.7.7-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:de7bb043d1adaaf46e38d47e7a5f703bb3dab01376111e522b07d25e1a79c1e1"}, + {file = "psycopg2-2.7.7-cp37-cp37m-win32.whl", hash = "sha256:b4221957ceccf14b2abdabef42d806e791350be10e21b260d7c9ce49012cc19e"}, + {file = "psycopg2-2.7.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f1fb5a8427af099beb7f65093cbdb52e021b8e6dbdfaf020402a623f4181baf5"}, + {file = "psycopg2-2.7.7.tar.gz", hash = "sha256:f4526d078aedd5187d0508aa5f9a01eae6a48a470ed678406da94b4cd6524b7e"}, +] +pyasn1 = [ + {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, + {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, + {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, + {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, + {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, + {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, + {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, + {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, + {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, + {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, + {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, + {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, + {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, +] +pyasn1-modules = [ + {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, + {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, + {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, + {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, + {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, + {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, + {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, + {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, + {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, + {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, + {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, + {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, + {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, +] +pydot = [ + {file = "pydot-1.4.1-py2.py3-none-any.whl", hash = "sha256:67be714300c78fda5fd52f79ec994039e3f76f074948c67b5ff539b433ad354f"}, + {file = "pydot-1.4.1.tar.gz", hash = "sha256:d49c9d4dd1913beec2a997f831543c8cbd53e535b1a739e921642fe416235f01"}, +] +pyparsing = [ + {file = "pyparsing-2.2.0-py2.py3-none-any.whl", hash = "sha256:fee43f17a9c4087e7ed1605bd6df994c6173c1e977d7ade7b651292fab2bd010"}, + {file = "pyparsing-2.2.0.tar.gz", hash = "sha256:0832bcf47acd283788593e7a0f542407bd9550a55a8a8435214a1960e04bcb04"}, + {file = "pyparsing-2.2.0.win32-py2.6.exe", hash = "sha256:9e8143a3e15c13713506886badd96ca4b579a87fbdf49e550dbfc057d6cb218e"}, + {file = "pyparsing-2.2.0.win32-py2.7.exe", hash = "sha256:281683241b25fe9b80ec9d66017485f6deff1af5cde372469134b56ca8447a07"}, + {file = "pyparsing-2.2.0.win32-py3.3.exe", hash = "sha256:b8b3117ed9bdf45e14dcc89345ce638ec7e0e29b2b579fa1ecf32ce45ebac8a5"}, + {file = "pyparsing-2.2.0.win32-py3.4.exe", hash = "sha256:8f1e18d3fd36c6795bb7e02a39fd05c611ffc2596c1e0d995d34d67630426c18"}, + {file = "pyparsing-2.2.0.win32-py3.5.exe", hash = "sha256:e4d45427c6e20a59bf4f88c639dcc03ce30d193112047f94012102f235853a58"}, +] +pypdf2 = [ + {file = "PyPDF2-1.26.0.tar.gz", hash = "sha256:e28f902f2f0a1603ea95ebe21dff311ef09be3d0f0ef29a3e44a932729564385"}, +] +pyserial = [ + {file = "pyserial-3.4-py2.py3-none-any.whl", hash = "sha256:e0770fadba80c31013896c7e6ef703f72e7834965954a78e71a3049488d4d7d8"}, + {file = "pyserial-3.4.tar.gz", hash = "sha256:6e2d401fdee0eab996cf734e67773a0143b932772ca8b42451440cfed942c627"}, +] +python-dateutil = [ + {file = "python-dateutil-2.7.3.tar.gz", hash = "sha256:e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8"}, + {file = "python_dateutil-2.7.3-py2.py3-none-any.whl", hash = "sha256:1adb80e7a782c12e52ef9a8182bebeb73f1d7e24e374397af06fb4956c8dc5c0"}, +] +python-ldap = [ + {file = "python-ldap-3.1.0.tar.gz", hash = "sha256:41975e79406502c092732c57ef0c2c2eb318d91e8e765f81f5d4ab6c1db727c5"}, +] +python-stdnum = [ + {file = "python-stdnum-1.16.tar.gz", hash = "sha256:4248d898042a801fc4eff96fbfe4bf63a43324854efe3b5534718c1c195c6f43"}, + {file = "python_stdnum-1.16-py2.py3-none-any.whl", hash = "sha256:2e2c56c548ca166b95547a8d748f4d71320a5b4896960717c8e6380e08d993a5"}, +] +pytz = [ + {file = "pytz-2019.1-py2.py3-none-any.whl", hash = "sha256:303879e36b721603cc54604edcac9d20401bdbe31e1e4fdee5b9f98d5d31dfda"}, + {file = "pytz-2019.1.tar.gz", hash = "sha256:d747dd3d23d77ef44c6a3526e274af6efeb0a6f1afd5a69ba4d5be4098c8e141"}, +] +pyusb = [ + {file = "pyusb-1.0.2.tar.gz", hash = "sha256:4e9b72cc4a4205ca64fbf1f3fff39a335512166c151ad103e55c8223ac147362"}, +] +qrcode = [ + {file = "qrcode-6.1-py2.py3-none-any.whl", hash = "sha256:3996ee560fc39532910603704c82980ff6d4d5d629f9c3f25f34174ce8606cf5"}, + {file = "qrcode-6.1.tar.gz", hash = "sha256:505253854f607f2abf4d16092c61d4e9d511a3b4392e60bff957a68592b04369"}, +] +reportlab = [ + {file = "reportlab-3.5.13-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:d476edc831bb3e9ebd04d1403abaf3ea57b3e4c2276c91a54fdfb6efbd3f9d97"}, + {file = "reportlab-3.5.13-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:233196cf25e97cfe7c452524ea29d9a4909f1cb66599299233be1efaaaa7a7a3"}, + {file = "reportlab-3.5.13-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2b5e4533f3e5b962835a5ce44467e66d1ecc822761d1b508077b5087a06be338"}, + {file = "reportlab-3.5.13-cp27-cp27m-win32.whl", hash = "sha256:4452b93f9c73b6b70311e7d69082d64da81b38e91bfb4766397630092e6da6fd"}, + {file = "reportlab-3.5.13-cp27-cp27m-win_amd64.whl", hash = "sha256:74c24a3ec0a3d4f8acb13a07192f45bdb54a1cc3c2286241677e7e8bcd5011fa"}, + {file = "reportlab-3.5.13-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:c7ec4ae2393beab584921b1287a04e94fd98c28315e348362d89b85f4b464546"}, + {file = "reportlab-3.5.13-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f3463f2cb40a1b515ac0133ba859eca58f53b56760da9abb27ed684c565f853c"}, + {file = "reportlab-3.5.13-cp34-cp34m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:ed9b7c0d71ce6fe2b31c6cde530ad8238632b876a5d599218739bda142a77f7c"}, + {file = "reportlab-3.5.13-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:a5905aa567946bc938b489a7249c7890c3fd3c9b7b5680dece5bc551c2ddbe0d"}, + {file = "reportlab-3.5.13-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:acbb7f676b8586b770719e9683eda951fdb38eb7970d46fcbf3cdda88d912a64"}, + {file = "reportlab-3.5.13-cp34-cp34m-win32.whl", hash = "sha256:f0a2465af4006f97b05e1f1546d67d3a3213d414894bf28be7f87f550a7f4a55"}, + {file = "reportlab-3.5.13-cp34-cp34m-win_amd64.whl", hash = "sha256:facc3c9748ab1525fb8401a1223bce4f24f0d6aa1a9db86c55db75777ccf40f9"}, + {file = "reportlab-3.5.13-cp35-cp35m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:069f684cd0aaa518a27dc9124aed29cee8998e21ddf19604e53214ec8462bdd7"}, + {file = "reportlab-3.5.13-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:98ccd2f8b4f8636db05f3f14db0b471ad6bb4b66ae0dc9052c4822b3bd5d6a7d"}, + {file = "reportlab-3.5.13-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:2e860bcdace5a558356802a92ae8658d7e5fdaa00ded82e83a3f2987c562cb66"}, + {file = "reportlab-3.5.13-cp35-cp35m-win32.whl", hash = "sha256:dd423a6753509ab14a0ac1b5be39d219c8f8d3781cce3deb4f45eda31969b5e8"}, + {file = "reportlab-3.5.13-cp35-cp35m-win_amd64.whl", hash = "sha256:0c32be9a406172c29ea20ff55a709ccac1e7fb09f15aba67cb7b455fd1d3dbe0"}, + {file = "reportlab-3.5.13-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:528c74a1c6527d1859c2c7a64a94a1cba485b00175162ea23699ae58a1e94939"}, + {file = "reportlab-3.5.13-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b5e30f865add48cf880f1c363eb505b97f2f7baaa88c155f87a335a76515a3e5"}, + {file = "reportlab-3.5.13-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:f20bfe26e57e8e1f575a9e0325be04dd3562db9f247ffdd73b5d4df6dec53bc2"}, + {file = "reportlab-3.5.13-cp36-cp36m-win32.whl", hash = "sha256:09b68ec01d86b4b120456b3f3202570ec96f57624e3a4fc36f3829323391daa4"}, + {file = "reportlab-3.5.13-cp36-cp36m-win_amd64.whl", hash = "sha256:db059e1a0691c872784062421ec51848539eb4f5210142682e61059a5ca7cc55"}, + {file = "reportlab-3.5.13-cp37-cp37m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl", hash = "sha256:727b5f2bed08552d143fc99649b1863c773729f580a416844f9d9967bb0a1ae8"}, + {file = "reportlab-3.5.13-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:be2a7c33a2c28bbd3f453ffe4f0e5200b88c803a097f4cf52d69c6b53fad7a8f"}, + {file = "reportlab-3.5.13-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:c356bb600f59ac64955813d6497a08bfd5d0c451cb5829b61e3913d0ac084e26"}, + {file = "reportlab-3.5.13-cp37-cp37m-win32.whl", hash = "sha256:6b2b3580c647d75ef129172cb3da648cdb24566987b0b59c5ebb80ab770748d6"}, + {file = "reportlab-3.5.13-cp37-cp37m-win_amd64.whl", hash = "sha256:3546029e63a9a9dc24ee38959eb417678c2425b96cd27b31e09e216dafc94666"}, + {file = "reportlab-3.5.13.tar.gz", hash = "sha256:6116e750f98018febc08dfee6df20446cf954adbcfa378d2c703d56c8864aff3"}, +] +requests = [ + {file = "requests-2.21.0-py2.py3-none-any.whl", hash = "sha256:7bf2a778576d825600030a110f3c0e3e8edc51dfaafe1c146e39a2027784957b"}, + {file = "requests-2.21.0.tar.gz", hash = "sha256:502a824f31acdacb3a35b6690b5fbf0bc41d63a24a45c4004352b0242707598e"}, +] +requests-toolbelt = [ + {file = "requests-toolbelt-0.9.1.tar.gz", hash = "sha256:968089d4584ad4ad7c171454f0a5c6dac23971e9472521ea3b6d49d610aa6fc0"}, + {file = "requests_toolbelt-0.9.1-py2.py3-none-any.whl", hash = "sha256:380606e1d10dc85c3bd47bf5a6095f815ec007be7a8b69c878507068df059e6f"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +soupsieve = [ + {file = "soupsieve-2.2.1-py3-none-any.whl", hash = "sha256:c2c1c2d44f158cdbddab7824a9af8c4f83c76b1e23e049479aa432feb6c4c23b"}, + {file = "soupsieve-2.2.1.tar.gz", hash = "sha256:052774848f448cf19c7e959adf5566904d525f33a3f8b6ba6f6f8f26ec7de0cc"}, +] +urllib3 = [ + {file = "urllib3-1.24.3-py2.py3-none-any.whl", hash = "sha256:a637e5fae88995b256e3409dc4d52c2e2e0ba32c42a6365fee8bbd2238de3cfb"}, + {file = "urllib3-1.24.3.tar.gz", hash = "sha256:2393a695cd12afedd0dcb26fe5d50d0cf248e5a66f75dbd89a3d4eb333a61af4"}, +] +vatnumber = [ + {file = "vatnumber-1.2.tar.gz", hash = "sha256:4e9e9cabcff6076d8deb8a347edfd5d0ab8cab1ed344fdbe5dd4a6110a2f2c7b"}, +] +vobject = [ + {file = "vobject-0.9.6.1.tar.gz", hash = "sha256:96512aec74b90abb71f6b53898dd7fe47300cc940104c4f79148f0671f790101"}, +] +werkzeug = [ + {file = "Werkzeug-0.14.1-py2.py3-none-any.whl", hash = "sha256:d5da73735293558eb1651ee2fddc4d0dedcfa06538b8813a2e20011583c9e49b"}, + {file = "Werkzeug-0.14.1.tar.gz", hash = "sha256:c3fd7a7d41976d9f44db327260e263132466836cef6f91512889ed60ad26557c"}, +] +xlrd = [ + {file = "xlrd-1.1.0-py2.py3-none-any.whl", hash = "sha256:83a1d2f1091078fb3f65876753b5302c5cfb6a41de64b9587b74cefa75157148"}, + {file = "xlrd-1.1.0.tar.gz", hash = "sha256:8a21885513e6d915fe33a8ee5fdfa675433b61405ba13e2a69e62ee36828d7e2"}, +] +xlsxwriter = [ + {file = "XlsxWriter-1.1.2-py2.py3-none-any.whl", hash = "sha256:7cc07619760641b67112dbe0df938399d4d915d9b9924bb58eb5c17384d29cc6"}, + {file = "XlsxWriter-1.1.2.tar.gz", hash = "sha256:ae22658a0fc5b9e875fa97c213d1ffd617d86dc49bf08be99ebdac814db7bf36"}, +] +xlwt = [ + {file = "xlwt-1.3.0-py2.py3-none-any.whl", hash = "sha256:a082260524678ba48a297d922cc385f58278b8aa68741596a87de01a9c628b2e"}, + {file = "xlwt-1.3.0.tar.gz", hash = "sha256:c59912717a9b28f1a3c2a98fd60741014b06b043936dcecbc113eaaada156c88"}, +] +zeep = [ + {file = "zeep-3.2.0-py2.py3-none-any.whl", hash = "sha256:c8a2f12228b18c5db1feec0814907048d3c77eb6bbed419d567fe87fd9f0e530"}, + {file = "zeep-3.2.0.tar.gz", hash = "sha256:e5feb8b261c7e271e20c191bd346d80705d53b90af3c1e6f214aa108876fd72d"}, +] diff --git a/modules/private/websites/nicecoop/odoo/pyproject.toml b/modules/private/websites/nicecoop/odoo/pyproject.toml new file mode 100644 index 0000000..accbd0d --- /dev/null +++ b/modules/private/websites/nicecoop/odoo/pyproject.toml @@ -0,0 +1,54 @@ +[tool.poetry] +name = "Odoo" +version = "13.0" +description = "Odoo is a suite of web based open source business apps." +authors = ["Odoo SA"] + +[tool.poetry.dependencies] +python = "^3.6" +Babel = "2.6.0" +chardet = "3.0.4" +decorator = "4.3.0" +docutils = "0.14" +ebaysdk = "2.1.5" +feedparser = "5.2.1" +gevent = "1.1.2" +greenlet = "0.4.10" +html2text = "2018.1.9" +Jinja2 = "2.10.1" +libsass = "0.17.0" +lxml = "3.7.1" +Mako = "1.0.7" +MarkupSafe = "1.1.0" +mock = "2.0.0" +num2words = "0.5.6" +ofxparse = "0.19" +passlib = "1.7.1" +Pillow = "5.4.1" +polib = "1.1.0" +psutil = "5.6.6" +psycopg2 = "2.7.7" +pydot = "1.4.1" +python-ldap = "3.1.0" +pyparsing = "2.2.0" +PyPDF2 = "1.26.0" +pyserial = "3.4" +python-dateutil = "2.7.3" +pytz = "2019.1" +pyusb = "1.0.2" +qrcode = "6.1" +reportlab = "3.5.13" +requests = "2.21.0" +zeep = "3.2.0" +vatnumber = "1.2" +vobject = "0.9.6.1" +Werkzeug = "0.14.1" +XlsxWriter = "1.1.2" +xlwt = "1.3.*" +xlrd = "1.1.0" + +[tool.poetry.dev-dependencies] + +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" diff --git a/modules/private/websites/nicecoop/odoo/shell_generate_poetry.nix b/modules/private/websites/nicecoop/odoo/shell_generate_poetry.nix new file mode 100644 index 0000000..1a63b4a --- /dev/null +++ b/modules/private/websites/nicecoop/odoo/shell_generate_poetry.nix @@ -0,0 +1,52 @@ +{ pkgs ? import {} }: +let + odoo_version = "13.0"; + python_version = "3.6"; + pyproject = pkgs.writeText "pyproject.toml" '' + [tool.poetry] + name = "Odoo" + version = "${odoo_version}" + description = "Odoo is a suite of web based open source business apps." + authors = ["Odoo SA"] + + [tool.poetry.dependencies] + python = "^${python_version}" + + [tool.poetry.dev-dependencies] + + [build-system] + requires = ["poetry-core>=1.0.0"] + build-backend = "poetry.core.masonry.api" + ''; + newPoetry = pkgs.poetry.override { python = pkgs.python36; }; +in +pkgs.mkShell { + buildInputs = [ pkgs.perl pkgs.gcc pkgs.libjpeg pkgs.libxslt pkgs.pkg-config pkgs.postgresql_11 pkgs.cyrus_sasl pkgs.openldap pkgs.zlib pkgs.file pkgs.libxml2 newPoetry ]; + shellHook = '' + NIX_CFLAGS_COMPILE="$NIX_CFLAGS_COMPILE -isystem ${pkgs.cyrus_sasl.dev}/include/sasl -isystem ${pkgs.libxml2.dev}/include/libxml2/" + check_valid() { + expression="$1" + expression=''${expression/sys_platform/\$sys_platform} + expression=''${expression/python_version/\$python_version} + expression=''${expression/"== '"/"eq '"} + expression=''${expression/"!= '"/"ne '"} + #echo "my \$python_version='${python_version}' ; my \$sys_platform='linux'; exit !($expression)" + perl -e "my \$python_version='${python_version}' ; my \$sys_platform='linux'; exit !($expression)" + } + buildPoetry() { + cat "${pyproject}" > pyproject.toml + rm -f poetry.lock + + requirements=$(cat requirements.txt | while read i; do + if echo "$i" | grep -q ";"; then + a="$(echo $i | sed -e "s/.*; *//")" + check_valid "$a" && echo "$i" | sed -e "s/ *;.*//"; + else + echo "$i" + fi + done) + + poetry add $requirements + } + ''; +} -- 2.41.0