aboutsummaryrefslogtreecommitdiffstats
path: root/resources/tools/presentation_new/static_content.py
blob: a02330c15fabcd5b6d71451576024c194a621867 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# Copyright (c) 2017 Cisco and/or its affiliates.
# 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.

"""Static content

Process the static content stored in the git.
"""

import logging

from os import makedirs
from os.path import isdir
from shutil import rmtree, copytree, Error

from errors import PresentationError


def prepare_static_content(spec):
    """Prepare the static content which is stored in the git.

    :param spec: Specification read from the specification file.
    :type spec: Specification
    :raises PresentationError: If it is not possible to process the static
    content.
    """

    src = spec.static.get("src-path", None)
    dst = spec.static.get("dst-path", None)
    if src is None or dst is None:
        logging.warning("No static content specified, skipping")
        return

    # Copy all the static content to the build directory:
    logging.info("Copying the static content ...")
    logging.info("  Source:      {0}".format(src))
    logging.info("  Destination: {0}".format(dst))

    try:
        if isdir(dst):
            rmtree(dst)

        copytree(src, dst)

        makedirs(spec.environment["paths"]["DIR[WORKING,SRC,STATIC]"])

    except (Error, OSError) as err:
        raise PresentationError("Not possible to process the static content.",
                                str(err))

    logging.info("Done.")
ous pool indices */ u32 next; u32 prev; union { struct { #if (TW_TIMER_WHEELS == 3) /** fast ring offset, only valid in the slow ring */ u16 fast_ring_offset; /** slow ring offset, only valid in the glacier ring */ u16 slow_ring_offset; #endif #if (TW_TIMER_WHEELS == 2) /** fast ring offset, only valid in the slow ring */ u16 fast_ring_offset; /** slow ring offset, only valid in the glacier ring */ u16 pad; #endif }; #if (TW_OVERFLOW_VECTOR > 0) u64 expiration_time; #endif }; /** user timer handle */ u32 user_handle; } TWT (tw_timer); /* * These structures ar used by all geometries, * so they need a private #include block... */ #ifndef __defined_tw_timer_wheel_slot__ #define __defined_tw_timer_wheel_slot__ typedef struct { /** Listhead of timers which expire in this interval */ u32 head_index; } tw_timer_wheel_slot_t; typedef enum { /** Fast timer ring ID */ TW_TIMER_RING_FAST, /** Slow timer ring ID */ TW_TIMER_RING_SLOW, /** Glacier ring ID */ TW_TIMER_RING_GLACIER, } tw_ring_index_t; #endif /* __defined_tw_timer_wheel_slot__ */ typedef CLIB_PACKED (struct { u8 timer_id; u32 pool_index; u32 handle; }) TWT (trace); typedef struct { /** Timer pool */ TWT (tw_timer) * timers; /** Next time the wheel should run */ f64 next_run_time; /** Last time the wheel ran */ f64 last_run_time; /** Timer ticks per second */ f64 ticks_per_second; /** Timer interval, also needed to avoid fp divide in speed path */ f64 timer_interval; /** current tick */ u64 current_tick; /** first expiration time */ u64 first_expires_tick; /** current wheel indices */ u32 current_index[TW_TIMER_WHEELS]; /** wheel arrays */ tw_timer_wheel_slot_t w[TW_TIMER_WHEELS][TW_SLOTS_PER_RING]; #if TW_OVERFLOW_VECTOR > 0 tw_timer_wheel_slot_t overflow; #endif #if TW_FAST_WHEEL_BITMAP > 0 /** Fast wheel slot occupancy bitmap */ uword *fast_slot_bitmap; #endif /** expired timer callback, receives a vector of handles */ void (*expired_timer_callback) (u32 * expired_timer_handles); /** vectors of expired timers */ u32 *expired_timer_handles; /** maximum expirations */ u32 max_expirations; /** current trace index */ #if TW_START_STOP_TRACE_SIZE > 0 /* Start/stop/expire tracing */ u32 trace_index; u32 trace_wrapped; TWT (trace) traces[TW_START_STOP_TRACE_SIZE]; #endif } TWT (tw_timer_wheel); u32 TW (tw_timer_start) (TWT (tw_timer_wheel) * tw, u32 pool_index, u32 timer_id, u64 interval); void TW (tw_timer_stop) (TWT (tw_timer_wheel) * tw, u32 handle); void TW (tw_timer_wheel_init) (TWT (tw_timer_wheel) * tw, void *expired_timer_callback, f64 timer_interval, u32 max_expirations); void TW (tw_timer_wheel_free) (TWT (tw_timer_wheel) * tw); u32 *TW (tw_timer_expire_timers) (TWT (tw_timer_wheel) * tw, f64 now); u32 *TW (tw_timer_expire_timers_vec) (TWT (tw_timer_wheel) * tw, f64 now, u32 * vec); #if TW_FAST_WHEEL_BITMAP u32 TW (tw_timer_first_expires_in_ticks) (TWT (tw_timer_wheel) * tw); #endif #if TW_START_STOP_TRACE_SIZE > 0 void TW (tw_search_trace) (TWT (tw_timer_wheel) * tw, u32 handle); void TW (tw_timer_trace) (TWT (tw_timer_wheel) * tw, u32 timer_id, u32 pool_index, u32 handle); #endif /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */