From e99293829bd2fcd523db794179bd88c5de5055f1 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Wed, 5 Apr 2023 20:31:10 +0100 Subject: [PATCH] Format with prettier --- .pre-commit-config.yaml | 6 +- .../.pre-commit-config.yaml | 4 +- .../.readthedocs.yml | 2 +- {{cookiecutter.project_slug}}/README.md | 14 +- .../compose/production/traefik/traefik.yml | 20 +-- {{cookiecutter.project_slug}}/gulpfile.js | 158 +++++++++--------- {{cookiecutter.project_slug}}/local.yml | 10 +- {{cookiecutter.project_slug}}/production.yml | 6 +- .../webpack/common.config.js | 21 +-- .../webpack/prod.config.js | 6 +- .../static/js/project.js | 4 +- .../static/sass/project.scss | 17 +- 12 files changed, 131 insertions(+), 137 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c5f051856..f6d093a90 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -exclude: "{{cookiecutter.project_slug}}" +exclude: '{{cookiecutter.project_slug}}' default_stages: [commit] repos: @@ -18,10 +18,10 @@ repos: - id: detect-private-key - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.0.0-alpha.6" + rev: 'v3.0.0-alpha.6' hooks: - id: prettier - args: ["--tab-width", "2"] + args: ['--tab-width', '2', '--single-quote'] - repo: https://github.com/asottile/pyupgrade rev: v3.3.1 diff --git a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml index a6a67a99e..2346247ef 100644 --- a/{{cookiecutter.project_slug}}/.pre-commit-config.yaml +++ b/{{cookiecutter.project_slug}}/.pre-commit-config.yaml @@ -1,4 +1,4 @@ -exclude: "^docs/|/migrations/" +exclude: '^docs/|/migrations/' default_stages: [commit] repos: @@ -44,7 +44,7 @@ repos: rev: 6.0.0 hooks: - id: flake8 - args: ["--config=setup.cfg"] + args: ['--config=setup.cfg'] additional_dependencies: [flake8-isort] # sets up .pre-commit-ci.yaml to ensure pre-commit dependencies stay up to date diff --git a/{{cookiecutter.project_slug}}/.readthedocs.yml b/{{cookiecutter.project_slug}}/.readthedocs.yml index 08d7f9c24..55fd3998a 100644 --- a/{{cookiecutter.project_slug}}/.readthedocs.yml +++ b/{{cookiecutter.project_slug}}/.readthedocs.yml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.10" + python: '3.10' # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/{{cookiecutter.project_slug}}/README.md b/{{cookiecutter.project_slug}}/README.md index 83f9a7e48..56853f8f7 100644 --- a/{{cookiecutter.project_slug}}/README.md +++ b/{{cookiecutter.project_slug}}/README.md @@ -18,11 +18,11 @@ Moved to [settings](http://cookiecutter-django.readthedocs.io/en/latest/settings ### Setting Up Your Users -- To create a **normal user account**, just go to Sign Up and fill out the form. Once you submit it, you'll see a "Verify Your E-mail Address" page. Go to your console to see a simulated email verification message. Copy the link into your browser. Now the user's email should be verified and ready to go. +- To create a **normal user account**, just go to Sign Up and fill out the form. Once you submit it, you'll see a "Verify Your E-mail Address" page. Go to your console to see a simulated email verification message. Copy the link into your browser. Now the user's email should be verified and ready to go. -- To create a **superuser account**, use this command: +- To create a **superuser account**, use this command: - $ python manage.py createsuperuser + $ python manage.py createsuperuser For convenience, you can keep your normal user logged in on Chrome and your superuser logged in on Firefox (or similar), so that you can see how the site behaves for both kinds of users. @@ -56,23 +56,23 @@ This app comes with Celery. To run a celery worker: -``` bash +```bash cd {{cookiecutter.project_slug}} celery -A config.celery_app worker -l info ``` -Please note: For Celery's import magic to work, it is important *where* the celery commands are run. If you are in the same folder with *manage.py*, you should be right. +Please note: For Celery's import magic to work, it is important _where_ the celery commands are run. If you are in the same folder with _manage.py_, you should be right. To run [periodic tasks](https://docs.celeryq.dev/en/stable/userguide/periodic-tasks.html), you'll need to start the celery beat scheduler service. You can start it as a standalone process: -``` bash +```bash cd {{cookiecutter.project_slug}} celery -A config.celery_app beat ``` or you can embed the beat service inside a worker with the `-B` option (not recommended for production use): -``` bash +```bash cd {{cookiecutter.project_slug}} celery -A config.celery_app worker -B -l info ``` diff --git a/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml b/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml index 85d9572b9..724c95cdf 100644 --- a/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml +++ b/{{cookiecutter.project_slug}}/compose/production/traefik/traefik.yml @@ -4,7 +4,7 @@ log: entryPoints: web: # http - address: ":80" + address: ':80' http: # https://docs.traefik.io/routing/entrypoints/#entrypoint redirections: @@ -13,18 +13,18 @@ entryPoints: web-secure: # https - address: ":443" + address: ':443' {%- if cookiecutter.use_celery == 'y' %} flower: - address: ":5555" + address: ':5555' {%- endif %} certificatesResolvers: letsencrypt: # https://docs.traefik.io/master/https/acme/#lets-encrypt acme: - email: "{{ cookiecutter.email }}" + email: '{{ cookiecutter.email }}' storage: /etc/traefik/acme/acme.json # https://docs.traefik.io/master/https/acme/#httpchallenge httpChallenge: @@ -34,9 +34,9 @@ http: routers: web-secure-router: {%- if cookiecutter.domain_name.count('.') == 1 %} - rule: "Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)" + rule: 'Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)' {%- else %} - rule: "Host(`{{ cookiecutter.domain_name }}`)" + rule: 'Host(`{{ cookiecutter.domain_name }}`)' {%- endif %} entryPoints: - web-secure @@ -49,7 +49,7 @@ http: {%- if cookiecutter.use_celery == 'y' %} flower-secure-router: - rule: "Host(`{{ cookiecutter.domain_name }}`)" + rule: 'Host(`{{ cookiecutter.domain_name }}`)' entryPoints: - flower service: flower @@ -61,9 +61,9 @@ http: web-media-router: {%- if cookiecutter.domain_name.count('.') == 1 %} - rule: "(Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)) && PathPrefix(`/media/`)" + rule: '(Host(`{{ cookiecutter.domain_name }}`) || Host(`www.{{ cookiecutter.domain_name }}`)) && PathPrefix(`/media/`)' {%- else %} - rule: "Host(`{{ cookiecutter.domain_name }}`) && PathPrefix(`/media/`)" + rule: 'Host(`{{ cookiecutter.domain_name }}`) && PathPrefix(`/media/`)' {%- endif %} entryPoints: - web-secure @@ -79,7 +79,7 @@ http: # https://docs.traefik.io/master/middlewares/headers/#hostsproxyheaders # https://docs.djangoproject.com/en/dev/ref/csrf/#ajax headers: - hostsProxyHeaders: ["X-CSRFToken"] + hostsProxyHeaders: ['X-CSRFToken'] services: django: diff --git a/{{cookiecutter.project_slug}}/gulpfile.js b/{{cookiecutter.project_slug}}/gulpfile.js index fa3636eab..df434c134 100644 --- a/{{cookiecutter.project_slug}}/gulpfile.js +++ b/{{cookiecutter.project_slug}}/gulpfile.js @@ -3,29 +3,29 @@ //////////////////////////////// // Gulp and package -const { src, dest, parallel, series, watch } = require('gulp') -const pjson = require('./package.json') +const { src, dest, parallel, series, watch } = require('gulp'); +const pjson = require('./package.json'); // Plugins -const autoprefixer = require('autoprefixer') -const browserSync = require('browser-sync').create() -const concat = require('gulp-concat') +const autoprefixer = require('autoprefixer'); +const browserSync = require('browser-sync').create(); +const concat = require('gulp-concat'); const tildeImporter = require('node-sass-tilde-importer'); -const cssnano = require ('cssnano') -const imagemin = require('gulp-imagemin') -const pixrem = require('pixrem') -const plumber = require('gulp-plumber') -const postcss = require('gulp-postcss') -const reload = browserSync.reload -const rename = require('gulp-rename') -const sass = require('gulp-sass')(require('sass')) -const spawn = require('child_process').spawn -const uglify = require('gulp-uglify-es').default +const cssnano = require('cssnano'); +const imagemin = require('gulp-imagemin'); +const pixrem = require('pixrem'); +const plumber = require('gulp-plumber'); +const postcss = require('gulp-postcss'); +const reload = browserSync.reload; +const rename = require('gulp-rename'); +const sass = require('gulp-sass')(require('sass')); +const spawn = require('child_process').spawn; +const uglify = require('gulp-uglify-es').default; // Relative paths function function pathsConfig(appName) { - this.app = `./${pjson.name}` - const vendorsRoot = 'node_modules' + this.app = `./${pjson.name}`; + const vendorsRoot = 'node_modules'; return { vendorsJs: [ @@ -39,10 +39,10 @@ function pathsConfig(appName) { fonts: `${this.app}/static/fonts`, images: `${this.app}/static/images`, js: `${this.app}/static/js`, - } + }; } -const paths = pathsConfig() +const paths = pathsConfig(); //////////////////////////////// // Tasks @@ -51,27 +51,27 @@ const paths = pathsConfig() // Styles autoprefixing and minification function styles() { const processCss = [ - autoprefixer(), // adds vendor prefixes - pixrem(), // add fallbacks for rem units - ] + autoprefixer(), // adds vendor prefixes + pixrem(), // add fallbacks for rem units + ]; const minifyCss = [ - cssnano({ preset: 'default' }) // minify result - ] + cssnano({ preset: 'default' }), // minify result + ]; return src(`${paths.sass}/project.scss`) - .pipe(sass({ - importer: tildeImporter, - includePaths: [ - paths.sass - ] - }).on('error', sass.logError)) + .pipe( + sass({ + importer: tildeImporter, + includePaths: [paths.sass], + }).on('error', sass.logError), + ) .pipe(plumber()) // Checks for errors .pipe(postcss(processCss)) .pipe(dest(paths.css)) .pipe(rename({ suffix: '.min' })) .pipe(postcss(minifyCss)) // Minifies the result - .pipe(dest(paths.css)) + .pipe(dest(paths.css)); } // Javascript minification @@ -80,7 +80,7 @@ function scripts() { .pipe(plumber()) // Checks for errors .pipe(uglify()) // Minifies the js .pipe(rename({ suffix: '.min' })) - .pipe(dest(paths.js)) + .pipe(dest(paths.js)); } // Vendor Javascript minification @@ -91,97 +91,91 @@ function vendorScripts() { .pipe(plumber()) // Checks for errors .pipe(uglify()) // Minifies the js .pipe(rename({ suffix: '.min' })) - .pipe(dest(paths.js, { sourcemaps: '.' })) + .pipe(dest(paths.js, { sourcemaps: '.' })); } // Image compression function imgCompression() { return src(`${paths.images}/*`) .pipe(imagemin()) // Compresses PNG, JPEG, GIF and SVG images - .pipe(dest(paths.images)) + .pipe(dest(paths.images)); } {%- if cookiecutter.use_async == 'y' -%} // Run django server function asyncRunServer() { - const cmd = spawn('gunicorn', [ - 'config.asgi', '-k', 'uvicorn.workers.UvicornWorker', '--reload' - ], {stdio: 'inherit'} - ) - cmd.on('close', function(code) { - console.log('gunicorn exited with code ' + code) + const cmd = spawn( + 'gunicorn', + ['config.asgi', '-k', 'uvicorn.workers.UvicornWorker', '--reload'], + {stdio: 'inherit'}, + ); + cmd.on('close', function (code) { + console.log('gunicorn exited with code ' + code); }) } {%- else %} // Run django server function runServer(cb) { - const cmd = spawn('python', ['manage.py', 'runserver'], {stdio: 'inherit'}) - cmd.on('close', function(code) { - console.log('runServer exited with code ' + code) - cb(code) - }) + const cmd = spawn('python', ['manage.py', 'runserver'], { stdio: 'inherit' }); + cmd.on('close', function (code) { + console.log('runServer exited with code ' + code); + cb(code); + }); } {%- endif %} // Browser sync server for live reload function initBrowserSync() { browserSync.init( - [ - `${paths.css}/*.css`, - `${paths.js}/*.js`, - `${paths.templates}/*.html` - ], { + [`${paths.css}/*.css`, `${paths.js}/*.js`, `${paths.templates}/*.html`], + { {%- if cookiecutter.use_docker == 'y' %} // https://www.browsersync.io/docs/options/#option-open // Disable as it doesn't work from inside a container open: false, {%- endif %} // https://www.browsersync.io/docs/options/#option-proxy - proxy: { + proxy: { {%- if cookiecutter.use_docker == 'n' %} target: '127.0.0.1:8000', {%- else %} target: 'django:8000', {%- endif %} proxyReq: [ - function(proxyReq, req) { - // Assign proxy "host" header same as current request at Browsersync server - proxyReq.setHeader('Host', req.headers.host) - } - ] - } - } - ) + function (proxyReq, req) { + // Assign proxy 'host' header same as current request at Browsersync server + proxyReq.setHeader('Host', req.headers.host); + }, + ], + }, + }, + ); } // Watch function watchPaths() { - watch(`${paths.sass}/*.scss`{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}, styles) - watch(`${paths.templates}/**/*.html`{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}).on("change", reload) - watch([`${paths.js}/*.js`, `!${paths.js}/*.min.js`]{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}, scripts).on("change", reload) + watch(`${paths.sass}/*.scss`{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}, styles); + watch(`${paths.templates}/**/*.html`{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}).on('change', reload); + watch([`${paths.js}/*.js`, `!${paths.js}/*.min.js`]{% if cookiecutter.windows == 'y' %}, { usePolling: true }{% endif %}, scripts).on( + 'change', + reload, + ); } // Generate all assets -const generateAssets = parallel( - styles, - scripts, - vendorScripts, - imgCompression -) +const generateAssets = parallel(styles, scripts, vendorScripts, imgCompression); // Set up dev environment -const dev = parallel( - {%- if cookiecutter.use_docker == 'n' %} - {%- if cookiecutter.use_async == 'y' %} - asyncRunServer, - {%- else %} - runServer, - {%- endif %} - {%- endif %} - initBrowserSync, - watchPaths -) +{%- if cookiecutter.use_docker == 'n' %} +{%- if cookiecutter.use_async == 'y' %} +const dev = parallel(asyncRunServer, initBrowserSync, watchPaths); +{%- else %} +const dev = parallel(runServer, initBrowserSync, watchPaths); +{%- endif %} +{%- else %} +const dev = parallel(initBrowserSync, watchPaths); +{%- endif %} -exports.default = series(generateAssets, dev) -exports["generate-assets"] = generateAssets -exports["dev"] = dev +exports.default = series(generateAssets, dev); +exports['generate-assets'] = generateAssets; +exports['dev'] = dev; diff --git a/{{cookiecutter.project_slug}}/local.yml b/{{cookiecutter.project_slug}}/local.yml index 66ca3b0ef..e55e18d32 100644 --- a/{{cookiecutter.project_slug}}/local.yml +++ b/{{cookiecutter.project_slug}}/local.yml @@ -25,7 +25,7 @@ services: - ./.envs/.local/.django - ./.envs/.local/.postgres ports: - - "8000:8000" + - '8000:8000' command: /start postgres: @@ -53,7 +53,7 @@ services: - ./config:/app/config:z - ./{{ cookiecutter.project_slug }}:/app/{{ cookiecutter.project_slug }}:z ports: - - "9000:9000" + - '9000:9000' command: /start-docs {%- if cookiecutter.use_mailhog == 'y' %} @@ -101,7 +101,7 @@ services: image: {{ cookiecutter.project_slug }}_local_flower container_name: {{ cookiecutter.project_slug }}_local_flower ports: - - "5555:5555" + - '5555:5555' command: /start-flower {%- endif %} @@ -121,10 +121,10 @@ services: - /app/node_modules command: npm run dev ports: - - "3000:3000" + - '3000:3000' {%- if cookiecutter.frontend_pipeline == 'Gulp' %} # Expose browsersync UI: https://www.browsersync.io/docs/options/#option-ui - - "3001:3001" + - '3001:3001' {%- endif %} {%- endif %} diff --git a/{{cookiecutter.project_slug}}/production.yml b/{{cookiecutter.project_slug}}/production.yml index 4e9b9e048..4d56fbfa8 100644 --- a/{{cookiecutter.project_slug}}/production.yml +++ b/{{cookiecutter.project_slug}}/production.yml @@ -60,10 +60,10 @@ services: volumes: - production_traefik:/etc/traefik/acme ports: - - "0.0.0.0:80:80" - - "0.0.0.0:443:443" + - '0.0.0.0:80:80' + - '0.0.0.0:443:443' {%- if cookiecutter.use_celery == 'y' %} - - "0.0.0.0:5555:5555" + - '0.0.0.0:5555:5555' {%- endif %} redis: diff --git a/{{cookiecutter.project_slug}}/webpack/common.config.js b/{{cookiecutter.project_slug}}/webpack/common.config.js index 41efb1c77..6aba2bc77 100644 --- a/{{cookiecutter.project_slug}}/webpack/common.config.js +++ b/{{cookiecutter.project_slug}}/webpack/common.config.js @@ -3,20 +3,25 @@ const BundleTracker = require('webpack-bundle-tracker'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); module.exports = { - target: "web", + target: 'web', context: path.join(__dirname, '../'), entry: { - 'project': path.resolve(__dirname, '../{{cookiecutter.project_slug}}/static/js/project'), - 'vendors': path.resolve(__dirname, '../{{cookiecutter.project_slug}}/static/js/vendors'), + project: path.resolve(__dirname, '../{{cookiecutter.project_slug}}/static/js/project'), + vendors: path.resolve(__dirname, '../{{cookiecutter.project_slug}}/static/js/vendors'), }, output: { - path: path.resolve(__dirname, '../{{cookiecutter.project_slug}}/static/webpack_bundles/'), + path: path.resolve( + __dirname, + '../{{cookiecutter.project_slug}}/static/webpack_bundles/', + ), publicPath: '/static/webpack_bundles/', filename: 'js/[name]-[fullhash].js', chunkFilename: 'js/[name]-[hash].js', }, plugins: [ - new BundleTracker({filename: path.resolve(__dirname, '../webpack-stats.json')}), + new BundleTracker({ + filename: path.resolve(__dirname, '../webpack-stats.json'), + }), new MiniCssExtractPlugin({ filename: 'css/[name].[contenthash].css' }), ], module: { @@ -35,11 +40,7 @@ module.exports = { loader: 'postcss-loader', options: { postcssOptions: { - plugins: [ - 'postcss-preset-env', - 'autoprefixer', - 'pixrem', - ], + plugins: ['postcss-preset-env', 'autoprefixer', 'pixrem'], }, }, }, diff --git a/{{cookiecutter.project_slug}}/webpack/prod.config.js b/{{cookiecutter.project_slug}}/webpack/prod.config.js index b9c2186e5..868d26ddd 100644 --- a/{{cookiecutter.project_slug}}/webpack/prod.config.js +++ b/{{cookiecutter.project_slug}}/webpack/prod.config.js @@ -5,9 +5,9 @@ const commonConfig = require('./common.config'); {%- if cookiecutter.use_whitenoise == 'n' %} {%- if cookiecutter.cloud_provider == 'AWS' %} const s3BucketName = process.env.DJANGO_AWS_STORAGE_BUCKET_NAME; -const awsS3Domain = process.env.DJANGO_AWS_S3_CUSTOM_DOMAIN ? - process.env.DJANGO_AWS_S3_CUSTOM_DOMAIN - : `${s3BucketName}.s3.amazonaws.com`; +const awsS3Domain = process.env.DJANGO_AWS_S3_CUSTOM_DOMAIN + ? process.env.DJANGO_AWS_S3_CUSTOM_DOMAIN + : `${s3BucketName}.s3.amazonaws.com`; const staticUrl = `https://${awsS3Domain}/static/`; {%- elif cookiecutter.cloud_provider == 'GCP' %} const staticUrl = `https://storage.googleapis.com/${process.env.DJANGO_GCP_STORAGE_BUCKET_NAME}/static/`; diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/js/project.js b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/js/project.js index 62770f1c9..930fa54a2 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/js/project.js +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/js/project.js @@ -1,5 +1,5 @@ -{%- if cookiecutter.frontend_pipeline == 'Webpack' %} +{%- if cookiecutter.frontend_pipeline == 'Webpack' -%} import '../sass/project.scss'; -{%- endif %} +{% endif -%} /* Project specific Javascript goes here. */ diff --git a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/sass/project.scss b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/sass/project.scss index c9511e720..43435aca8 100644 --- a/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/sass/project.scss +++ b/{{cookiecutter.project_slug}}/{{cookiecutter.project_slug}}/static/sass/project.scss @@ -1,12 +1,11 @@ -@import "custom_bootstrap_vars"; -@import "~bootstrap/scss/bootstrap"; - +@import 'custom_bootstrap_vars'; +@import '~bootstrap/scss/bootstrap'; // project specific CSS goes here -//////////////////////////////// - //Variables// -//////////////////////////////// +/////////////// +// Variables // +/////////////// // Alert colors @@ -17,9 +16,9 @@ $pink: #f2dede; $dark-pink: #eed3d7; $red: #b94a48; -//////////////////////////////// - //Alerts// -//////////////////////////////// +//////////// +// Alerts // +//////////// // bootstrap alert CSS, translated to the django-standard levels of // debug, info, success, warning, error