text:
package ch.icclab.cyclops.usecases.tnova.model;

import java.util.ArrayList;

/**
 * @author Manu
 *         Created on 09.12.15.
 */
public class TnovaChargeResponse {
//    private String name = "charge";
    private String time;
    private String userId;
    private String resource;
    private String providerId;
    private String usage;
    private Double price;
    private Double setupCost;
    private Double periodCost;
    private String priceUnit;

    public void setTime(String time) {
        this.time = time;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getResource() {
        return resource;
    }

    public void setResource(String resource) {
        this.resource = resource;
    }

    public String getProviderId() {
        return providerId;
    }

    public void setProviderId(String providerId) {
        this.providerId = providerId;
    }

    public String getUsage() {
        return usage;
    }

    public void setUsage(String usage) {
        this.usage = usage;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Double getSetupCost() {
        return setupCost;
    }

    public void setSetupCost(Double setupCost) {
        this.setupCost = setupCost;
    }

    public Double getPeriodCost() {
        return periodCost;
    }

    public void setPeriodCost(Double periodCost) {
        this.periodCost = periodCost;
    }

    public String getPriceUnit() {
        return priceUnit;
    }

    public void setPriceUnit(String priceUnit) {
        this.priceUnit = priceUnit;
    }

    public void setFields(ArrayList<Object> value, ArrayList<String> columns) {
        this.setTime((String) value.get(columns.indexOf("time")));
        this.setUserId((String) value.get(columns.indexOf("userId")));
        this.setResource((String) value.get(columns.indexOf("resource")));
        this.setProviderId((String) value.get(columns.indexOf("providerId")));
        this.setUsage((String) value.get(columns.indexOf("usage")));
        this.setPrice(getDoubleValue(value.get(columns.indexOf("price"))));
        this.setSetupCost(getDoubleValue(value.get(columns.indexOf("setupCost"))));
        this.setPeriodCost(getDoubleValue(value.get(columns.indexOf("periodCost"))));
        this.setPriceUnit((String) value.get(columns.indexOf("priceUnit")));
    }

    private Double getDoubleValue(Object number){
        try{
            return (Double) number;
        }catch (Exception e){
            return Double.parseDouble(number.toString());
        }
    }
}


text:
using System.Collections.Generic;
using System.Linq;
using DynamicLinqExtensions;
using DynamicMVC.DynamicEntityMetadataLibrary.Models;
using DynamicMVC.UI.DynamicMVC.Interfaces;

namespace DynamicMVC.UI.DynamicMVC.ViewModels.DynamicFilterViewModels
{
    public abstract class DynamicFilterBaseViewModel : IDynamicFilter
    {
        public virtual IQueryable Filter(IQueryable qry)
        {
            if (RouteValueDictionaryWrapper.ContainsKey(QueryStringName))
            {
                return qry.DynamicWhere(PropertyName, RouteValueDictionaryWrapper.GetValue(QueryStringName));
            }
            return qry;
        }

        public virtual void ViewModelCreated(DynamicPropertyMetadata dynamicPropertyMetadata, IDictionary<string, object> controlParameters)
        {
            LabelText = dynamicPropertyMetadata.DisplayName;
            QueryStringName = PropertyName;
            if (controlParameters.ContainsKey("QueryStringName"))
                QueryStringName = controlParameters["QueryStringName"].ToString();

            if (controlParameters.ContainsKey("LabelText"))
                LabelText = controlParameters["LabelText"].ToString();
        }

        public string PropertyName { get; set; }
        public RouteValueDictionaryWrapper RouteValueDictionaryWrapper { get; set; }
        public string LabelText { get; set; }
        public string QueryStringName { get; set; }
        public int Order { get; set; }
        public abstract string DynamicFilterViewName();
        public virtual bool FilterIsApplied()
        {
            return RouteValueDictionaryWrapper.ContainsKey(QueryStringName);
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
namespace chromeos {

// DisplayConfigurationObserver observes and saves
// the change of display configurations.
class DisplayConfigurationObserver
    : public ash::WindowTreeHostManager::Observer {
 public:
  DisplayConfigurationObserver();
  ~DisplayConfigurationObserver() override;

 protected:
  // ash::WindowTreeHostManager::Observer overrides:
  void OnDisplaysInitialized() override;
  void OnDisplayConfigurationChanged() override;

  DISALLOW_COPY_AND_ASSIGN(DisplayConfigurationObserver);
};

}  // namespace chromeos

#endif  // CHROME_BROWSER_CHROMEOS_DISPLAY_DISPLAY_CONFIGURATION_OBSERVER_H_


text:
title: Never Type
localeTitle: Nunca escribe
---
# Nunca escribe

El tipo `never` representa el tipo de valores que nunca ocurren. Por ejemplo, `never` es el tipo de retorno para una expresión de función o una expresión de función de flecha que siempre lanza una excepción o una que nunca devuelve; Las variables también adquieren el tipo `never` cuando están delimitadas por `any` tipo de protección que nunca puede ser verdadera.

El tipo `never` es un subtipo de, y asignable a, cada tipo; sin embargo, ningún tipo es un subtipo de, o asignable a, `never` (excepto nunca a sí mismo). Incluso cualquiera no es asignable a nunca.

```typescript
// Function returning never must have unreachable end point
 function error(message: string): never {
    throw new Error(message);
 }

 // Inferred return type is never
 function fail() {
    return error("Something failed");
 }

 // Function returning never must have unreachable end point
 function infiniteLoop(): never {
    while (true) {
    }
 }

```


text:
require "fastlane_core"
require "pilot/tester_util"

module Pilot
  class TesterExporter < Manager
    def export_testers(options)
      UI.user_error!("Export file path is required") unless options[:testers_file_path]

      start(options)
      require 'csv'

      app_filter = (config[:apple_id] || config[:app_identifier])
      if app_filter
        app = Spaceship::Application.find(app_filter)
        testers = Spaceship::Tunes::Tester::External.all_by_app(app.apple_id)
      else
        testers = Spaceship::Tunes::Tester::External.all
      end

      file = config[:testers_file_path]

      CSV.open(file, "w") do |csv|
        csv << ['First', 'Last', 'Email', 'Groups', 'Devices', 'Installed Version', 'Install Date']

        testers.each do |tester|
          group_names = tester.groups_list(';') || ""
          install_version = tester.latest_build || ""
          pretty_date = tester.pretty_install_date || ""

          csv << [tester.first_name, tester.last_name, tester.email, group_names, tester.devices.count, install_version, pretty_date]
        end

        UI.success("Successfully exported CSV to #{file}")
      end
    end
  end
end


text:
/**
 * This class can be used to configure options that must be used when resources
 * are loaded. This is similar to using the extension point
 * 'eu.hyvar.context.contextValidity.resource.hyvalidityformula.default_load_option
 * s' with the difference that the options defined in this class are used even if
 * no Eclipse platform is running.
 */
package eu.hyvar.context.contextValidity.resource.hyvalidityformula.mopp;

import java.util.Collections;
import java.util.Map;

public class HyvalidityformulaOptionProvider implements eu.hyvar.context.contextValidity.resource.hyvalidityformula.IHyvalidityformulaOptionProvider {

	public Map<?,?> getOptions() {
		// create a map with static option providers here
		return Collections.emptyMap();
	}

}


text:
/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.trino.spi.type;

import java.util.Objects;

public class DecimalParseResult
{
    private final Object object;
    private final DecimalType type;

    public DecimalParseResult(Object object, DecimalType type)
    {
        this.object = object;
        this.type = type;
    }

    public Object getObject()
    {
        return object;
    }

    public DecimalType getType()
    {
        return type;
    }

    @Override
    public boolean equals(Object o)
    {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        DecimalParseResult that = (DecimalParseResult) o;
        return Objects.equals(object, that.object) &&
                Objects.equals(type, that.type);
    }

    @Override
    public int hashCode()
    {
        return Objects.hash(object, type);
    }

    @Override
    public String toString()
    {
        return "ParseResult{" +
                "object=" + object +
                ", type=" + type +
                '}';
    }
}


text:
package am.project.support.compat;

import android.animation.AnimatorInflater;
import android.animation.StateListAnimator;
import android.annotation.TargetApi;
import android.graphics.Outline;
import android.graphics.drawable.Drawable;
import android.view.View;

import java.lang.ref.WeakReference;

/**
 * View版本兼容控制器
 * Created by Alex on 2016/11/21.
 */
@SuppressWarnings("unused")
public final class AMViewCompat {

    private static final AMViewCompatImpl IMPL;

    static {
        final int version = android.os.Build.VERSION.SDK_INT;
        if (version >= 21) {
            IMPL = new AMViewCompatLollipop();
        } else if (version >= 16) {
            IMPL = new AMViewCompatJB();
        } else {
            IMPL = new AMViewCompatBase();
        }
    }

    private AMViewCompat() {
        //no instance
    }

    /**
     * Set the background to a given Drawable, or remove the background. If the
     * background has padding, this View's padding is set to the background's
     * padding. However, when a background is removed, this View's padding isn't
     * touched. If setting the padding is desired, please use
     * setPadding(int, int, int, int).
     *
     * @param view       View
     * @param background The Drawable to use as the background, or null to remove the
     *                   background
     */
    public static void setBackground(View view, Drawable background) {
        IMPL.setBackground(view, background);
    }

    /**
     * Sets the {@link android.view.ViewOutlineProvider} of the view, which generates the Outline that defines
     * the shape of the shadow it casts, and enables outline clipping.
     *

     * The default ViewOutlineProvider, {@link android.view.ViewOutlineProvider#BACKGROUND}, queries the Outline
     * from the View's background drawable, via {@link Drawable#getOutline(Outline)}. Changing the
     * outline provider with this method allows this behavior to be overridden.
     *

     * If the ViewOutlineProvider is null, if querying it for an outline returns false,
     * or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
     *

     * Only outlines that return true from {@link Outline#canClip()} may be used for clipping.
     *
     * @see View#setClipToOutline(boolean)
     * @see View#getClipToOutline()
     * @see View#getOutlineProvider()
     */
    public static void setOutlineProvider(View view, ViewOutlineProvider provider) {
        IMPL.setOutlineProvider(view, provider);
    }

    /**
     * Sets whether the View's Outline should be used to clip the contents of the View.
     *

     * Only a single non-rectangular clip can be applied on a View at any time.
     * Circular clips from a {@link android.view.ViewAnimationUtils#createCircularReveal(View, int, int, float, float)
     * circular reveal} animation take priority over Outline clipping, and
     * child Outline clipping takes priority over Outline clipping done by a
     * parent.
     *

     * Note that this flag will only be respected if the View's Outline returns true from
     * {@link Outline#canClip()}.
     *
     * @see View#setOutlineProvider(android.view.ViewOutlineProvider)
     * @see View#getClipToOutline()
     */
    public static void setClipToOutline(View view, boolean clipToOutline) {
        IMPL.setClipToOutline(view, clipToOutline);
    }

    /**
     * Attaches the provided StateListAnimator to this View.
     *

     * Any previously attached StateListAnimator will be detached.
     *
     * @param stateListAnimator The StateListAnimator to update the view
     * @see android.animation.StateListAnimator
     */
    public static void setStateListAnimator(View view, StateListAnimator stateListAnimator) {
        IMPL.setStateListAnimator(view, stateListAnimator);
    }

    /**
     * Attaches the provided StateListAnimator to this View.
     *

     * Any previously attached StateListAnimator will be detached.
     *
     * @param id The id of StateListAnimator to update the view
     * @see android.animation.StateListAnimator
     */
    public static void setStateListAnimator(View view, int id) {
        IMPL.setStateListAnimator(view, id);
    }

    interface AMViewCompatImpl {
        void setBackground(View view, Drawable background);

        void setOutlineProvider(View view, ViewOutlineProvider provider);

        void setClipToOutline(View view, boolean clipToOutline);

        void setStateListAnimator(View view, StateListAnimator stateListAnimator);

        void setStateListAnimator(View view, int id);
    }

    private static class AMViewCompatBase implements AMViewCompatImpl {
        @SuppressWarnings("deprecation")
        @Override
        public void setBackground(View view, Drawable background) {
            view.setBackgroundDrawable(background);
        }

        @Override
        public void setOutlineProvider(View view, ViewOutlineProvider provider) {
            // do nothing
        }

        @Override
        public void setClipToOutline(View view, boolean clipToOutline) {
            // do nothing
        }

        @Override
        public void setStateListAnimator(View view, StateListAnimator stateListAnimator) {
            // do nothing
        }

        @Override
        public void setStateListAnimator(View view, int id) {

        }
    }

    @TargetApi(16)
    private static class AMViewCompatJB extends AMViewCompatBase {
        @Override
        public void setBackground(View view, Drawable background) {
            view.setBackground(background);
        }
    }

    @TargetApi(21)
    private static class AMViewCompatLollipop extends AMViewCompatJB {
        @Override
        public void setOutlineProvider(View view, ViewOutlineProvider provider) {
            view.setOutlineProvider(new ViewOutlineProviderLollipop(provider));
        }

        @Override
        public void setClipToOutline(View view, boolean clipToOutline) {
            view.setClipToOutline(clipToOutline);
        }

        @Override
        public void setStateListAnimator(View view, StateListAnimator stateListAnimator) {
            view.setStateListAnimator(stateListAnimator);
        }

        @Override
        public void setStateListAnimator(View view, int id) {
            view.setStateListAnimator(AnimatorInflater.loadStateListAnimator(view.getContext(), id));
        }
    }

    @TargetApi(21)
    private static class ViewOutlineProviderLollipop extends android.view.ViewOutlineProvider {
        private final WeakReference<ViewOutlineProvider> providerWeakReference;

        ViewOutlineProviderLollipop(ViewOutlineProvider provider) {
            providerWeakReference = new WeakReference<>(provider);
        }

        @Override
        public void getOutline(View view, Outline outline) {
            ViewOutlineProvider provider = providerWeakReference.get();
            if (provider != null)
                provider.getOutline(view, outline);
        }
    }
}


text:
// Copyright (c) 2014 Max Planck Society

/*!@file
 * @author  Stephan Wenninger <swenninger@tuebingen.mpg.de>
 * @author  Edgar Klenske <eklenske@tuebingen.mpg.de>
 *
 * @date    2014-09-14
 *
 * @detail
 *  This file provides mathematical tools needed for the Gaussian process toolbox.
 *
 */

#ifndef GP_MATH_TOOLS_H
#define GP_MATH_TOOLS_H

#define MINIMAL_THETA 1e-7

#include <Eigen/Dense>
#include <limits>
#include <vector>
#include <stdexcept>
#include <cstdint>

namespace math_tools {
/*!
 * The squareDistance is the pairwise distance between all points of the passed
 * vectors. I.e. it generates a symmetric matrix when two vectors are passed.
 *
 * The first dimension (rows) is the dimensionality of the input space, the
 * second dimension (columns) is the number of datapoints. The number of
 * rows must be identical.

  @param a
  a Matrix of size Dxn

  @param b
  a Matrix of size Dxm

  @result
  a Matrix of size nxm containing all pairwise squared distances
*/
Eigen::MatrixXd squareDistance(
    const Eigen::MatrixXd& a,
    const Eigen::MatrixXd& b);

/*!
 * Single-input version of squaredDistance. For single inputs, it is assumed
 * that the pairwise distance matrix should be computed between the passed
 * vector itself.
 */
Eigen::MatrixXd squareDistance(const Eigen::MatrixXd& a);

Eigen::MatrixXd generate_random_sequence(int d, int n);
Eigen::MatrixXd generate_random_sequence(
    int n,
    Eigen::VectorXd x,
    Eigen::VectorXd t);

/*!
 * function M = exp_map (mu, E)
 * % Computes exponential map on a sphere
 * %
 * % many thanks to Soren Hauberg!
 * %
 * % Philipp Hennig, September 2012
 */
Eigen::MatrixXd exp_map(const Eigen::VectorXd& mu, const Eigen::MatrixXd& E);

Eigen::MatrixXd generate_uniform_random_matrix_0_1(
    const size_t n,
    const size_t m);

Eigen::MatrixXd box_muller(const Eigen::VectorXd &vRand);

/*!
 * Generates normal random samples. First it gets some uniform random samples
 * and then uses the Box-Muller transform to get normal samples out of it
 */
Eigen::MatrixXd generate_normal_random_matrix(
    const size_t n,
    const size_t m);

//! Returns a single random double drawn from the standard normal distribution
double generate_normal_random_double();

/*!
 * Checks if a value is NaN by comparing it with itself.
 *
 * The rationale is that NaN is the only value that does not evaluate to true
 * when comparing it with itself.
 * Taken from:
 * http://stackoverflow.com/questions/3437085/check-nan-number
 * http://stackoverflow.com/questions/570669/checking-if-a-double-or-float-is-nan-in-c
 */
inline bool isNaN(double x) {
  return x != x;
}

/*!
 * Checks if a double is infinite via std::numeric_limits<double> functions.
 *
 * Taken from:
 * http://bytes.com/topic/c/answers/588254-how-check-double-inf-nan#post2309761
 */
inline bool isInf(double x) {
  return x == std::numeric_limits<double>::infinity() ||
         x == -std::numeric_limits<double>::infinity();
}

}  // namespace math_tools

#endif  // define GP_MATH_TOOLS_H


text:
import * as Hapi from '../../';
const server = new Hapi.Server();
server.connection({ port: 80 });

const cache = server.cache({ segment: 'countries', expiresIn: 60 * 60 * 1000 });
cache.set('norway', { capital: 'oslo' }, null, (err) => {

    cache.get('norway', (err, value, cached, log) => {

        // value === { capital: 'oslo' };
    });
});

// provision
// From https://hapijs.com/api/16.1.1#servercacheprovisionoptions-callback

server.initialize((err) => {

    server.cache.provision({ engine: require('catbox-memory'), name: 'countries' }, (err) => {

        const cache = server.cache({ cache: 'countries', expiresIn: 60 * 60 * 1000 });
        cache.set('norway', { capital: 'oslo' }, null, (err) => {

            cache.get('norway', (err, value, cached, log) => {

                // value === { capital: 'oslo' };
            });
        });
    });
});


text:
Thêm Dịch bệnh

<?php if (isset($error)): ?>

    <?php echo $error; ?>

<?php endif; ?>
  <form class="form-horizontal" method="post" action="">

      Chủ đề :

        <input type="text" name="db_title" class="form-control" id="news_title" placeholder="chủ đề">

      Nội dung :

        <textarea class="form-control col-sm-4" rows="8" id="news_content" name="db_content"></textarea>

        <button type="submit" class="btn btn-default">Đăng bài</button>

  </form>


text:
.. _configuration:

============
Конфіґурація
============

В Pylons є два шляхи щоб сконфіґурувати програму:

* Конфіґураційни файл (:ref:`run-config`)
* Каталог ``config`` в вашій програмі

Файли в каталозі ``config`` змінють певні аспекти в поведінці вашої програми. любі опції які вебмайстру прийдеться міняти під час розгортання, повинні бути визначені в конфіґураційному файлі.

.. tip::
    Хорошим індикатором в якому випадку пторібно використовувати ``config`` каталог, а в якому конфіґураційни файл, є те чи дана опція є обовязковою для функціонування програми чи ні. Якщо програма не буде працювати без даної опції, дана опція повинна бути визначена в файлі :file:`config/` каталога. Якщо опція повинна бути змінена під час розгортання програми, її потрібно визначити в :ref:`run-config` файлі.

Каталог :file:`config/` вашої програми включає:

* :file:`config/environment.py` описується в :ref:`environment-config`
* :file:`config/middleware.py` описується в :ref:`middleware-config`
* :file:`config/routing.py` описується в :ref:`url-config`

Кожен з цих файлів дозволяє розробникикам міняти ключові аспекти в поведінці програми.

.. _run-config:

********************
Runtime Конфіґурація
********************

Коли ви створюєте новий проект, файл з назвою :file:`development.ini` автоматично створюється з усіма іншими файлами проекту. Цей конфіґураційний файл містить опції для використання під час розробки, наприклад дуже зручно під час розробки отримувати звіт про помилку кожного разу як вона трапляється. Даний :file:`development.ini` файл містить опції, які включають режим відлагодження, так що помилки починають відображатись.

Оскільки конфігураційний файл використовується для визначення того, які додатки запускати, багато конфіґураційних файлів можна використовувати для того щоб легко переключатись між різними наборами опцій. Типово розробник може мати ``development.ini`` кнфоґураційний файл для тестування, і ``production.ini`` файл створений командою :command:`paster make-config` for testing the command produces sensible production output. Також в проект включаєься :file:`test.ini` конфіґураційний файл, для специфічних для тестування опцій.

Щоб вказати конфіґураційний файл який буде використовуатись під час виконння програми, змініть останню частину команди :command:`paster serve` включивши потрібний конфіґураційний файл:

.. code-block :: bash

    $ paster serve production.ini

.. seealso::
    Формат конфіґураційного файлу **і його опції** описані дуже детально в `Paste Deploy документації <http://pythonpaste.org/deploy/>`_.

Отримання інформації з конфіґураційного файлу
=============================================

Вся інформація з конфіґураційного файла є доступна в ``pylons.config`` обє'кті. Також даний об'єкт містить конфігурацію, яка визначена в :file:`config.environment` модулі, вашого проекту.

.. code-block :: python

    from pylons import config

``pylons.config`` поводиться як python словник. Для прикладу, якщо конфіґураційний файл містить записи всередині ``[app:main]`` блоку:

.. code-block :: ini

    cache_dir = %(here)s/data

Тоді ці дані можуть бути прочитані в коді вашої програми:

.. code-block :: python

    from pylons import config
    cache_dir = config['cache_dir']

Або статус відлагодження, як це:

.. code-block :: python

    debug = config['debug']

Обробка не текстових даних в конфіґураційних файлах
---------------------------------------------------

По замовчуванню, всі значення вконфіґураційному файлі розглядаються як стрічки тексту.
Щоб легко оперувати булевими значеннями, Paste бібіліотека містить функцію яка конвертує
``true`` і ``false`` в правильні булеві значення:

.. code-block :: python

    from paste.deploy.converters import asbool

    debug = asbool(config['debug'])

Такий підхід вже використовується в :ref:`middleware-config` проекту по замовчуванню  щоб вказати middleware, яке повинно працювати лише в режимі відлагодження, потрібно встановити опцію ``debug`` в ``true``.

Production Крнфіґураційні файли
===============================

Щоб вказати змінні по замовчуванні в конфіґураційному INI файлі, які повинні використовуватись під час розгортання вашої програми, відредагуйте файл :file:`config/deployment.ini_tmpl`. Цей файл буде використовуватись як шаблон під час розгортання програми, так що людина яка буде провдити розгортання буде мати встановлений мінімальний набіор опцій які вимагає ваша програма.

Одна з най більш важливих опцій яку потрібно зімнити це ``debug = true`` опція. Також email опції повинні бути правильно встановленні, так що помилки будуть відправлятись відповідному розробнику чи веб майстру, у випадку коли вони будуть виникати.

Ґенерація Production конфіґурації
---------------------------------------

Щоб зґенерувати production.ini файл з :file:`config/deployment.ini_tmpl` файла, він спочатку повинен бути встановлений як :term:`egg` or under development mode. Якщо вважати що назва вошої Pylons програми є ``helloworld``, виконайте:

.. code-block :: bash

    $ paster make-config helloworld production.ini

.. note::
    Дана команда також буде працювати всередині проекту під час його розробки.

Вся відповідальність лягає на розробника, який повинен бути впевненим що всі потрібні типові конфіґураційні значення існують коли він виконує ``paster make-config`` команду.

.. warning::
    **Завжди** перевіряйте чи значення ``debug`` встановлене в ``false``, коли ви розгортаєте Pylons програму.

.. _environment-config:

**********
Середовище
**********

Модуль :file:`config/environment.py` встановлює базові змінні середовища Pylons,
які потрібні для запуску програми. Кожен об'єкт, який встановлюється один раз для всієї програми
повинен бути встановлений тут, або в
:file:`lib/app_globals` :meth:`__init__.py` методі.

Він також викликає :ref:`url-config` функцію, щоб встановити як URL адреси будуть відповідати :ref:`controllers`, створює :term:`app_globals`
об'єкт, визначає на який модуль буде ссилатись :term:`h`, і визначає де встановлений двигун шаблонів.

Коли ви використовуєте SQLAlchemy, ми рекомендуємо щоб він був встановлений в цьому модулі. Типова SQLAlchemy конфіґурація з якою постачається Pylons, створює тут двигун який потім використовується в :file:`model/__init__.py`.

.. _url-config:

****************
URL Конфіґурація
****************

Python бібілотека Routes, обробляє приєднані до контроллерів і їніх методів URL адреси, або їх :term:`action` як Routes що посилаються на них. По замовчуванню, Pylons встановлює наступні  :term:`route`\s (які знаходяться в :file:`config/routing.py`):

.. code-block:: python

    map.connect('/{controller}/{action}')
    map.connect('/{controller}/{action}/{id}')

.. versionchanged:: 0.9.7
    Prior to Routes 1.9, all map.connect statements required variable parts
    to begin with a ``:`` like ``map.connect(':controller/:action')``. This
    syntax is now optional, and the new ``{}`` syntax is recommended.

Any part of the path inside the curly braces is a variable (a `variable part`
) that will match
any text in the URL for that 'part'. A 'part' of the URL is the text between
two forward slashes. Every part of the URL must be present for the
:term:`route` to match, otherwise a 404 will be returned.

Подані тут шляхи транслюються Routes бібліотекою в регулярні вирази
щоб забезпечити високу швидкодію в сівпадінні URL адрес. По замовчуванню, всі частини змінних (за винятком
спеціального випадка ``{controller}``) співпадають регулярному виразу ``[^/]+``, що відпоідає любому символу окрім зворотнього слеша. це можна легко змінити,
наприклад щоб частині ``{id}`` співпадали лише цифри:

.. code-block :: python

    map.connect('/{controller}/{action}/{id:\d+}')

Якщо регулярний вираз містить ``{}``, далі потрібно вказати змінну для даної частини. Щоб обмежити ``{id}``, щоб він відповідав лише 2 або 4 цифрам:

.. code-block :: python

    map.connect('/{controller}/{action}/{id}',  requirements=dict(id='\d{2,4}'))

Контроллер і action також можуть бути вказані як аргументи, так що тоді не потрібно включати їх в URL адресу:

.. code-block :: python

    # Archives by 2 digit year -> /archives/08
    map.connect('/archives/{year:\d\d}', controller='articles',  action='archives')

Люба змінна, або аргумент в операторі ``map.connect`` будуть доступні для використання в action. Наприклад для вищенаведеного маршруту:

.. code-block :: python

    class ArticlesController(BaseController):
        def archives(self, year):
            # etc.

Частина в URL адресі, яка співпала як рік, є доступна по імені в аргументі функціїї.

.. note::
    Routes також містять можливість мінімізації URL адерси. Цей режим в загальному не є дуже інтиютивним, і починаючи з Pylons 0.9.7 є по замовчуванню виключеним за допомогою  ``map.minimization=False`` опції.

The default mapping can match to any controller and any of their
actions which means the following URLs will match:

.. code-block:: text

    /hello/index       >>    controller: hello, action: index
    /entry/view/4      >>    controller: entry, action: view, id:4
    /comment/edit/2    >>    controller: comment, action: edit, id:2

This simple scheme can be suitable for even large applications when complex URL's aren't needed.

Controllers can be organized into directories as well. For example, if the admins should have a separate ``comments`` controller:

.. code-block:: bash

    $ paster controller admin/comments

Will create the ``admin`` directory along with the appropriate ``comments``
controller under it. To get to the comments controller:

.. code-block:: text

    /admin/comments/index    >>    controller: admin/comments, action: index

.. note::
    The ``{controller}`` match is special, in that it doesn't always stop
    at the next forward slash (``/``). As the example above demonstrates,
    it is able to match controllers nested under a directory should they
    exist.

Adding a route to match ``/``
=============================

The controller and action can be specified directly in the :meth:`map.connect`
statement, as well as the raw URL should be matched.

.. code-block:: python

    map.connect('/', controller='main', action='index')

will result in ``/`` being handled by the ``index`` method of the ``main``
controller.

Ґенерація URL адрес
===================

URL адреси можуть бути зґенеровані використовуючи допоміжний метод :func:`~routes.util.url`, який по замовчуванню в проекті Pylons буде в глобальній змінній :data:`url`.
Аргументи що вказують на використання контроллера або action, можуть бути прописані всередині:

.. code-block:: python

    # generates /content/view/2
    url(controller='content', action='view', id=2)

Всередині шаблонів, контроллерів і інших змінних очевидно буде краще перейти до використання ґенераціїї URL адрес. Це належить до `Routes memory <http://routes.groovie.org/manual.html#route-memory>`_ і може бути вимкнено, вказавши контроллер з ``/`` на початку:

.. code-block:: python

    # ALWAYS generates /content/view/2
    url(controller='/content', action='view', id=2)

.. seealso::

    `Routes manual <http://routes.groovie.org/manual.html>`_
    Full details and source code.

.. _middleware-config:

**********
Middleware
**********

A projects WSGI stack should be setup in the :file:`config/middleware.py`
module. Ideally this file should import middleware it needs, and set it up
in the `make_app` function.

The default stack that is setup for a Pylons application is described in
detail in :ref:`wsgi-middleware`.

Default middleware stack:

.. code-block :: python

    # The Pylons WSGI app
    app = PylonsApp()

    # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)

    # Routing/Session/Cache Middleware
    app = RoutesMiddleware(app, config['routes.map'])
    app = SessionMiddleware(app, config)
    app = CacheMiddleware(app, config)

    if asbool(full_stack):
        # Handle Python exceptions
        app = ErrorHandler(app, global_conf, **config['pylons.errorware'])

        # Display error documents for 401, 403, 404 status codes (and
        # 500 when debug is disabled)
        if asbool(config['debug']):
            app = StatusCodeRedirect(app)
        else:
            app = StatusCodeRedirect(app, [400, 401, 403, 404, 500])

    # Establish the Registry for this application
    app = RegistryManager(app)

    # Static files (If running in production, and Apache or another web
    # server is handling this static content, remove the following 3 lines)
    static_app = StaticURLParser(config['pylons.paths']['static_files'])
    app = Cascade([static_app, javascripts_app, app])
    return app

Since each piece of middleware wraps the one before it, the stack needs to be
assembled in reverse order from the order in which its called. That is, the
very last middleware that wraps the WSGI Application, is the very first that
will be called by the server.

The last piece of middleware in the stack, called Cascade, is used to
serve static content and JavaScript files during development. For top
performance, consider wrapping the line that wraps the app with
Cascade in an if block that checks to see if ``debug`` is set to true.
Then have the webserver or a :term:`CDN` serve static files.

.. warning::

    When unsure about whether or not to change the middleware, **don't**. The
    order of the middleware is important to the proper functioning of a
    Pylons application, and shouldn't be altered unless needed.

Adding custom middleware
========================

Custom middleware should be included in the :file:`config/middleware.py` at
comment marker::

    # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)

For example, to add a middleware component named `MyMiddleware`,
include it in :file:`config/middleware.py`::

    # The Pylons WSGI app
    app = PylonsApp()

    # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares)
    app = MyMiddleware(app)

    # Routing/Session/Cache Middleware
    app = RoutesMiddleware(app, config['routes.map'])
    app = SessionMiddleware(app, config)
    app = CacheMiddleware(app, config)

The app object is simply passed as a parameter to the `MyMiddleware` middleware which in turn should return a wrapped WSGI application.

Care should be taken when deciding in which layer to place custom
middleware. In most cases middleware should be placed between the
Pylons WSGI application instantiation and the Routes middleware; however,
if the middleware should run *before* the session object or routing is handled::

    # Routing/Session/Cache Middleware
    app = RoutesMiddleware(app, config['routes.map'])
    app = SessionMiddleware(app, config)

    # MyMiddleware can only see the cache object, nothing *above* here
    app = MyMiddleware(app)

    app = CacheMiddleware(app, config)

What is full_stack?
===================

In the Pylons ini file {:file:`development.ini` or :file:`production.ini`} this block determines if the flag full_stack is set to true or false::

    [app:main]
    use = egg:app_name
    full_stack = true

The full_stack flag determines if the ErrorHandler and StatusCodeRedirect is included as a layer in the middleware wrapping process. The only condition in which this option would be set to `false` is if multiple Pylons applications are running and will be wrapped in the appropriate middleware elsewhere.

.. _setup-config:

*****************
Application Setup
*****************

There are two kinds of 'Application Setup' that are occasionally referenced
with regards to a project using Pylons.

* Setting up a new application
* Configuring project information and package dependencies

Setting Up a New Application
============================

To make it easier to setup a new instance of a project, such as setting up
the basic database schema, populating necessary defaults, etc. a setup
script can be created.

In a Pylons project, the setup script to be run is located in the projects'
:file:`websetup.py` file. The default script loads the projects configuration
to make it easier to write application setup steps:

.. code-block :: python

    import logging

    from helloworld.config.environment import load_environment

    log = logging.getLogger(__name__)

    def setup_app(command, conf, vars):
        """Place any commands to setup helloworld here"""
        load_environment(conf.global_conf, conf.local_conf)

.. note::
    If the project was configured during creation to use SQLAlchemy this file
    will include some commands to setup the database connection to make it
    easier to setup database tables.

To run the setup script using the development configuration:

.. code-block :: bash

    $ paster setup-app development.ini

Configuring the Package
=======================

A newly created project with Pylons is a standard Python package. As a Python
package, it has a :file:`setup.py` file that records meta-information about
the package. Most of the options in it are fairly self-explanatory, the most
important being the 'install_requires' option:

.. code-block :: python

    install_requires=[
        "Pylons>=0.9.7",
        "Mako",
    ],

These lines indicate what packages are required for the proper functioning
of the application, and should be updated as needed. To re-parse the
:file:`setup.py` line for new dependencies:

.. code-block :: bash

    $ python setup.py develop

In addition to updating the packages as needed so that the dependency
requirements are made, this command will ensure that this package is active
in the system (without requiring the traditional
:command:`python setup.py install`).

.. seealso::
    `Declaring Dependencies <http://peak.telecommunity.com/DevCenter/setuptools#declaring-dependencies>`_


text:
<?php
    $title = 'Gaucho Football';
    $pick_games_active = true;
    $view_picks_active = false;
    $forum_active = false;
    $rules_active = false;
    $help_active = false;
    require './_includes/header.php';
?>

            <?php
            if (!empty($_SESSION['LoggedIn']) && !empty($_SESSION['Username'])) {
            ?>

Pick Games

                    Sophia wins week 17! Thanks for a great season!

            <?php
            } elseif (!empty($_POST['username']) && !empty($_POST['password'])) {
                $username = mysql_real_escape_string($_POST['username']);
                $password = md5(mysql_real_escape_string($_POST['password']));
                $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'");

                if(mysql_num_rows($checklogin) == 1) {
                    $row = mysql_fetch_array($checklogin);
                    $email = $row['EmailAddress'];
                    $_SESSION['Username'] = $username;
                    $_SESSION['EmailAddress'] = $email;
                    $_SESSION['LoggedIn'] = 1;

                    echo '
Success
';
                    echo '
We are now redirecting you to the member area.
';
                    echo '<meta http-equiv="refresh" content="1" />';
                } else {
                    echo "
Error
";
                    echo "
Sorry, your account could not be found. Please click here to try again.
";
                }
            } else { // show login form
            ?>

Welcome to Gaucho Football

Please login, or click here to register.

                    <form method="post" action="index.php" name="loginform" id="loginform">

Login

                                Username:

                                <input type="text" name="username" id="username" />

                                Password:

                                <input type="password" name="password" id="password" />

                                <input type="submit" name="login" id="login" value="Submit" class="btn btn-primary" />

                    </form>

            <?php } ?>

<?php include './_includes/footer.php'; ?>


text:
window.addEventListener('load', function() {
    console.log('Hello from client side');
});


text:
namespace System.Reflection.Metadata
{
    public struct TypeLayout
    {
        private readonly int _size;
        private readonly int _packingSize;

        public TypeLayout(int size, int packingSize)
        {
            _size = size;
            _packingSize = packingSize;
        }

        public int Size
        {
            get { return _size; }
        }

        public int PackingSize
        {
            get { return _packingSize; }
        }

        public bool IsDefault
        {
            get { return _size == 0 && _packingSize == 0; }
        }
    }
}


text:
#include "stdio.h"
#include "stdlib.h"
#include "EppSecDnsDsData.hpp"
#include "EppUtil.hpp"

const char EppSecDnsDsData::hex[16] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

EppSecDnsDsData * EppSecDnsDsData::fromXML( const DOMNode &root )
{
	EppSecDnsDsData	* data = new EppSecDnsDsData();
	if( data == null )
	{
		return data;
	}

	int		val   = 0;
	char	      * p     = null;
	DOMString	value;
#if defined(EPPDNSSEC_COMPT)
	time_t		date  = null;
#endif
	DOMNodeList* list = root.getChildNodes();

	for( unsigned int i = 0; i < list->getLength(); i++ )
	{
		DOMNode* node = list->item(i);
		DOMString name = node->getLocalName();
		if( name.isNull() )
		{
			name = node->getNodeName();
		}
		if( name.isNull() )
		{
			continue;
		}
		if( name.substringData(0, 7).equals("secDNS:") )
		{
			name = name.substringData(7, name.length() - 7);
		}
		if( name.equals("keyTag") )
		{
			value = EppUtil::getText(*node);
			p = value.transcode();
			if( p != null && EppUtil::isNumeric(p) )
			{
				val = ::atoi(p);
				XercesString::Delete(p);
				data->setKeyTag(val);
			}
		}
		else if( name.equals("alg") )
		{
			value = EppUtil::getText(*node);
			p = value.transcode();
			if( p != null && EppUtil::isNumeric(p) )
			{
				val = ::atoi(p);
				XercesString::Delete(p);
				data->setAlgorithm(val);
			}
		}
		else if( name.equals("digestType") )
		{
			value = EppUtil::getText(*node);
			p = value.transcode();
			if( p != null )
			{
				val = ::atoi(p);
				XercesString::Delete(p);
				data->setDigestType(val);
			}
		}
		else if( name.equals("digest") )
		{
			value = EppUtil::getText(*node);
			if( value.isNotNull() && value.length() > 0 )
			{
				data->setDigestString(value);
			}
		}
#if defined(EPPDNSSEC_COMPT)
		else if( name.equals("sDate") )
		{
			date = EppUtil::getDate(*node);
			if( date != null )
			{
				data->setStartDate(date);
			}
		}
		else if( name.equals("eDate") )
		{
			date = EppUtil::getDate(*node);
			if( date != null )
			{
				data->setEndDate(date);
			}
		}
		else if( name.equals("vInterval") )
		{
			value = EppUtil::getText(*node);
			if( value.isNotNull() && value.length() > 0 )
			{
				data->setValidationInterval(value);
			}
		}
#endif
		else if( name.equals("keyData") )
		{
			EppSecDnsKeyData *kd = EppSecDnsKeyData::fromXML(*node);
			if( null != kd )
			{
				data->keyDataPresent = true;/*NOTICE: this is redundant*/
				data->setKeyData( *kd );
				delete kd;
			}
		}
	}
	return data;
}

DOMElement* EppSecDnsDsData::toXML( DOMDocument& doc, const DOMString& tag )
{
	char	    buf[32];
	DOMElement* elm;
	DOMElement* body = doc.createElement(tag);

	elm = doc.createElement(XS("keyTag"));
	(void) ::sprintf(buf, "%d", this->keyTag);
	elm->appendChild(doc.createTextNode(XS(buf)));
	body->appendChild(elm);

	elm = doc.createElement(XS("alg"));
	(void) ::sprintf(buf, "%d", this->alg);
	elm->appendChild(doc.createTextNode(XS(buf)));
	body->appendChild(elm);

	elm = doc.createElement(XS("digestType"));
	(void) ::sprintf(buf, "%d", this->digestType);
	elm->appendChild(doc.createTextNode(XS(buf)));
	body->appendChild(elm);

	if( this->digest.isNotNull() )
	{
		elm = doc.createElement(XS("digest"));
		elm->appendChild(doc.createTextNode(this->digest));
		body->appendChild(elm);
	}
#if defined(EPPDNSSEC_COMPT)
	if( this->sDate != null )
	{
		elm = doc.createElement(XS("sDate"));
		elm->appendChild(EppUtil::createTextNode(doc, this->sDate));
		body->appendChild(elm);
	}

	if( this->eDate != null )
	{
		elm = doc.createElement(XS("eDate"));
		elm->appendChild(EppUtil::createTextNode(doc, this->eDate));
		body->appendChild(elm);
	}

	if( this->vInterval.isNotNull() )
	{
		elm = doc.createElement(XS("vInterval"));
		elm->appendChild(doc.createTextNode(this->vInterval));
		body->appendChild(elm);
	}
#endif
	if( true == this->keyDataPresent )
	{
		DOMElement* element = this->secKeyData.toXML(doc, "keyData");
		body->appendChild(element);
	}

	return body;
}